Internet

Så här skapar du en Facebook Messenger Bot (guide)

Så här skapar du en Facebook Messenger Bot (guide)

Facebooks "messenger bots" -funktion är inget nytt, och det finns redan många fantastiska bots. Resurserna för exakt hur man bygger en helt egen bot är dock knappa och saknar förklaringar för personer som inte har använt Facebook Graph API. Messenger-robotar kräver nu också att du använder en SSL-säker webb-återuppringnings-URL (mer om det senare), och att konfigurera SSL är inte för alla och kostar också pengar.

I den här artikeln går jag igenom hela processen för att skapa en enkel Facebook messenger-bot, eftersom Facebooks egen dokumentation är ganska dåligt förklarad. Vi kommer att ställa in en molnapp som använder https-protokoll, koden bot i Node.js (som är ett javascript, serverspråk), använda git för att skicka koden till molnapplikationen och testa den på Facebook Messenger.

Inställning Bot

Du behöver Node installerad på din bärbara dator. Om du inte gör det, gå till Node-webbplatsen för att ladda ner och installera den.

När du är klar kan du fortsätta med installationen för bot. Följ stegen nedan:

1. Starta terminalen.

2. Du behöver en separat katalog för att hålla din kod.

3. Initiera sedan Node-applikationen.
npm init

4. Installera paket
npm installera express body-parser-begäran - spara

5. I Finder, öppna katalogen “testbot"Som du skapade och hitta filen med namnet"package.json“; öppna detta i en redaktör som Sublime Text.

6. I den här filen måste vi lägga till en rad
"start": "node index.js"

7. Skapa sedan en ny fil i sublim text och lägg in följande kod i den:

[js]

var express = kräver ('express');
var bodyParser = kräver ('body-parser');
var begäran = kräver ('begäran');
var app = express ();

app.use (bodyParser.urlencoded (utvidgat: falskt));
app.use (bodyParser.json ());
app.listen ((process.env.PORT || 3000));
app.get ('/', funktion (req, res)
res.send ('Detta är TestBot Server');
);
app.get ('/ webhook', funktion (req, res)
if (req.query ['hub.verify_token'] === 'testbot_verify_token')
res.send (req.query ['hub.challenge']);
annat
res.send ('Ogiltig verifieringstoken');

);

[/ js]

Spara den här filen som index.js

Notera: I rad 13 är värdet för 'hub.verify_token' inställt som 'testbot_verify_token ', kom ihåg detta värde eftersom det kommer att användas när du skapar webbhook på Facebook.

Skapa Git Repository

Nu när vi har ställt in vår bots återuppringningshantering måste vi trycka koden till Heroku. För det måste vi skapa ett git-arkiv i vår katalog.

Notera: “Git” är ett versionskontrollsystem för filer och programvarukod. Du kan läsa mer om det på Wikipedia.

Att skapa ett git-arkiv är enkelt och tar bara ett par Terminal-kommandon.

Notera: Se till att du är inne itestbot”-Katalogen i terminalen. Du kan göra detta genom att skriva kommandot pwd in i terminalen.

Följ dessa steg för att skapa ett git-arkiv:

1. git init

2. git add .

3. git commit -m "Registrera Facebook Webhook"

Ställ in Heroku

Innan vi ens går in på Facebooks utvecklingssidor behöver vi en webbadress för återuppringning som Facebook kan prata med. Denna URL måste använda https-protokoll, vilket innebär att vi måste installera ett SSL-certifikat på vår webbplats; men det här är en nybörjarguide för Facebook messenger-bots, så låt oss inte komplicera saker. Vi använder Heroku för att distribuera vår kod. Heroku ger dig https-webbadresser för dina applikationer och har en gratis plan som uppfyller våra (mycket grundläggande) krav.

Gå till Heroku-webbplatsen och registrera dig själv.

Notera: I fältet som säger "Välj ditt primära utvecklingsspråk", använd "Jag använder ett annat språk".

När du är klar med det installerar du Heroku-verktygsbältet för ditt operativsystem (Mac, för mig) och installerar det. Detta ger dig tillgång till Heroku på din terminal (eller kommandotolken, i Windows).

Därefter skapar vi en app på Heroku som innehåller hela koden för vår bot. Följ stegen nedan:

1. Starta terminalen

2. Skriv heroku-inloggning

