Soovitatav, 2020

Toimetaja Valik

Kuidas luua Facebook Messenger Bot (juhend)

Facebooki „messenger bots” funktsioon ei ole midagi uut ja palju vinge robotid on juba olemas. Kuid ressursid, mis puudutavad täpselt oma enda boti ehitamist, on vähe ja puuduvad selgitused inimestele, kes on Facebooki graafiku API-s uued. Messenger-botid nõuavad ka nüüd, et kasutate SSL-i tagatud veebikõne tagasihelistamise URL-i (rohkem sellest hiljem) ning SSL-i loomine ei ole mõeldud kõigile ja maksab ka raha.

Käesolevas artiklis räägin ma läbi lihtsa Facebooki sõnumiposti loomise kogu protsessi, sest Facebooki enda dokumentatsioon on üsna halvasti selgitatud. Me loome pilvrakenduse, mis kasutab https-protokolli, koodib Node.js-is (mis on javascript, serveripoolne keel), kasutage koodi, et sisestada kood pilvrakendusele ja testida seda Facebook Messenger'is.

Seadista Bot

Sa pead sülearvutisse installima sõlme. Kui te seda ei tee, minge allalaadimiseks ja installimiseks Node veebisaidile.

Kui olete lõpetanud, võite jätkata boti seadistamist. Järgige alltoodud samme:

1. Käivitage terminal.

2. Koodi hoidmiseks on vaja eraldi kataloogi.

  • Tee uus kataloog
    mkdir testbot
  • Muutke oma töö kataloogi just loodud kataloogi
    cd testbot

3. Seejärel käivitage sõlme rakendus.
npm init

  • Teil palutakse sisestada oma rakenduse kohta teave, kasuta vaikimisi vaikimisi klahvi Enter, et kõike teha.

4. Paigaldage paketid
npm install express body-parser request --save

  • Käsk käivitatakse ja antakse mõned hoiatused; neid ignoreerida.

5. Avage Finderis avatud kataloog „ testbot ” ja leidke fail nimega “ package.json ”; avage see redaktoris nagu Sublime Text.

6. Selles failis peame lisama rea
"start": "node index.js"

  • Ära unusta eelmise rea lõpus „, ” lisada.

7. Seejärel looge Sublime Textis uus fail ja pane see sisse järgmine kood:

[js]

var express = pieprasa („express”);
var bodyParser = vaja ('body-parser');
var request = required ('request');
var app = express ();

app.use (bodyParser.urlencoded ({extension: false}));
app.use (bodyParser.json ());
app.listen ((protsess.env.PORT || 3000));
app.get ('/', funktsioon (req, res) {
res.send ('See on TestBot Server');
});
app.get ('/ webhook', funktsioon (req, res) {
kui (req.query ['hub.verify_token'] === 'testbot_verify_token') {
res.send (req.query ['hub.challenge']);
} other {
res.send ('Kehtetu kontrollmärk');
}
});

[/ js]

Salvestage see fail nimega index.js

Märkus: reas 13 on 'hub.verify_token' väärtus seatud kui " testbot_verify_token", mäletage seda väärtust, kuna seda kasutatakse veebikooki loomisel Facebookis.

Loo Git-hoidla

Nüüd, kui oleme loonud oma bot'i tagasihelistamise käitlemise, peame koodi Heroku külge panema. Selleks peame looma meie kataloogi git-hoidla.

Märkus: „git” on failide ja tarkvarakoodi versioonikontrollisüsteem. Lisateavet selle kohta saate Wikipedias.

Git-hoidla loomine on lihtne ja võtab vaid paar Terminali käsku.

Märkus. Veenduge, et olete sees terminali „ testbot ”. Seda saab teha, kui sisestate terminali pwd käsu.

Git-hoidla loomiseks toimige järgmiselt.

1. git init

2. git add .

3. git commit -m "Register Facebook Webhook"

Heroku seadistamine

Enne kui me isegi Facebooki arenduslehtedesse läheme, on meil vaja tagasihelistamise URL-i, millega Facebook saab rääkida. See URL peab kasutama https-protokolli, mis tähendab, et peame oma veebilehel installima SSL-sertifikaadi; kuid see on algaja juhend Facebooki botidele, nii et olgem keerulised asjad. Me kasutame Herokust meie koodi kasutuselevõtmiseks. Heroku annab teile oma rakenduste jaoks https-URL-id ja on vaba plaan, mis vastab meie (väga põhilistele) nõudmistele.

