Internet

Come creare un bot di Facebook Messenger (Guida)

Come creare un bot di Facebook Messenger (Guida)

La funzione "robot di messaggistica" di Facebook non è una novità e esistono già molti fantastici robot. Tuttavia, le risorse su come costruire esattamente il tuo bot sono scarse e mancano di spiegazioni per le persone che non conoscono l'API del grafico di Facebook. I bot di Messenger ora richiedono anche l'utilizzo di un URL di richiamata webhook protetto da SSL (ne parleremo più avanti) e la configurazione di SSL non è per tutti e costa anche denaro.

In questo articolo, ti guiderò attraverso l'intero processo di creazione di un semplice bot di messaggistica di Facebook, perché la documentazione di Facebook è spiegata piuttosto male. Configureremo un'app cloud che utilizza il protocollo https, codificheremo il bot in Node.js (che è un javascript, linguaggio lato server), utilizzeremo git per inviare il codice all'applicazione cloud e lo testeremo su Facebook Messenger.

Bot di installazione

Avrai bisogno di Node installato sul tuo laptop. In caso contrario, vai al sito Web di Node per scaricarlo e installarlo.

Una volta terminato, puoi continuare con la configurazione del bot. Segui i passaggi seguenti:

1. Avvia Terminal.

2. È necessaria una directory separata per contenere il codice.

3. Successivamente, inizializzare l'applicazione Node.
npm init

4. Installa i pacchetti
npm installa la richiesta express del body-parser --save

5. Nel Finder, apri la directory "testbot"Che hai creato e trova il file denominato"package.json“; aprilo in un editor come Sublime Text.

6. In questo file, dobbiamo aggiungere una riga
"start": "node index.js"

7. Successivamente, crea un nuovo file in Sublime Text e inserisci il seguente codice al suo interno:

[js]

var express = require ('express');
var bodyParser = require ('body-parser');
var request = require ('richiesta');
var app = express ();

app.use (bodyParser.urlencoded (extended: false));
app.use (bodyParser.json ());
app.listen ((process.env.PORT || 3000));
app.get ('/', function (req, res)
res.send ('Questo è TestBot Server');
);
app.get ('/ webhook', function (req, res)
if (req.query ['hub.verify_token'] === 'testbot_verify_token')
res.send (req.query ['hub.challenge']);
altro
res.send ("Token di verifica non valido");

);

[/ js]

Salva questo file come index.js

Nota: Nella riga 13, il valore di "hub.verify_token" è impostato come "testbot_verify_token ", ricorda questo valore poiché verrà utilizzato durante la creazione del webhook in Facebook.

Crea repository Git

Ora che abbiamo impostato la gestione della richiamata del nostro bot, dobbiamo inviare il codice a Heroku. Per questo, dobbiamo creare un repository git nella nostra directory.

Nota: "Git" è un sistema di controllo della versione per file e codice software. Puoi leggere di più su Wikipedia.

Creare un repository git è facile e richiede solo un paio di comandi di Terminale.

Nota: Assicurati di essere all'interno del "testbot"Directory nel Terminale. Puoi farlo digitando il comando pwd nel terminale.

Segui questi passaggi per creare un repository git:

1. git init

2. git add .

3. git commit -m "Registra webhook di Facebook"

Imposta Heroku

Prima ancora di entrare nelle pagine degli sviluppatori di Facebook, abbiamo bisogno di un URL di richiamata con cui Facebook possa parlare. Questo URL deve utilizzare il protocollo https, il che significa che dobbiamo installare un certificato SSL sul nostro sito web; ma questa è una guida per principianti ai bot di messaggistica di Facebook, quindi non complichiamo le cose. Useremo Heroku per distribuire il nostro codice. Heroku ti fornisce URL https per le tue applicazioni e ha un piano gratuito che soddisfa le nostre richieste (molto basilari).

Vai al sito web di Heroku e registrati.

Nota: Nel campo che dice "Scegli la tua lingua di sviluppo principale", usa "Uso un'altra lingua".

Una volta che hai finito, installa il toolbelt Heroku per il tuo sistema operativo (Mac, per me) e installalo. Questo ti darà accesso a Heroku sul tuo terminale (o prompt dei comandi, su Windows).

Successivamente, creeremo un'app su Heroku, che conterrà l'intero codice per il nostro bot. Segui i passaggi seguenti:

1. Avvia Terminal

2. Digitare login di heroku

3. Digitare crea heroku

4. Ora puoi inviare il codice della tua app a Heroku
git push heroku master