3. Skriv heroku skapa

4. Nu kan du trycka på din appkod till Heroku
git push heroku master

5. När detta är klart är din app i princip live och du kan besöka länken i din webbläsare för att kontrollera att allt fungerar bra. Den ska öppna en webbsida som säger ”Det här är TestBot Server“.

Facebook-inställning

Det är dags att ansluta vår bot till Facebook! Du måste skapa en ny Facebook-sida eller använda en befintlig som du äger. Jag visar dig hur du går vidare genom att skapa en ny Facebook-sida.

1. Gå till Facebook och skapa en ny sida.

2. Nästa steg som Facebook visar är valfria och kan hoppas över.

3. Gå sedan vidare till Facebook-utvecklarens webbplats.

4. Fyll i uppgifterna för ditt appnamn och din e-postadress.

5. Du kommer till instrumentpanelen för din app. I sidofältet navigerar du till “+Lägg till produkterOch välj “budbärare”Genom att klicka på”Komma igång" knapp.

6. Välj “Ställ in Webhooks“.

7. Fyll i de obligatoriska fälten och ersätt ”URL för återuppringning” med URL för Heroku-appen, verifiera token med den token som används i index.js-filen och välj följande prenumerationsfält:

Notera: Se till att du lägger till ”/ webbhook”Till Callback URL så att index.js utför den funktion som krävs när Facebook försöker pinga URL: en kan den verifiera“ Verify Token ”.

8. Klicka på “Verifiera och spara“.

9. I ”Token Generation”, Klicka på“Välj en sida”Och välj sidan du skapade tidigare.

Detta kommer att generera en ”Sidåtkomsttoken”, Spara det någonstans; du kommer att behöva det senare.

10. Därefter måste du göra en POST-fråga till din app med hjälp av den sidåtkomsttoken som genererades i det sista steget. Detta kan enkelt göras i terminalen. Kör bara följande kommando, ersätter PAGE_ACCESS_TOKEN med den sidåtkomsttoken du genererade.

curl -X POST “https://graph.facebook.com/v2.6/me/subscribed_apps?access_token=PAGE_ACCESS_TOKEN”

Du bör få ett “Framgång”Svar i terminalen.

Mer Heroku-inställning

Ja, vi är inte färdiga än. Inte nära.

1. Gå till Heroku-webbplatsen och logga in med ditt e-post-ID.

2. Leta reda på din app i instrumentpanelen och klicka på den.

3. Gå till fliken Inställningar.

4. Klicka på “Avslöja Config Vars

5. Lägg till PAGE_ACCESS_TOKEN som ett “config var“Och klicka på“Lägg till“.

Kodning av den faktiska botten

Nu när vi är färdiga med gruntarbetet kan vi fokusera på det som verkligen betyder: att låta boten svara på meddelanden. Till att börja med designar vi bara en bot som helt enkelt ekar meddelandena den får. Som det visar sig kräver denna enkla uppgift en betydande bit kod för att fungera.

1. Kodning av meddelandeavlyssnaren

Innan boten kan återge meddelandet måste den kunna lyssna efter meddelanden. Låt oss göra det först.

Lägg till följande kod i filen index.js:

[js]

app.post ('/ webhook', funktion (req, res)
var events = req.body.entry [0] .messaging;
för (i = 0; i < events.length; i++)
var händelse = händelser [i];
if (event.message && event.message.text)
sendMessage (event.sender.id, text: "Echo:" + event.message.text);


res.sendStatus (200);
);

[/ js]

Vad den här funktionen gör är att den söker efter mottagna meddelanden och sedan kontrollerar om det finns text i meddelandet. Om den hittar text i det mottagna meddelandet anropar den funktionen SendMessage (visas senare) och skickar avsändarens ID och texten som ska skickas tillbaka. Det är viktigt att förstå följande värden och vad de betyder:

2. Kodning av sendMessage-funktionen

Låter oss koda “sendMessage” -funktionen nu.

[js]

funktion sendMessage (recipientId, meddelande)
begäran(
url: 'https://graph.facebook.com/v2.6/me/messages',
qs: access_token: process.env.PAGE_ACCESS_TOKEN,
metod: 'POST',
json:
mottagare: id: recipientId,
meddelande: meddelande,

, funktion (fel, svar, kropp)
om (fel)
console.log ('Fel vid sändning av meddelande:', fel);
annat om (response.body.error)
console.log ('Error:', response.body.error);

);
;