Minge Heroku veebilehele ja registreerige ennast.

Märkus: Väljal „Pick Your Primary Development Language” („Vali oma esmase arengu keel”) kasutage „Ma kasutan teist keelt”.

Kui olete selle lõpetanud, installige oma OS-i jaoks (minu jaoks Mac) tööriistariba Heroku ja installige see. See annab teile juurdepääsu Heroku seadmele oma terminalis (või käsurealt Windowsis).

Seejärel loome Heroku rakenduse, mis hoiab kogu meie boti koodi. Järgige alltoodud samme:

1. Käivitage terminal

2. Tüüp heroku login

  • Teil palutakse sisestada oma e-posti aadress ja parool.
  • Sisestage oma e-kiri, vajuta Enter; seejärel sisestage oma parool, vajuta Enter.
  • Sa oled sisse logitud Heroku

3. Tüüp heroku create

  • See loob rakenduse Heroku peal ja annab teile hüperlingi. Pange tähele, et link kasutab https-protokolli. Lihtne, eks?

4. Nüüd saate oma rakenduskoodi Heroku peale vajutada
git push heroku master

5. Kui see on tehtud, on teie rakendus põhimõtteliselt elus ja saate brauseri lingi külastada, et kontrollida, kas kõik töötab hästi. See peaks avama veebilehe, mis ütleb: „ See on TestBot Server “.

Facebooki seadistamine

On aeg ühendada meie bot Facebookiga! Te peate looma uue Facebooki lehe või kasutama olemasolevat, mida omate. Ma näitan teile, kuidas edasi minna uue Facebooki lehe loomisega.

1. Minge Facebookisse ja looge uus leht.

  • Saate luua lehe soovitud kategooriast. Ma valin ettevõtte / organisatsiooni jaoks mingit erilist põhjust.

2. Järgmised sammud, mida Facebook näitab, on vabatahtlikud ja neid saab vahele jätta.

3. Järgmisena minge üle Facebooki arendajate veebisaidile.

  • Parempoolses ülaservas liigutage hiirt „ Minu rakendused “ peale ja seejärel klõpsake rippmenüüst „ Lisa uus rakendus ”.

  • Kui Facebook palub teil platvormi valida, klõpsa „ põhiseadistusele “.

4. Täitke oma rakenduse nime ja kontakti e-posti aadressi andmed.

  • Valige kategooriast " Apps for Pages ".
  • Klõpsake “ Create App ID ”.

5. Teid viiakse rakenduse armatuurlauale. Navigeerige külgribal „ + Lisa tooted “ ja valige „ Messenger ”, klõpsates nuppu „ Alusta ”.

6. Valige „ Setup Webhooks “.

7. Täitke nõutavad väljad, asendades "Tagasihelistamise URL" Heroku rakenduse URL-iga, kontrollige märgendit, mida kasutatakse failis index.js, ja valige järgmised tellimuse väljad:

  • message_deliveries
  • sõnumeid
  • message_optins
  • messaging_postbacks

Märkus. Veenduge, et lisate tagasihelistamise URL- ile/ webhook ”, nii et index.js täidab vajaliku funktsiooni, kui Facebook üritab URL-i pingida, ja ta saab kontrollida „Verify Token”.

8. Klõpsake nuppu „ Verify and Save “.

9. Jaotises „ Token Generation “ klõpsake „ Select a Page ” ( Vali leht ) ja valige eelnevalt loodud leht.

See loob „ Page Access Token “, salvestage see kuskil; seda vajate hiljem.

10. Seejärel peate oma rakendusele tegema POST-päringu, kasutades viimases etapis genereeritud Page Access Tokenit. Seda on lihtne teha terminalis. Lihtsalt käivitage järgmine käsk, asendades PAGE_ACCESS_TOKEN oma loodud juurdepääsupaketi märgiga .

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

Terminalis peaksite saama vastuse.

Rohkem Heroku seadistusi

