在 WhatsApp Cloud API 上发送带有变量的模板

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

我正在尝试使用 WhatsApp Cloud API 在 PHP 中发送模板消息,我正在努力解决一个简单的修复问题,但我已经盯着代码太久了,欢迎第二双眼睛来关注找出我哪里出错了。

我不断收到的错误消息是:

(#100) Param template['components'][0] must be a JSON object.

查看用于发送模板的 WhatsApp 文档,我可以看到我需要将组件/参数作为对象数组发送。

这是我当前的代码:

$var1 = array('type' => 'text', 'text' => $clientName);
$var2 = array('type' => 'text', 'text' => $data['meetingDate']);
$var3 = array('type' => 'text', 'text' => $data['meetingStart']);
$var4 = array('type' => 'text', 'text' => $data['meetingLocation']);
$data = [
    "messaging_product" => "whatsapp",
    "to" => $clientNumber,
    "type" => "template",
    "template" => array(
        "name" => "brufton_meeting",
        "language" => array(
        "code" => "en_GB"
    ),
    "components" => array("type" => "body",  "parameters" => array($var1, $var2, $var3, $var4))
),
];
$whatsappData = json_encode($data, JSON_FORCE_OBJECT);
$whatsappHeader = array(
    'Authorization: Bearer ' . {TOKEN},
    'Content-Type: application/json'
);
$ch = curl_init("https://graph.facebook.com/v21.0/".$_SESSION['whatsappNumberID']."/messages");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $whatsappData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $whatsappHeader);
$resultWhatsApp = curl_exec($ch);

加载时,在我得到的 $whatsappData 上运行 print_r:

{"messaging_product":"whatsapp","to":"+447719303165","type":"template","template":{"name":"brufton_meeting","language":{"code":"en_GB"},"components":{"type":"body","parameters":{"0":{"type":"text","text":"Andrew Broughton"},"1":{"type":"text","text":"Monday 1st May 2023"},"2":{"type":"text","text":"11:30"},"3":{"type":"text","text":"https:\/\/zoom.us\/j\/7797022566"}}}}}

所以我可以看到参数没有被标记为对象并被添加为变量,我似乎无法纠正这个问题并且已经绕了一段时间现在错过了(很可能)明显的解决方案!

我已经使用没有变量的模板对此进行了测试,效果很好。我也仔细检查了模板和语言的拼写。只有当使用带有变量的模板时,我才会陷入困境,所以我有理由相信问题出在这个编码而不是身份验证问题上。

php json whatsapp whatsapp-cloud-api
1个回答
0
投票

我解决了这个问题,结果证明我是对的,这是我的代码的错误。

我需要对 json_encode 的组件进行双重数组来创建对象

"components" => array(array("type" => "body",  "parameters" => array($var1, $var2, $var3, $var4)))

我还关闭了“JSON_FORCE_OBJECT”标签,然后一切都按预期工作

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