5. Una volta fatto, la tua app è praticamente attiva e puoi visitare il link nel tuo browser per verificare che tutto funzioni correttamente. Dovrebbe aprire una pagina web che dice "Questo è TestBot Server".

Configurazione di Facebook

È ora di connettere il nostro bot a Facebook! Dovrai creare una nuova pagina Facebook o utilizzarne una esistente di tua proprietà. Ti mostrerò come procedere creando una nuova pagina Facebook.

1. Vai su Facebook e crea una nuova pagina.

2. I passaggi successivi mostrati da Facebook sono facoltativi e possono essere saltati.

3. Successivamente, vai al sito Web degli sviluppatori di Facebook.

4. Compila i dettagli per il tuo nome app e contatta l'indirizzo e-mail.

5. Verrai indirizzato alla dashboard della tua app. Nella barra laterale, vai a "+Aggiungi prodotti"E seleziona"Messaggero"Facendo clic sul pulsante"Iniziare"Pulsante.

6. Seleziona "Imposta webhook".

7. Compila i campi obbligatori, sostituendo l '"URL di richiamata" con l'URL dell'app Heroku, verifica il token con il token utilizzato nel file index.js e seleziona i seguenti campi di sottoscrizione:

Nota: Assicurati di aggiungere "/ webhook"All'URL di richiamata in modo che index.js esegua la funzione richiesta quando Facebook tenta di eseguire il ping dell'URL, può verificare il" token di verifica ".

8. Fare clic su "Verifica e salva".

9. Nella sezione "Generazione di token"Sezione, fare clic su"Seleziona una pagina"E seleziona la pagina che hai creato in precedenza.

Questo genererà un "Token di accesso alla pagina“, Salvalo da qualche parte; ne avrai bisogno più tardi.

10. Successivamente, dovrai eseguire una query POST sulla tua app, utilizzando il token di accesso alla pagina generato nell'ultimo passaggio. Questo può essere fatto facilmente nel Terminale. Basta eseguire il seguente comando, sostituendo PAGE_ACCESS_TOKEN con il token di accesso alla pagina che hai generato.

curl -X POST "https://graph.facebook.com/v2.6/me/subscripts_apps?access_token=PAGE_ACCESS_TOKEN"

Dovresti ricevere un "successo"Risposta nel terminale.

Altre impostazioni di Heroku

Sì, non abbiamo ancora finito. Non vicino.

1. Vai al sito web di Heroku e accedi con il tuo ID e-mail.

2. Individua la tua app nella "dashboard" e fai clic su di essa.

3. Accedi alla scheda Impostazioni.

4. Fare clic su "Reveal Config Vars"

5. Aggiungi PAGE_ACCESS_TOKEN come "config var"E fai clic su"Inserisci".

Codifica del bot effettivo

Ora che abbiamo finito con il lavoro grugnito, possiamo concentrarci su ciò che conta davvero: fare in modo che il bot risponda ai messaggi. Per iniziare, progetteremo solo un bot che faccia semplicemente eco ai messaggi che riceve. A quanto pare, questa semplice attività richiede una considerevole quantità di codice per funzionare.

1. Codificare l'ascoltatore di messaggi

Prima che il bot possa eseguire l'eco del messaggio, deve essere in grado di ascoltare i messaggi. Facciamolo prima.

Nel file index.js, aggiungi il codice seguente:

[js]

app.post ('/ webhook', function (req, res)
var events = req.body.entry [0] .messaging;
per (i = 0; i < events.length; i++)
var event = events [i];
if (event.message && event.message.text)
sendMessage (event.sender.id, text: "Echo:" + event.message.text);


res.sendStatus (200);
);

[/ js]

Quello che fa questa funzione è che controlla i messaggi ricevuti e poi controlla se c'è del testo nel messaggio. Se trova del testo nel messaggio ricevuto, chiama la funzione sendMessage (mostrata più avanti), passando l'ID del mittente e il testo da rispedire. È importante comprendere i seguenti valori e cosa significano:

2. Codifica della funzione sendMessage

Ora codifichiamo la funzione "sendMessage".

[js]

function sendMessage (recipientId, message)
richiesta(
url: "https://graph.facebook.com/v2.6/me/messages",
qs: access_token: process.env.PAGE_ACCESS_TOKEN,
metodo: "POST",
json:
destinatario: id: recipientId,
messaggio: messaggio,

, funzione (errore, risposta, corpo)
if (errore)
console.log ("Errore durante l'invio del messaggio:", errore);
altrimenti if (response.body.error)
console.log ("Errore:", response.body.error);

);
;