Jah, me pole veel teinud. Mitte peaaegu.

1. Minge Heroku veebilehele ja logige sisse oma e-posti ID-ga.

2. Leidke oma rakendus armatuurlaual ja klõpsake seda.

3. Liikuge vahekaardile Seaded.

4. Klõpsake „ Reveal Config Vars

5. Lisage PAGE_ACCESS_TOKEN “ config var ” ja klõpsake „ Add “.

Tegeliku Boti kodeerimine

Nüüd, kui oleme teinud grunt-tööga, saame keskenduda sellele, mis tegelikult on oluline: boti reageerimine sõnumitele. Alustamiseks kavandame lihtsalt boti, mis lihtsalt kordab saadud sõnumeid. Nagu selgub, nõuab see lihtne ülesanne märkimisväärset koodi.

1. Sõnumi kuulaja kodeerimine

Enne kui bot saab sõnumi tagasi lükata, peab ta saama kuulata sõnumeid. Teeme seda esimesena.

Lisage failis index.js järgmine kood:

[js]

app.post ('/ webhook', funktsioon (req, res) {
var events = req.body.entry [0] .sõnumid;
jaoks (i = 0; i <events.length; i ++) {
var event = sündmused [i];
kui (event.message && event event.text) {
sendMessage (event.sender.id, {text: "Echo:" + event.message.text});
}
}
res.sendStatus (200);
});

[/ js]

Mida see funktsioon teeb, kas kontrollitakse vastuvõetud sõnumeid ja seejärel kontrollitakse, kas sõnumis on teksti. Kui ta leiab vastuvõetud sõnumis teksti, kutsub see saatja (kuvatakse hiljem) funktsiooni, edastades saatja ID ja teksti tagastamiseks. Oluline on mõista järgmisi väärtusi ja mida need tähendavad:

  • event.message.text on sõnumis vastuvõetud tekst. Näiteks, kui keegi saadab meie botile sõnumi „Tere“, siis on sündmuse.muuda.teksti väärtus „Tere“.
  • event.sender.id on selle isiku ID, kes sõnumi botile saatis. See on vajalik, et bot teab, kellele vastata.

2. SendMessage'i funktsiooni kodeerimine

Võimaldab nüüd koodi “sendMessage”.

[js]

funktsioon sendMessage (saajaId, sõnum) {
taotlus ({
url: '//graph.facebook.com/v2.6/me/messages',
qs: {access_token: process.env.PAGE_ACCESS_TOKEN},
meetod: 'POST'
json: {
saaja: {id: recipId},
sõnum: sõnum,
}
}, funktsioon (viga, vastus, keha) {
kui (viga) {
console.log ('Viga sõnumi saatmisel', viga);
} else if (response.body.error) {
console.log ('Viga:', vastus.body.error);
}
});
};

[/ js]

Funktsioon “sendMessage” võtab kaks parameetrit:

  • saajaId
  • sõnum

VastuvõtjaId on vajalik, et sõnumit saaks adresseerida õigele kasutajale.

Sõnum on tegelik tekst, mis saadetakse vastuses.

3. Muudatuste vajutamine Heroku

Kui olete ülaltoodud sammud lõpetanud, peaks teie bot olema võimeline vastu võtma vastuvõetud teksti. Kuid kõigepealt peate rakenduse Herokusse paigutatud muudatused suruma. Selleks järgige alltoodud samme:

1. Käivitage terminal.

2. Muutke kataloog testbot kataloogi
cd testbot

3. Tehke järgmist.

  • git add.
  • Märkus: “git add” lõpus on “.”
  • git toime -m “Esimene toime”
  • git push heroku kapten

4. Nüüd saatke oma lehele sõnum ja bot kordab teile sõnumit.

Tingimuslik vastus ehk Boti targemaks muutmine

Saame kasutada teksti sobitamist, et võimaldada meie Facebooki sõnumibotil reageerida vastavalt teatud erilistele märksõnadele.

Selle saavutamiseks peame lisama veel ühe funktsiooni. Ma nimetan seda "tingimuslikeks vastuseks", kuid saate valida, millist nime soovite.

1. Koodide tingimusliku kodeerimise funktsioon

[js]

