我已经设置了一个 Facebook Messenger webhook,将所有传入和传出的消息记录到 Google 表格中。我的 webhook 成功接收来自我的 Facebook 页面和一些 Instagram 帐户的消息,但一些 Instagram 消息被跳过。我的帐户在 DMing 时工作正常且日志正常,但其他帐户未记录。我的 Facebook 消息没有这个问题。 (应用程序未处于开发模式)
这是我的配置:
1. App Permissions:
我的应用程序具有以下权限: • 页面消息传递 • 页面管理元数据 2.网络钩子: Webhook 已订阅: • 消息 • 消息回显 3. Instagram 帐户: 我的 Instagram Business 帐户已链接到 Facebook 页面,并且“管理消息”开关已打开。
问题:
我正在使用的代码:
这是当前处理 Webhook 事件并将其附加到 Google Sheet 的 Cloud Function 代码 (Node.js 20):
const { google } = require("googleapis");
const VERIFY_TOKEN = "your_secure_token"; // Replace with your secure token
const SHEET_ID = "your_google_sheet_id"; // Your Google Sheet ID
const TAB_NAME = "Facebook Messenger"; // Your Google Sheet tab name
const CREDENTIALS = require("./credentials.json");
// Google Sheets API: Append data function
async function appendToSheet(data) {
const auth = new google.auth.GoogleAuth({
credentials: CREDENTIALS,
scopes: ["https://www.googleapis.com/auth/spreadsheets"],
});
const sheets = google.sheets({ version: "v4", auth });
await sheets.spreadsheets.values.append({
spreadsheetId: SHEET_ID,
range: `${TAB_NAME}!A1`,
valueInputOption: "USER_ENTERED",
resource: { values: [data] },
});
}
// Helper function to determine platform
function getPlatform(id) {
return id.startsWith("178") ? "Instagram" : "Facebook";
}
// Exported webhook function for Cloud Functions
exports.fbWebhook = async (req, res) => {
if (req.method === "GET") {
const mode = req.query["hub.mode"];
const token = req.query["hub.verify_token"];
const challenge = req.query["hub.challenge"];
if (mode === "subscribe" && token === VERIFY_TOKEN) {
return res.status(200).send(challenge);
} else {
return res.status(403).send("Verification failed");
}
}
if (req.method === "POST") {
try {
console.log("Full Payload Received:", JSON.stringify(req.body, null, 2));
const entry = req.body.entry || [];
for (const event of entry) {
const messaging = event.messaging || [];
const platform = getPlatform(event.id); // Determine platform
for (const msg of messaging) {
let row = [];
// Handle incoming messages
if (msg.message && !msg.message.is_echo && msg.sender?.id) {
row = [
new Date().toISOString(),
"incoming_message",
msg.sender.id,
msg.message.text || "Non-text message",
platform,
];
}
// Handle outgoing messages (message_echoes)
if (msg.message?.is_echo && msg.recipient?.id) {
row = [
new Date().toISOString(),
"outgoing_message",
msg.recipient.id,
msg.message.text || "Non-text message",
platform,
];
}
// Append row to Google Sheet
if (row.length > 0) {
await appendToSheet(row);
}
}
}
res.status(200).send("EVENT_RECEIVED");
} catch (err) {
console.error("Error handling webhook:", err.message);
res.sendStatus(500);
}
} else {
res.set("Allow", "GET, POST").status(405).send("Method Not Allowed");
}
};
有人遇到过这个问题吗?
这里面临同样的问题。有什么解决办法吗?