Um webhook pode ser um webhook padrão ou um webhook flexível. Com um webhook padrão, os campos de solicitação e resposta são definidos pelo Dialogflow CX. Com um webhook flexível, você define os campos de solicitação e resposta.
Webhooks padrão
Com webhooks padrão, você usa mensagens de solicitação e resposta definidas pelo Dialogflow CX. A mensagem de solicitação fornece muitos detalhes sobre a sessão. Por exemplo, a página ativa atual, a intent correspondente recente, os valores dos parâmetros da sessão e as respostas definidas pelo agente são incluídos.
Solicitação de webhook padrão
Quando um fulfillment com um webhook é chamado, o Dialogflow CX envia uma solicitação de webhook POST HTTPS para seu serviço de webhook.
O corpo dessa solicitação é um objeto JSON WebhookRequest
com informações sobre a sessão.
Algumas integrações preenchem o campo WebhookRequest.payload com informações adicionais.
Por exemplo, a
integração do gateway telefônico do Dialogflow CX
fornece o identificador de chamadas do usuário final.
Consulte a
documentação de referência de
WebhookRequest(V3)
ou WebhookRequest(V3Beta1)
para mais detalhes.
Resposta padrão do webhook
Uma vez que seu serviço de webhook recebe uma solicitação de webhook, ela precisa enviar uma resposta a um webhook. As seguintes limitações se aplicam à sua resposta:
- A resposta precisa ocorrer dentro de um tempo limite que você configura ao criar o recurso de webhook. Caso contrário, a solicitação atingirá o tempo limite.
- É necessário que o tamanho da resposta seja menor ou igual a 64 KiB.
Consulte a
documentação de referência de
WebhookResponse(V3)
ou WebhookResponse(V3Beta1)
para mais detalhes.
Configurações padrão de recursos de webhook
A seguir, descrevemos as configurações de recursos de webhook para webhooks padrão:
| Termo | Definição |
|---|---|
| Nome de exibição | O nome mostrado no console para o webhook. |
| Tempo limite do webhook | Quando o Dialogflow CX envia uma solicitação de webhook para seu serviço de webhook, ela pode atingir o tempo limite enquanto aguarda uma resposta. Essa configuração controla o tempo limite em segundos. Se ocorrer um tempo limite, o Dialogflow CX vai invocar um evento webhook.error.timeout. |
| Tipo | Defina como Diretório de serviços se você estiver usando o diretório de serviços para acesso a redes privadas. Caso contrário, defina como Serviço da Web genérico. |
| URL do webhook | Informe o endereço URL do seu serviço de webhook. |
| Subtipo | Defina como Padrão. |
| Webhook específico do ambiente | É possível fornecer webhooks específicos do ambiente. |
| Autenticação | Consulte a seção de autenticação. |
| Certificado de CA personalizado | Usado para fazer upload de certificados de CA personalizados. |
Webhooks flexíveis
Com webhooks flexíveis, você define o método HTTP de solicitação, os parâmetros de URL de solicitação e os campos das mensagens de solicitação e resposta. A solicitação só pode fornecer valores de parâmetros selecionados, e a resposta só pode fornecer valores de substituição de parâmetros. Essa limitação é benéfica porque simplifica a interface entre o agente e o webhook. Raramente é necessário comunicar algo além dos valores de parâmetros de sessão entre um agente e um webhook. Ele também simplifica a implementação do webhook, porque as mensagens de solicitação e resposta contêm apenas o que você precisa, e é possível fornecer mensagens exclusivas para vários cenários.
Solicitação de webhook flexível
Ao criar o recurso de webhook para seu agente, você pode especificar o seguinte para solicitações de webhook:
- O método HTTP usado para solicitações de webhook enviadas ao seu serviço de webhook.
- Valores de parâmetro de sessão que o Dialogflow CX precisa enviar ao serviço de webhook usando o URL.
- Se você escolher
POST,PUTouPATCHcomo método, poderá especificar valores de parâmetros de sessão que o Dialogflow CX enviará ao seu serviço de webhook pelo corpo JSON da solicitação.
Para enviar valores de parâmetros de sessão usando o URL da solicitação ou o corpo JSON, use referências de parâmetros como você faria normalmente. Não é necessário fazer o escape de URL da referência de parâmetro nem colocar a referência entre aspas. No ambiente de execução, o Dialogflow CX vai usar o escape de URL no valor do parâmetro conforme necessário. Uma lista ou um valor composto será fornecido como JSON.
Ao usar uma referência de parâmetro no corpo JSON, coloque a referência entre aspas, independente do tipo de parâmetro. Se o parâmetro for um escalar numérico, uma lista ou um valor composto, o Dialogflow CX vai remover as aspas ao enviar a solicitação no tempo de execução para preservar o tipo de dados do parâmetro. Os tipos escalares de string vão permanecer entre aspas. Se um escalar numérico, uma lista ou um valor composto for referenciado em um valor de string (por exemplo: "Este é um número: $session.params.size"), o parâmetro será tratado como uma string ("Este é um número: 3").
Por exemplo,
você pode fornecer os valores de parâmetro de sessão fruit e size
para o URL da solicitação assim:
https://your-webhook-service.com/handler?f=$session.params.fruit&s=$session.params.size
E, para o corpo JSON da solicitação, assim:
{
"fruitParameter": "$session.params.fruit",
"sizeParameter": "$session.params.size"
}
Resposta de webhook flexível
Ao criar o recurso de webhook para seu agente, é possível especificar parâmetros de sessão que o Dialogflow CX precisa definir para campos específicos da resposta do webhook no ambiente de execução.
As seguintes limitações se aplicam à sua resposta:
- A resposta precisa ocorrer dentro de um tempo limite que você configura ao criar o recurso de webhook. Caso contrário, a solicitação atingirá o tempo limite.
- É necessário que o tamanho da resposta seja menor ou igual a 64 KiB.
Use o seguinte formato para especificar um campo escalar, de lista ou composto:
$.fully.qualified.path.to.field
Por exemplo, considere a seguinte resposta JSON:
{
"routes" : [
{
"legs" : [
{
"distance" : {
"text" : "2,064 mi",
"value" : 3321004
}
}
]
}
]
}
Para especificar o campo "value", use o seguinte:
$.routes[0].legs[0].distance.value
Configurações flexíveis de recursos de webhook
A seguir, descrevemos as configurações de recursos de webhook para webhooks flexíveis:
| Termo | Definição |
|---|---|
| Nome de exibição | O nome mostrado no console para o webhook. |
| Tempo limite do webhook | Quando o Dialogflow CX envia uma solicitação de webhook para seu serviço de webhook, ela pode atingir o tempo limite enquanto aguarda uma resposta. Essa configuração controla o tempo limite em segundos. Se ocorrer um tempo limite, o Dialogflow CX vai invocar um evento webhook.error.timeout. |
| Tipo | Defina como Diretório de serviços se você estiver usando o diretório de serviços para acesso a redes privadas. Caso contrário, defina como Serviço da Web genérico. |
| URL do webhook | Forneça o endereço URL do seu serviço de webhook, que pode incluir referências a parâmetros de sessão. |
| Subtipo | Definir como Flexível |
| Método | Defina o método HTTP para a solicitação de webhook. |
| Corpo da solicitação | Forneça o corpo JSON da solicitação conforme descrito acima. |
| Configuração de resposta | Forneça os parâmetros de sessão que precisam ser definidos para os campos de resposta conforme descrito acima. |
| Webhook específico do ambiente | É possível fornecer webhooks específicos do ambiente. |
| Autenticação | Consulte a seção de autenticação. |
| Certificado de CA personalizado | Usado para fazer upload de certificados de CA personalizados. |
Usar um modelo personalizado predefinido
O Dialogflow oferece modelos personalizados predefinidos que podem ser usados para integrar webhooks flexíveis ao CRM do Salesforce.
Na guia Gerenciar, clique em Webhooks e em + Criar.
Em Subtipo, selecione Flexível.
Clique em Configurar usando modelo predefinido para ativar o recurso.
No menu suspenso Tipo de integração, selecione Salesforce.
No menu suspenso Nome da API, selecione um nome. O modelo preenche automaticamente o formulário de webhook com base no nome da API escolhida.
É possível configurar manualmente os seguintes campos, se aplicável, com base nos seus parâmetros:
- URL do webhook
- Método
- Corpo da solicitação JSON
- Configuração de resposta
Os campos obrigatórios do OAuth serão destacados na seção Autenticação.
Clique em Salvar para criar o webhook.
Requisitos de serviço do webhook
Os seguintes requisitos devem ser atendidos pelo serviço do webhook:
- Ele precisa processar solicitações HTTPS. O HTTP não é compatível. Se você hospedar seu serviço de webhook no Google Cloud Platform usando uma solução de computação ou computação sem servidor, consulte a documentação do produto para veiculação com HTTPS. Para conhecer outras opções de hospedagem, consulte Adquira um certificado SSL para seu domínio.
- O URL para solicitações precisa ser acessível publicamente, a menos que seja hospedado como um recurso do Cloud Run ou acessado como um webhook do Service Directory.
- Ele precisa processar solicitações e respostas conforme descrito na seção webhook padrão ou webhook flexível.
- Se o agente não se integrar ao acesso à rede particular do Diretório de serviços, as chamadas do webhook serão consideradas fora do perímetro de serviço e bloqueadas ao ativar o VPC Service Controls. Endpoints limitados são compatíveis com o Diretório de serviços. Consulte Diretório de serviços para detalhes.
Autenticação
É importante proteger seu serviço de webhook para que somente você ou seu agente do Dialogflow CX sejam autorizados a fazer solicitações. Isso é configurado ao criar ou editar um recurso de webhook. O Dialogflow CX é compatível com os seguintes mecanismos de autenticação:
| Termo | Definição |
|---|---|
| Cabeçalhos de autenticação | Para configurações de webhook, é possível especificar pares de chave-valor de cabeçalho HTTP opcionais. Se fornecido, o Dialogflow CX adiciona esses cabeçalhos HTTP às solicitações de webhook. É comum fornecer um único par com uma chave de authorization. Os valores de cabeçalho aceitam referências de parâmetros de sessão e análise de funções do sistema, como em mensagens de resposta estática. Se você usar uma credencial estática para o cabeçalho authorization, recomendamos que você forneça a credencial usando o Secret Manager. |
| Autenticação básica com nome de usuário e senha | Para configurações de webhook, você pode especificar valores opcionais de nome de usuário e senha de login. Se fornecido, o Dialogflow CX adiciona um cabeçalho HTTP de autorização às solicitações de webhook. O cabeçalho tem o seguinte formato: "authorization: Basic <base 64 encoding of the string username:password>". Recomendamos que você forneça seu nome de usuário e senha usando o Secret Manager. |
| OAuth de terceiros | Você pode especificar a configuração do OAuth de terceiros para que o Dialogflow CX troque um token de acesso do sistema OAuth e o adicione ao cabeçalho HTTP de autorização. Somente o fluxo de credenciais do cliente é compatível. Recomendamos que você forneça o chave secreta do cliente usando o Secret Manager. |
| Tokens de acesso do agente de serviço | Descontinuado |
| Conta de serviço | Você pode usar uma conta de serviço para autenticação. Isso pode ser usado para acessar outras APIs do Google Cloud. |
| Tokens de ID do agente de serviço | É possível selecionar "Token de ID" na autenticação do agente de serviço para usar tokens de ID do agente de serviço na autenticação. Isso pode ser usado para acessar recursos do Cloud Run. |
| Autenticação TLS mútua | Consulte a documentação Autenticação TLS mútua. |
OAuth de terceiros
O Dialogflow CX pode coletar um token de acesso de um provedor OAuth terceirizado e adicioná-lo ao cabeçalho HTTP de autorização ao fazer solicitações de webhook.
A seguir, descrevemos as configurações de recursos para OAuth de terceiros:
| Termo | Definição |
|---|---|
| ID do cliente | O ID do cliente a ser usado ao solicitar um token OAuth. |
| Chave secreta do cliente | A chave secreta a ser usada ao solicitar um token OAuth. Recomendamos que você forneça o chave secreta do cliente usando o Secret Manager. |
| URL do endpoint OAuth | O URL a ser usado para solicitar um token OAuth. |
| Escopos do OAuth | Uma lista separada por vírgulas de escopos para os quais o token do OAuth pode ser usado. |
As solicitações enviadas ao URL do endpoint OAuth para receber um token não incluem os cabeçalhos de solicitação personalizados configurados para a solicitação de webhook. É possível transmitir informações personalizadas ao servidor OAuth como parâmetros na string de consulta do URL do endpoint OAuth.
Token de ID do agente de serviço
O Dialogflow CX pode gerar um token de ID usando o agente de serviço do Dialogflow CX.
O token é adicionado ao cabeçalho HTTP de autorização quando o Dialogflow CX chama um webhook.
Um token de ID pode ser usado para acessar recursos do Cloud Run depois que você concede permissões de função de invocador a
service-agent-project-number@gcp-sa-dialogflow.iam.gserviceaccount.com
O público-alvo usado para gerar o token de ID será todo o URL do webhook, exceto os parâmetros de consulta. Se você estiver usando o Cloud Run, verifique se esse URL é compatível com os públicos-alvo do Cloud Run. Por exemplo, se o URL do webhook for
https://myproject.cloudfunctions.net/my-function/method1?query=value
O seguinte URL precisa estar nos públicos-alvo personalizados.
https://myproject.cloudfunctions.net/my-function/method1
Qualquer webhook também pode validar o token usando bibliotecas de cliente do Google ou de código aberto, como github.com/googleapis/google-auth-library-nodejs.
Conta de serviço
As contas de serviço podem ser usadas para autenticar solicitações de webhook em qualquer API do Google que ofereça suporte a isso.
Se você ainda não tiver feito isso, crie uma conta de serviço.
Como as contas de serviço são principais,
elas podem acessar recursos no seu projeto ao
conceder a ela um papel,
assim como você faria para qualquer outro principal.
O e-mail da conta de serviço será usado para
gerar um token de acesso
que será enviado no cabeçalho Authorization da solicitação de webhook.
O usuário que está configurando o webhook para usar contas de serviço precisa ter as seguintes permissões:
roles/iam.serviceAccountUser
Para que o Dialogflow CX gere tokens, o agente de serviço do Dialogflow precisa ter as seguintes permissões:
roles/iam.serviceAccountTokenCreator
A conta de serviço também precisa ter permissões para acessar o serviço que está hospedando o webhook.
Autenticação do Secret Manager
Se você usa cabeçalhos de autenticação, autenticação básica com nome de usuário e senha ou OAuth de terceiros, armazene as credenciais como secrets usando o Secret Manager. Estas são as etapas necessárias para autenticar seu webhook usando secrets:
- Crie seu secret se você ainda não tiver um.
- Conceda ao agente de serviço do Dialogflow
o papel Acessador de secrets do Secret Manager
(
roles/secretmanager.secretAccessor) no novo secret. - Copie a credencial para a área de transferência.
- Adicione uma nova versão do secret
ao seu secret. Cole sua credencial como o valor do secret.
- Se você usa cabeçalhos de autenticação, insira
Bearer <YOUR_CREDENTIAL>. - Se você usa a autenticação básica com nome de usuário e senha, insira
<YOUR_USERNAME>:<YOUR_PASSWORD>. - Omita qualquer caractere de nova linha no final.
- Se você usa cabeçalhos de autenticação, insira
- Copie o nome da versão do secret que você acabou de adicionar. O formato do nome é
projects/{project_id}/secrets/{secret_id}/versions/{version_id}". - Abra a tela de edição do webhook e faça o seguinte:
- Se você usa cabeçalhos de autenticação, crie um novo cabeçalho de solicitação de versão do secret. Insira "Authorization" como Chave e cole o nome da versão do secret na caixa de entrada Versão do secret.
- Se você usa a autenticação básica com nome de usuário e senha, clique em Versão do segredo em Autenticação básica e cole o nome da versão do segredo na caixa de entrada Versão do segredo.
- Se você usa o OAuth de terceiros, clique em Versão do secret em OAuth de terceiros e cole o nome da versão do secret na caixa de entrada Versão do secret.
- Clique em Salvar.
Verificação do certificado HTTPS
Por padrão, o Dialogflow CX usa o armazenamento de confiança padrão do Google para verificar certificados HTTPS. Se você quiser usar certificados não reconhecidos pelo armazenamento de confiança padrão do Google para seu servidor HTTPS, como certificados autoassinados ou certificados raiz personalizados, consulte Certificados de CA personalizados.
Webhooks específicos do ambiente
Se você estiver usando ambientes para isolar sistemas de produção de sistemas de desenvolvimento (recomendado), configure seus webhooks para serem específicos do ambiente. Para cada recurso de webhook definido, é possível fornecer um URL e configurações de autenticação exclusivos para cada ambiente definido para o agente.
Isso permite que você desenvolva e teste com segurança as atualizações do código do webhook antes de implantá-las na produção.
Criar ou editar recursos de webhook
Depois de ter um serviço de webhook em execução, você precisa criar um recurso de webhook no agente que tenha informações de conectividade e autenticação. Depois da criação, você também pode editar as configurações de recursos do webhook a qualquer momento.
Para criar ou editar um recurso de webhook:
Console
- 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 ou em um recurso de webhook na lista para editar.
- Insira configurações de recursos de webhook padrão ou configurações de recursos de webhook flexíveis.
- Clique em Salvar.
API
Para criar um recurso de webhook, consulte o método create para o tipo Webhook.
Para editar um recurso de webhook (exceto configurações específicas do ambiente),
consulte o método patch ou update para o tipo Webhook.
Selecione um protocolo e uma versão para a referência do Webhook:
| Protocolo | V3 | V3beta1 |
|---|---|---|
| REST | Recurso webhook | Recurso webhook |
| RPC | Interface de webhook | Interface de webhook |
| C++ | WebhooksClient | Indisponível |
| C# | WebhooksClient | Indisponível |
| Go | WebhooksClient | Indisponível |
| Java | WebhooksClient | WebhooksClient |
| Node.js | WebhooksClient | WebhooksClient |
| PHP | Indisponível | Indisponível |
| Python | WebhooksClient | WebhooksClient |
| Ruby | Indisponível | Indisponível |
Para editar as configurações específicas do ambiente de um webhook,
consulte o método patch ou update para o tipo Environment.
Selecione um protocolo e uma versão para a Referência de ambiente:
| Protocolo | V3 | V3beta1 |
|---|---|---|
| REST | Recurso de ambiente | Recurso de ambiente |
| RPC (remote procedure call) | Interface do ambiente | Interface do ambiente |
| C++ | EnvironmentsClient | Indisponível |
| C# | EnvironmentsClient | Indisponível |
| Go | EnvironmentsClient | Indisponível |
| Java | EnvironmentsClient | EnvironmentsClient |
| Node.js | EnvironmentsClient | EnvironmentsClient |
| PHP | Indisponível | Indisponível |
| Python | EnvironmentsClient | EnvironmentsClient |
| Ruby | Indisponível | Indisponível |
Erros de webhook
Se o serviço de webhook encontrar um erro ao processar uma solicitação do webhook, o código do webhook retornará um dos seguintes códigos de status HTTP:
400Solicitação inválida401Não autorizado403Proibido404Não encontrado500Falha no servidor503Serviço não disponível
Em qualquer uma das situações de erro a seguir, o Dialogflow CX invoca um erro de webhook ou evento integrado de tempo limite e continua processando normalmente:
- Tempo limite de resposta excedido.
- Código de status de erro recebido.
- A resposta é inválida.
- O serviço de webhook não está disponível.
Além disso, se a chamada de serviço do webhook tiver sido acionada por uma chamada de API de intent de detecção, o campo queryResult.webhookStatuses na resposta de intent de detecção conterá as informações de status do webhook.
Novas tentativas automáticas
O Dialogflow CX inclui mecanismos internos que repetem automaticamente determinados erros de webhook para melhorar a robustez. Somente erros não terminais são repetidos (por exemplo, erros de tempo limite ou de conexão).
Para reduzir a probabilidade de chamadas duplicadas:
- Defina limites de tempo limite de webhook mais longos.
- Adicione suporte à idempotência na lógica do webhook ou remova duplicidades.
Usando o Cloud Run
O Dialogflow CX se integra ao Cloud Run para que você crie um webhook seguro e sem servidor. Se você criar um recurso do Cloud Run que resida no mesmo projeto do agente, selecione Autenticação do agente de serviço -> Token de ID na configuração de autenticação para que o agente possa chamar o webhook com segurança.
No entanto, há duas situações em que é preciso configurar essa integração manualmente:
- A conta de serviço
do agente de serviço do Dialogflow CX
com o endereço a seguir precisa existir para o projeto de agente:
Essa conta de serviço especial e a chave associada normalmente são criadas automaticamente quando você cria o primeiro agente de um projeto. Se o agente foi criado antes de 1º de novembro de 2020, a criação dessa conta de serviço especial pode ser acionada:service-agent-project-number@gcp-sa-dialogflow.iam.gserviceaccount.com
- Crie um novo agente para o projeto.
- Execute o seguinte comando:
gcloud beta services identity create --service=dialogflow.googleapis.com --project=agent-project-id
- Se a função do webhook estiver em um projeto diferente do agente, forneça o papel do IAM Invocador do Cloud Run ou Invocador do Cloud Functions à conta de serviço Agente de serviço do Dialogflow CX no projeto do recurso do Cloud Run.
- Selecione Autenticação do agente de serviço -> Token de ID na seção de configuração de autenticação.
Como usar webhooks em contêineres e o framework Go ezcx
Se você quiser implementar um webhook conteinerizado usando Go, consulte o framework Go ezcx. Essa estrutura pode simplificar muitas das etapas necessárias ao criar um webhook.
Como usar o Cloud Run com tráfego somente interno
Os recursos do Cloud Run configurados para aceitar tráfego interno de redes VPC no mesmo projeto ou no mesmo perímetro do VPC Service Controls podem ser usados como um webhook, desde que o agente esteja no mesmo projeto ou no mesmo perímetro do VPC Service Controls.
Como usar o diretório de serviços para acesso a redes privadas
O Dialogflow CX se integra ao acesso à rede particular do Service Directory para que ele possa se conectar aos destinos do webhook dentro da rede VPC. Isso mantém o tráfego na rede do Google Cloud e aplica o IAM e o VPC Service Controls.
Para configurar um webhook que segmenta uma rede privada:
Siga a configuração de rede particular do Diretório de serviços para configurar sua rede VPC e o endpoint do Diretório de serviços.
A conta de serviço do agente de serviço do Dialogflow CX com o endereço a seguir precisa existir para o projeto de agente:
service-agent-project-number@gcp-sa-dialogflow.iam.gserviceaccount.com
Conceda os seguintes papéis à conta de serviço do Agente de serviço do Dialogflow CX no projeto em que o Diretório de serviços está localizado:
servicedirectory.viewerservicedirectory.pscAuthorizedService
Além disso, se o Diretório de serviços estiver em um projeto diferente do agente do Dialogflow CX, será necessário conceder o papel
servicedirectory.viewerà conta do agente de serviço do Dialogflow CX no projeto que hospeda o agente do Dialogflow CX.Forneça o serviço do diretório de serviços com o URL e informações de autenticação opcionais ao criar o webhook.
Console

API
Veja o campo
serviceDirectorypara o tipoWebhook.Selecione um protocolo e uma versão para a referência do Webhook:
Protocolo V3 V3beta1 REST Recurso webhook Recurso webhook RPC Interface de webhook Interface de webhook C++ WebhooksClient Indisponível C# WebhooksClient Indisponível Go WebhooksClient Indisponível Java WebhooksClient WebhooksClient Node.js WebhooksClient WebhooksClient PHP Indisponível Indisponível Python WebhooksClient WebhooksClient Ruby Indisponível Indisponível
Para resolver problemas, configure uma verificação de tempo de atividade privada e confira se o Diretório de serviços está configurado corretamente.
Exemplos e solução de problemas
Consulte o guia de instruções do webhook.