bd2_6f5_636_330-1-original

Como Criar um Bot para o Facebook Messenger em PHP

Share This:

1-Criar uma Página no Facebook

Todo bot a ser criado para o Messenger deve estar associado a uma página no Facebook. Dessa forma, nosso primeiro passo deve ser a criação da página. Caso você já possua uma página e deseja adicionar o bot a ela, pode pular para a próxima seção. xD

Para criar a página acesse: https://www.facebook.com/pages/create/. A imagem abaixo mostra a página que será aberta:

criar pagina facebook

Em seguida, escolha a categoria e dê um nome a sua página.

criar página facebook

Ao final de todo esse processo, a página irá ficar como a da imagem a seguir:

pagina loteria bot

2-Criar um App no Facebook

Com a página já criada, a segunda etapa é criar o app no Facebook que será responsável pela ligação entre a página e o código do nosso bot. Para criar um app no Facebook é necessário acessar o link https://developers.facebook.com/apps e clicar em “Adicionar um novo aplicativo”.

adicionar novo aplicativo

Ao clicar em “Adicionar um novo aplicativo”, será exibida uma janela igual a da imagem abaixo. Nessa janela, clique em “basic setup”.

criar app facebook

Na janela seguinte, preencha com o nome do bot, seu email de contato e escolha uma categoria.

new app facebook id

Feito isso, será exibida uma página com os detalhes do app recém-criado.

loterias bot app

3-Obter Access Token e Definir Webhook

Com o app criado, o próximo passo é obter o Access Token e definir o link do Webhook. Para isso, no menu no lado esquerdo da tela do app, clique em “Adicionar Produto”. Quando isso for feito, uma tela semelhante a da imagem abaixo será aberta. No tópico Messenger, clique em “Get Started”.

8

Na tela seguinte, clique em “Começar”.

messenger setup

Na seção “Geração de token”, escolha a página para a qual deseja gerar o token.

dashboard app facebook

Dê acesso às permissões que forem exigidas e, logo em seguida, você irá notar que o token será gerado no campo ao lado.

app facebook token

Após gerar o token, na seção Webhooks, clique em “Setup Webhooks”.

webhook

Ao abrir a janela, digite a URL que será usada como Webhook. É importante ressaltar que essa URL deve suportar HTTPS. Digite também um token para identificar o app e escolha as funcionalidades que você deseja integrar ao seu bot. Não clique em “Verificar e Salvar” ainda!

webhook dados

Quando você clica em “Verificar e Salvar”, o Facebook envia uma requisição para a URL inserida. Essa requisição precisa ser respondida pelo seu servidor. Dessa forma, é necessário que você crie um arquivo chamado “index.php” contendo o código abaixo:

  <?php
   
  define('BOT_TOKEN', 'SEU ACCESS TOKEN');
  define('VERIFY_TOKEN', 'SEU VERIFY TOKEN');
   
  $hub_verify_token = null;
   
  //-----VEFICA O WEBHOOK-----//
  if(isset($_REQUEST['hub_challenge'])) {
  $challenge = $_REQUEST['hub_challenge'];
  $hub_verify_token = $_REQUEST['hub_verify_token'];
  }
  if ($hub_verify_token === VERIFY_TOKEN) {
  echo $challenge;
  }
  //-----FIM VERIFICAÇÃO-----//
   
  ?>

O código acima serve para que Facebook valide o seu Webhook. Não vou entrar em detalhes de como essa validação é feita, mas ao acessar a documentação sobre Webhooks na Graph API, você poderá verificar como ocorre o processo e quais parâmetros são requisitados.

Feito isso, agora você pode clicar em “Verificar e Salvar”. Se tudo ocorrer bem, a seção “Webhooks” ficará igual a da foto abaixo:

webhook app

Para finalizar, você deve inscrever o app a uma página do Facebook. Sendo assim, selecione a página a qual o bot será associado.

4-Receber e Enviar Mensagens

Finalizadas as etapas anteriores, o passo final é implementarmos o código para processar as mensagens recebidas e respondê-las. Para isso, primeiramente, é preciso verificar na documentação do Facebook qual são os dados enviados ao Webhook quando uma mensagem é enviada ao chat da página associada ao bot. Esses dados são enviados ao Webhook no formato JSON, o qual pode ser visto no trecho de código abaixo:

  {
  "object":"page",
  "entry":
  [{
  "id":"320753758271687",
  "time":1471957860368,
  "messaging":
  [{
  "sender":{
  "id":"USER_ID"
  },
  "recipient":{
  "id":"PAGE_ID"
  },
  "timestamp":1471957860318,
  "message":{
  "mid":"mid.1471957860205:70331a194f8c8af354",
  "seq":24,
  "text":"Mensagem"
  }
  }]
  }]
  }

