Internett

Hvordan lage en Facebook Messenger Bot (guide)

Hvordan lage en Facebook Messenger Bot (guide)

Facebooks "messenger bots" -funksjon er ikke noe nytt, og mange fantastiske bots eksisterer allerede. Ressursene for nøyaktig hvordan du bygger din egen bot er imidlertid knappe, og mangler forklaring for folk som er nye på Facebook Graph API. Messenger-roboter krever nå også at du bruker en SSL-sikret webhook-tilbakekallings-URL (mer om det senere), og å sette opp SSL er ikke for alle, og koster også penger.

I denne artikkelen vil jeg gå gjennom hele prosessen med å lage en enkel Facebook messenger-bot, fordi Facebooks egen dokumentasjon er ganske dårlig forklart. Vi vil sette opp en sky-app som bruker https-protokoll, kode bot i Node.js (som er et javascript, serverspråk), bruke git til å skyve koden til skyapplikasjonen, og teste den ut på Facebook Messenger.

Oppsett Bot

Du trenger Node installert på den bærbare datamaskinen. Hvis du ikke gjør det, kan du gå til Node-nettstedet for å laste ned og installere det.

Når du er ferdig, kan du fortsette med oppsettet for boten. Følg trinnene nedenfor:

1. Start terminalen.

2. Du trenger en egen katalog for å holde koden.

3. Initialiser deretter Node-applikasjonen.
npm init

4. Installer pakker
npm installer ekspress body-parser-forespørsel - lagre

5. I Finder åpner du katalogen “testbot”Du opprettet, og finn filen som heter“pakke.json“; åpne dette i en redaktør som Sublime Text.

6. I denne filen må vi legge til en linje
"start": "node index.js"

7. Deretter oppretter du en ny fil i Sublime Text, og legger inn følgende kode i den:

[js]

var express = krever ('express');
var bodyParser = krever ('body-parser');
var forespørsel = krever ('forespørsel');
var app = express ();

app.use (bodyParser.urlencoded (utvidet: falsk));
app.use (bodyParser.json ());
app.listen ((prosess.env.PORT || 3000));
app.get ('/', funksjon (req, res)
res.send ('Dette er TestBot Server');
);
app.get ('/ webhook', funksjon (req, res)
hvis (req.query ['hub.verify_token'] === 'testbot_verify_token')
res.send (req.query ['hub.challenge']);
annet
res.send ('Ugyldig bekreft token');

);

[/ js]

Lagre denne filen som index.js

Merk: I linje 13 er verdien til 'hub.verify_token' satt til 'testbot_verify_token ', husk denne verdien da den vil bli brukt når du oppretter webhook på Facebook.

Lag Git Repository

Nå som vi har satt opp vår bots tilbakeringingshåndtering, må vi skyve koden til Heroku. For det må vi lage et git-arkiv i katalogen vår.

Merk: “Git” er et versjonskontrollsystem for filer og programvarekode. Du kan lese mer om det på Wikipedia.

Å lage et git-arkiv er enkelt, og tar bare et par Terminal-kommandoer.

Merk: Forsikre deg om at du er inne itestbot”-Katalogen i terminalen. Du kan gjøre dette ved å skrive kommandoen pwd inn i terminalen.

Følg disse trinnene for å opprette et git-arkiv:

1. git init

2. git add .

3. git commit -m "Registrer Facebook Webhook"

Sett opp Heroku

Før vi til og med går inn på Facebooks utviklersider, trenger vi en tilbakeringings-URL som Facebook kan snakke med. Denne URL-adressen må bruke https-protokoll, som betyr at vi må installere et SSL-sertifikat på nettstedet vårt; men dette er en nybegynnerveiledning for Facebook messenger-bots, så la oss ikke komplisere ting. Vi bruker Heroku til å distribuere koden vår. Heroku gir deg https-URLer for applikasjonene dine og har en gratis plan som oppfyller våre (veldig grunnleggende) krav.

Gå til Heroku-nettstedet og registrer deg selv.

Merk: I feltet som sier "Velg ditt primære utviklingsspråk", bruk "Jeg bruker et annet språk".

Når du er ferdig med det, installerer du Heroku verktøybelte for operativsystemet ditt (Mac, for meg) og installerer det. Dette vil gi deg tilgang til Heroku på terminalen din (eller ledeteksten, på Windows).

