Ожидание текстового ответа с ботом мессенджера Facebook

Я пишу бота для обмена сообщениями в Facebook и пытаюсь сохранить текстовый ответ после обратной передачи. Я имею в виду, что у меня есть сообщение, которое отправляет сообщение обратно, и в зависимости от того, какой вариант они выберут, они могут напечатать сообщение в ответ, и я сохраняю этот текст. Проблема в том, что я хочу сохранить этот текст только после того, как они выберут опцию для обратного сообщения. Также текст может быть любым, поэтому я не могу написать для него оператор if.

Вот мой код:

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");
      }
    }
}

Все настроено и работает. Но когда обратная передача получена, я хочу дождаться ответа от пользователя, прежде чем закончить, чтобы сохранить текст. Как я уже говорил ранее, это может быть что угодно, что означает, что я не могу просто написать оператор if, как я сделал с «Старт». Я также хочу сохранить текст только после того, как они нажмут кнопку обратной передачи.

Я думал о добавлении цикла while и ожидании получения текста перед завершением функции обратной передачи, но не мог этого понять.

Так как же мне дождаться текста после того, как я отправил сообщение с обратной передачей?

Любая помощь приветствуется, спасибо!


person Eric Walier    schedule 10.05.2016    source источник


Ответы (2)


Я также долгое время пытался найти способ сохранить текст, отправленный отправителем, используя идентификаторы сообщений и время сообщений, но безрезультатно. Единственная техника, которая работала для меня, заключалась в объявлении глобальной переменной с именем «состояние», а затем в конце каждого отправляемого сообщения я меняю значение переменной «состояние» на что-то вроде «001» или «002». Таким образом, если бы я хотел получить доступ к ответу на конкретное сообщение, которое я отправил, я бы поставил if (state === '001'). Вот пример:

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

Надеюсь, это поможет!

person sickguy125    schedule 13.09.2017

В основном нет никакого способа сделать для вашего требования. Таким образом, вы можете только попросить пользователя ввести текст с некоторыми символами в префиксе, например, с '?' или '#' или что-то еще, что вы можете разобрать.

person iownthegame    schedule 17.05.2016