我正在尝试创建一个功能,通过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的media-id,我使用它按照文档https://developers.facebook.com/docs/whatsapp/api/messages向客户发送消息
但是,唉!收到的pdf文件是损坏的,无法打开,而且我还注意到,我发送的pdf文件比我在客户端通过Whatsapp消息收到的pdf文件要小得多。
有没有人可以帮助我在创建上传的请求体时可能做错了什么,因为我怀疑这就是我的问题所在。
发布于 2019-09-20 14:36:26
有两种方式可以通过链接或通过ID将文件发送给用户。链接可以是您自己的WhatsApp服务器链接,也可以是将提供商名称作为参数的外部链接。
如果您随身携带该文件,则可以将该文件上传到您的WhatsApp业务应用编程接口服务器,并获取媒体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
);
这样,您就可以将文件发送给用户。
发布于 2019-09-02 14:14:57
正如文档上所说的,你不能做这样的事情。
您需要做的是(通过api)为该文件创建一个唯一的url,并将其保存在您的端。然后将该url发送给whatsApp。
https://stackoverflow.com/questions/57755554
复制相似问题