Tutorial di avvio rapido

Questo tutorial ti guiderà attraverso tutto quello che devi sapere per realizzare la tua prima esperienza Messenger. Prima di iniziare, seleziona una delle opzioni in Progetto iniziale per ottenere il codice necessario a cominciare, quindi segui i passaggi in Primi passi per passare alla configurazione.

Vuoi solo vedere il codice finito? Nessun problema! Puoi trovarlo su GitHub.

Contenuti

Progetto iniziale

Prima di iniziare con questa guida introduttiva, assicurati di aver completato una delle opzioni seguenti e di avere il codice iniziale necessario. Il codice iniziale include un webhook di base da cui partiremo per sviluppare l'esperienza Messenger.

Opzione 1: realizzalo da te

La nostra guida alla configurazione dei webhook ti accompagnerà passo dopo passo nella creazione del tuo primo webhook, che potrai poi usare per completare questa guida introduttiva.

Crea il tuo webhook

Opzione 2: scaricalo da GitHub

Scarica il nostro codice iniziale del webhook da GitHub, e distribuiscilo su un server a tua scelta.

Scarica il codice

Opzione 3: remixalo su Glitch

Se non disponi di un server su cui distribuire il tuo webhook, puoi creare un remix del nostro progetto iniziale del webhook su Glitch per ottenere un URL pubblico che utilizzi HTTPS per il tuo webhook.

Per creare il tuo webhook su Glitch, procedi nel modo seguente:

  1. Apri il progetto iniziale del webhook su Glitch: Crea un remix su Glitch
  2. Clicca sul pulsante "Remix Your Own" (Crea un tuo remix). Viene creata una copia del progetto.
  3. Nell'angolo in alto a sinistra, clicca il menu a discesa, quindi copia l'URL pubblico sotto alla descrizione del progetto, che sarà l'URL di base per il tuo webhook.
  4. Segui la nostra guida alla configurazione dell'app per iscrivere il webhook alla tua app Facebook. L'URL del webhook sarà l'URL di Glitch con /webhook alla fine:
    https://

Primi passi

Prima di realizzare la tua prima esperienza Messenger, devi configurare le credenziali per la tua app.

1
Configura l'app Facebook

Se non l'hai già fatto, segui la nostra guida alla configurazione dell'app per configurare la tua app Facebook per l'uso con la Piattaforma Messenger.

L'app è in modalità sviluppo

Fino a quando l'app non sarà stata inviata e approvata per l'uso pubblico su Messenger, i token della pagina consentiranno alla tua Pagina di interagire solo con gli account Facebook dotati di ruolo Amministratore, Sviluppatore o Tester per l'app.

Per concedere questi ruoli ad altri account Facebook, accedi alla tab "Ruoli" nelle impostazioni dell'app.

2
Genera un token d'accesso della Pagina

Tutte le richieste alle API Messenger Platform sono autenticate includendo un token di accesso a livello di pagina nel parametro access_token della stringa della query.

Se non l'hai ancora fatto durante la configurazione dell'app Facebook, genera un token d'accesso della Pagina come segue:

  1. Nella sezione "Generazione del token" delle impostazioni di Messenger dell'app, seleziona la Pagina Facebook per cui vuoi generare un token nel menu a discesa "Pagina". Nel campo "Token d'accesso della Pagina" apparirà un token d'accesso.
  2. Clicca sul campo "Token d'accesso della Pagina" per copiare il token negli appunti.

Il token generato NON verrà salvato in questa interfaccia utente. Ogni volta che selezioni una Pagina dal menu a discesa verrà generato un nuovo token. Quando viene generato un nuovo token, quelli generati in precedenza continueranno a funzionare.
3
Salva il token della pagina come variabile ambientale

Consigliamo di tenere al sicuro le informazioni sensibili, come il token d'accesso della Pagina, non effettuandone l'hardcoding nel webhook.

Per farlo, aggiungi le seguenti variabili ambientali. <PAGE_ACCESS_TOKEN> è il token d'accesso appena generato e <VERIFY_TOKEN> è una stringa casuale usata per verificare il webhook.

PAGE_ACCESS_TOKEN="

Variabili ambientali in Glitch

Se stai usando Glitch, imposta le variabili ambientali nel file .env fornito in modo che non siano visibili agli altri utenti di Glitch.

4
Aggiungi la pagina e verifica i token per il webhook

Ora tutto quello che devi fare è aggiungere il token d'accesso della Pagina e verificare il token all'inizio del file app.js, per poterlo usare nella logica del webhook:

const PAGE_ACCESS_TOKEN = process.env.PAGE_ACCESS_TOKEN;
const VERIFY_TOKEN = process.env.VERIFY_TOKEN;

Configurazione completata

Iniziamo a creare la tua prima esperienza Messenger!

Realizzare l'esperienza

In questo tutorial, creeremo una semplice esperienza Messenger che:

analizza il messaggio e l'ID per singola pagina del destinatario da un evento webhook in arrivo;

gestisce gli eventi webhook messages e messaging_postbacks;

invia messaggi tramite l'API Send;

risponde ai messaggi di testo con un messaggio di testo;

risponde agli allegati immagine con un modello generico che usa l'immagine ricevuta;

risponde condizionalmente ai payload di postback.


1
Abbozza le funzioni handler

Per iniziare, abbozziamo tre funzioni che gestiranno i tipi di eventi webhook in ingresso che vogliamo supportare e a cui risponderanno tramite l'API Send. Per farlo, aggiungi quanto segue al file app.js:

// Handles messages events
function handleMessage(sender_psid, received_message) {

}

// Handles messaging_postbacks events
function handlePostback(sender_psid, received_postback) {

}

// Sends response messages via the Send API
function callSendAPI(sender_psid, response) {
  
}
2
Recupera l'ID della singola Pagina del mittente

Per rispondere agli utenti su Messenger, dobbiamo prima sapere chi sono. Per farlo, in Messenger, bisogna recuperare l'ID della singola Pagina del mittente (PSID) dall'evento webhook in ingresso.

Cos'è un PSID?


Agli utenti viene assegnato un ID della singola Pagina (PSID) per ciascuna Pagina Facebook con cui avviano una conversazione. Il PSID permette di identificare l'utente quando invia dei messaggi.

Se hai completato una delle opzioni nella sezione precedente Progetto iniziale, dovresti avere un endpoint /webhook di base che accetta le richieste POST e registra il corpo degli eventi webhook che riceve. Dovrebbe avere un aspetto simile al seguente:

app.post('/webhook', (req, res) => {  

  // Parse the request body from the POST
  let body = req.body;

  // Check the webhook event is from a Page subscription
  if (body.object === 'page') {

    // Iterate over each entry - there may be multiple if batched
    body.entry.forEach(function(entry) {

      // Get the webhook event. entry.messaging is an array, but 
      // will only ever contain one event, so we get index 0
      let webhook_event = entry.messaging[0];
      console.log(webhook_event);
      
    });

    // Return a '200 OK' response to all events
    res.status(200).send('EVENT_RECEIVED');

  } else {
    // Return a '404 Not Found' if event is not from a page subscription
    res.sendStatus(404);
  }

});

Per recuperare il PSID del mittente, estraendolo dalla proprietà sender.id dell'evento, aggiorna il blocco body.entry.forEach con il codice seguente:

body.entry.forEach(function(entry) {

  // Gets the body of the webhook event
  let webhook_event = entry.messaging[0];
  console.log(webhook_event);

  // Get the sender PSID
  let sender_psid = webhook_event.sender.id;
  console.log('Sender PSID: ' + sender_psid);

});

Fai un test!


Apri Messenger e invia un messaggio alla Pagina Facebook associata alla tua esperienza Messenger. Non riceverai una risposta su Messenger, ma dovresti vedere un messaggio con il tuo PSID registrato nella console in cui è in esecuzione il webhook:
Sender PSID: 1254938275682919
3
Analizza il tipo di evento webhook

Vogliamo che la nostra esperienza sia in grado di gestire due tipi di eventi webhook: messages e messaging_postback. Il nome del tipo di evento non è incluso nel corpo dell'evento, ma possiamo determinarlo controllando certe proprietà degli oggetti.

Cosa sono gli eventi webhook?


La Piattaforma Messenger invia eventi webhook per fornirti delle notifiche delle azioni che avvengono su Messenger. Gli eventi vengono inviati in formato JSON come richieste POST al tuo webhook. Per ulteriori informazioni, consulta Eventi webhook.

Per renderlo possibile, aggiorna il blocco body.entry.forEach del webhook con una condizionale che verifica se l'evento ricevuto contiene una proprietà message o postback. Aggiungeremo anche delle chiamate alle funzioni handleMessage() e handlePostback() che avevamo abbozzato poco fa:

body.entry.forEach(function(entry) {

  // Gets the body of the webhook event
  let webhook_event = entry.messaging[0];
  console.log(webhook_event);


  // Get the sender PSID
  let sender_psid = webhook_event.sender.id;
  console.log('Sender PSID: ' + sender_psid);

  // Check if the event is a message or postback and
  // pass the event to the appropriate handler function
  if (webhook_event.message) {
    handleMessage(sender_psid, webhook_event.message);        
  } else if (webhook_event.postback) {
    handlePostback(sender_psid, webhook_event.postback);
  }
  
});
4
Gestisci i messaggi di testo

Ora che i messaggi in arrivo vengono indirizzati alla funzione handler corretta, possiamo aggiornare handleMessage() in modo che gestisca e risponda ai messaggi di testo di base. Per farlo, aggiorna il codice per definire il payload del messaggio della risposta, quindi passa quel payload a callSendAPI(). Vogliamo rispondere con un messaggio di testo di base, quindi dobbiamo definire un oggetto JSON con una proprietà "text":

function handleMessage(sender_psid, received_message) {

  let response;

  // Check if the message contains text
  if (received_message.text) {    

    // Create the payload for a basic text message
    response = {
      "text": `You sent the message: "${received_message.text}". Now send me an image!`
    }
  }  
  
  // Sends the response message
  callSendAPI(sender_psid, response);    
}
5
Invia un messaggio con l'API Send

È arrivato il momento di inviare il primo messaggio con l'API Send della Piattaforma Messenger.

In handleMessage(), effettuiamo una chiamata a callSendAPI(), quindi ora dobbiamo aggiornarlo per costruire il corpo completo della richiesta e inviarlo alla Piattaforma Messenger. Le richieste all'API Send hanno due proprietà:

  • recipient: definisce il destinatario del messaggio. In questo caso, identifichiamo l'utente tramite il suo PSID.
  • message: definisce i dettagli del messaggio da inviare. In questo caso, useremo l'oggetto messaggio che abbiamo passato dalla funzione handleMessage().

Per costruire il corpo della richiesta, aggiorna la bozza per callSendAPI() come segue:

function callSendAPI(sender_psid, response) {
  // Construct the message body
  let request_body = {
    "recipient": {
      "id": sender_psid
    },
    "message": response
  }
}

Ora dobbiamo solo inviare il messaggio con una richiesta POST all'API Send all'indirizzo https://graph.facebook.com/v2.6/me/messages.

Ricorda di aggiungere il PAGE_ACCESS_TOKEN al parametro access_token della stringa di query dell'URL.

Invio di richieste HTTP

In questa guida introduttiva, usiamo il modulo di richiesta Node.js per inviare richieste HTTP alla Piattaforma Messenger, ma puoi usare qualsiasi client HTTP.

Per installare il modulo di richiesta, esegui npm install request --save dalla riga di comando, quindi importalo aggiungendo quanto segue all'inizio di app.js:

const request = require('request');
function callSendAPI(sender_psid, response) {
  // Construct the message body
  let request_body = {
    "recipient": {
      "id": sender_psid
    },
    "message": response
  }

  // Send the HTTP request to the Messenger Platform
  request({
    "uri": "https://graph.facebook.com/v2.6/me/messages",
    "qs": { "access_token": process.env.PAGE_ACCESS_TOKEN },
    "method": "POST",
    "json": request_body
  }, (err, res, body) => {
    if (!err) {
      console.log('message sent!')
    } else {
      console.error("Unable to send message:" + err);
    }
  }); 
}

Fai un test!

Su Messenger, invia un altro messaggio di testo alla Pagina Facebook. Dovresti ricevere una risposta automatica dall'esperienza Messenger che ripete il messaggio e ti chiede di inviare un'immagine.
6
Gestisci gli allegati

Dal momento che la nostra risposta richiede al destinatario del messaggio di inviare un'immagine, il passaggio successivo è aggiornare il codice in modo che possa gestire gli allegati. Gli allegati inviati vengono automaticamente salvati dalla Piattaforma Messenger e resi disponibili con un URL nella proprietà payload.url di ciascun indice nell'array attachments, quindi estrarremo anche queste informazioni dall'evento.

Che tipo di allegati sono supportati?


L'esperienza Messenger può inviare e ricevere la maggior parte dei tipi di risorse, inclusi immagini, audio, video e file. I contenuti multimediali vengono visualizzati e possono anche essere riprodotti nella conversazione, permettendoti di creare esperienze rich media.

Per determinare se il messaggio è un allegato, aggiorna la condizionale nella funzione handleMessage() per verificare la presenza di una proprietà attachments nel received_message e quindi estrarne l'URL. Per un bot da usare in produzione, dovremmo ripetere l'array per controllare la presenza di più allegati, ma per questa guida introduttiva ci limiteremo al primo allegato.

