Search code examples
node.jsfacebook-chatbotfacebook-messenger-bot

how to trace user reply to a specific chatbot message in node.js


I wonder how to catch a user reply to a specific chatbot question? I mean for example if the user asks the chatbot for the weather and the chatbot responds back by asking the user for in which city. I would then like to trace what the user responds to that question. So that the city could be used for calling a weather api for the city. I don't know how to track the user reply to that question. Does anyone know if and how this is possible?


Solution

  • So that multiple users can access the chatbot simultaneously, it's best to keep track of each user, and each user's conversation state. In the case of the Messenger API, this would be:

    const users = {}
    const nextStates = {
        'What country are you in?': 'What city are you in?',
        'What city are you in?': 'Let me look up the weather for that city...'
    }
    const receivedMessage = (event) => {
        // keep track of each user by their senderId
        const senderId = event.sender.id
        if (!users[senderId].currentState){
            // set the initial state
            users[senderId].currentState = 'What country are you in?'
        } else {
            // store the answer and update the state
            users[senderId][users[senderId].currentState] = event.message.text
            users[senderId].currentState = nextStates[users[senderId.currentState]]
        }
        // send a message to the user via the Messenger API
        sendTextMessage(senderId, users[senderId].currentState)
    }
    

    Then you will have the answer for each user stored in the users object. You can also use a database to store this.