Construindo e Publicando seu Messenger Bot

Harshad Ranganathan Blocked Unblock Seguir Seguindo 2 de janeiro

Neste exemplo, usaremos o Node.js para construir nosso bot que responderá às mensagens do usuário.

Crie um novo projeto Node.js

 mkdir dbei-bot 
cd dbei-bot

// create package.json file
npm init
touch index.js

// install project dependencies
npm install express body-parser --save // http server
npm install axios --save // promise based http client
npm install dotenv --save // loads environment variables from .env file

Configurar um arquivo de ambiente

Vamos criar um arquivo .env que terá entradas abaixo:

 SEND_API=https://graph.facebook.com/v3.0/me/messages 
VERIFY_TOKEN=<VERIFY_TOKEN>
PAGE_ACCESS_TOKEN=<PAGE_ACCESS_TOKEN>

VERIFY_TOKEN

Pode ser uma string aleatória. Vamos configurar este token na plataforma do messenger em um estágio posterior.

Propósito – A plataforma Messenger enviará uma solicitação de desafio ao nosso webhook e devemos verificar se ela corresponde ao token configurado. Só então, nosso webhook será inscrito.

PAGE_ACCESS_TOKEN

Nós vamos gerar este token em um estágio posterior na plataforma do messenger e substituí-lo aqui.

Objetivo – Precisamos desse token para enviar solicitações de API ao messenger.

Crie um servidor HTTP

Vamos criar um servidor HTTP que ouça as solicitações. No arquivo index.js que criamos anteriormente, adicione o código abaixo:

 // configure dotenv so that process.env has the keys and values you defined in your .env file 
require('dotenv').config();

const
express = require('express'),
bodyParser = require('body-parser'),
app = express().use(bodyParser.json());

app.listen(process.env.PORT || 1337, () => console.log('webhook is listening'));

Adicionar ponto final de verificação do webhook

No arquivo index.js nós adicionamos abaixo o código para expor /webhook GET endpoint.

 /** 
* Webhook challenge endpoint
*/
app.get('/webhook', (req, res) => {
let VERIFY_TOKEN = process.env.VERIFY_TOKEN;
let mode = req.query['hub.mode'];
let token = req.query['hub.verify_token'];
let challenge = req.query['hub.challenge'];
if(mode && token) {
// Checks the mode and token sent is correct
if(mode == 'subscribe' && token == VERIFY_TOKEN) {
res.status(200).send(challenge);
} else {
res.sendStatus(403);
}
}
});

Vamos configurar este endpoint na plataforma do messenger mais tarde, que será usado para verificação do desafio usando o VERIFY_TOKEN que fornecemos.

Se o token enviado pela plataforma mensageiro corresponde ao que tinha configurado, então temos de enviar 200 resposta de outra forma 403 .

Na verificação bem-sucedida do desafio, a plataforma do messenger assinará nosso webhook.

Teste seu webhook executando os comandos abaixo:

 node index.js // starts the express HTTP server to serve at port 1337 

curl -X GET "localhost:1337/webhook?hub.verify_token=<YOUR_VERIFY_TOKEN>&hub.challenge=CHALLENGE_ACCEPTED&hub.mode=subscribe"

Acima deve retornar o código de status HTTP 200 com resposta como CHALLENGE_ACCEPTED se tudo foi configurado corretamente.

Adicionar ponto final do webhook

No arquivo index.js , adicionamos o código abaixo para expor /webhook POST endpoint, que será usado pela plataforma Messenger para enviar eventos webhook.

 /** 
* Messenger webhook endpoint
*/
app.post('/webhook', (req, res) => {
let body = req.body;
// Checks this is an event from a page subscription
if(body.object === 'page') {
// Iterates over each entry - there may be multiple if batched
body.entry.forEach(function(entry) {
// entry.messaging is an array, but will only ever contain one message
let webhook_event = entry.messaging[0];
// A person is assigned a unique page-scoped ID (PSID)
// for each Facebook Page they start a conversation with.
// The PSID is used by your Messenger bot to identify a person when sending messages.
let sender_psid = webhook_event.sender.id;
messenger.handleMessage(sender_psid, webhook_event.message);
});
res.status(200).send('EVENT_RECEIVED');
} else {
res.sendStatus(404);
}
});

Funções de manipulador

