Ich bin dabei, einen Facebook-Messenger-Bot mit AWS Lambda und dem Serverless-Framework zu erstellen. Für den Moment möchte ich nur wiederholen, was auch immer gesendet wird, direkt an den Benutzer zurück. Hier ist der Code:AWS Lambda-Funktion, die mehrere Male ausführt (Serverless)
'use strict';
var https = require('https');
const axios = require('axios');
var VERIFY_TOKEN = "VERIFY";
var PAGE_ACCESS_TOKEN = "TOKEN";
module.exports.hello = (event, context, callback) => {
const response = {
statusCode: 200,
body: JSON.stringify({
message: 'Go Serverless v1.0! Your function executed successfully!',
input: event,
}),
};
callback(null, response);
// Use this code if you don't use the http event with the LAMBDA-PROXY integration
// callback(null, { message: 'Go Serverless v1.0! Your function executed successfully!', event });
};
// Receive user messages
module.exports.botReply = (event, context, callback) => {
var data = JSON.parse(event.body);
console.log("BOT REPLY")
// 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(entry) {
var pageID = entry.id;
var timeOfEvent = entry.time;
// Iterate over each messaging event
entry.messaging.forEach(function(msg) {
if (msg.message) {
console.log("received message");
const payload = {
recipient: {
id: msg.sender.id
},
message: {
text: "test"
}
};
const url = "https://graph.facebook.com/v2.6/me/messages?access_token=" + PAGE_ACCESS_TOKEN;
axios.post(url, payload).then((response) => callback(null, response));
} else {
console.log("Webhook received unknown event: ", event);
var response = {
'body': "ok",
'statusCode': 200
};
callback(null, response);
}
});
});
}
}
So der Bot erfolgreich ist echo die Nachrichten zurück, aber in meinen Logs kann ich sehen, es mehrere Male immer ausgeführt. Manchmal hat die Nachricht aus irgendeinem Grund keine "Nachrichten" -Schlüssel im JSON, so dass die mehreren Ausführungen unterschiedliche Ergebnisse haben. Ich glaube, es hat etwas damit zu tun, dass ich die Nachricht an den Benutzer zurücksende, denn wenn ich die axios.post auszeichne, hört das Problem auf. Irgendeine Idee, warum das passiert?
Im Allgemeinen, wenn die Lambda-Funktion eine Ausnahme auslöst, wird Lambda die Funktion mit einem bestimmten Intervall wiederholen. Sind Sie sicher, dass die Funktion nicht fehlschlägt, wenn ein erneuter Versuch stattfindet? – kosa
Nun, ich sehe keine Fehler in den Protokollen ... – Brandon
Wenn Sie Facebook Messenger-Webhooks abonnieren, gibt es mehrere Veranstaltungen, die Sie abonnieren können. Falls Sie das Ereignis "Message Delivered" abonniert haben, kann Ihr Lambda ausgelöst werden, sobald Ihre Lieferung erfolgreich war. Sie können mehr Informationen dazu erhalten von https://developers.facebook.com/docs/messenger-platform/webhook-reference#setup – Asanka