Criando Bot para o Telegram Utilizando o Api.ai (DialogFlow)

No post anterior, eu demonstrei como utilizar a plataforma Api.ai para criar um bot. Porém, o bot que criamos não foi integrado a nenhuma plataforma de chat. Dessa forma, neste post, eu irei mostrar como é feita a integração entre o Telegram e o agente que criamos no Api.ai. É importante esclarecer também que a linguagem PHP será utilizada na implementação do nosso bot.

Vamos lá!

Errata (10/10/2017): O Api.ai teve seu nome alterado para DialogFlow.

Errata 2 (14/07/2018): Este post foi escrito quando visando a API v1. Como o DialogFlow lançou a versão v2 da API, os códigos presentes no post foram atualizados.

1-Ativando o Fulfillment

Atualmente, quando o bot recebe uma mensagem perguntando, por exemplo, o resultado da Quina, ele não responde com o resultado do jogo. Como resposta, o usuário recebe apenas a mensagem “Um momento, por favor. Irei verificar qual foi o resultado da Quina”. Supondo que queremos usar o parser que desenvolvemos no segundo post  da serie sobre bots para o Telegram para obter o resultado da loteria, precisamos que o bot faça uma requisição ao nosso servidor passando como parâmetro o jogo Quina que foi anteriormente identificado. Para isso, é necessário ativar, no console do Api.ai, a funcionalidade Fulfillment.

apiaitelegram10

Após ativar o Fulfillment, devemos setar o webhook (quem já leu os outros posts sobre bots aqui do blog deve estar acostumado com o termo xD). Sendo assim, na seção Webhook, inserimos a URL do nosso servidor, a qual será responsável por receber a requisição do bot e respondê-la com o resultado da loteria.

apiaitelegram11

Feito isso, o próximo passo é voltar a intenção “exibir.resultados” e, no final da página, marcar a opção “Use webhook“.

apiaitelegram12

2-Processando a Requisição no Webhook

Com o webhook setado, temos que preparar o nosso back-end para receber as requisições que forem feitas pelo bot. Com esse objetivo, primeiramente, devemos entender como o Api.ai enviará a requisição ao back-end. Na documentação do Api.ai, na parte relacionada ao fulfillment, é possível encontrar um modelo de requisição em JSON. Porém, no exemplo abaixo está especificado o JSON enviado pelo Api.ai via POST ao nosso back-end.

Se observarmos o JSON acima, no objeto parameters está localizada a nossa entidade “Jogos” junto com o seu valor “Quina”, o qual foi identificado pelo Api.ai na solicitação do usuário. Então, basicamente, o que temos que fazer é ler o JSON, obter o valor “Quina” e passá-lo como parâmetro para o parser. No trecho de código a seguir, é possível ver esse processo implementado:

Em resumo, o webhook obtém os dados contidos na requisição através do método file_get_contents. Por sua vez, esses dados são lidos como JSON e passados para o método getResult, o qual será responsável por obter o resultado do jogo solicitado e montar o JSON de resposta.

3-Respondendo a Requisição no Webhook

No trecho de código abaixo está exposta a implementação do método getResult. Nela, é possível perceber que após obter o resultado do jogo através do parser da página do G1, o getResult gera um JSON como resposta. Esse JSON é impresso como resposta ao Api.ai.

O formato desse JSON de resposta pode ser encontrado na documentação do Api.ai. Esse JSON possui diversos campos, dentre eles o fulfillmentText speech e o displayText. O speech deve ser preenchido com o valor que será usado quando o bot for usar a voz. Por outro lado, o displayText deve ser preenchido com o valor que será impresso pelo bot em um chat. É preciso deixar claro que você pode atribuir o mesmo valor em ambos os campos.. O fulfillmentText deve ser preenchido com o valor que será impresso pelo bot em um chat.

4-Ligando o Api.ai ao Bot no Telegram

