Este guia mostra como usar um webhook, para que seu agente seja mais dinâmico. As Funções do Cloud são usadas para hospedar o webhook devido à simplicidade delas, mas há muitas outras maneiras de hospedar um serviço de webhook. O exemplo também usa a linguagem de programação Go, mas você pode usar qualquer linguagem compatível com as Funções do Cloud. Não será necessário editar o código para este guia.
O exemplo de código de webhook faz o seguinte:
- Lê valores de parâmetros da solicitação de 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 do fluxo.
- Execute as etapas de configuração .
- Realize as etapas no guia de início rápido Criar um agente usando fluxos. As etapas abaixo continuam funcionando no mesmo agente. Se você não tiver mais esse agente, você pode fazer o download do agente e restaurá-lo.
Criar a Função do Cloud
Cloud Functions podem ser criadas com o Console do Google Cloud (acesse a documentação, abra o console). Para criar uma função para este guia:
- É importante que o agente do Dialogflow CX e a função estejam no mesmo projeto. Essa é a maneira mais fácil de o Dialogflow CX ter acesso seguro à sua função. Para selecionar seu projeto, acesse o seletor de projetos.
- Acesse a 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 seu agente, use a mesma região.
- Tipo de gatilho HTTP: HTTP
- URL: clique no botão de cópia e salve o valor. Você vai precisar desse URL ao configurar o webhook.
- Autenticação: autenticação necessária
- Exigir HTTPS: marcado
- Clique em Salvar.
- Clique em Próxima (não é necessário ambiente de execução, build, conexões ou configurações de segurança especiais).
- Defina os seguintes campos:
- Ambiente de execução: selecione o ambiente de execução mais recente do Go.
- Código-fonte: editor in-line
- 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]any `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]any{"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 espera, 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, você vai associá-lo ao seu agente. Para criar o webhook do agente:
- Abra o console do Dialogflow CX.
- Escolha seu projeto 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: forneça o URL do webhook salvo ao criar a função.
- Subtipo: padrão.
- 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 usá-lo no 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 para usar seu webhook:
- Selecione a guia Criar.
- Clique na página Confirmação do pedido para expandir a página no gráfico do criador de agentes.
- Clique no campo Fulfillment de entrada na página para abrir o painel de fulfillment.
- Exclua a resposta de texto atual 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-webhookno menu suspenso Webhook. - Insira
confirmno campo Tag. - Clique em Salvar.
- Feche o painel de fulfillment.

O código de webhook implantado envia uma resposta
que cria um
parâmetro
nomeado cancel-period.
Atualize o agente para referenciar esse parâmetro na resposta final do agente para a mesma página Confirmação do pedido:
- Clique na rota de condição
mostrada com uma
truecondição para abrir o painel de rotas. - Role para baixo até a seção Fulfillment do painel de rotas e adicione a seguinte resposta de texto no cabeçalho O agente diz :
You can cancel your order within $session.params.cancel-period days. Goodbye. - Clique em Salvar.
- Feche o painel de rotas.

Testar o agente no simulador
Seu agente e webhook estão prontos para teste com o simulador:
- Clique em Testar agente.
- Insira
I want to buy a large red shirte pressione "Enter".
Como você forneceu um tamanho e uma cor, deu ao agente tudo o que ele precisa para criar um pedido de camisa. Portanto, ele faz a transição diretamente para a página Confirmação do pedido.

A seguir, descrevemos as respostas do agente:
| Resposta | Explicação |
|---|---|
| OK, vamos começar um novo pedido. | Quando a página Novo pedido foi ativada, o fulfillment de entrada foi chamado. A resposta foi acionada por esse fulfillment. |
| Você selecionou uma camisa vermelha grande. | Quando todos os parâmetros de formulário são fornecidos para a página Novo pedido, a rota de condição que verifica a conclusão do formulário é chamada. A resposta foi acionada pelo fulfillment dessa rota. Essa rota também faz a transição para a página Confirmação do pedido. |
| Você pode retirar seu pedido de uma camisa vermelha grande em cinco dias. | O fulfillment de entrada da página Confirmação do pedido chama o webhook. Consulte a função confirm no código do webhook. Essa função cria essa resposta de texto e usa os parâmetros fornecidos na solicitação de webhook. |
| Você pode cancelar seu pedido em dois dias. Goodbye. | A página Confirmação do pedido tem uma rota de condição com uma condição que é sempre verdadeira. Essa resposta é acionada pelo fulfillment dessa rota. A resposta usa o parâmetro definido pelo webhook na resposta do webhook. |