Chatbot do Facebook no ASP.NET

Marek Sirkovský Blocked Unblock Seguir Seguindo 30 de novembro de 2016

Neste post, gostaria de mostrar como implementar um simples protótipo do bot de bate-papo do Facebook.

Os bots de bate-papo são ferramentas de marketing novas e de tendência para comunicar valores de ideias ou produtos aos consumidores. Eu não quero explicar as principais vantagens e finalidades dos bots. Se você estiver interessado em aprender mais, por favor veja este blog .

O Facebook não quer ficar para trás e também este ano apresenta sua plataforma Messenger. Nesta plataforma, você pode construir seu bot para se comunicar através do facebook messenger.

Como o Facebook disse :

Os bots para o Messenger são para qualquer um que esteja tentando alcançar pessoas no celular, não importa o tamanho da empresa ou a ideia, ou qual problema você está tentando resolver. Quer você esteja criando aplicativos ou experiências para compartilhar atualizações meteorológicas, confirmar reservas em um hotel ou enviar recibos de uma compra recente, os bots possibilitam que você seja mais pessoal, mais proativo e mais simplificado na maneira como você interage com pessoas.

Neste link , há um breve resumo do que é a plataforma do Messenger. Então, se você é um novato absoluto nessas áreas, leia este post antes de continuar.

Na Internet, existem alguns exemplos de como implementar o facebook chat bot em Javascript, PHP e outras linguagens. Portanto, há meus 2 centavos: Chatbot no ASP.NET .
Vamos criar um chatbot simples que faz apenas uma coisa. Ele ecoa de volta sua mensagem.

Para esse bot, usarei o modelo de projeto padrão da ASP.NET MVC. Mas primeiro, precisamos fazer algumas configurações no Facebook.

Configurando o Facebook

Primeiro precisamos da conta de desenvolvedor do Facebook.

Vá para o: https://developers.facebook.com

Registre-se ou faça o login se você tiver uma conta. Depois que você estiver logado, você pode criar um novo aplicativo.

O diálogo modal para criar um novo aplicativo é simples. Basta preencher o nome do seu aplicativo, e-mail de contato e categoria.

Depois que seu novo aplicativo for criado, você poderá adicionar um novo "produto". Seu aplicativo do Facebook pode conter produtos como login do Facebook, rede de público-alvo e, portanto, para nosso bot, precisamos do Messenger. Então clique no botão GetStarted na seção Messenger.

Na página aberta, você precisa selecionar a página onde o Messenger será “hospedado” e depois clicar em “Configurar Webhooks”.

Webhooks é uma ótima ferramenta que você pode usar quando precisar ser informado em tempo real quando algo acontecer no Facebook. Em nosso exemplo, precisaremos de informações quando nosso usuário nos enviar uma nova mensagem via messenger.
Você pode aprender mais sobre webhooks neste post ( https://developers.facebook.com/docs/graph-api/webhooks )

Na caixa de diálogo webhooks, preencha um “URL de retorno de chamada”. É o URL do seu aplicativo, o caminho para o controlador e o nome do método.
Verificar token – você pode escolher o seu próprio. Mas no seu servidor e nesta entrada deve ser o mesmo (onde você tem que verificar o token de verificação que você verá mais tarde neste post)
Nos campos de inscrição, escolha "message_deliveries", "messages", "messaging_optins" e "messaging_postbacks", como você vê na foto.

Agora você tem tudo pronto para testar seu bot de bate-papo. Vamos fazer alguns códigos.

Solução ASP.NET MVC

Vamos começar com a criação de um aplicativo ASP.NET MVC simples. Se você não sabe como iniciar ou como criar o aplicativo ASP.NET MVC, leia este tutorial oficial do ASP.NET .

Então eu suponho que você tenha uma solução MVC. Vamos fazer nosso bot vivo.
Primeiro, precisamos criar uma nova classe FacebookBotController herdada da classe Controller

Para esta classe criada, cole este código:

Então agora o FacebookBotController contém três métodos. Eu vou explicá-los individualmente.

Receber
Esse método é usado para manipular a primeira solicitação de validação do Facebook. A solicitação de validação é enviada como uma solicitação HTTP (verb get). Você tem que verificar verificar token e responder por valor no desafio recebido (este é outro parâmetro facebook enviar para a página).
Se algo der errado, você precisará retornar a resposta HTTP com o código de status 404.

PostRaw .
Este é apenas um método auxiliar. Ele mostra uma das maneiras de como enviar uma solicitação post de C #. É pouco um nível baixo, mas nesta situação funciona bem.

ReceivePost
ReceivePost é o nosso método principal . Aqui você recebe todas as chamadas do Facebook. Vou descrevê-lo mais detalhadamente. Vamos começar com atributos.

[ActionName ("Receber")]
[AcceptVerbs (HttpVerbs.Post)]

Esses dois atributos servem para roteamento. Simplificando, esse método é chamado quando, em nossa página asp.net, é recebida uma solicitação HTTP pelo método POST e o nome da ação é Receive.

Por favor, note que o tipo de parâmetro de entrada é BotRequest. BotRequest é minha classe que representa um pedido do webhook do Facebook. Existe documentação da estrutura de solicitação dos webhooks .

O pedido do Facebook não pode ser representado apenas por uma classe. Precisa criar toda a grande hierarquia de classes. No entanto, há boas notícias. Você não tem que escrever essas aulas por si mesmo porque eu escrevi ainda. Veja esta hierarquia no meu GitHub Gist .

Eu gostaria de enfatizar que eu uso uma classe de utilitário Task.Factory para disparar uma mensagem para o Facebook. Como você vê, estou retornando o código de resposta 200 (última linha “HttpStatusCodeResult (HttpStatusCode.OK) ”) e enviando a mensagem de forma assíncrona.

É claro que você pode escrever uma versão síncrona (remover o wrapper de tarefas), mas o Facebook tem essa política :

É extremamente importante retornar um HTTP 200 OK o mais rápido possível. O Facebook esperará 200 antes de enviar a próxima mensagem. Em bots de alto volume, um atraso no retorno de um 200 pode causar atrasos significativos no Facebook entregando mensagens ao seu webhook.

Então sua resposta precisa ser rápida!

Eu acredito que o resto do código é fácil de entender. Como escrevi, apenas ecoo a mensagem recebida. Isso é arquivado chamando o método PostRaw.

Talvez sua última pergunta: por que existem dois loops ?
A resposta é simples. Os pedidos do Facebook podem ser enviados para você por lote. Isso significa que você pode receber mais mensagens, então você precisa fazer um loop e processá-las uma a uma. Para mais informações, consulte a documentação do webhooks que mencionei acima.

Então é tudo. Agora você tem o primeiro bot fictício do Facebook. Você pode adicionar alguma lógica para modificar como bot deve responder a várias mensagens e mostrar esse bot para seus amigos. Feliz conversando 🙂