Search code examples
node.jsnotificationsbotframeworkchatbotfacebook-messenger

Chatbot messages do not show up in Facebook Messenger chat heads


I am developing a chatbot for Facebook Messenger using Microsoft Bot Framework. The bot sends the user proactive messages (reminders). Unfortunately, for some reason the messages never show up in a chat head (the Android widget for conversations), nor pop up a chat head if it wasn't present on the screen before. It does happen for other chatbots (Jarvis, for example).

This is the code that sends the reminders:

Reminder.find({ next_reminder: { $lte: new Date() } }, (err, res) => {
        if (err !== null) {
            return console.error(err);
        }

        res.forEach(reminder => {
            // Build a notification message and address it to user who created the reminder           

            const msg = new builder.Message().text('...');

            bot.beginDialog(reminder.user_address, '*:/sendReminder', {message: msg, nudnik: nudnik});

            });
        });
    };
};

I have also tried bot.send(msg, () => ....) and session.beginDialog('sendReminder', msg). However, there is still no indication from Messenger when the message is received. What could go wrong here?


Solution

  • OK, I figured it out! Apparently, the default notification setting for a Facebook message is not to show a notification. To change it, in NodeJS you should add channel-specific data to the message with the following code:

    msg = msg.sourceEvent({
                        facebook:
                            {notification_type: 'REGULAR'}
                    });
    

    You can discover more in official documentation by Microsoft (here and here) and also in this Github discussion.