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.

O bot desenvolvido neste tutorial foi hospedado na Umbler.

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!

10 comentários em “Criando Bot para o Telegram Utilizando o Api.ai (DialogFlow)”

    • 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.

      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.

      Responder
  1. Sensacional…. cara, meus parabéns!
    Gostaria de saber se você faz trabalho freelancer, se fizer, tenho uma proposta pra vc!
    Caso tenha interesse, entre em contato cmg (35) 9 9929-8595!
    tmj!!!

    Responder
  2. Cada post melhor que o outro, gostaria saber se tem como pausar o dialogflow para um humano assumir. Tipo uma intenção que o usuário final deseja falar com atendente. Nesse caso o bot pausar para esse usuario e o humano assumir dali pra frente.

    Responder
    • Obrigado pelo elogio, Juacy.

      Pergunta complicada essa. kkk
      Acho que não dá para fazer isso porque o bot sempre “visualiza” as mensagens enviadas pelo usuário e envia ao Dialogflow, o que acaba fazendo uma resposta automática ser gerada.
      Acho que daria para o bot encaminhar o usuário para uma outra conversa (outra janela/chat no Telegram, por exemplo) para que o atendimento fosse realizado por um humano.

      Espero ter ajudado.

      Responder

Deixe uma resposta para Luiz Marcus Cancelar resposta