2016-05-10 1 views
1

J'écris un bot de messagerie Facebook et j'essaie de stocker une réponse textuelle après une publication. Ce que je veux dire par là, c'est que j'ai un message qui renvoie un message et, selon l'option choisie, il peut saisir un message et stocker ce texte. Le problème est que je veux seulement stocker ce texte après qu'ils choisissent une option pour le message de retour. Le texte peut également être n'importe quoi, donc je ne peux pas écrire une instruction if pour cela.En attente d'une réponse textuelle avec un bot de messagerie Facebook

Voici mon code:

app.post('/', function (req, res) { 
    messaging_events = req.body.entry[0].messaging; 
    for (i = 0; i < messaging_events.length; i++) { 

    event = req.body.entry[0].messaging[i]; 
    sender = event.sender.id; 

    if (event.message && event.message.text) { 
     text = event.message.text; 

     if (text == "Start") { 
     sendTextMessage(sender, "Hey User! I'm a bot"); 
     } 
    } 

    else if (event.postback) { 
     // These are for chosing availibility 
     if (JSON.stringify(event.postback) == '{"payload":"postback"}') { 
     setTextMessage(sender, "Postback recieved"); 
     } 
    } 
} 

Tout est mis en place et en cours d'exécution. Mais quand la publication est reçue, je veux attendre une réponse de l'utilisateur avant de terminer afin que je puisse enregistrer le texte. Comme je l'ai dit plus tôt, ça peut être quelque chose qui signifie que je ne peux pas écrire une instruction if comme je l'ai fait avec "Start". Je souhaite également enregistrer le texte uniquement après avoir cliqué sur le bouton de publication.

Je pensais ajouter une boucle while et attendre que le texte soit reçu avant de terminer la fonction de publication, mais je n'ai pas pu le comprendre.

Alors, comment est-ce que j'attendrais le texte après que j'ai envoyé un message avec une publication?

Toute aide est appréciée, merci!

Répondre

0

Fondamentalement, il n'y a aucun moyen de faire pour vos besoins. Donc, la seule chose que vous pourriez faire est de demander à l'utilisateur d'entrer le texte avec quelques caractères dans le préfixe, par exemple avec un '?' ou '#' ou autre chose que vous pouvez analyser.

1

J'ai également essayé pendant longtemps de trouver un moyen de stocker le texte envoyé par l'expéditeur en utilisant les identifiants de message et les heures de message en vain. La seule technique qui a fonctionné pour moi était de déclarer une variable globale appelée 'état' et puis à la fin de chaque message que j'envoie, je change la valeur de la variable 'état' en quelque chose comme '001' ou '002'. En tant que tel, si je voulais accéder à la réponse à un message particulier que j'ai envoyé, je mettrais if (state === '001'). Voici un exemple:

var state = '000'; 

// if user sends me 'I want dogs' 
    sendTextMessage(sender, "How many dogs?"); 
    state = '001'; 

// if user sends me 'I want cats' 
    sendTextMessage(sender, "How many cats?); 
    state = '002'; 

/* now if I want to access the user's response to how many cats they want, I simply write in an if statement: 
if (state === '002' && /^\d+$/.test(text)) { 
    var numberOfCatsWanted = text 
} 

// in this last part I essentially write 'if the state is '002' and the text contains numbers then a new variable will store the value of the text 

J'espère que cela aide!