You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Facebook Messaging API发送PDF文件对象(Node.js)

解决方案:直接发送PDFKit生成的Buffer到Messenger机器人

你的问题核心是Messenger API不支持通过JSON payload直接传递文件Buffer,必须使用multipart/form-data格式上传文件。以下是修改后的完整代码和说明:

问题分析

你当前的代码错误地将PDF Buffer直接放入attachment.payload中,然后用JSON格式发送请求。但Messenger的文件上传接口要求通过表单数据(multipart)提交文件内容,同时附带消息元数据。

修改后的代码

1. 保留generatePDF.js不变

该文件生成PDF Buffer的逻辑是正确的,无需修改。

2. 修改main.js

const pdf = require('./generatePDF');
const formData = require('form-data'); // 需要安装:npm install form-data

// 顶层代码需包裹在async函数中
(async () => {
  const name = "John";
  const generated_pdf = await pdf.createPDF(name);
  await sendMedia(sender_psid, generated_pdf); // 替换sender_psid为实际用户ID
})();

async function sendMedia(sender_psid, fileBuffer) {
  try {
    const form = new formData();
    // 添加收件人信息(序列化为JSON字符串)
    form.append('recipient', JSON.stringify({ id: sender_psid }));
    // 添加消息结构(指定附件类型为file)
    form.append('message', JSON.stringify({
      attachment: {
        type: "file",
        payload: { is_reusable: true } // 可选:允许后续复用该附件
      }
    }));
    // 添加PDF文件Buffer,指定文件名和MIME类型
    form.append('filedata', fileBuffer, {
      filename: 'custom.pdf',
      contentType: 'application/pdf'
    });

    callSendAPI(form);
  } catch (e) {
    console.log("Error sending media: ", e);
  }
}

function callSendAPI(form) {
  form.submit({
    url: `https://graph.facebook.com/v7.0/me/messages?access_token=${process.env.FB_PAGE_TOKEN}`,
    method: 'POST'
  }, (err, res) => {
    if (!err) {
      console.log('Message sent!!!');
      res.resume(); // 处理响应流
    } else {
      console.error("Unable to send message:", err);
    }
  });
}

关键修改点

  • 使用form-data模块构建multipart表单,将PDF Buffer作为filedata字段上传
  • recipient和message字段必须序列化为JSON字符串,作为表单的普通字段提交
  • 指定文件的filename和contentType,确保Messenger能正确识别文件类型
  • 利用form-data的submit方法发送请求,替代原有的request JSON请求

注意事项

  • 确保安装依赖:npm install form-data
  • 若使用较新的Messenger API版本(如v18.0),可替换URL中的版本号,兼容性更好
  • is_reusable参数设为true后,API会返回附件ID,后续可直接通过ID发送,无需重复上传文件
  • 检查你的Facebook Page Token是否拥有pages_messaging权限,且未过期

内容的提问来源于stack exchange,提问作者Dummy Cron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 12:25:23