[/ js]

Funktionen “sendMessage” tar två parametrar:

Mottagarens ID krävs så att meddelandet kan adresseras till rätt användare.

Meddelandet är den faktiska texten som ska skickas i svaret.

3. Att driva ändringarna till Heroku

Om du har slutfört stegen ovan bör din bot kunna återge den mottagna texten. Men först måste du trycka på ändringarna i applikationen som finns på Heroku. För att göra detta, följ stegen nedan:

1. Starta terminalen.

2. Byt katalog till din testbottkatalog
cd testbot

3. Gör följande steg:

4. Skicka nu ett meddelande till din sida, och botten kommer att återge meddelandet till dig.

Villkorliga svar aka att göra botten smartare

Vi kan använda textmatchning för att låta vår Facebook messenger-bot svara enligt vissa speciella nyckelord.

För att uppnå detta måste vi lägga till en annan funktion. Jag heter det "villkorligt svar", men du kan välja vilket namn du föredrar.

1. Kodning av funktionen conditionalResponses

[js]

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

var vad = text.match (/ vad / gi); // kontrollera om textsträngen innehåller ordet "vad"; ignorera fall
var beebom = text.match (/ beebom / gi); // kontrollera om textsträngen innehåller ordet "beebom"; ignorera fall
var vem = text.match (/ vem / gi); // kontrollera om textsträngen innehåller ordet "vem"; ignorera fall
var du = text.match (/ du / gi); // kontrollera om textsträngen innehåller ordet "du"; ignorera fall

// om texten innehåller både "vad" och "beebom", gör så här:

if (what! = null &&; beebom! = null)
meddelande =
text: "Beebom är en webbplats som erbjuder tekniska resurser. Välkommen."

sendMessage (recipientId, meddelande);
återvänd sant;

// om texten innehåller både "vem" och "du", gör så här:
om (vem! = null && du! = null)
meddelande =
text: "Jag har blivit ombedd att inte diskutera min identitet online."

sendMessage (recipientId, meddelande);
återvänd sant;

// om inget matchade, returnera falskt för att fortsätta utföra den inre funktionen.
returnera falsk;
;

[/ js]

I raderna 4 till 7 har vi definierat variabler beroende på att matcha den mottagna strängen mot vissa ord. Det bästa med att använda “text.match ()” är att den använder Regular Expressions (vanligtvis kallad regex, läs mer här.). Det är bra för oss, för det betyder att så länge även en del av ett ord i den mottagna texten matchar något av orden vi nämnde i text.match (), kommer variabeln inte att vara noll. Detta betyder att om det mottagna meddelandet var "Vad är Beebom?", "Var vad" och "var beebom" kommer inte att vara null, eftersom ordet "Vad är" innehåller ordet "vad". Så vi räddas från att skapa extra uttalanden för varje variant där någon kanske säger "Vad".

2. Redigera meddelandelyssnaren

Vi måste också redigera den meddelandeavlyssnare som vi kodade för att säkerställa att den försöker matcha den mottagna texten med funktionen "villkorliga svar" också.

[js]

app.post ('/ webhook', funktion (req, res)
var events = req.body.entry [0] .messaging;
för (i = 0; i < events.length; i++)
var händelse = händelser [i];
if (event.message && event.message.text)

// försök först att kontrollera om det mottagna meddelandet kvalificerar sig för villkorligt svar.
if (! conditionalResponses (event.sender.id, event.message.text))

// om den inte gör det, återge bara det mottagna meddelandet till avsändaren.
sendMessage (event.sender.id, text: "Echo:" + event.message.text);



res.sendStatus (200);
);

[/ js]

Förändringarna i lyssnaren kanske inte ser väldigt drastiska ut, men deras effekter är säker. Nu försöker lyssnaren först svara med villkorliga svar, och om det inte finns något giltigt villkor för det mottagna meddelandet, upprepar det helt enkelt meddelandet tillbaka till användaren.

3. Att driva ändringarna till Heroku

Innan du kan testa de nya funktionerna måste du skicka den uppdaterade koden till appen som finns på Heroku. Följ stegen nedan för att göra detta:

1. Starta terminalen.