[/ js]

La funzione "sendMessage" accetta due parametri:

L'ID destinatario è necessario in modo che il messaggio possa essere indirizzato all'utente corretto.

Il messaggio è il testo effettivo che deve essere inviato nella risposta.

3. Invio delle modifiche a Heroku

Se hai completato i passaggi precedenti, il tuo bot dovrebbe essere in grado di riprodurre il testo ricevuto. Ma prima, devi inviare le modifiche all'applicazione ospitata su Heroku. Per fare ciò, segui i passaggi indicati di seguito:

1. Avvia Terminal.

2. Cambia directory nella tua directory testbot
cd testbot

3. Eseguire le seguenti operazioni:

4. Ora invia un messaggio alla tua pagina e il bot ti restituirà il messaggio.

Risposte condizionali aka Rendere il bot più intelligente

Possiamo utilizzare la corrispondenza del testo per consentire al nostro bot di messaggistica di Facebook di rispondere in base a determinate parole chiave speciali.

Per ottenere ciò, dobbiamo aggiungere un'altra funzione. Lo chiamo "risposte condizionali", ma puoi scegliere il nome che preferisci.

1. Codifica della funzione ConditionalResponses

[js]

function conditionalResponses (recipientId, text)
testo = testo || "";

var what = text.match (/ what / gi); // controlla se la stringa di testo contiene la parola "cosa"; ignora maiuscole e minuscole
var beebom = text.match (/ beebom / gi); // controlla se la stringa di testo contiene la parola "beebom"; ignora maiuscole e minuscole
var who = text.match (/ who / gi); // controlla se la stringa di testo contiene la parola "who"; ignora maiuscole e minuscole
var tu = text.match (/ tu / gi); // controlla se la stringa di testo contiene la parola "tu"; ignora maiuscole e minuscole

// se il testo contiene sia "cosa" che "beebom", fai questo:

if (cosa! = null &&; beebom! = null)
messaggio =
testo: "Beebom è un sito web che offre risorse tecnologiche. Benvenuto."

sendMessage (recipientId, message);
restituire vero;

// se il testo contiene sia "chi" e "tu", fai questo:
if (who! = null && you! = null)
messaggio =
testo: "Mi è stato chiesto di non discutere la mia identità online".

sendMessage (recipientId, message);
restituire vero;

// se nulla corrisponde, restituisce false per continuare l'esecuzione della funzione interna.
return false;
;

[/ js]

Nelle righe da 4 a 7, abbiamo definito delle variabili che dipendono dalla corrispondenza della stringa ricevuta con parole particolari. La parte migliore dell'utilizzo di "text.match ()" è che utilizza espressioni regolari (di solito chiamate regex, leggi di più qui.). È un bene per noi, perché questo significa che fintanto che anche una parte di una parola nel testo ricevuto corrisponde a una delle parole che abbiamo menzionato in text.match (), la variabile non sarà nulla. Ciò significa che se il messaggio ricevuto era "What's Beebom?", "Var what" e "var beebom" non saranno nulli, perché la parola "What's" contiene la parola "what". Quindi ci evita di creare dichiarazioni extra per ogni variazione in cui qualcuno potrebbe dire "Cosa".

2. Modifica del listener di messaggi

Dobbiamo anche modificare il Message Listener che abbiamo codificato, per assicurarci che cerchi di abbinare il testo ricevuto anche con la funzione "conditionalResponses".

[js]

app.post ('/ webhook', function (req, res)
var events = req.body.entry [0] .messaging;
per (i = 0; i < events.length; i++)
var event = events [i];
if (event.message && event.message.text)

// prima prova a verificare se il messaggio ricevuto è idoneo per la risposta condizionale.
if (! conditionalResponses (event.sender.id, event.message.text))

// in caso contrario, restituisce semplicemente il messaggio ricevuto al mittente.
sendMessage (event.sender.id, text: "Echo:" + event.message.text);



res.sendStatus (200);
);

[/ js]

I cambiamenti nell'ascoltatore potrebbero non sembrare molto drastici, ma i loro effetti lo sono sicuramente. Ora, l'ascoltatore cerca prima di rispondere con risposte condizionali e se non ci sono condizioni valide per il messaggio ricevuto, fa semplicemente eco al messaggio all'utente.

3. Invio delle modifiche a Heroku

