Antes de ler este artigo, recomenda-se que você leia os posts de Introdução ao Dialogflow e de montagem de agentes complexos. Eles devem dar insumos para que se torne possível criar um dataset de NLP potente com o DialogFlow para ser integrado a um chatbot da Zenvia.
Vamos ver como fazer isso na prática?
Desde que migrou a API do DialogFlow para a sua v2, o Google trocou as requisições GET por POST para o endpoint de análise de intenção. Desta forma, ao invés de informar um parâmetro query, o usuário terá que informar um corpo Json com diversos inputs para a busca: texto do usuário, código de entrada da língua e fuso horário.
Dentro da URL, o usuário deverá preencher o primeiro asterisco com a ID do seu projeto, encontrável aqui:

Vamos ver como fazer isso na prática?
Desde que migrou a API do DialogFlow para a sua v2, o Google trocou as requisições GET por POST para o endpoint de análise de intenção. Desta forma, ao invés de informar um parâmetro query, o usuário terá que informar um corpo Json com diversos inputs para a busca: texto do usuário, código de entrada da língua e fuso horário.
Dentro da URL, o usuário deverá preencher o primeiro asterisco com a ID do seu projeto, encontrável aqui:
O segundo asterisco deverá ser substituído por um session ID à escolha do usuário. Pode ser um número aleatório ou um hash, desde que não passe 36 bytes. Este identificador será muito útil para separar as sessões e depois extrair relatórios futuros de performance.
Também não podemos esquecer dos headers, estruturados como no exemplo abaixo:
'Content-Type: application/json; charset=utf-8'
'Content-Type: application/json; charset=utf-8'
'Authorization: Bearer ya29.c.Kl6pBxlzqB4cTL0vFH-1Q082lgcqMzlU8RKMyjhI0oOR-dyONdSkZ88xwICHvbCKHwVe0rDHQpIiu6vAmXcdOXCnIkrO5fRu8jFn5o0lXTTFvxfLuswE-0nDt89hhySZ'
(maiores informações sobre como recuperar um token de autenticação podem ser encontradas neste link: https://dialogflow.com/docs/reference/v2-auth-setup)
Desta forma, a chamada de URL dentro da plataforma deverá ficar estruturada desta forma:
No campo 'método', POST deve estar marcado. Em 'URL', o endpoint que montamos.

No campo parâmetro de consulta, criaremos o payload que será enviado para a API do Google, com informações de texto, língua e fuso horário. É importante que o payload 'text' seja exatamente o que o usuário disse, então convém puxar a informação pelo payload do Zenvia Bots, como no exemplo acima #{answer}.
No campo parâmetro de consulta, criaremos o payload que será enviado para a API do Google, com informações de texto, língua e fuso horário. É importante que o payload 'text' seja exatamente o que o usuário disse, então convém puxar a informação pelo payload do Zenvia Bots, como no exemplo acima #{answer}.
Finalmente, o ponto mais importante: a captura dos atributos enviados pelo Google. Como explicitado no primeiro playbook do NLP4All, o leitor de Json da Zenvia é capaz de fazer o parsing dos atributos por expression language. Dentro desta estrutura do DialogFlow, o objeto retornado pela plataforma tem estas características:
{
{
"responseId": "8b6b7b0c-3f14-4147-87a7-6af95c08cbde-d5ae01f3",
"queryResult": {
"queryText": "onde fica o escritório em são paulo",
"parameters": {
"cidade": "São Paulo"
},
"allRequiredParamsPresent": true,
"fulfillmentText": "O escritório da Zenvia em São Paulo fica na Av. Paulista, 2300, 18º andar, na Bela Vista. Posso te ajudar com mais alguma coisa?",
"fulfillmentMessages": [
{
"text": {
"text": [
"O escritório da Zenvia em São Paulo fica na Av. Paulista, 2300, 18º andar, na Bela Vista. Posso te ajudar com mais alguma coisa?"
]
}
}
],
"intent": {
"name": "projects/zenbot-bnjepb/agent/intents/a651c329-105e-41b6-8ae8-56342267f758",
"displayName": "perguntaLocal"
},
"intentDetectionConfidence": 1,
"diagnosticInfo": {
"webhook_latency_ms": 124
},
"languageCode": "pt-br"
},
"webhookStatus
No corpo Json acima, há quatro objetos sublinhados que devem ser de interesse do desenvolvedor. O primeiro é 'queryText', que é o espelho do que foi recebido pela requisição POST por parte do usuário. O segundo é 'fulfillmentText', que devolve em formato de string a resposta configurada dentro do próprio DialogFlow. O terceiro e o quarto, respectivamente, são 'intent.displayName', que devolve o ID da intenção acessada, e 'parameters.XXXXXX', que devolvem os atributos conforme normalizados pela plataforma.
Nas configurações avançadas da integração Json, é possível escolher quais atributos extrair a partir de SPEL expression language. Para facilitar a integração, as fórmulas para pegar cada atributo são:
No corpo Json acima, há quatro objetos sublinhados que devem ser de interesse do desenvolvedor. O primeiro é 'queryText', que é o espelho do que foi recebido pela requisição POST por parte do usuário. O segundo é 'fulfillmentText', que devolve em formato de string a resposta configurada dentro do próprio DialogFlow. O terceiro e o quarto, respectivamente, são 'intent.displayName', que devolve o ID da intenção acessada, e 'parameters.XXXXXX', que devolvem os atributos conforme normalizados pela plataforma.
Nas configurações avançadas da integração Json, é possível escolher quais atributos extrair a partir de SPEL expression language. Para facilitar a integração, as fórmulas para pegar cada atributo são:
captureResponse | response.queryResult.fulfillmentText
captureIntent | response.queryResult.intent.displayName
captureEntity | response.queryResult.parameters.XXXX
(onde XXXX é o nome da entidade, como 'cidade', 'bairro', 'hora' etc.)
Desta forma, a configuração deve ter esta aparência:
Com a captura da resposta, o usuário pode fazer chamadas simples no NLP contextualizado, simplesmente devolvendo um dos parâmetros estabelecidos como resposta do chatbot:

Assim, o resultado deve ser:

Caso o usuário opte por extrair intents e entidades, ele pode criar pontos de tomada de decisão para manter pontos da conversa orquestrados pela plataforma da Zenvia. Este método, lembremos, garante maior gestão sobre os dados que são trafegados internamente:

Assim, o resultado deve ser:
Caso o usuário opte por extrair intents e entidades, ele pode criar pontos de tomada de decisão para manter pontos da conversa orquestrados pela plataforma da Zenvia. Este método, lembremos, garante maior gestão sobre os dados que são trafegados internamente:
Assim, as informações de intents e parâmetros são salvas dentro do chatbot e permitem ao usuário reutilizá-las para outros propósitos, caso queira.
Com este material, um usuário deve ser capaz de realizar uma integração simples de NLP entre o motor do DialogFlow e a plataforma de construção de chatbots da Zenvia, indo além e entregando resultados dignos de encantamento para o cliente!