2. Byt katalog till din testbottkatalog
cd testbot

3. Gör följande steg:

4. Skicka nu ett meddelande till din sida, och botten kommer att återge meddelandet till dig.

Ännu mer funktionalitet

Vår bot svarar nu på en liten uppsättning kommandon i fina, välstrukturerade svar. Men det är fortfarande inte särskilt användbart. Låt oss göra några fler ändringar i koden för att göra vår bot till en mer “funktionell”Programvara. Väl vara modernisering av många funktioner, och lägga till ett par till, så bli upphetsad.

1. Redigera meddelandeavlyssnaren

Vårt budskap lyssnare, i detta skede, fungerar bara ok. Det är dock inte särskilt snyggt formaterat och om vi skulle fortsätta öka de kapslade if uttalandena för att lägga till extra “tillståndskontroller”, Det blir snabbt fult att se på, svårt att förstå och långsammare vid utförandet. Vi vill inte det nu, eller hur? Låt oss göra några ändringar.

Notera: Det finns en kodrad i lyssnaren som läser “Res.sendStatus (200)”, den här raden skickar en status 200-kod till Facebook och berättar att funktionen har lyckats. Enligt Facebooks dokumentation väntar Facebook i högst 20 sekunder på att få en 200-status innan den beslutar att meddelandet inte gick igenom och stoppar körningen av koden..

Vår nya budskaplyssnare ser ut så här. Vi använder "res.sendStatus (200)”Kommando för att stoppa körningen av funktionen så snart ett villkor matchas och körs.

[js]

app.post ('/ webhook', funktion (req, res)
var events = req.body.entry [0] .messaging;
för (i = 0; i < events.length; i++)
var händelse = händelser [i];
if (event.message && event.message.text)

// först kontrollera meddelandetexten mot introResponse-villkor
if (introResponse (event.sender.id, event.message.text))
res.sendStatus (200);

// i avsaknad av ett bättre namn kallade jag det här nya Svaret: p; kolla här nästa
annars om (newResponse (event.sender.id, event.message.text))
res.sendStatus (200);

// annars, bara eka tillbaka det ursprungliga meddelandet
annat
// ersätt ekot med en giltig kommandolista
sendMessage (event.sender.id, text: "Echo:" + event.message.text);



res.sendStatus (200);
);

[/ js]

2. Kodning av newResponse-funktionen

Vår meddelandelyssnare kontrollerar nu meddelandetexten mot en uppsättning villkor i “NewResponse” också, men först måste vi koda newResponse-funktionen. Vi använder den här funktionen för att kontrollera om användaren bad om det artikelförslag från webbplatsen Beebom, sök i frågan term på webbplatsen, och presentera länken till användaren. Återigen kommer vi att använda reguljära uttryck för att matcha text med specifika nyckelord.

[js]

funktion newResponse (recipientId, text)
text = text || "";
var suggest = text.match (/ suggest / gi);
var random = text.match (/ random / gi);
var artikel = text.match (/ artikel / gi);
var iphone = text.match (/ iphone / gi);
var android = text.match (/ android / gi);
var mac = text.match (/ mac / gi);
var webbläsare = text.match (/ webbläsare / gi);
var vpn = text.match (/ vpn / gi);

// kontrollera om användaren alls frågar efter artikelförslag
if (föreslå! = null && artikel! = null)
var fråga = "";
// om artikelförslag ifrågasätts, kontrollera ämnet användaren letar efter
om (android! = null)
fråga = "Android";
annat om (mac! = null)
fråga = "Mac";
annat om (iphone! = null)
fråga = "iPhone";
annat om (webbläsare! = null)
fråga = "Webbläsare";
annat om (vpn! = null)
fråga = "VPN";

sendButtonMessage (recipientId, fråga);
återvänd sant

returnera falsk;
;

[/ js]

Vi använder en annan anpassad funktion som heter “SendButtonMessage” att skicka meddelandet om användaren ber om artikelförslag. Vi kommer att skapa detta härnäst.

3. Kodning av funktionen SendButtonMessage

SendButtonMessage-funktionen tar två parametrar, a mottagar-ID och a fråga. Mottagarens ID används för att identifiera användaren som meddelandet ska skickas till och frågan används för att identifiera ämnet som användaren vill ha artikelförslag på..

[js]