Prima di poter provare le nuove funzionalità, dovrai inviare il codice aggiornato all'app ospitata su Heroku. Segui i passaggi seguenti per farlo:

1. Avvia Terminal.

2. Cambia directory nella tua directory testbot
cd testbot

3. Eseguire le seguenti operazioni:

4. Ora invia un messaggio alla tua pagina e il bot ti restituirà il messaggio.

Ancora più funzionalità

Il nostro bot ora risponde a una piccola serie di comandi con risposte piacevoli e ben strutturate. Ma non è ancora molto utile. Apportiamo altre modifiche al codice per rendere il nostro bot più "funzionale"Pezzo di software. Bene essere revamping molte funzioni, e aggiungendone un altro paio, quindi eccitati.

1. Modifica del listener di messaggi

Il nostro ascoltatore di messaggi, in questa fase, funziona perfettamente. Tuttavia, non è molto ben formattato e se dovessimo continuare ad aumentare le istruzioni if ​​annidate per aggiungere extra "controlli delle condizioni“, Diventerà presto brutto da vedere, difficile da capire e più lento nell'esecuzione. Non lo vogliamo, ora, vero? Facciamo alcune modifiche.

Nota: C'è una riga di codice nel listener di messaggi che legge "Res.sendStatus (200)", questa riga invia un codice di stato 200 a Facebook, dicendogli che la funzione è stata eseguita con successo. Secondo la documentazione di Facebook, Facebook attende un massimo di 20 secondi per ricevere uno stato di 200, prima di decidere che il messaggio non è andato a buon fine e interrompere l'esecuzione del codice.

Il nostro nuovo ascoltatore di messaggi ha questo aspetto. Noi usiamo il "res.sendStatus (200)”Per interrompere l'esecuzione della funzione non appena una condizione viene soddisfatta ed eseguita.

[js]

app.post ('/ webhook', function (req, res)
var events = req.body.entry [0] .messaging;
per (i = 0; i < events.length; i++)
var event = events [i];
if (event.message && event.message.text)

// prima controlla il testo del messaggio rispetto alle condizioni introResponse
if (introResponse (event.sender.id, event.message.text))
res.sendStatus (200);

// per mancanza di un nome migliore, ho chiamato questa nuova risposta: p; controlla questo dopo
altrimenti if (newResponse (event.sender.id, event.message.text))
res.sendStatus (200);

// altrimenti, ricalca semplicemente il messaggio originale
altro
// sostituisce echo con un elenco di comandi valido
sendMessage (event.sender.id, text: "Echo:" + event.message.text);



res.sendStatus (200);
);

[/ js]

2. Codifica della funzione newResponse

Il nostro listener di messaggi ora controlla il testo del messaggio rispetto a un insieme di condizioni in "NewResponse" anche, ma prima dobbiamo codificare la funzione newResponse. Useremo questa funzione per verificare se l'utente ha richiesto suggerimenti di articoli dal sito web di Beebom, cerca la query termine sul sito web e presentare il collegamento all'utente. Ancora una volta, utilizzeremo espressioni regolari per abbinare il testo a parole chiave specifiche.

[js]

function newResponse (recipientId, text)
testo = testo || "";
var suggest = text.match (/ suggest / gi);
var random = text.match (/ random / gi);
var articolo = text.match (/ articolo / gi);
var iphone = text.match (/ iphone / gi);
var android = text.match (/ android / gi);
var mac = text.match (/ mac / gi);
var browser = text.match (/ browser / gi);
var vpn = text.match (/ vpn / gi);

// controlla se l'utente sta chiedendo suggerimenti per l'articolo
if (suggest! = null && article! = null)
var query = "";
// se vengono richiesti suggerimenti sugli articoli, controllare l'argomento che l'utente sta cercando
if (android! = null)
query = "Android";
altrimenti se (mac! = null)
query = "Mac";
altrimenti se (iphone! = null)
query = "iPhone";
altrimenti se (browser! = null)
query = "Browser";
altrimenti se (vpn! = null)
query = "VPN";

sendButtonMessage (recipientId, query);
restituire vero

return false;
;

[/ js]

Stiamo usando un'altra funzione personalizzata chiamata "SendButtonMessage" per inviare il messaggio nel caso in cui l'utente stia chiedendo suggerimenti per l'articolo. Lo creeremo in seguito.

3. Codificare la funzione sendButtonMessage

La funzione sendButtonMessage accetta due parametri, a ID destinatario e a query. L'ID del destinatario viene utilizzato per identificare l'utente a cui deve essere inviato il messaggio e la query viene utilizzata per identificare l'argomento su cui l'utente desidera suggerimenti sull'articolo.

