当我们通过WhatsApp发送图像时,如何在WhatsApp Business Cloud API中获取图像的URL

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

在使用 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"
                }
              }
            ]
javascript node.js api facebook whatsapp
3个回答
2
投票

如果您想获取图像的 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 的通知。


0
投票

如果您从 WhatsApp 云 API 收到无效 URL 错误,那么您应该在媒体 ID 的帮助下生成一个新 URL,正如“下载媒体文档”部分中也描述的那样。


0
投票

这是用于接收用户发送的消息的代码-

  1. 我们检查它是否是音频文件,如果是则
  2. 我们尝试通过向指定的 url 发送 get 请求来获取音频的 url https://graph.facebook.com/v19.0/${mediaId}/
  3. 然后我们获取图像/音频网址
  4. 然后我们再次向此 url 发送一个 get 请求,该请求仅活动 2 分钟,因此在 2 分钟内我们可以尝试下载该文件。
  5. 将数据存储在某处
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);
    }   

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