funktion sendButtonMessage (recipientId, fråga)
var messageData =
mottagare:
id: recipientId
,
meddelande:
anknytning:
typ: "mall",
nyttolast:
template_type: "knapp",
text: "Det här är vad jag hittade för" + fråga,
knappar: [
typ: "web_url",
url: "http://www.beebom.com/?s="+query,
title: "Beebom:" + fråga
]



;

callSendAPI (meddelandedata);

[/ js]

Återigen använder vi en anpassad funktion; den här gången för att skicka det sista meddelandet med artikellänkarna till användaren. Funktionen liknar på många sätt den "skicka meddelande" funktion vi kodade tidigare, men är mer generisk på det sätt som den tar meddelandedata, vilket passar oss, eftersom vår meddelandedata ändras med den fråga som användaren gör.

4. Kodning av callSendAPI-funktionen

De “CallSendAPI” funktionen tar en enda parameter, “Meddelandedata”. Denna parameter innehåller hela meddelandedata, formaterat ordentligt enligt Facebook-regler, så att budbäraren kan visa det ordentligt för användaren.

[js]

funktion callSendAPI (messageData)
begäran(
uri: 'https://graph.facebook.com/v2.6/me/messages',
qs: access_token: process.env.PAGE_ACCESS_TOKEN,
metod: 'POST',
json: messageData

, funktion (fel, svar, kropp)
if (! error && response.statusCode == 200)
var recipientId = body.recipient_id;
var messageId = body.message_id;

console.log ("Generiskt meddelande skickades med id% s till mottagaren% s",
messageId, recipientId);
annat
console.error ("Det går inte att skicka meddelande.");
console.error (svar);
console.error (fel);

);

[/ js]

5. Att driva ändringarna till Heroku

Vi är i sista steget mot att göra vår uppgraderade bot live. Vi behöver bara trycka på alla kodändringar till Heroku. Processen är densamma som tidigare och beskrivs nedan:

1. Starta terminalen.

2. Byt katalog till testbot katalog.
cd testbot

3. Gör följande:

4. Skicka nu ett meddelande som "Föreslå en artikel på Android" eller "Beebom, föreslå mig vilken artikel som helst om ämnet Android"; och boten kommer att skicka ett snyggt formaterat meddelande med en länk som du kan trycka på för att öppna artiklarna relaterade till din fråga.

SE OCH: 16 Facebook Messenger-tips och tricks du borde veta

Gräv djupare

Nu när du vet hur du kommer igång med att utveckla Facebook messenger-bots, gå igenom Facebook-dokumentationen om hur du utvecklar Facebook messenger-bots. Även om dokumentationen inte är bra för nybörjare är du inte nybörjare längre. Du bör kolla in den officiella dokumentationen och försöka ta reda på hur du kan göra din bot ännu smartare. Teaser: Du kan också skicka meddelanden med bilder och knappar! Det är också möjligt att använda tjänster som Wit.ai och Api.ai för att koda din bot och sedan integrera den med Facebook, men i mina svaga försök att använda dessa tjänster fungerar Wit.ai inte så bra, och Api.ai har en skarp inlärningskurva för nybörjare.

Har du någonsin utvecklat en Facebook messenger bot? Om du har, hur började du utveckla det och vad kan det göra? Använde du tjänster som Wit.ai och Api.ai för att skapa din bot? Om du aldrig har testat att koda en bot, gå och utveckla din egen Facebook messenger-bot, gör den smartare och bättre och låt oss veta om din upplevelse i kommentarerna nedan.

Hur Windows 8 Startmeny Alternativ
Windows 8 Startmeny Alternativ
Om du har svårt att använda Windows 8 skrivbordsläge saknar du alltid den klassiska Windows-logotypen längst ner till vänster. Sedan här några Window...
Hur Så här tar du bort Instagram-konto
Så här tar du bort Instagram-konto
Instagram är ett utmärkt ställe för att dela och upptäcka bilder på de saker du älskar. Trots att Facebook ägs har tjänsten hittills varit fri från in...
Hur Så här migrerar du Windows 10 till en ny SSD
Så här migrerar du Windows 10 till en ny SSD
Uppgradering till en SSD (Solid State Drive) är den bästa uppgraderingen du kan ge till din dator. Oavsett om du har en åldrande maskin som saktar ner...