[js]

function sendButtonMessage (recipientId, query)
var messageData =
destinatario:
id: recipientId
,
Messaggio:
allegato:
tipo: "modello",
payload:
template_type: "pulsante",
testo: "Questo è quello che ho trovato per" + query,
pulsanti: [
tipo: "web_url",
url: "http://www.beebom.com/?s="+query,
titolo: "Beebom:" + query
]



;

callSendAPI (messageData);

[/ js]

Ancora una volta, stiamo usando una funzione personalizzata; questa volta per inviare all'utente il messaggio finale, con i link agli articoli. La funzione è, per molti versi, simile a "invia messaggio" funzione che abbiamo codificato in precedenza, ma è più generica nel modo in cui prende i dati del messaggio, che ci si adatta, perché i nostri dati del messaggio cambiano con la query che l'utente fa.

4. Codifica della funzione callSendAPI

Il "CallSendAPI" funzione accetta un singolo parametro, il "MessageData". Questo parametro contiene tutti i dati del messaggio, formattati correttamente secondo le regole di Facebook, in modo che il messenger possa visualizzarli correttamente all'utente.

[js]

funzione callSendAPI (messageData)
richiesta(
uri: "https://graph.facebook.com/v2.6/me/messages",
qs: access_token: process.env.PAGE_ACCESS_TOKEN,
metodo: "POST",
json: messageData

, funzione (errore, risposta, corpo)
if (! error && response.statusCode == 200)
var recipientId = body.recipient_id;
var messageId = body.message_id;

console.log ("Messaggio generico inviato con ID% s al destinatario% s con successo",
messageId, recipientId);
altro
console.error ("Impossibile inviare il messaggio.");
console.error (risposta);
console.error (errore);

);

[/ js]

5. Invio delle modifiche a Heroku

Siamo al passaggio finale per rendere attivo il nostro bot aggiornato. Dobbiamo solo inviare tutte le modifiche al codice a Heroku. Il processo è lo stesso di prima ed è descritto di seguito:

1. Avvia Terminal.

2. Modificare la directory in testbot directory.
cd testbot

3. Procedi come segue:

4. Ora invia un messaggio del tipo "Suggerisci un articolo su Android", o "Beebom, suggeriscimi un articolo sull'argomento Android"; e il bot invierà un messaggio ben formattato con un collegamento che puoi toccare per aprire gli articoli relativi alla tua query.

VEDERE ANCHE: 16 consigli e trucchi per Facebook Messenger che dovresti sapere

Scava più a fondo

Ora che sai come iniziare a sviluppare i bot di messaggistica di Facebook, consulta la documentazione di Facebook su come sviluppare i bot di messaggistica di Facebook. Anche se la documentazione non va bene per i principianti, non sei più un principiante. Dovresti controllare la documentazione ufficiale e cercare di capire come rendere il tuo bot ancora più intelligente. Teaser: puoi inviare messaggi anche con immagini e pulsanti! È anche possibile utilizzare servizi come Wit.ai e Api.ai per codificare il tuo bot e quindi integrarlo con Facebook, ma nei miei deboli tentativi di utilizzare quei servizi, Wit.ai non funziona molto bene e Api.ai ha una forte curva di apprendimento per i principianti.

Hai mai sviluppato un bot di messaggistica di Facebook? In caso affermativo, come hai proceduto a svilupparlo e cosa può fare? Hai utilizzato servizi come Wit.ai e Api.ai per creare il tuo bot? Se non hai mai provato a programmare un bot, vai a sviluppare il tuo bot di messaggistica di Facebook, rendilo più intelligente e migliore e facci sapere la tua esperienza nei commenti qui sotto.

Le principali ricerche di Bing del 2012 in varie categorie [Elenco]
Stiamo per completare l'anno più pubblicizzato di sempre, il 2012. Sono successe molte cose negli ultimi 11 mesi ed è il momento perfetto per dare un...
Pacchetti di hosting in regalo dal Regno Unito Hosting del valore di $ 240
È passato un bel po 'di tempo dall'ultima volta che abbiamo ospitato un giveaway sul nostro blog e ci dà molto fastidio. Quindi, oggi, terminiamo l'at...
Come vedere chi visualizza il tuo profilo Instagram
Instagram è una delle piattaforme di social media più utilizzate in questi giorni, con oltre un miliardo di utenti attivi mensilmente che accedono quo...