Facebook Messenger bot w node.js
Facebook uruchomił platformę Messenger, dając programistom możliwość tworzenia botów, które mogłyby rozmawiać z osobami w programie Messenger lub z poziomu facebookowych fanpagy. Od czasu uruchomienia platformy właściciele aplikacji wykazali duże zainteresowanie tworzeniem botów. Zaledwie trzy miesiące po otwarciu, na platformie było już około 11000 botów. Obecne zainteresowanie chatbotami jest oczywiste, a technologia w sztucznej inteligencji poprawia się i boty coraz lepiej komunikują się z użytkownikami.
Po uruchomieniu ngrok wyświetli publiczny adres URL tunelu w terminalu. Potrzebny nam on później podczas konfigurowania aplikacji na Facebooku. (Zrzut ekranu URL to https://ff69fecd.ngrok.io)
- ngrok http 5000

Pisanie webhooka
Do tego celu wykorzystamu Node.js oraz Express. Utwórzmy katalog aplikacji i skonfigurujmy aplikację Node.js.Następnie zainstalujemy express i body-parser.
- npm init
Stwórzmy plik webhook.js, w którym będziemy nasłuchiwać na porcie takim samym jaki został ustawiony za pomocą ngrok.
- npm install express body-parser --save
Teraz dodamy obsługę metod http get i post. W ten sposób odbierasz wiadomości do Twojej witryny przez Facebook Messenger. Wszystkie żądania powinny iść przez POST, a GET jest używane tylko w momencie konfigurowania aplikacji na Facebooku.
- const express = require('express');
- const bodyParser = require('body-parser');
- const app = express();
- app.use(bodyParser.json());
- app.use(bodyParser.urlencoded({ extended: true }));
- const server = app.listen(process.env.PORT || 5000, () => {
- console.log('Express server listening on port %d in %s mode', server.address().port, app.settings.env);
- });
Tokena gosia_chat (można użyć dowolnego ciągu znaków) będziemy potrzebować później podczas konfigurowania aplikacji na Facebooku. Uruchom kod jak poniżej.
- app.get('/webhook', (req, res) => {
- if (req.query['hub.mode'] && req.query['hub.verify_token'] === 'gosia_chat') {
- res.status(200).send(req.query['hub.challenge']);
- } else {
- res.status(403).end();
- }
- });
- app.post('/webhook', (req, res) => {
- console.log(req.body);
- if (req.body.object === 'page') {
- req.body.entry.forEach((entry) => {
- entry.messaging.forEach((event) => {
- if (event.message && event.message.text) {
- sendMessage(event);
- }
- });
- });
- res.status(200).end();
- }
- });
- node webhook.js
Aplikacja na facebooku
Teraz przejdziemy do konfiguracji aplikacji na Facebooku. Na początku potrzebujesz strony (fanpaga) Facebooka. Utwórz jedną facebook.com/pages/create. Wybierz kategorię, a następnie wybierz podkategorię z listy rozwijanej i wypełnij odpowiednie wymagane pola. Następnie kliknij przycisk Rozpocznij.








W pliku webhook.js dopiszemy poniższe.
- npm install request --save
Implementujemy funkcje sendMessage oraz send. Nasz bot na wysłaną jakąkolwiek wiadomość odpisuje "Witaj imię i nazwisko". Imię i nazwisko uzyskujemy za pomocą Graph API. Aby przetestować bot, możesz rozpocząć rozmowę z Twoją stroną, korzystając z facebook.com, aplikacji na komórkę Facebook lub korzystając z krótkiego adresu URL programu Messenger https://m.me/PAGE_USERNAME. Na Facebooku i komunikatorze znajdziesz stronę, szukając nazwy strony.
- const request = require('request');
- function sendMessage(event) {
- let sender = event.sender.id;
- let text = event.message.text;
- request({
- url: "https://graph.facebook.com/v2.6/" + sender,
- qs: {
- access_token: 'TWOJ_TOKEN',
- fields: "first_name,last_name"
- },
- method: "GET"
- }, function(error, response, body) {
- var greeting = "";
- if (error) {
- console.log("Error getting user's name: " + error);
- } else {
- var bodyObj = JSON.parse(body);
- name = bodyObj.first_name;
- last_name = bodyObj.last_name;
- greeting = "Witaj " + name +" "+last_name +". ";
- }
- send(sender, {text: greeting});
- });
- }
- // sends message to user
- function send(recipientId, message) {
- request({
- url: "https://graph.facebook.com/v2.6/me/messages",
- qs: {access_token: 'TWOJ_TOKEN'},
- method: "POST",
- json: {
- recipient: {id: recipientId},
- message: message,
- }
- }, function(error, response, body) {
- if (error) {
- console.log("Error sending message: " + response.error);
- }
- });
- }
