When using the same Facebook getting started guide (https://developers.facebook.com/docs/messenger-platform/quickstart)
I am getting an error on the node.js console when typing a message and sending it to the bot.
{ error:
{ message: '(#100) No matching user found',
type: 'OAuthException',
code: 100,
fbtrace_id: 'BLguK1o+VsH' } } }
I have the latest version of node.js and am using Ngrok to expose my local host.
My app.post routine is below: (It is an exact copy of the getting started guide)
router.post('/webhook', function (req, res) {
var data = req.body;
// Make sure this is a page subscription
if (data.object == 'page') {
// Iterate over each entry
// There may be multiple if batched
data.entry.forEach(function(pageEntry) {
var pageID = pageEntry.id;
var timeOfEvent = pageEntry.time;
// Iterate over each messaging event
pageEntry.messaging.forEach(function(messagingEvent) {
if (messagingEvent.optin) {
receivedAuthentication(messagingEvent);
} else if (messagingEvent.message) {
receivedMessage(messagingEvent);
} else if (messagingEvent.delivery) {
receivedDeliveryConfirmation(messagingEvent);
} else if (messagingEvent.postback) {
receivedPostback(messagingEvent);
} else {
console.log("Webhook received unknown messagingEvent: ", messagingEvent);
}
});
});
// Assume all went well.
//
// You must send back a 200, within 20 seconds, to let us know you've
// successfully received the callback. Otherwise, the request will time out.
// res.sendStatus(200);
}
});
Here is the receivedMessage function that is being called
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;
// You may get a text or attachment but not both
var messageText = message.text;
var messageAttachments = message.attachments;
if (messageText) {
// If we receive a text message, check to see if it matches any special
// keywords and send back the corresponding example. Otherwise, just echo
// the text we received.
switch (messageText) {
case 'image':
sendImageMessage(senderID);
break;
case 'button':
sendButtonMessage(senderID);
break;
case 'generic':
sendGenericMessage(senderID);
break;
case 'receipt':
sendReceiptMessage(senderID);
break;
default:
//getArticles(function(err,articles){
// sendTextMessage(senderID, articles[0].text);
//});
sendTextMessage(senderID, messageText);
/* client.converse('my-user-session-42', messageText, {})
.then((data) => {
console.log('the question asked :' + messageText);
sendTextMessage(senderID, data.msg);
console.log('Yay, got Wit.ai response: ' + JSON.stringify(data));
}).catch(console.error);
*/
}
} else if (messageAttachments) {
sendTextMessage(senderID, "Message with attachment received");
}
}
Further more here are my require statements:
const bodyParser = require('body-parser');
var express = require('express');
var request = require('request');
var router = express.Router();
const fetch = require('node-fetch');
const {Wit, log} = require('node-wit');
Here is the rest of the functions used:
function sendTextMessage(recipientId, messageText) {
var messageData = {
recipient: {
id: recipientId
},
message: {
text: messageText
}
};
callSendAPI(messageData);
}
function callSendAPI(messageData) {
request({
uri: 'https://graph.facebook.com/v2.6/me/messages',
qs: { access_token: PAGE_ACCESS_TOKEN },
method: 'POST',
json: messageData
}, function (error, response, body) {
if (!error && response.statusCode == 200) {
var recipientId = body.recipient_id;
var messageId = body.message_id;
console.log("Successfully sent generic message with id %s to recipient %s",
messageId, recipientId);
} else {
console.error("Unable to send message.");
console.error(response);
console.error(error);
}
});
}
So I read somewhere that it all has to do with page ids or the way that facebook processes ints but I'm a little confused.
Any help would be much appreciated.
This error occurs because the incorrect token is being used to send messages back to the bot. Ensure you have the correct one (even by hard-coding it at first), which can be copied from your developers.facebook.com page under Messenger -> Settings -> Token Generation.