Anteriormente, mencionamos messenger.handleMessage(sender_psid, webhook_event.message); chamada de função. Vamos definir essa função agora para manipular e responder a mensagens de texto de usuários.

 /** 
* Incoming Message Handler
*/
function handleMessage(sender_psid, received_message) {
// check if the input is text message
// users might send smiley which can be filtered out
if(typeof received_message.text !== "undefined") {
let message = received_message.text.toLowerCase();
callSendAPI(sender_psid, { text: message });
}
}

Vamos definir o callSendAPI para enviar mensagens de resposta por meio da API SEND.

 // access environment variables 
const PAGE_ACCESS_TOKEN = process.env.PAGE_ACCESS_TOKEN;
const SEND_API = process.env.SEND_API;

/**
* Calls the Messenger API to send the message
*/
function callSendAPI(psid, message) {
let data = {
"recipient": { "id": psid },
"message": message
};
return axios({
method: 'POST',
url: SEND_API,
params: { access_token: PAGE_ACCESS_TOKEN },
data: data
})
.catch((error) => {
if (error.response) {
console.log('PSID: ', psid);
console.log('Status code: ', error.response.status);
console.log('Response: ', error.response.data);
} else if (error.request) {
console.log('Request: ', error.request);
} else {
console.log('Error: ', error.message);
}
});
}

Aqui,

recipient – Define o destinatário da mensagem pretendida. Nesse caso, identificamos a pessoa pelo seu PSID.

message – Define os detalhes da mensagem a ser enviada.

Estamos enviando nossa mensagem para a API de envio cujo URL definimos anteriormente em um arquivo .env . Também estamos anexando PAGE_ACCESS_TOKEN no parâmetro access_token da string de consulta de URL.

Se, no caso de você estar enviando uma mensagem de assinatura, você precisa incluir a tag NON_PROMOTIONAL_SUBSCRIPTION na sua solicitação de dados.

 let data = { 
"recipient": { "id": psid },
"message": message,
"messaging_type": "MESSAGE_TAG",
"tag": "NON_PROMOTIONAL_SUBSCRIPTION"
};

Envio de mensagem estruturada

O Messenger Platform fornece um conjunto de modelos de mensagens úteis, cada um projetado para suportar uma estrutura de mensagens diferente e comum, incluindo listas, recibos, botões e muito mais.

Veja abaixo o script auxiliar do exemplo templates.js que pode ser usado para enviar mensagens estruturadas para a API de envio.

 ** 
* link https://developers.facebook.com/docs/messenger-platform/reference/template/generic
*/
function genericTemplate(elements) {
return {
"attachment": {
"type": "template",
"payload": {
"template_type": "generic",
"elements": elements
}
}
};
}

/**
* link https://developers.facebook.com/docs/messenger-platform/reference/template/list
*/
function listTemplate(elements) {
return {
"attachment": {
"type": "template",
"payload": {
"template_type": "list",
"top_element_style": "compact",
"elements": elements,
"buttons": [
{
"title": "Donate",
"type": "web_url",
"url": 'https://www.paypal.me/harshadranganathan'
}
]
}
}
};
}

/**
* link https://developers.facebook.com/docs/messenger-platform/send-messages/quick-replies/
*/
function quickRepliesTemplate(text, quickReplies) {
return {
"text": text,
"quick_replies": quickReplies
}
}

module.exports = {
genericTemplate: genericTemplate,
listTemplate: listTemplate,
quickRepliesTemplate: quickRepliesTemplate
};

Amostra de Respostas Rápidas do Messenger:

Por exemplo, para usar quickRepliesTemplate , importe o script de modelos e passe as opções de resposta consultando a documentação do modelo:

 const _ = require('lodash'); 
const templates = require('./templates');

function quickReplyOptions(text) {
let quickReplies = [];
_.forEach(['Subscribe', 'Unsubscribe'], (option) => {
quickReplies.push({ content_type: 'text', title: option, payload: option });
});
return templates.quickRepliesTemplate(text, quickReplies);
}

callSendAPI(sender_psid, quickReplyOptions("Hi! How can I help you today?"));

Implante seu webhook

Agora que construímos nosso robô de amostra, precisamos implantá-lo em um servidor com um certificado SSL válido para que ele possa aceitar solicitações por HTTPS.

Conexão HTTPS é um deve ter para integrar nosso bot com a plataforma Messenger.