function handleMessage(sender_psid, received_message) {

  let response;

  // Checks if the message contains text
  if (received_message.text) {
    
    // Creates the payload for a basic text message, which
    // will be added to the body of our request to the Send API
    response = {
      "text": `You sent the message: "${received_message.text}". Now send me an attachment!`
    }

  } else if (received_message.attachments) {
  
    // Gets the URL of the message attachment
    let attachment_url = received_message.attachments[0].payload.url;
  
  } 
  
  // Sends the response message
  callSendAPI(sender_psid, response);    
}
7
Invia un messaggio strutturato

Ora risponderemo all'immagine con un modello generico di messaggio. I modelli generici sono il tipo di messaggio strutturato più comunemente usato e permettono di inviare un'immagine, del testo e dei pulsanti in un singolo messaggio.

Sono disponibili altri modelli di messaggi?


Sì. La Piattaforma Messenger offre un set di utili modelli di messaggio, ciascuno progettato per supportare una struttura comune dei messaggi diversa, tra cui elenchi, ricevute, pulsanti e altro ancora. Per tutti i dettagli, consulta Modelli.

I modelli dei messaggi sono definiti nella proprietà attachment del messaggio, che contiene le proprietà type e payload. La proprietà payload è quella in cui definiremo le seguenti proprietà del nostro modello generico:

  • template_type: definisce il tipo di modello usato per il messaggio. Usiamo il modello generico, quindi il valore è "generic".
  • elements: definisce le proprietà personalizzate del modello. Per il modello generico, definiremo un titolo, un sottotitolo, un'immagine e due pulsanti di postback.

Per il messaggio strutturato, useremo l'attachment_url che ci è stato inviato come l'image_url da visualizzare nel modello e includeremo dei pulsanti di postback per consentire al destinatario di rispondere. Per costruire il payload del messaggio e inviare il modello generico, aggiorna handleMessage() come segue:

function handleMessage(sender_psid, received_message) {
  let response;
  
  // Checks if the message contains text
  if (received_message.text) {    
    // Create the payload for a basic text message, which
    // will be added to the body of our request to the Send API
    response = {
      "text": `You sent the message: "${received_message.text}". Now send me an attachment!`
    }
  } else if (received_message.attachments) {
    // Get the URL of the message attachment
    let attachment_url = received_message.attachments[0].payload.url;
    response = {
      "attachment": {
        "type": "template",
        "payload": {
          "template_type": "generic",
          "elements": [{
            "title": "Is this the right picture?",
            "subtitle": "Tap a button to answer.",
            "image_url": attachment_url,
            "buttons": [
              {
                "type": "postback",
                "title": "Yes!",
                "payload": "yes",
              },
              {
                "type": "postback",
                "title": "No!",
                "payload": "no",
              }
            ],
          }]
        }
      }
    }
  } 
  
  // Send the response message
  callSendAPI(sender_psid, response);    
}

Fai un test!

In Messenger, invia un'immagine alla tua Pagina Facebook. L'esperienza Messenger dovrebbe rispondere con un modello generico.
8
Gestisci i postback

L'ultimo passaggio è gestire il webhook messaging_postbacks che verrà inviato quando il destinatario del messaggio seleziona uno dei pulsanti di postback nel nostro modello generico.

Cosa posso fare con i postback?


Il pulsante con postback invia un evento webhook messaging_postbacks al webhook che include una stringa personalizzata di massimo 1000 caratteri nella proprietà payload. In questo modo, puoi facilmente implementare diversi payload di postback da analizzare a cui rispondere con comportamenti specifici.

Dal momento che il nostro modello generico permette al destinatario di scegliere tra due pulsanti con postback, risponderemo in base al valore della proprietà payload dell'evento di postback. Per farlo, aggiorna la bozza handlePostback() come segue:

function handlePostback(sender_psid, received_postback) {
  let response;
  
  // Get the payload for the postback
  let payload = received_postback.payload;

  // Set the response based on the postback payload
  if (payload === 'yes') {
    response = { "text": "Thanks!" }
  } else if (payload === 'no') {
    response = { "text": "Oops, try sending another image." }
  }
  // Send the message to acknowledge the postback
  callSendAPI(sender_psid, response);
}

Fai un test!

In Messenger, seleziona ciascuno dei pulsanti con postback del modello generico. Dovresti ricevere una risposta di testo diversa per ciascun pulsante.
9
Se il test è andato a buon fine, hai appena finito di costruire la tua prima esperienza Messenger!

Assistenza per gli sviluppatori