brain_team
brain_team

Reputation: 31

Javascript Variable is not updated

Here is my code

var isInput = false; 

app.post('/webhook', function (req, res) {
    var data = req.body;

      if (data.object === 'page') {

        data.entry.forEach(function(entry) {
          var pageID = entry.id;
          var timeOfEvent = entry.time;
      entry.messaging.forEach(function(event) {
        if (event.message) {
          receivedMessage(event);
        } else if(event.postback){
          receivedPostback(event);
        }
        else {
          console.log("Webhook received unknown event: ", event);
        }
      });
    });

    res.sendStatus(200);
  }
});

function receivedMessage(event) {
  var senderID = event.sender.id;
  var recipientID = event.recipient.id;
  var timeOfMessage = event.timestamp;
  var message = event.message;

  console.log("Received message for user %d and page %d at %d with message:", 
    senderID, recipientID, timeOfMessage);
  console.log(JSON.stringify(message));

  var messageId = message.mid;
  var messageText = message.text;
  var messageAttachments = message.attachments;

  if (messageText) {

    switch (messageText) {

      case 'Vote': 
        delayText(senderID, "Send your message ", 1000); 
        isInput = true; 
        break; 

      default:
        if(isInput){
          token = messageText; 
          sendTextMessage(senderID, "token: " + token)
          isInput = false; 
        } else {
         sendTextMessage(senderID, "isInput: " + isInput)
        }
        break; 
    }
  } 
}

I'd like to execute

if (isInput) {
  token = messageText; 
  sendTextMessage(senderID, "token: " + token)
  isInput = false
}

in default case, but it never works.

As you can see in the code above, if user send a message 'Vote', my chatbot would reply "send your message" and update isInput as true. But it says isInput is false when I send a message to the bot again. How should I let isInput updated as true?

Upvotes: 1

Views: 76

Answers (2)

EyuelDK
EyuelDK

Reputation: 3199

This code will never execute because isInput is always false. Look at code above switch statement.

...

isInput = false; // this is always reseting isInput to false

...

if (isInput) {
  token = messageText; 
  sendTextMessage(senderID, "token: " + token)
  isInput = false; 
}

Upvotes: 1

MNI Noyon
MNI Noyon

Reputation: 98

Everytime you invoke the receivedMessage() method it sets the isInput variable to false. Try with this code

var isInput = false; 

app.post('/webhook', function (req, res) {
    var data = req.body;

      if (data.object === 'page') {

        data.entry.forEach(function(entry) {
          var pageID = entry.id;
          var timeOfEvent = entry.time;
      entry.messaging.forEach(function(event) {
        if (event.message) {
          receivedMessage(event);
        } else if(event.postback){
          receivedPostback(event);
        }
        else {
          console.log("Webhook received unknown event: ", event);
        }
      });
    });

    res.sendStatus(200);
  }
});

function receivedMessage(event) {
  var senderID = event.sender.id;
  var recipientID = event.recipient.id;
  var timeOfMessage = event.timestamp;
  var message = event.message;

  console.log("Received message for user %d and page %d at %d with message:", 
    senderID, recipientID, timeOfMessage);
  console.log(JSON.stringify(message));

  var messageId = message.mid;
  var messageText = message.text;
  var messageAttachments = message.attachments;

  if (messageText) {

    switch (messageText) {

      case 'Vote': 
        delayText(senderID, "Send your message ", 1000); 
        isInput = true; 
        break; 

      default:
        if(isInput){
          token = messageText; 
          sendTextMessage(senderID, "token: " + token)
          isInput = false; 
        } else {
         sendTextMessage(senderID, "isInput: " + isInput)
        }
        break; 
    }
  } 
}

Upvotes: 1

Related Questions