Facebook Messenger Webhook 未跟踪某些 Instagram 消息

问题描述 投票:0回答:1

我已经设置了一个 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");
  }
};

有人遇到过这个问题吗?

instagram-api facebook-messages
1个回答
0
投票

这里面临同样的问题。有什么解决办法吗?

© www.soinside.com 2019 - 2024. All rights reserved.