funktsiooni tingimuslikVastused (saajaId, tekst) {
text = text || "";

var what = text.match (/ what / gi); // kontrollige, kas tekstistring sisaldab sõna "mida"; ignoreerida juhtumit
varGadget-Info.com = text.match (/ beebom / gi); // kontrollige, kas tekstistring sisaldab sõna "beebom"; ignoreerida juhtumit
var who = text.match (/ kes / gi); // kontrollige, kas tekstistring sisaldab sõna "kes"; ignoreerida juhtumit
var you = text.match (/ you / gi); // kontrollige, kas tekstistring sisaldab sõna "sa"; ignoreerida juhtumit

// kui tekst sisaldab nii "mida" kui ka "beebom", tehke seda:

kui (mis! = null & &; Gadget-Info.com! = null) {
message = {
tekst: "Beebom on tehnilisi ressursse pakkuv veebileht. Tere tulemast."
}
sendMessage (saajaId, sõnum);
tagasi tõde;
}

// kui tekst sisaldab nii "kes" kui ka "teie", tehke seda:
kui (kes! = null & & you! = null) {
message = {
tekst: "Mul on palutud mitte oma identiteeti võrgus arutada."
}
sendMessage (saajaId, sõnum);
tagasi tõde;
}

// kui midagi ei sobi, tagastage sisemine funktsioon jätkamiseks vale.
tagastage vale;
};

[/ js]

Ridades 4 kuni 7 on meil määratletud muutujad sõltuvalt vastuvõetud stringide vastavusest teatud sõnadele. Parim osa "text.match ()" kasutamisest on see, et ta kasutab regulaarseid väljendeid (tavaliselt nimetatakse regexiks, loe siit rohkem.). See on meile hea, sest see tähendab, et nii kaua, kui isegi osa sõnast vastuvõetud tekstis vastab ühele sõnast, mida me mainisime tekstis (), ei ole muutuja null. See tähendab, et kui vastuvõetud sõnum on "Mis on Beebom?", "Var mida" ja "var beebom" ei ole null, sest sõna "Mis" sisaldab sõna "mida". Nii et me oleme salvestatud täiendavate avalduste loomisest iga variandi kohta, milles keegi võib öelda „Mis“.

2. Sõnumi kuulaja redigeerimine

Samuti peame redigeerima me kodeeritud sõnumilooja, tagamaks, et see püüab vastuvõetud teksti sobitada ka „conditionalResponses” funktsiooniga.

[js]

app.post ('/ webhook', funktsioon (req, res) {
var events = req.body.entry [0] .sõnumid;
jaoks (i = 0; i <events.length; i ++) {
var event = sündmused [i];
kui (event.message && event event.text) {

// proovige kõigepealt kontrollida, kas vastuvõetud sõnum vastab tingimustele.
kui (! conditionalResponses (event.sender.id, event.message.text)) {

// kui see nii ei ole, kordage lihtsalt vastuvõetud sõnum saatjale.
sendMessage (event.sender.id, {text: "Echo:" + event.message.text});
}
}
}
res.sendStatus (200);
});

[/ js]

Kuulaja muutused ei pruugi olla väga drastilised, kuid nende mõju on kindel. Nüüd püüab kuulaja kõigepealt vastata tingimuslike vastustega ja kui vastuvõetud sõnumi jaoks ei ole kehtivat tingimust, kordab ta lihtsalt sõnumit kasutajale.

3. Muudatuste vajutamine Heroku

Enne uute funktsioonide katsetamist peate värskendatud koodi rakenduse Heroku majutatud rakendusele vajutama. Selleks toimige järgmiselt.

1. Käivitage terminal.

2. Muutke kataloog testbot kataloogi
cd testbot

3. Tehke järgmist.

  • git add.
  • Märkus: “git add” lõpus on “.”
  • git saistības -m „Tingimuslike võimaluste lisamine“
  • git push heroku kapten

4. Nüüd saatke oma lehele sõnum ja bot kordab teile sõnumit.

Veelgi rohkem funktsionaalsust

Meie bot vastab nüüd väikesele hulgale käskudele kena, hästi struktureeritud vastustes. Aga see pole ikka veel väga kasulik. Teeme koodis veel mõned muudatused, et muuta meie bot " funktsionaalsemaks " tarkvaraks. Me uuendame palju funktsioone ja lisame veel paari, nii et saada põnevil.