Deretter oppretter vi en app på Heroku, som inneholder hele koden for bot. Følg trinnene nedenfor:

1. Start terminalen

2. Skriv inn heroku-pålogging

3. Skriv inn heroku lage

4. Nå kan du skyve appkoden din til Heroku
git push heroku master

5. Når dette er gjort, er appen din i utgangspunktet live, og du kan gå til lenken i nettleseren din for å sjekke at alt fungerer bra. Den skal åpne en webside som sier “Dette er TestBot Server“.

Facebook-oppsett

Det er på tide å koble bot til Facebook! Du må opprette en ny Facebook-side eller bruke en eksisterende du eier. Jeg viser deg hvordan du fortsetter ved å opprette en ny Facebook-side.

1. Gå til Facebook og opprett en ny side.

2. De neste trinnene som Facebook viser er valgfrie, og kan hoppes over.

3. Gå deretter videre til Facebook-utviklerens nettsted.

4. Fyll ut detaljene for appnavnet og e-postadressen til kontakten.

5. Du blir ført til dashbordet for appen din. I sidefeltet navigerer du til “+Legg til produkterOg velg “budbringer”Ved å klikke på“Kom i gang”-Knappen.

6. Velg “Konfigurer Webhooks“.

7. Fyll ut de påkrevde feltene, erstatt “Callback URL” med URLen til Heroku-appen, Bekreft token med tokenet som brukes i index.js-filen, og velg følgende abonnementsfelt:

Merk: Sørg for at du legger til “/ webhook”Til URL-en for tilbakeringing slik at index.js utfører den nødvendige funksjonen når Facebook prøver å pinge URL-en, kan den bekrefte“ Verify Token ”.

8. Klikk på “Bekreft og lagre“.

9. I “Token Generation”-Delen, klikk på“Velg en side”Og velg siden du opprettet tidligere.

Dette vil generere en “Sidetilgangstoken“, Lagre det et sted; du trenger det senere.

10. Deretter må du lage et POST-spørsmål til appen din ved å bruke sidetilgangstokenet som ble generert i det siste trinnet. Dette kan enkelt gjøres i terminalen. Bare kjør følgende kommando, erstatter PAGE_ACCESS_TOKEN med sidetilgangstokenet du genererte.

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

Du bør motta ensuksess”Svar i terminalen.

Mer Heroku-oppsett

Ja, vi er ikke ferdige ennå. Ikke i nærheten.

1. Gå til Heroku-nettstedet og logg inn med e-post-ID-en din.

2. Finn appen din i "dashbordet" og klikk på den.

3. Naviger til Innstillinger-fanen.

4. Klikk på “Avslør Config Vars

5. Legg til PAGE_ACCESS_TOKEN som en “config var“, Og klikk“Legge til“.

Koding av den faktiske bot

Nå som vi er ferdige med gruntarbeidet, kan vi fokusere på det som virkelig betyr noe: å få boten til å svare på meldinger. For å begynne med vil vi bare designe en bot som bare ekko meldingene den mottar. Som det viser seg, krever denne enkle oppgaven en betydelig bit kode for å fungere.

1. Koding av meldingslytteren

Før boten kan ekko tilbake meldingen, må den kunne lytte etter meldinger. La oss gjøre det først.

I index.js-filen legger du til følgende kode:

[js]

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


res.sendStatus (200);
);

[/ js]

Hva denne funksjonen gjør, er at den ser etter mottatte meldinger, og deretter sjekker om det er tekst i meldingen. Hvis den finner tekst i den mottatte meldingen, ringer den sendMessage (vises senere) -funksjonen, og sender avsenderens ID og teksten som skal sendes tilbake. Det er viktig å forstå følgende verdier og hva de betyr:

2. Koding av sendMessage-funksjonen

Lar kode “sendMessage” -funksjonen nå.

[js]

funksjon sendMessage (recipientId, melding)
be om(
url: 'https://graph.facebook.com/v2.6/me/messages',
qs: access_token: process.env.PAGE_ACCESS_TOKEN,
metode: 'POST',
json:
mottaker: id: recipientId,
melding: melding,

, funksjon (feil, respons, kropp)
hvis (feil)
console.log ('Feil ved sending av melding:', feil);
annet hvis (respons.body.error)
console.log ('Feil:', response.body.error);

);
;

[/ js]

“SendMessage” -funksjonen tar to parametere:

Mottaker-ID kreves slik at meldingen kan adresseres til riktig bruker.

Meldingen er selve teksten som skal sendes i svaret.

3. Å skyve endringene til Heroku

Hvis du har fullført trinnene ovenfor, skal boten din kunne ekko tilbake den mottatte teksten. Men først må du presse endringene i applikasjonen som vert på Heroku. Følg trinnene nedenfor for å gjøre dette:

1. Start terminalen.

2. Bytt katalog til testbot-katalogen
cd testbot

3. Gjør følgende trinn:

4. Send nå en melding til siden din, og boten vil ekko meldingen tilbake til deg.

Betingede svar som også gjør Bot smartere

Vi kan bruke tekstmatching for å la vår Facebook messenger-bot svare i henhold til visse spesielle nøkkelord.

For å oppnå dette må vi legge til en annen funksjon. Jeg kaller det "conditionalResponses", men du kan velge hvilket navn du foretrekker.

1. Koding av conditionalResponses-funksjonen

[js]

funksjon conditionalResponses (recipientId, text)
tekst = tekst || "";

var hva = text.match (/ hva / gi); // sjekk om tekststrengen inneholder ordet "hva"; ignorere saken
var beebom = text.match (/ beebom / gi); // sjekk om tekststrengen inneholder ordet "beebom"; ignorere saken
var hvem = text.match (/ hvem / gi); // sjekk om tekststrengen inneholder ordet "hvem"; ignorere saken
var du = text.match (/ du / gi); // sjekk om tekststrengen inneholder ordet "du"; ignorere saken

// hvis teksten inneholder både "hva" og "beebom", gjør du dette:

hvis (hva! = null &&; beebom! = null)
melding =
tekst: "Beebom er et nettsted som tilbyr tekniske ressurser. Velkommen."

sendMessage (mottaker-ID, melding);
returner sant;

// hvis teksten inneholder både "hvem" og "deg", gjør du dette:
hvis (hvem! = null && deg! = null)
melding =
tekst: "Jeg har blitt bedt om å ikke diskutere identiteten min på nettet."

sendMessage (mottaker-ID, melding);
returner sant;

// hvis ingenting samsvarer, returner falsk for å fortsette utførelsen av indre funksjon.
returner falsk;
;

[/ js]

I linje 4 til 7 har vi definert variabler avhengig av å matche den mottatte strengen mot bestemte ord. Det beste med å bruke "text.match ()" er at den bruker Regular Expressions (vanligvis kalt regex, les mer her.). Det er bra for oss, fordi dette betyr at så lenge en del av et ord i mottatt tekst samsvarer med et av ordene vi nevnte i text.match (), vil variabelen ikke være null. Dette betyr at hvis den mottatte meldingen var “Hva er Beebom?”, Vil “var hva” og “var beebom” ikke være null, fordi ordet “Hva” inneholder ordet “hva”. Så vi er frelst fra å opprette ekstra uttalelser for hver variant der noen kan si "Hva".

2. Redigere meldingslytteren

Vi må også redigere Message Listener vi kodet, for å sikre at den prøver å matche den mottatte teksten med funksjonen "conditionalResponses" også.

[js]

app.post ('/ webhook', funksjon (req, res)
var events = req.body.entry [0] .messaging;
for (i = 0; i < events.length; i++)
var hendelse = hendelser [i];
hvis (event.message && event.message.text)

// prøv først å sjekke om mottatt melding kvalifiserer for betinget respons.
hvis (! conditionalResponses (event.sender.id, event.message.text))

// hvis ikke, ekko bare den mottatte meldingen tilbake til avsenderen.
sendMessage (event.sender.id, text: "Echo:" + event.message.text);



res.sendStatus (200);
);

[/ js]

Endringene i lytteren ser kanskje ikke veldig drastiske ut, men effekten er sikker. Nå prøver lytteren først å svare med betingede svar, og hvis det ikke er noen gyldig betingelse for den mottatte meldingen, ekko den bare meldingen tilbake til brukeren.

3. Å skyve endringene til Heroku

Før du kan prøve de nye funksjonene, må du skyve den oppdaterte koden til appen som er vert på Heroku. Følg trinnene nedenfor for å gjøre dette:

1. Start terminalen.

2. Bytt katalog til testbot-katalogen
cd testbot

3. Gjør følgende trinn:

