在使用 WhatsApp Business Cloud API 时,我必须通过 WhatsApp 发送图像。当我发送该图像时,我收到 sha256 base64 字符串和 imageId 形式的响应。我想使用这些凭据检索该图像。当我使用该图像 id 发出 get 请求时,我得到了一个 url。该 URL 实际上已损坏/无效,我无法恢复图像。
请求的响应如下:
"messages": [
{
"from": "918******6",
"id": "wamid.HBgMOT*********EA",
"timestamp": "1655978686",
"type": "image",
"image": {
"mime_type": "image/jpeg",
"sha256": "ian**********jM4k=",
"id": "4**********7"
}
}
]
如果您想获取图像的 URL 并下载此图像,您是否需要使用 API。
在您的 weebhook 中,您需要获取 MEDIA_ID
然后通过这个ID_MEDIA,你得到URL,通过这个URL你可以调用DOWNLOAD API并获取真实图像
所有这些步骤、解释和信息都在官方文档中
https://developers.facebook.com/docs/whatsapp/cloud-api/reference/media#
并检查这个非常非常重要的信息
获取媒体ID 要完成以下某些 API 调用,您需要拥有媒体 ID。有两种方法获取此 ID:
成功的响应包含一个带有媒体 URL 的对象。该网址仅有效5分钟。
通过 API 调用:成功将媒体文件上传到 API 后,媒体 ID 将包含在对您的调用的响应中。
来自 Webhooks:当企业帐户收到媒体消息时,它会自动下载媒体并将其上传到 Cloud API。该事件会触发 Webhooks 并向您发送包含媒体 ID 的通知。
如果您从 WhatsApp 云 API 收到无效 URL 错误,那么您应该在媒体 ID 的帮助下生成一个新 URL,正如“下载媒体文档”部分中也描述的那样。
这是用于接收用户发送的消息的代码-
app.post("/webhook", async (req, res) => {
let audio = req.body.entry[0].changes[0].value.messages[0].audio.id;
console.log(audio)
if (audio) {
// Replace <MEDIA_ID> and <ACCESS_TOKEN> with actual values
const mediaId = audio;
const accessToken = token;
// Make a GET request
const response = await axios.get(`https://graph.facebook.com/v19.0/${mediaId}/`, {
headers: {
'Authorization': `Bearer ${accessToken}`
}
});
// Handle the response as needed
let url=response.data.url;
const mediaUrl = url;
// Make a GET request to the media URL with authorization header
axios.get(mediaUrl, {
headers: {
'Authorization': `Bearer ${accessToken}`
},
responseType: 'stream', // This is important to handle streaming response
})
.then(response => {
const timestamp = Date.now();
const directoryPath = path.join('media');
const dynamicPath = path.join(directoryPath, `media_file_${timestamp}.ogg`);
console.log('Dynamic Path:', dynamicPath);
// Replace with your desired file path
const writer = fs.createWriteStream(dynamicPath);
response.data.pipe(writer);
writer.on('finish', () => {
console.log('Media file saved successfully!');
});
writer.on('error', (err) => {
console.error('Error saving media file:', err);
});
})
.catch(error => {
console.error('Error fetching media file:', error);
});
console.log(response.data);
}