1. Sõnumi kuulaja redigeerimine

Meie sõnumite kuulaja töötab selles etapis lihtsalt. Kuid see ei ole väga kenasti vormindatud ja kui me peaksime suurendama pesakonda, kui avaldused lisaksid täiendavaid „ seisundikontrolle “, muutub see kiiresti inetu vaatamiseks, raskesti mõistetavaks ja teostamise aeglasemaks. Me ei taha seda nüüd teha? Teeme mõned muudatused.

Märkus: Sõnumi kuulajal on rida koodi, mis loeb “res.sendStatus (200)”, see rida saadab staatuse 200 koodi Facebookile, öeldes, et funktsioon on edukalt täidetud. Facebooki dokumentatsiooni järgi ootab Facebook kuni 20 sekundit, et saada 200-st staatust, enne kui ta otsustab, et sõnum ei läbinud ja peatab koodi täitmise.

Meie uus sõnumi kuulaja näeb välja selline. Me kasutame käsku " res.sendStatus (200) ", et peatada funktsiooni täitmine niipea, kui tingimus on sobitatud ja teostatud.

[js]

app.post ('/ webhook', funktsioon (req, res) {
var events = req.body.entry [0] .sõnumid;
jaoks (i = 0; i <events.length; i ++) {
var event = sündmused [i];
kui (event.message && event event.text) {

// esmalt kontrollige sõnumi teksti introResponse tingimustega
kui (introResponse (event.sender.id, event.message.text)) {
res.sendStatus (200);
}

// parema nime puudumisel kutsusin seda uueks vastuseks: p; kontrollige seda järgmine
muidu kui (newResponse (event.sender.id, event.message.text)) {
res.sendStatus (200);
}

// muu, lihtsalt kajasta algne sõnum
mujal {
// asenda kajas kehtiv käskude nimekiri
sendMessage (event.sender.id, {text: "Echo:" + event.message.text});
}
}
}
res.sendStatus (200);
});

[/ js]

2. Uue vastuse funktsiooni kodeerimine

Meie sõnumite kuulaja kontrollib nüüd sõnumi teksti ka “newResponse” tingimuste suhtes, kuid kõigepealt peame koodi uuesti sisestama. Me kasutame seda funktsiooni, et kontrollida, kas kasutaja küsisGgetget-Info.com veebisaidilt artikleid puudutavaid soovitusi, otsida päringu terminit veebisaidil ja esitab kasutajale lingi . Taas kasutame regulaaravaldisi teksti sobitamiseks konkreetsete märksõnadega.

[js]

funktsioon newResponse (vastuvõtjaId, tekst) {
text = text || "";
var Pasiūlymas = text.match (/ Suggest / gi);
var random = text.match (/ random / gi);
var article = text.match (/ article / gi);
var iphone = text.match (/ iphone / gi);
var android = text.match (/ android / gi);
var mac = text.match (/ mac / gi);
var brauser = text.match (/ browser / gi);
var vpn = text.match (/ vpn / gi);

// kontrollige, kas kasutaja küsib üldse artikli soovitusi
kui (soovita! = null & & artikkel! = null) {
var query = "";
// kui küsitakse artikli soovitusi, vaadake teema, mida kasutaja otsib
kui (android! = null) {
query = "Android";
} other if (mac! = null) {
query = "Mac";
} other if (iphone! = null) {
query = "iPhone";
} other if (brauser! = null) {
query = "Brauser";
} else if (vpn! = null) {
query = "VPN";
}
sendButtonMessage (saajaId, päring);
tagasi
}
tagastage vale;
};

[/ js]

Me kasutame teist kohandatud funktsiooni "sendButtonMessage", et saata sõnum, kui kasutaja küsib artikli soovitusi. Me loome selle järgmise.

3. SendButtonMessage'i funktsiooni kodeerimine

Funktsioon sendButtonMessage võtab kaks parameetrit, saaja ID ja päring. Vastuvõtja ID-d kasutatakse selle kasutaja tuvastamiseks, kellele sõnum tuleb saata, ja päringut kasutatakse selle teema identifitseerimiseks, millele kasutaja soovib artikli soovitusi.