Para finalizar o desenvolvimento do bot é necessário ligá-lo ao seu bot no Telegram (estou supondo que você já possui um bot criado no Telegram xD). Para isso, acesse o menu Integrations no console do Api.ai, ative o suporte ao Telegram e insira o token do seu bot.

apiaitelegram13

apiaitelegram14
Feito isso, já podemos testar nosso bot!

5-Testando o Bot

Bom, agora podemos acessar o chat do nosso bot no Telegram e conversarmos com ele. Ao enviarmos mensagens para ele, podemos perceber que ele responde exatamente de acordo com o treinamento feito no Api.ai. =]

apiaitelegram15

Este foi um exemplo bem simples de como usar o Api.ai para desenvolver um bot. Se você comparar a quantidade de código utilizado para criar este bot com a empregada na implementação de outros que já mostrei, irá notar que o uso de uma plataforma de machine learning nos auxilia, principalmente, na redução da codificação necessária para a interpretação das mensagens trocadas entre o bot e o usuário. Além disso, no caso da Api.ai, não precisamos codificar também a integração entre o bot e o Telegram, já que tudo é feito via console. =]

Para testar o bot que acabamos de criar, procure por “loteriasfederaisbot” no Telegram ou acesse o seguinte link: https://telegram.me/loteriasfederaisbot.

Para visualizar o código-fonte do bot que foi desenvolvido neste tutorial, acesse: Telegram Api.ai Bot.

Agora, você já sabe como criar um bot mais amigável e inteligente para o Telegram!

E ai, gostou do tutorial? Ficou com alguma dúvida? Então, deixe um comentário!

6 Comment

  1. Wellyngton Sampaio says: Responder

    Olá, sou Wellyngton Sampaio e quero te dar os parabéns pelos os dois post.
    Tem alguma dica de como integrar com whtas?
    alguma ideia?

    1. Luiz Marcus Luiz Marcus says: Responder

      Vlw pelos parabéns, Wellyngton! =]
      Então, o WhatsApp não tem suporte para o desenvolvimento de bots. Porém, sempre tem um espertinho/empresa que acaba desenvolvendo bots usando métodos “não oficiais”. kkk
      Se você der uma pesquisada no GitHub, você vai acabar encontrando alguma implementação que pode te ajudar. O problema é que o WhatsApp sempre dá um jeito de dificultar o desenvolvimento desses bots, seja atualizando o server, a interface web ou banindo o número do cel associado ao bot. xD
      Resumindo, dá pra fazer, mas o bot não vai ser oficial e talvez tenha um prazo para parar de funcionar.
      Espero ter ajudado.

  2. Ótimo post, está de parabéns
    Poderia fornecer os arquivos utilizados, estou aprendendo dialogflow, o que será de grande valia.

    1. Luiz Marcus Luiz Marcus says: Responder

      Obrigado, Kerensky! =]

      O código-fonte do projeto está disponível no GitHub no seguinte repositório:
      https://github.com/luizmarcus/PHP/tree/master/apiaitelegrambot

  3. Weslley Rodrigues says: Responder

    Sou leigo no assunto, mas gostaria de saber como você implementou esse código no Diagflow?

    1. Luiz Marcus Luiz Marcus says: Responder

      E ae Weslley, blz?

      A explicação de como foi implementado esse código pode ser encontrada no seguinte post:
      https://luizmarcus.com/php/como-criar-um-bot-para-o-telegram-em-php-parte-2/
      Como eu descrevi aqui no post, o código foi integrado ao DialogFlow através de um Webhook.

      Eu sempre tento utilizar o mesmo código em todos os meus exemplos aqui do blog, fazendo apenas algumas adaptações a depender do assunto tratado em cada post. Fazendo isso, eu tento garantir que o leitor precise entender o código apenas uma vez, e ao ler um novo post, ele se preocupe apenas em entender as mudanças.

Deixe uma resposta