4. Send nå en melding til siden din, og boten vil ekko meldingen tilbake til deg.

Enda mer funksjonalitet

Bot reagerer nå på et lite sett med kommandoer i fine, godt strukturerte svar. Men det er fortsatt ikke veldig nyttig. La oss gjøre noen flere endringer i koden for å gjøre bot til en mer “funksjonell”Programvare. Det blir vi modernisere mange funksjoner, og legge til et par til, så bli begeistret.

1. Redigere meldingslytteren

Vår meldingslytter fungerer på dette stadiet bare ok. Imidlertid er det ikke veldig pent formatert, og hvis vi fortsetter å øke de nestede hvis uttalelsene for å legge til ekstra “tilstandskontroller“, Det blir fort stygt å se på, vanskelig å forstå og langsommere ved utførelse. Det vil vi ikke, nå? La oss gjøre noen endringer.

Merk: Det er en linje med kode i meldingslytteren som leser “Res.sendStatus (200)”, denne linjen sender en status 200-kode til Facebook, og forteller den at funksjonen ble utført. I følge Facebooks dokumentasjon venter Facebook i maksimalt 20 sekunder på å motta en 200-status, før den bestemmer at meldingen ikke gikk gjennom og stopper utførelsen av koden..

Den nye meldingslytteren vår ser slik ut. Vi bruker “res.sendStatus (200)”Kommando for å stoppe utførelsen av funksjonen så snart en tilstand blir matchet og utført.

[js]

app.post ('/ webhook', funksjon (req, res)
var events = req.body.entry [0] .messaging;
for (i = 0; i < events.length; i++)
var hendelse = hendelser [i];
hvis (event.message && event.message.text)

// første sjekk meldingsteksten mot introResponse betingelser
hvis (introResponse (event.sender.id, event.message.text))
res.sendStatus (200);

// i mangel av et bedre navn kalte jeg dette newResponse: p; sjekk dette neste
annet hvis (newResponse (event.sender.id, event.message.text))
res.sendStatus (200);

// annet, bare ekko tilbake den opprinnelige meldingen
annet
// erstatt ekko med gyldig kommandoliste
sendMessage (event.sender.id, text: "Echo:" + event.message.text);



res.sendStatus (200);
);

[/ js]

2. Koding av den nye Respons-funksjonen

Meldingslytteren vår sjekker nå meldingsteksten mot et sett med betingelser i “NewResponse” også, men først må vi kode newResponse-funksjonen. Vi bruker denne funksjonen for å sjekke om brukeren ba om det artikkelforslag fra Beebom-nettstedet, søk i spørringen periode på nettstedet, og presentere lenken til brukeren. Nok en gang vil vi bruke vanlige uttrykk for å matche tekst med bestemte nøkkelord.

[js]

funksjon newResponse (recipientId, text)
tekst = tekst || "";
var suggest = text.match (/ suggest / gi);
var tilfeldig = text.match (/ random / gi);
var artikkel = text.match (/ artikkel / gi);
var iphone = text.match (/ iphone / gi);
var android = text.match (/ android / gi);
var mac = text.match (/ mac / gi);
var nettleser = text.match (/ browser / gi);
var vpn = text.match (/ vpn / gi);

// sjekk om brukeren i det hele tatt ber om artikkelforslag
hvis (foreslå! = null && artikkel! = null)
var spørring = "";
// hvis det blir spurt om artikkelforslag, sjekk emnet brukeren leter etter
hvis (android! = null)
spørring = "Android";
annet hvis (mac! = null)
spørring = "Mac";
annet hvis (iphone! = null)
spørring = "iPhone";
annet hvis (nettleser! = null)
spørring = "Browser";
annet hvis (vpn! = null)
spørring = "VPN";

sendButtonMessage (recipientId, spørring);
returner sant

returner falsk;
;

[/ js]

Vi bruker en annen tilpasset funksjon som heter “SendButtonMessage” å sende meldingen i tilfelle brukeren ber om forslag til artikler. Vi vil lage dette neste.

3. Koding av sendButtonMessage-funksjonen

SendButtonMessage-funksjonen tar to parametere, a mottaker-ID og en spørsmål. Mottaker-ID brukes til å identifisere brukeren som meldingen skal sendes til, og spørringen brukes til å identifisere emnet som brukeren ønsker artikkelforslag på.

[js]

