Neste guia, mostramos como usar um webhook para que seu agente seja mais dinâmico. O Cloud Functions é usado 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. Não é necessário editar o código para este guia.
O código de webhook de exemplo faz o seguinte:
- Lê os valores de parâmetro 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 de fluxo.
- Execute as etapas de configuração.
- Siga 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, faça o download dele e restaure-o.
Criar a função do Cloud
O Cloud Functions pode ser criado 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 de CX 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 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 região.
- Tipo de gatilho HTTP: HTTP
- URL: clique no botão de cópia aqui e salve o valor. Você vai precisar desse URL ao configurar o webhook.
- Autenticação: exigir autenticação
- Exigir HTTPS: marcado
- Clique em Salvar.
- Clique em Próxima (não é necessário ter configurações especiais de ambiente de execução, build, conexões ou 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 pelo seguinte:
// 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, analise o código que você acabou de implantar. Os comentários do 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 seu 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: forneça o URL do webhook que você salvou 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ática. Para atualizar o fulfillment para usar seu webhook:
- Selecione a guia Build.
- Clique na página Order Confirmation para expandi-la no gráfico do Agent Builder.
- Clique no campo Entry Fulfillment 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 do webhook implantado envia uma resposta
que cria um
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 do pedido:
- Clique na rota de condição mostrada com uma condição
truepara 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 título 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 serem testados com o simulador:
- Clique em Testar agente.
- Digite
I want to buy a large red shirte pressione "Enter".
Como você forneceu um tamanho e uma cor, o agente tem tudo o que precisa para criar um pedido de camiseta, então ele passa diretamente para a página de confirmação do pedido.

Veja a seguir as respostas do agente:
| Resposta | Explicação |
|---|---|
| Ok, vamos iniciar 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 forem fornecidos para a página Novo pedido, a rota de condição que verifica o preenchimento do formulário será chamada. A resposta foi acionada pelo fulfillment dessa rota. Essa rota também leva à página Order Confirmation. |
| Você pode retirar seu pedido de uma camisa vermelha grande em 5 dias. | O fulfillment de entrada da página Order Confirmation chama o webhook. Consulte 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 de webhook. |
| Você pode cancelar o pedido em até 2 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 da rota. Observe que a resposta usa o parâmetro definido pelo webhook na resposta do webhook. |