能否通过Meta Cloud API直接发送二进制缓冲区形式的WhatsApp图片消息?
关于Meta Cloud API发送WhatsApp图片消息的二进制缓冲区使用问题
Meta Cloud API(即WhatsApp Business Platform)不支持直接通过二进制缓冲区发送图片消息,必须遵循官方规定的两步流程:先将图片上传至Meta的媒体存储系统,获取媒体ID后,再通过该ID发送图片消息。
你之前使用的商业解决方案提供商(BSP)支持直接传二进制,是因为他们在后台帮你完成了上传媒体、获取ID的封装步骤,而Meta官方API要求开发者自行完成这个流程。
正确实现步骤
- 上传二进制图片到Meta媒体端点
将图片缓冲区上传到Meta的/media接口,获取返回的媒体ID。 - 使用媒体ID发送图片消息
构造消息请求时,通过媒体ID引用已上传的图片,而非直接传递二进制数据。
代码示例
上传媒体的代码(Node.js)
const axios = require('axios'); const FormData = require('form-data'); async function uploadMedia(imageBuffer, phoneNumberId, accessToken) { const formData = new FormData(); formData.append('messaging_product', 'whatsapp'); // 传入二进制缓冲区 formData.append('file', imageBuffer, { filename: 'image.png', contentType: 'image/png' }); formData.append('type', 'image/png'); const response = await axios.post( `https://graph.facebook.com/v18.0/${phoneNumberId}/media`, formData, { headers: { ...formData.getHeaders(), Authorization: `Bearer ${accessToken}` } } ); // 返回媒体ID return response.data.id; }
发送图片消息的代码
async function sendImageMessage(mediaId, recipientPhone, phoneNumberId, accessToken) { await axios.post( `https://graph.facebook.com/v18.0/${phoneNumberId}/messages`, { messaging_product: 'whatsapp', recipient_type: 'individual', to: recipientPhone, type: 'image', image: { id: mediaId } }, { headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${accessToken}` } } ); }
注意事项
- 上传的媒体会在Meta的存储中保留30天,若需长期使用需自行存储并重新上传。
- 确保请求携带的
phoneNumberId和accessToken具备发送消息、上传媒体的权限。
内容的提问来源于stack exchange,提问作者Alexandre Scrocaro Junior
相关产品推荐
相关产品推荐