funksjon sendButtonMessage (recipientId, spørring)
var messageData =
mottaker:
id: recipientId
,
beskjed:
vedlegg:
type: "mal",
nyttelast:
template_type: "knapp",
tekst: "Dette er hva jeg fant for" + spørring,
knapper: [
type: "web_url",
url: "http://www.beebom.com/?s="+query,
title: "Beebom:" + spørring
]



;

callSendAPI (meldingData);

[/ js]

Nok en gang bruker vi en tilpasset funksjon; denne gangen for å sende den endelige meldingen, med artikkelkoblingene, til brukeren. Funksjonen er på mange måter lik "sende melding" funksjonen vi kodet tidligere, men er mer generisk i måten den tar meldingsdataene, som passer oss, fordi meldingsdataene våre endres med spørringen som brukeren lager.

4. Koding av callSendAPI-funksjonen

De “CallSendAPI” funksjonen tar en enkelt parameter, “MessageData”. Denne parameteren inneholder hele meldingsdataene, formatert riktig i henhold til Facebook-reglene, slik at messenger kan vise det riktig for brukeren.

[js]

funksjon callSendAPI (messageData)
be om(
uri: 'https://graph.facebook.com/v2.6/me/messages',
qs: access_token: process.env.PAGE_ACCESS_TOKEN,
metode: 'POST',
json: messageData

, funksjon (feil, respons, kropp)
hvis (! feil && respons.statusCode == 200)
var recipientId = body.recipient_id;
var messageId = body.message_id;

console.log ("Vellykket sendt generell melding med id% s til mottaker% s",
messageId, recipientId);
annet
console.error ("Kan ikke sende melding.");
console.error (respons);
console.error (feil);

);

[/ js]

5. Å skyve endringene til Heroku

Vi er på det siste trinnet mot å gjøre vår oppgraderte bot live. Vi trenger bare å skyve alle kodeendringene til Heroku. Prosessen er den samme som før, og er beskrevet nedenfor:

1. Start terminalen.

2. Bytt katalog til testbot katalog.
cd testbot

3. Gjør følgende:

4. Send nå en melding som "Foreslå en artikkel på Android", eller "Beebom, foreslå meg en artikkel om emnet Android"; og boten vil sende en pent formatert melding med en lenke som du kan trykke på for å åpne artiklene relatert til spørringen din.

SE OGSÅ: 16 Facebook Messenger-tips og triks du bør vite

Grave dypere

Nå som du vet hvordan du kommer i gang med å utvikle Facebook messenger-roboter, kan du gå gjennom Facebook-dokumentasjonen om hvordan du utvikler Facebook messenger-roboter. Selv om dokumentasjonen ikke er bra for nybegynnere, er du ikke nybegynner lenger. Du bør sjekke den offisielle dokumentasjonen og prøve å finne ut hvordan du kan gjøre boten din enda smartere. Teaser: Du kan også sende meldinger med bilder og knapper! Det er også mulig å bruke tjenester som Wit.ai og Api.ai for å kode bot og deretter integrere den med Facebook, men i mine svake forsøk på å bruke disse tjenestene fungerer ikke Wit.ai for godt, og Api.ai har en skarp læringskurve for nybegynnere.

Har du noen gang utviklet en Facebook messenger bot? Hvis du har det, hvordan gikk du frem for å utvikle det, og hva kan det gjøre? Brukte du tjenester som Wit.ai og Api.ai for å lage din bot? Hvis du aldri har prøvd å kode en bot, kan du utvikle din egen Facebook messenger-bot, gjøre den smartere og bedre, og gi oss beskjed om din opplevelse i kommentarene nedenfor.

Etter Bendgate står Apples iPhone 6-brukere nå overfor #Hairgate
Ser ut til at Apples iphone 6 pluss bøyning i lommen ikke var det eneste problemet den hadde. Rapporter kommer fra forskjellige brukere av iPhone 6 og...
Google India lanserer medieannonser i søk
Google India lanserer medieannonser, en ny måte å målrette, betale for og oppleve videoannonser på Google. Dette formatet ble lansert med en ny kanal ...
Hvordan vise lagrede WiFi-passord i Windows 10
Når vi vanligvis kobler til et WiFi-nettverk, følger vi ikke veldig mye med WiFi-passordet, og vi har en tendens til å glemme det over tid. Ja, vi har...