Nós temos algumas opções:

  1. Se você precisar integrar e testar a partir do seu local, você pode usar o ngrok .
  2. Você pode remixar o projeto de início rápido do messenger no glitch, que fornecerá um URL público servido via HTTPS para o seu webhook.
  3. Você pode hospedar o aplicativo node.js em sua instância do Linux com o Nginx como proxy e configurar certificados SSL com o Let's Encrypt .

Depois de ter implantado seu aplicativo e configurado a conexão HTTPS, sua URL da webhook será https://<server-ip>/webhook (ou) https://<domain>/webhook se você tivesse mapeado um domínio para o IP do seu servidor.

Prossiga para as próximas etapas para integrá-lo à plataforma do Messenger.

Configure seu aplicativo do Facebook

Siga os passos abaixo para configurar seu aplicativo do Facebook para uso com a Plataforma do Messenger e assine seu webhook para receber eventos.

Página do Facebook

Uma página no Facebook será usada como a identidade do seu bot. Quando as pessoas conversam com seu aplicativo, elas verão o nome da página e a foto do perfil da página.

Crie uma página no facebook para o seu bot primeiro.

Para o nosso bot, vamos criar uma página de negócios com categoria como Internet Company .

Você pode então escolher uma foto de perfil e uma capa.

Configurações adicionais de página:

  • Create Page Username Crie um URL personalizado que as pessoas possam usar para pesquisar e visitar sua página.
  • Visitor Posts Você pode desativar as mensagens de outras pessoas na página.
  • Page Info Você pode fornecer uma descrição e um endereço de e-mail para contato.
  • Notifications Desativar notificações de mensagens para que você não receba um alerta para cada mensagem enviada para o bot via mensageiro.
  • Add a Button to Your Page Você pode adicionar um botão de contato para que as pessoas possam enviar uma mensagem da sua página.

Domínio da lista de permissões e mensagens de assinatura

Nós estaremos integrando sua URL do webhook com a plataforma do messenger em breve. Para que o seu webhook seja invocado pelo messenger, você precisa colocar o seu domínio na lista de permissões.

Adicione seu domínio na seção Whitelisted Domains nas configurações do Messenger Platform .

Se o seu bot precisar da capacidade de enviar conteúdo regular para uma pessoa no Messenger, você precisará aumentar a permissão de Subscription Messaging no nível da página.

Você poderá enviar mensagens para a pessoa fora do Standard Messaging somente depois que essa permissão for revisada e aprovada.

https://developers.facebook.com/docs/messenger-platform/policy/policy-overview/

Conta de desenvolvedor do Facebook

Você precisa de uma conta de desenvolvedor para criar novos aplicativos que servem como uma integração entre sua página e o bot.

Crie uma conta de desenvolvedor através da plataforma Facebook for Developers .

App do Facebook

Facebook app contém as configurações para o seu bot Messenger, incluindo tokens de acesso.

Crie um novo aplicativo usando o painel do aplicativo .

Seu novo aplicativo será criado no Development Mode .

No Development Mode apenas os usuários que receberam a função de Administrador, Desenvolvedor ou Testador no aplicativo poderão interagir com o bot assim que concluirmos a integração com o messenger.

Adicione o Messenger Platform ao seu aplicativo

  1. Na barra lateral das configurações do aplicativo, em "PRODUTOS", clique em "+ Adicionar produto".
  2. Passe o mouse sobre "Messenger" para exibir as opções.
  3. Clique no botão 'Configurar'.

Webhook de configuração

Na seção "Webhooks" do console de configurações do Messenger, clique no botão "Configurar Webhooks".

Configure o URL de retorno de chamada e verifique o token.

Aqui, a URL de retorno de chamada será https://<server-ip-or-domain>/webhook e Token de Verificação será o valor que você tinha fornecido anteriormente no arquivo .env .

A Plataforma do Messenger enviará uma solicitação GET para o seu webhook com o token de verificação que você forneceu. Se o seu webhook for válido e configurado corretamente para responder à solicitação de verificação, suas configurações do webhook serão salvas.

Além disso, no campo de assinatura, escolha messages e salve a configuração do webhook.

Assine sua página no Facebook

Na seção "Webhook" do console de configurações do Messenger, clique no menu suspenso "Selecionar uma página" e selecione a página do facebook que você criou anteriormente.

Isso irá inscrever seu aplicativo para receber eventos quando as pessoas no Messenger conversarem com sua página e encaminhá-las para o seu webhook.