[js]

funktsioon sendButtonMessage (saajaId, päring) {
var messageData = {
adressaat: {
id: saajaId
},
teade: {
manus: {
tüüp: "mall",
kasulik koormus: {
template_type: "button",
tekst: "See on see, mida ma leidsin" + päringule
nupud: [{
tüüp: "web_url",
url: "//www.beebom.com/?s="+query,
pealkiri: "Beebom:" + päring
}]
}
}
}
};

callSendAPI (messageData);
}

[/ js]

Me kasutame taas kohandatud funktsiooni; seekord saadetakse kasutajale lõplik sõnum koos artiklilinkidega. Funktsioon sarnaneb mitmel viisil „sendMessage” funktsiooniga, mille me eelnevalt kodeerisime, kuid see on üldisem nii, nagu ta võtab meile sobiva sõnumi andmed, sest meie sõnumiandmed muutuvad kasutaja tehtud päringuga.

4. CallSendAPI funktsiooni kodeerimine

“CallSendAPI” funktsioon võtab ühe parameetri, “messageData” . See parameeter sisaldab kogu sõnumiandmeid, mis on õigesti vormindatud vastavalt Facebooki reeglitele, nii et sõnumitooja saab selle kasutajale korralikult kuvada.

[js]

funktsioon callSendAPI (messageData) {
taotlus ({
uri: '//graph.facebook.com/v2.6/me/messages',
qs: {access_token: process.env.PAGE_ACCESS_TOKEN},
meetod: 'POST'
json: messageData

}, funktsioon (viga, vastus, keha) {
kui (! error && Response.statusCode == 200) {
var recipId = body.recipient_id;
var messageId = body.message_id;

console.log ("Edukalt saadetud üldsõnum ID-ga% s adressaadile% s",
messageId, saajaId);
} other {
console.error ("Ei saa sõnumit saata.");
console.error (vastus);
console.error (viga);
}
});
}

[/ js]

5. Muudatuste vajutamine Heroku

Me oleme viimasel sammul meie uuendatud boti elluviimise suunas. Me peame lihtsalt sisestama kõik koodi muudatused Heroku. Protsess on sama, mis varem, ja seda kirjeldatakse allpool:

1. Käivitage terminal.

2. Muutke kataloog testbot kataloogi.
cd testbot

3. Tehke järgmist.

  • git add.
  • Märkus: Selle käsu lõpus on “.” .
  • git saistības -m “seisundi kontrollimise ja vormindamise parandamine”
  • git push heroku kapten

4. Nüüd saatke sõnum nagu „Soovita artikkel Androidis“ või „Beebom, soovitage mulle artiklit Android'i teema kohta”; ja bot saadab kenasti vormindatud teate koos lingiga, mida saate oma päringuga seotud artiklite avamiseks puudutada.

Kaeva sügavamale

Nüüd, kui tead, kuidas alustada Facebooki sõnumite botide arendamist, minge läbi Facebooki dokumentatsiooni, kuidas arendada Facebooki sõnumitooteid. Kuigi dokumentatsioon ei ole algajatele hea, sa pole enam algaja. Peaksite tutvuma ametliku dokumentatsiooniga ja proovima välja selgitada, kuidas teha oma bot veelgi targemaks. Teaser: Saate saata ka pilte ja nuppe sisaldavaid sõnumeid! Samuti on võimalik kasutada selliseid teenuseid nagu Wit.ai ja Api.ai, et koodida oma bot ja seejärel integreerida see Facebookiga, kuid minu nõrkades katsetes neid teenuseid kasutada, ei tööta Wit.ai liiga hästi ja Api.ai on algajatele järsk õppimiskõver.

Kas olete kunagi loonud Facebooki messenger boti? Kui teil on, siis kuidas te selle arendasite ja mida saab teha? Kas kasutasite oma boti loomiseks selliseid teenuseid nagu Wit.ai ja Api.ai? Kui te ei ole kunagi proovinud botide kodeerimist, mine ja arendage oma Facebooki sõnumibot, tehke see targemaks ja paremaks ning andke meile teada oma kogemustest allpool toodud kommentaarides.

Top