Clickatell WhatsApp 集成无法发送图像
Clickatel WhatsApp Integration Unable to Send Images
我无法使用 Clickatel One 发送媒体文件,尤其是图像 (jpeg) API。
但是,正在发送短信。
下面是我发送文件的代码片段:(PHP)
$header = [
'Authorization: ' . $clickatel_api_key,
'Content-Type: image/jpeg'
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_URL, 'https://platform.clickatell.com/v1/media?fileName=' . $name . '&to=254712345678');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $file);
curl_setopt($ch, CURLOPT_ENCODING, '');
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 0);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
return $result;
以下是请求的响应:
{"error":null,"fileId":"2eee5d0eee4fc4f42943e47c06f12345fdss2ddd.jpg","accepted":true}
媒体文件未传送。
我认为您在示例中执行的 API 调用会上传文件和 returns 文件 ID。接下来您必须使用该文件 ID 发送消息(另一个 HTTP POST),例如:
{
"messages": [
{
"channel": "whatsapp",
"to": "2799900001",
"media": {
"fileId": "USE YOUR FILE ID HERE",
"caption": "First Image File"
}
}
]
}
Uploaded media file will be available for message sending for 30 days after uploading
另一种方法是执行一个包含内联文件数据的 HTTP 请求:
{
"messages": [
{
"channel": "whatsapp",
"to": "2799900001",
"content": "/9j/4AAQSkZJRgABAQEASABIAAD/2w...SDayT2Nha/OIUS3FhlyHzB8ic6ctekf/9k=",
"media": {
"contentType": "image/png",
"caption": "First Image File"
}
}
]
}
我参考的 Clickatell 文档中的示例称为:
- Whatsapp:参考媒体:一条消息
- Whatsapp:内联媒体:一条消息
如果您使用通过引用发送的方法(涉及两个 HTTP 请求),那么在所有 HTTP 请求(甚至对于其他消息)之间重用您的 curl 对象($ch)将是有益的,这样您就可以重用您的 HTTP连接以降低延迟并减少 CPU 对您的使用。
我无法使用 Clickatel One 发送媒体文件,尤其是图像 (jpeg) API。
但是,正在发送短信。
下面是我发送文件的代码片段:(PHP)
$header = [
'Authorization: ' . $clickatel_api_key,
'Content-Type: image/jpeg'
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_URL, 'https://platform.clickatell.com/v1/media?fileName=' . $name . '&to=254712345678');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $file);
curl_setopt($ch, CURLOPT_ENCODING, '');
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 0);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
return $result;
以下是请求的响应:
{"error":null,"fileId":"2eee5d0eee4fc4f42943e47c06f12345fdss2ddd.jpg","accepted":true}
媒体文件未传送。
我认为您在示例中执行的 API 调用会上传文件和 returns 文件 ID。接下来您必须使用该文件 ID 发送消息(另一个 HTTP POST),例如:
{
"messages": [
{
"channel": "whatsapp",
"to": "2799900001",
"media": {
"fileId": "USE YOUR FILE ID HERE",
"caption": "First Image File"
}
}
]
}
Uploaded media file will be available for message sending for 30 days after uploading
另一种方法是执行一个包含内联文件数据的 HTTP 请求:
{
"messages": [
{
"channel": "whatsapp",
"to": "2799900001",
"content": "/9j/4AAQSkZJRgABAQEASABIAAD/2w...SDayT2Nha/OIUS3FhlyHzB8ic6ctekf/9k=",
"media": {
"contentType": "image/png",
"caption": "First Image File"
}
}
]
}
我参考的 Clickatell 文档中的示例称为:
- Whatsapp:参考媒体:一条消息
- Whatsapp:内联媒体:一条消息
如果您使用通过引用发送的方法(涉及两个 HTTP 请求),那么在所有 HTTP 请求(甚至对于其他消息)之间重用您的 curl 对象($ch)将是有益的,这样您就可以重用您的 HTTP连接以降低延迟并减少 CPU 对您的使用。