No trecho de código acima é necessário dar atenção a três objetos: sender, recipient e message. O sender contém o ID do usuário que enviou a mensagem. O recipient contém o ID da página que recebeu a mensagem. Por sua vez, o objeto message contém o atributo text, o qual compreende o conteúdo da mensagem.

Agora que a estrutura do JSON recebido pelo Webhook já é conhecida, precisamos entender como fazer para responder a mensagem que foi recebida, ou seja, como o bot deve enviar a resposta ao usuário. Basicamente, a resposta também deve ser enviada em JSON para a seguinte URL:

https://graph.facebook.com/v2.6/me/messages?access_token=(SEU_ACCESS_TOKEN)

A estrutura do JSON a ser enviada através da URL acima poder ser vista no trecho de código a seguir:

  {
  "recipient":{
  "id":"SENDER_ID"
  },
  "message":{
  "text":"MENSAGEM"
  }
  }

Como é possível notar no código acima, o JSON precisa conter apenas o ID do emissor como recipient e o texto da mensagem a ser enviada ao usuário.

Agora que a estrutura dos JSON de recebimento e envio de mensagens já é conhecida, o próximo passo é implementar o bot para receber a mensagem e responder de acordo com o seu conteúdo. Para implementar o bot, eu me baseei no código em PHP do bot do tutorial para o Telegram. Sendo assim, o bot deste tutorial também irá informar os resultados das loterias da Caixa. O código completo do bot pode ser visto abaixo:

 <?php
   
  require('parser.php');
   
  define('BOT_TOKEN', 'SEU ACCESS TOKEN');
  define('VERIFY_TOKEN', 'SEU VERIFY TOKEN');
  define('API_URL', 'https://graph.facebook.com/v2.6/me/messages?access_token='.BOT_TOKEN);
   
  $hub_verify_token = null;
   
  function processMessage($message) {
  // processa a mensagem recebida
   
  $sender = $message['sender']['id'];//id do emissor
  $text = $message['message']['text'];//texto recebido na mensagem
   
  if (isset($text)) {
  if ($text === "Mega-Sena") {
  sendMessage(array('recipient' => array('id' => $sender), 'message' => array("text" => getResult('megasena', $text))));
  } else if ($text === "Quina") {
  sendMessage(array('recipient' => array('id' => $sender), 'message' => array("text" => getResult('quina', $text))));
  } else if ($text === "Lotomania") {
  sendMessage(array('recipient' => array('id' => $sender), 'message' => array("text" => getResult('lotomania', $text))));
  } else if ($text === "Lotofácil" || $text === "Lotofacil") {
  sendMessage(array('recipient' => array('id' => $sender), 'message' => array("text" => getResult('lotofacil', $text))));
  } else {
  sendMessage(array('recipient' => array('id' => $sender), 'message' => array('text' => 'Olá! Eu sou um bot que informa os resultados das loterias da Caixa. Será que você ganhou dessa vez? Para começar, digite o nome do jogo para o qual deseja ver o resultado')));
  }
  }
  }
   
  function sendMessage($parameters) {
  $options = array(
  'http' => array(
  'method' => 'POST',
  'content' => json_encode($parameters),
  'header'=> "Content-Type: application/json\r\n" .
  "Accept: application/json\r\n"
  )
  );
   
  $context = stream_context_create( $options );
  file_get_contents(API_URL, false, $context );
  }
   
  //-----VEFICA O WEBHOOK-----//
  if(isset($_REQUEST['hub_challenge'])) {
  $challenge = $_REQUEST['hub_challenge'];
  $hub_verify_token = $_REQUEST['hub_verify_token'];
  }
  if ($hub_verify_token === VERIFY_TOKEN) {
  echo $challenge;
  }
  //-----FIM VERIFICAÇÃO-----//
   
  $update_response = file_get_contents("php://input");
   
  $update = json_decode($update_response, true);
   
  if (isset($update['entry'][0]['messaging'][0])) {
  processMessage($update['entry'][0]['messaging'][0]);
  }
   
  ?>

No código do bot existe o método processMessage. Esse método é responsável por manipular as mensagens recebidas pelo bot. Essas mensagens são obtidas por meio do JSON recebido via Webhook. Sendo assim, quando o método processMessage é chamado, ele verifica, a partir da mensagem recebida, qual loteria o usuário deseja saber o resultado e envia uma resposta.

As respostas às solicitações recebidas pelo bot são enviadas através do método sendMessage. Esse método recebe como parâmetro um array contendo o ID do emissor e o resultado da loteria escolhida. Antes de enviar a resposta, o método sendMessage converte o array em JSON.

A imagem abaixo mostra o bot construído neste tutorial funcionando. O usuário digita o nome da loteria (Ex: Quina) que deseja saber o resultado e o bot responde com os dados do último sorteio.

messenger bot funcionando

Bom, é isso! Espero que este tutorial ajude a criar vários bots úteis e legais. =]

Para conversar com o bot acesse: https://m.me/loteriasbot

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

Fonte: Luiz Marcus