Gerar Token de Acesso à Página

  1. Na seção "Geração de token" do console de configurações do Messenger, clique no menu suspenso "Selecionar uma página" e selecione a Página do Facebook que você criou antes.
  2. Copie o token exibido no campo 'Token de acesso à página'.
  3. Adicione este token à propriedade PAGE_ACCESS_TOKEN que definimos no arquivo .env .

O token gerado NÃO será salvo nesta interface do usuário. Cada vez que você selecionar uma página na lista suspensa, um novo token será gerado. Se um novo token for gerado, os tokens criados anteriormente continuarão a funcionar.

Assinatura do aplicativo de teste

Envie uma mensagem para sua página do facebook.com ou no Messenger. Se o seu webhook receber um evento de webhook, então tudo foi conectado corretamente.

Publicando seu aplicativo

No modo de desenvolvimento, os aplicativos são aprovados automaticamente para todas as permissões de login, recursos e recursos específicos do produto.

Depois que você alternar seu aplicativo para o Modo Ao Vivo, seu aplicativo poderá usar apenas permissões e recursos para os quais ele foi aprovado.

A plataforma do Messenger exige etapas abaixo de revisão e aprovação:

  1. Revisão de permissões e recursos
  2. Documentos de Informação e Verificação de Negócios
  3. Aceite os Termos Suplementares e Assine o Contrato de Provedor de Tecnologia

Revisão de permissões e recursos

Quando estiver pronto para publicar seu bot, certifique-se de que seu aplicativo esteja no Development Mode .

Forneça informações básicas no console do aplicativo em Configurações> Básico:

  1. Ícone do aplicativo
  2. URL com Política de Privacidade
  3. Categoria
  4. Uso comercial

Você pode gerar uma política de privacidade usando este bot .

Selecione as permissões do aplicativo

Solicite as permissões pages_messaging na seção Revisão de aplicativos nas configurações do messenger, que permite que seu bot envie mensagens no modo ao vivo.

Envie seu bot para revisão depois de ter escolhido todas as permissões necessárias.

Seu bot será analisado pelos usuários de teste do messenger que postarão o comando que você mencionou ao enviar o aplicativo para análise. Espera-se que o seu bot responda às suas mensagens dentro de 20 segundos.

Se nenhuma resposta for retornada dentro do tempo estipulado, o envio do seu aplicativo será enviado de volta.

Gotchas:

  1. Eu tinha enviado uma mensagem para minha página e recebi uma resposta do meu bot. No entanto, quando os usuários de teste enviaram uma mensagem, não estão obtendo resposta.

Isso pode ser um bug da plataforma, já que eu enfrentei o mesmo problema. Quando o usuário de teste enviou a primeira mensagem, o webhook não foi chamado, no entanto, quando o mesmo usuário enviou a mensagem na próxima vez que tudo funcionou bem. Eu tinha levantado um relatório de bug e foi corrigido pela equipe do mensageiro.

Documentos de Informação e Verificação de Negócios

Se você usa a API do messenger, sua empresa precisa ser verificada.

Você precisa criar uma conta de gerente de negócios e vinculá-la ao seu aplicativo.

Depois que seu bot tiver sido analisado quanto à capacidade de resposta, funcionalidade e conformidade com as políticas, você receberá uma mensagem solicitando a conclusão da verificação de negócios na guia "Alertas" do console do aplicativo.

Você precisa fornecer as provas para verificação. Se você não for um negócio real, envie sua fatura de serviços públicos (deve corresponder ao seu nome na conta do gerente de negócios) como prova.

A confirmação de empresa é necessária uma vez por conta do Business Manager.

Aceite os Termos Suplementares e Assine o Contrato de Provedor de Tecnologia

Depois que as informações da sua empresa e os documentos de verificação forem enviados, você receberá um e-mail da equipe jurídica do Facebook solicitando que você assine digitalmente os termos suplementares e solicite uma revisão.

Quando toda a revisão estiver concluída, seu bot será aprovado. Você pode então fazê-lo funcionar e qualquer um poderá enviar mensagens e obter a resposta de volta de sua página.

Referências:

https://developers.facebook.com/docs/messenger-platform/getting-started/webhook-setup

https://developers.facebook.com/docs/messenger-platform/getting-started/quick-start

https://developers.facebook.com/docs/messenger-platform/getting-started/app-setup

https://developers.facebook.com/docs/messenger-platform/policy/policy-overview/

https://developers.facebook.com/docs/apps/review/

https://developers.facebook.com/docs/messenger-platform/app-review/

Facebook Messenger Bot Compartilhar Tweet +1