【问题标题】:What is the correct way to upload file as binary data in http post request of Whatspp business api?在Whatspp业务api的http post请求中将文件作为二进制数据上传的正确方法是什么?
【发布时间】:2020-01-05 09:48:53
【问题描述】:

我正在尝试创建一种功能,可以通过 whatsapp 以 pdf 格式向我们的客户发送发票。为此,我已经有一个发票 pdf,需要通过 whatsapp 服务器上传,以便按照文件发送给我们的客户:https://developers.facebook.com/docs/whatsapp/api/media/

由于它需要二进制媒体数据, 我正在创建一个 http post 请求正文,如下所示:

    let requestOptions = {
      method: method,
      url: "https://whatsapp-url" + '/v1/upload',
      body: Buffer.from(fs.readFileSync("path/test.pdf")),
      json: true,
      headers: {
        authorization: bearerToken,
        'content-type' : 'application/pdf'
      }
    };

作为对此的回应,我确实在响应正文中收到了来自 Whatsapp 的媒体 ID,我使用该响应正文根据文档向客户发送消息: https://developers.facebook.com/docs/whatsapp/api/messages

但是唉!!收到的 pdf 文件已损坏且无法打开,此外,我还注意到,与我通过 Whatsapp 消息在客户端收到的相比,我发送的 pdf 文件的大小要小得多。

谁能帮助我在创建上传请求正文时可能做错了什么,因为我怀疑这是我所有的问题。

【问题讨论】:

    标签: node.js http post file-upload whatsapp


    【解决方案1】:

    正如文档中所说,你不能做这样的事情。

    您需要做的是(通过 api)为文件创建一个唯一的 url 并将其保存在您的最后。然后将该网址发送到whatsApp。

    【讨论】:

    • 您能否提供此“通过 api 创建唯一网址”的源文档?
    【解决方案2】:

    有两种方法可以通过链接或 ID 将文件发送给用户。链接可以是您自己的 WhatsApp 服务器链接,也可以是提供者名称作为参数的外部链接。

    如果您随身携带该文件,则可以将该文件上传到您的 WhatsApp 业务 API 服务器并获得媒体 ID 作为回报。使用该媒体 ID 创建一个链接,或者简单地使用该媒体 ID 将文件发送给用户。

    以下是创建二进制文件的代码示例

     const dataStream = fs.readFileSync(
        `Your Path to file/File Name`,
        null
      );
    
      let uploadFile = yield whatsAppMessage.uploadWhatsappMediaToUser(
        bot, // We are using Bot kit to process message
        'application/pdf', // mime type
        dataStream, // Binary Data Stream to upload the file
        file name //File name
      );
    
        function uploadWhatsappMediaToUser(bot, contentType, binaryData, filename) {
      const options = {
        method: 'POST',
        uri: `Upload URL`,
        headers: {
          Authorization: `Bearer  {auth_token}`,
          'Content-Type': contentType,
          'Content-Disposition': `attachment; filename=${filename}`,
        },
        rejectUnauthorized: false,
        body: binaryData,
      };
    
      return rp(options);
    }
    

    在uploadFile 变量中,您将收到需要解析以提取媒体ID 的json 对象。使用该媒体 ID 发送文件。

    以下是将文件作为附件发送到消息中的代码

    const fileDetails = {
        mime_type: 'application/pdf', // MIME type
        id: uploadFile.media[0].id, // Media ID
        filename: fileName,
      };
      yield whatsAppMessage.sendWhatsappMediaMessageToUser(
        bot, // Bot kit object
        userId, //User mobile number
        fileDetails // Above File object
      );
    

    这样您就可以将文件发送给用户。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-23
      • 1970-01-01
      • 2021-10-15
      相关资源
      最近更新 更多