2016-04-19 20 views
5

Sto imparando a lavorare con Facebook Messenger API. Ho installato con successo un webhook, ho sottoscritto l'applicazione. Ma quando invio un messaggio alla mia pagina, ricevo più istanze dello stesso messaggio come una raffica.Facebook Messenger Webhook che invia continuamente messaggi

Sto memorizzando messaggi che invio dalla mia applicazione quando viene ricevuto dal Webhook.

Una vista del mio database appare nello screenshot qui sotto.

http://prntscr.com/au3emz

sto indovinando può essere perché il messaggio è ancora da leggere? Solo una supposizione selvaggia potrebbe essere qualcun altro lo sa per certo. Ho provato l'esatto esempio di Facebook Office (Node) e sta accadendo anche lì.

Grazie.

+1

Ho anche riscontrato questo problema. Quando invio un messaggio al pulsante dell'utente, il mio gancio Web inizia a inviare messaggi di pulsante non-stop –

+0

Avendo questo problema utilizzando ClaudiaJS e AWS Lambda per un bot di chat di Facebook. È stato detto di aumentare il timeout, sollevandolo fino a 3 minuti e succede ancora. – SMT

risposta

0

Soluzione

Ho inviato una richiesta di sottoscrizione di nuovo per la mia applicazione per fermare questi messaggi.

Quindi in sostanza ciò che ho sperimentato è che l'app re-subscribe di webhook dopo aver ricevuto il messaggio si fermerà ogni ulteriore ricezione fino al prossimo messaggio.

Questo è anche se la soluzione è il nucleo di "Perché questo accade?" non è ancora noto. Sarà contento se qualcuno può contribuire.

Grazie.

+0

Mi rendo conto che si tratta di un vecchio post, ma è necessario inviare esplicitamente una risposta '200 OK' il più velocemente possibile su Facebook altrimenti ritarderà in modo significativo le risposte successive. Fondamentalmente le cose vanno pazze se non lo fai. –

1

Ho avuto lo stesso problema con la mia applicazione di test. Sono ancora nuovo all'API di Messenger e la mia soluzione potrebbe essere ingenua.

Inizialmente, il codice è stato come:

if (text) { 
    sendTextMessage(sender, 'Response 1'); 
} else { 
    queryDB(
    sendTextMessage(sender, 'Response 2'); 
) 
} 
res.sendStatus(200); 

che ha mantenuto l'invio di risposta 1 per sempre. Il codice corretto è:

if (text) { 
    sendTextMessage(sender, 'Response 1'); 
    res.sendStatus(200); 
} else { 
    queryDB(
    sendTextMessage(sender, 'Response 2'); 
    res.sendStatus(200); 
) 
} 

È necessario inviareStatus sempre dopo l'invio di un messaggio.

2

Questo è spesso causato se si sottoscrive il messaggio echocallback event.

Dalla documentazione;

Questa richiamata avverrà quando un messaggio è stato inviato dalla tua pagina.

Ciò significa che si riceverà una copia di qualsiasi messaggio inviato dal bot. Dal tuo codice, questo causerà una forma di ciclo infinito; continueresti a ricevere Response 1.

È possibile verificare facilmente controllando il valore di text; troverete anche Response 1 e ispezionando l'intero payload avrà il campo "is_echo":true.

Soluzione: Modifica iscrizione tua pagina di escludere message_echoes

enter image description here

1

rilevo che betwen facebook invocazione e la mia risposta con 200 statuscode mio codice era in attesa di 2 secondi, il mio codice è sincrono, quindi , il mio codice totale risponde con 200 codice 2 secondi dopo ..
Molte sonde risultati per me che se non invio 200 codice di stato a Facebook in un secondo facebook invia di nuovo messaggio a webhook. Per me l'aolution è stato analizzare il messaggio in arrivo e ottenere il timestamp key (A), quindi ottengo un timestamp. Da un database (B). confronta A == B .. se è vero, faccio nothig e ends.my l'elaborazione webhook, if is false, quindi scrivo nel database il nuovo timestamp (A) e proseguo con il procurement webhook.

Problemi correlati