Neste guia, mostramos como usar um webhook, para que seu agente seja mais dinâmico. Cloud Functions; são usados para hospedar o webhook, devido à simplicidade, mas há muitas outras maneiras de hospedar um serviço de webhook. O exemplo também usa a linguagem de programação Go, mas é possível usar qualquer linguagem compatível com o Cloud Functions. Você não precisa editar o código deste guia.
O código do webhook de exemplo faz o seguinte:
- Lê valores de parâmetro da solicitação do webhook.
- Grava um valor de parâmetro na resposta do webhook.
- Fornece uma resposta de texto na resposta do webhook.
Antes de começar
Se você não planeja usar webhooks, pule este guia de início rápido.
Faça o seguinte antes de ler este guia:
- Leia os conceitos básicos sobre fluxo.
- Execute as etapas de configuração.
- Realize as etapas Criar um agente usando fluxos guia de início rápido. As etapas abaixo continuam funcionando no mesmo agente. Se você não tiver mais esse agente, faça o download dele e restaure-o.
Criar a função do Cloud
É possível criar funções com o console do Google Cloud (acesse a documentação, abra o console). Para criar uma função para este guia:
- É importante que seu agente de conversação (Dialogflow CX) e a função estejam no mesmo projeto. Essa é a maneira mais fácil para que os agentes de conversação (Dialogflow CX) tenham acesso seguro à função. Para selecionar seu projeto, acesse o seletor de projetos.
- Acesse o Página de visão geral do Cloud Functions.
- Clique em Criar função e defina os seguintes campos:
- Ambiente: 1ª geração
- Nome da função: shirts-agent-webhook
- Região: se você especificou uma região para o agente, use a mesma.
- Tipo de gatilho HTTP: HTTP
- URL: clique no botão "Copiar" aqui e salve o valor. Você vai precisar desse URL ao configurar o webhook.
- Autenticação: exija autenticação.
- Exigir HTTPS: marcada
- Clique em Salvar.
- Clique em Next (você não precisa de recursos especiais de ambiente de execução, build ou configurações de segurança).
- Defina os seguintes campos:
- Ambiente de execução: selecione o ambiente de execução mais recente do Go.
- Código-fonte: editor inline
- Ponto de entrada: HandleWebhookRequest
Substitua o código por este:
// Package cxwh contains an example Dialogflow CX webhook package cxwh import ( "encoding/json" "fmt" "log" "net/http" ) type fulfillmentInfo struct { Tag string `json:"tag"` } type sessionInfo struct { Session string `json:"session"` Parameters map[string]interface{} `json:"parameters"` } type text struct { Text []string `json:"text"` } type responseMessage struct { Text text `json:"text"` } type fulfillmentResponse struct { Messages []responseMessage `json:"messages"` } // webhookRequest is used to unmarshal a WebhookRequest JSON object. Note that // not all members need to be defined--just those that you need to process. // As an alternative, you could use the types provided by the Dialogflow protocol buffers: // https://pkg.go.dev/google.golang.org/genproto/googleapis/cloud/dialogflow/cx/v3#WebhookRequest type webhookRequest struct { FulfillmentInfo fulfillmentInfo `json:"fulfillmentInfo"` SessionInfo sessionInfo `json:"sessionInfo"` } // webhookResponse is used to marshal a WebhookResponse JSON object. Note that // not all members need to be defined--just those that you need to process. // As an alternative, you could use the types provided by the Dialogflow protocol buffers: // https://pkg.go.dev/google.golang.org/genproto/googleapis/cloud/dialogflow/cx/v3#WebhookResponse type webhookResponse struct { FulfillmentResponse fulfillmentResponse `json:"fulfillmentResponse"` SessionInfo sessionInfo `json:"sessionInfo"` } // confirm handles webhook calls using the "confirm" tag. func confirm(request webhookRequest) (webhookResponse, error) { // Create a text message that utilizes the "size" and "color" // parameters provided by the end-user. // This text message is used in the response below. t := fmt.Sprintf("You can pick up your order for a %s %s shirt in 5 days.", request.SessionInfo.Parameters["size"], request.SessionInfo.Parameters["color"]) // Create session parameters that are populated in the response. // The "cancel-period" parameter is referenced by the agent. // This example hard codes the value 2, but a real system // might look up this value in a database. p := map[string]interface{}{"cancel-period": "2"} // Build and return the response. response := webhookResponse{ FulfillmentResponse: fulfillmentResponse{ Messages: []responseMessage{ { Text: text{ Text: []string{t}, }, }, }, }, SessionInfo: sessionInfo{ Parameters: p, }, } return response, nil } // handleError handles internal errors. func handleError(w http.ResponseWriter, err error) { w.WriteHeader(http.StatusInternalServerError) fmt.Fprintf(w, "ERROR: %v", err) } // HandleWebhookRequest handles WebhookRequest and sends the WebhookResponse. func HandleWebhookRequest(w http.ResponseWriter, r *http.Request) { var request webhookRequest var response webhookResponse var err error // Read input JSON if err = json.NewDecoder(r.Body).Decode(&request); err != nil { handleError(w, err) return } log.Printf("Request: %+v", request) // Get the tag from the request, and call the corresponding // function that handles that tag. // This example only has one possible tag, // but most agents would have many. switch tag := request.FulfillmentInfo.Tag; tag { case "confirm": response, err = confirm(request) default: err = fmt.Errorf("Unknown tag: %s", tag) } if err != nil { handleError(w, err) return } log.Printf("Response: %+v", response) // Send response if err = json.NewEncoder(w).Encode(&response); err != nil { handleError(w, err) return } }
Clique em Implantar.
Aguarde até que o indicador de status mostre que a função foi implantada. Enquanto aguarda, examine o código que você acabou de implantar. Os comentários de código descrevem detalhes importantes.
Criar o webhook
Agora que o webhook existe como uma função do Cloud, associe esse webhook ao seu agente. Para criar o webhook do agente:
- Abra o console do Dialogflow CX.
- Escolha seu projeto do Google Cloud.
- Selecione seu agente.
- Selecione a guia Gerenciar.
- Clique em Webhooks.
- Clique em Criar.
- Preencha os seguintes campos:
- Nome de exibição: shirts-agent-webhook
- URL do webhook: informe o URL do webhook que você salvou ao criar a função.
- Subtipo: Standard.
- Todos os outros campos usam valores padrão.
- Clique em Salvar.
Usar o webhook
Agora que o webhook está disponível para o agente, você vai usar o webhook fulfillment. A página Confirmação do pedido tem um fulfillment de entrada, que atualmente tem uma resposta de texto estático. Para atualizar o fulfillment e usar o webhook:
- Selecione a guia Build.
- Clique na página Confirmação do pedido para expandi-la. no gráfico do Agente Builder.
- Clique no campo Fulfillment de entrada na página. para abrir o painel de fulfillment.
- Exclua a resposta de texto existente no cabeçalho O agente diz. Quando você passa o cursor sobre o texto, o botão de exclusão delete aparece.
- Clique em Ativar webhook.
- Selecione a opção
shirts-agent-webhook
no menu suspenso Webhook. - Insira
confirm
no campo Tag. - Clique em Salvar.
- Feche o painel de fulfillment.
O código do webhook implantado envia uma resposta
que cria
parâmetro
chamado cancel-period
.
Atualize o agente para referenciar esse parâmetro na resposta final do agente
para a mesma página de Confirmação de pedido:
- Clique na condição.
rota
mostrado com uma condição
true
para abrir o painel de rotas. - Role para baixo até a seção Fulfillment do painel de rota
e adicione a seguinte resposta de texto no cabeçalho Agente diz:
You can cancel your order within $session.params.cancel-period days. Goodbye.
- Clique em Salvar.
- Feche o painel de rota.
Testar o agente no simulador
Seu agente e webhook estão prontos para teste com o simulador:
- Clique em Test Agent.
- Digite
I want to buy a large red shirt
e pressione "Enter".
Como você forneceu um tamanho e uma cor, você deu ao agente tudo o que ele precisa para criar um pedido de camisa, então ele faz a transição diretamente para a página Confirmação do pedido.
Confira a seguir as respostas do agente:
Resposta | Explicação |
---|---|
Ok, vamos iniciar um novo pedido. | Quando a página Novo pedido ficou ativa, o fulfillment de entrada foi chamado. A resposta foi acionada por esse fulfillment. |
Você selecionou uma camisa grande vermelha. | Quando todos os parâmetros do formulário são fornecidos para a página Novo pedido, a rota de verificação de condição para preenchimento do formulário é chamada. A resposta foi acionada pelo fulfillment dessa rota. Essa rota também faz a transição para a página de Confirmação do pedido. |
Você vai receber o pedido de uma camisa vermelha grande em 5 dias. | O fulfillment de entrada da página Confirmação do pedido chama o webhook. Veja a função confirm no código do webhook. Essa função cria a resposta de texto e usa os parâmetros fornecidos na solicitação do webhook. |
Você pode cancelar o pedido em até dois dias. Goodbye. | A página Confirmação do pedido tem uma rota de condição que é sempre verdadeira. Essa resposta é acionada pelo fulfillment da rota. Observe que a resposta usa o parâmetro definido pelo webhook na resposta. |