
Getting started: creare un Bot Facebook con Python
Sommario Lo scopo di questa guida step by step è di realizzare un echobot che svolga la semplice funzione di ripetere ciò che gli scriviamo in modo da prendere confidenza con le API Graph di Facebook, per poi arrichire le funzionalità del nostro chatbot con servizi di elaborazione e comprensione del linguaggio naturale (NLP/NLU) come: - Api.ai (Google) Tech Stack[1] Creazione di un account Heroku per il deployment del nostro progetto e utilizzo di Git per tenerlo aggiornato. Step 1 - Creazione di una pagina FacebookPer iniziare dobbiamo creare una pagina Facebook scegliendo innanzitutto se sarà dedicata a un'impresa locale, a un marchio o a un prodotto e così via.
Step 2 - Creazione di una App FacebookDalla pagina per gli sviluppatori di Facebook, facciamo click sul pulsante Crea App in alto a destra e compiliamo i campi obbligatori e infine clickiamo su Crea id app. Dopo aver digitato anche l'eventuale captcha richiestoci, dovremmo essere reindirizzati in automatico sulla nuova pagina dell'applicazione.
Nella sezione messenger della dashboard alla voce configura webhook dovremmo inserire il callback URL e poi scegliere un Validation Token. Il campo callback URL verrà compilato con l’indirizzo https che otterremo dalla nostra applicazione Python sfruttando il servizio gratuito di cloud PaaS (Platform as a service) Heroku. Possiamo scegliere altri servizi come: pythonanywhere, google cloud.
Step 3 - Creazione di un webHook con HerokuOra dobbiamo creare un account gratuito sulla piattaforma cloud Heroku selezionando in alto a destra sign up e compilando i campi obbligatori (first name, last name, email, country) del form di iscrizione. Infine impostiamo come primary language Python e facciamo click su create free account.
Metodo di deployment con Heroku CLINon ci resta che scegliere il metodo di deployment che preferiamo per la nostra applicazione python, nel nostro caso utilizzeremo Heroku Git per poter fare il deploy usando Heroku come repository GIT. Così facendo possiamo sviluppare la nostra app in locale per poi importarla all'interno del nostro account.
Inseriamo le credenziali del nostro account.
Creiamo un nuovo repository GIT e a questo punto non ci resta che aggiungervi i files del nostro progetto, farne il commit ed infine il push.
Il primo push non si scorda maiPrima di poter digitare il comando git push però abbiamo bisogno di due files: - Creazione di un Procfile (documentazione) ProcfileCon un text-editor dobbiamo creare un nuovo file dal nome Procfile e salvarlo senza estensione nella cartella principale della nostra applicazione e inserirvi il seguente contenuto:
Questo file serve ad Heroku per inizializzare un processo web ed eseguire un'applicazione python dal nome echoBot.py utilizzando come web-server gunicorn (WSGI). Il motivo per cui si utilizza un web-server aggiuntivo è legato al rapporto fra le prestazioni e l'impiego di risorse di calcolo (dynos) come ci viene spiegato dalla documentazione:
Dyno è l'unità di misura del quantitativo di risorse impiegate dalla nostra applicazione che utilizza Heroku per la tariffazione del servizio offerto di cloud computing . Con un account gratuito ad ogni applicazione verrà assegnato un solo dyno cioè un singolo processo, che a scelta può essere di tipo web o worker (batch). RequirementsDurante un deploy Heroku accede al file requirements.txt per installare tutti i pacchetti (dependencies) necessari all'applicazione affinché venga avviata.
avremmo così un'installazione pulita con python 3.5 e per attivarlo
Da questo momento dovremmo vedere alla sinistra del prompt l'indicazione del nuovo ambiente. In seguito con pip installaremo man mano i pacchetti che ci serviranno come flask, gunicorn, requests etc.
Ora che abbiamo il nostro file requirements.txt pronto nella folder del nostro progetto dovremmo avere tre files: echoBot.py, Procfile e requirements.txt URL di callbackDopo aver fatto il git push andiamo sulla dashboard online di Heroku e selezioniamo Open app e si aprirà in automatico una nuova tab del browser. Dove visualizzeremo l'indirizzo https di callback che useremo come webhook per Facebook e il messaggio di verifica del webhook che abbiamo utilizzato anche nel listato python.
Step 4 - API GraphLa prima formulazione della teoria dei grafi la dobbiamo al matematico Leonhard Euler (1707-1783) che nel saggio “Soluzione di un problema di geometria dei siti” del 1736 risolse il problema dei sette ponti di Königsberg.
Eulero dimostrò che il problema non era risolubile utilizzando come metodo un grafo, cioè sostituendo ad ognuna delle quattro zone di terra con dei nodi ed ad ogni ponte con un arco. Ottenendo così un grafo con quattro nodi e sette archi. Codice completo: echobot
GET e POSTLe API Graph sono il metodo principale di lettura e scrittura di dati da Facebook attraverso delle semplici chiamate HTTP che restituiscono un messaggio di risposta con una struttura JSON. - GET ci permette di interrogare gli oggetti delle API Graph. Richieste di verificaLa documentazione ci suggerisce che come prima cosa dobbiamo inviare una richiesta GET per verificare l'endpoint utilizzando i parametri: - hub.mode=subscribe
Quando l'endpoint riceve una richiesta di verifica controlla che hub.verify_token corrisponda al token di verifica che abbiamo inserito per l'abilitazione del webhook. Infine risponde con il valore hub.challenge in modo da sapere che l'endpoint è stato configurato correttamente (codice 200) Access TokenIl meccanismo di autenticazione di Facebook è basato sul protocollo OAuth 2.0, quindi abbiamo bisogno di acquisire un access token cioè una stringa casuale che contiene informazioni sulla sua scadenza e sull'app che l'ha generata. Noi necessitiamo di quest'ultimo perché il nostro echoBot abbia accesso al Social Graph. Nella sezione Generazione di token scegliamo la pagina Facebook da associare al echoBot ed in automatico verrà generata la stringa page access token che inseriremo nel listato.
Ora nella sezione Webhooks e facendo click su Configura Webhooks apparirà una schermata come la seguente: "Nuova iscrizione della pagina". L’indirizzo https di URL di callback lo abbiamo ottenuto prima attraverso Heroku, ora non dovremmo far altro che inserirlo. In verifica token possiamo scegliere una stringa qualsiasi a condizione che coincida con quella che utilizzeremo nel codice, nel nostro caso "testingEchoBot". - message, evento che avviene quando qualcuno invia un messaggio alla nostra pagina. Facciamo click su Verifica e Salva , se l’applicazione python su Heroku risponde correttamente ci dovrebbe appararire la seguente schermata. Infine non dimentichiamo di effettuare l'iscrizione alla pagina facebook che abbiamo creato. Invio messaggio di testoCon questo metodo possiamo inviare semplici messaggi di testo con un limite di 640 caratteri con codifica
Step - 5 Now try it
Lista degli erroriA questo punto, il nostro FB Messenger Bot non dovrebbe presentare problemi, ma le richieste che effettuiamo alle API Graph possono causare diverse tipologie di errori . Bibliografia[1] Mark Buchanan, Nexus, Perché la natura,la società, l'economia la comunicazione funzionano allo stesso modo, Mondadori, 2003 Sitografia Documentazione ufficiale Heroku Documentazione ufficiale Facebook for developers Documentazione Conda |