Using the same Facebook getting started guide ( https://developers.facebook.com/docs/messenger-platform/quickstart )
I get an error on the node.js console when I type in a message and send 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 I use Ngrok to publish my localhost.
My app.post routine is below: (This 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 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"); } }
The following are instructions:
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 are the other 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 all this has to do with page ids or the way facebook handles ints, but I'm a bit confused.
Any help would be greatly appreciated.