WhatsappAPI - 如何知道是否可以发送任何消息或仅发送模板消息

2024-04-26

这是交易:

在 WhatsApp 云 API 中,如果您发起与用户的对话,则只能发送模板消息。 问题是,如果我尝试发送其他类型的消息(例如图像或纯文本),API 不会向我发送任何错误,它只是发送成功消息,但该消息并未真正传递给用户。 我如何知道我是否可以发送其他消息?

我正在使用 PHP 通过 cURL 发送消息,但我不知道这是否相关。 无论如何,这是代码:

只是为了澄清,此代码已经可以工作,我只是想知道当我无法发送短信时我需要做什么才能收到错误

class ApiWhatsapp
{
    private $TOKEN = "";
    private $VERSION = "";
    private $PHONE_NUMBER_ID = "";
    private $BUSINESS_ACCOUNT = "";

    function __construct() {
        global $conectado;
        $select = "SELECT FIRST 1 * FROM IDSWHATS";
        $arrayIds = $conectado->select($select);
        foreach ($arrayIds as $ids) {
            $this->TOKEN =$ids->TOKEN;
            $this->VERSION =$ids->VERSION;
            $this->PHONE_NUMBER_ID =$ids->PHONE_NUMBER_ID;
            $this->BUSINESS_ACCOUNT =$ids->BUSINESS_ACCOUNT;
        }

        if (!$this->TOKEN) {
            throw new Exception("credentials not found");
        }

    }

    function sendMessageText($to, $text) {
        
        $url = 'https://graph.facebook.com/'.$this->VERSION.'/'.$this->PHONE_NUMBER_ID.'/messages';
        $data = [
            "messaging_product" => "whatsapp",
            "recipient_type" => "individual",
            "to" => $to,
            "type" => "text",
            "text" => [
                "preview_url" => false,
                "body" => $text
            ]
        ];

        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

        $headers = array(
            "Accept: application/json",
            "Content-Type: application/json",
            "Authorization: Bearer " . $this->TOKEN
        );
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));
        $resp = curl_exec($curl);
        curl_close($curl);
        return json_decode($resp);
    }
}

我得到的成功响应:

{
    "status": "success",
    "message_id": "wamid.HBgMNTUzMTczNTgxNDUzFQIAERgSRjM3RDYzMUUyMkY2Rjk5OTJEAA==",
    "response_array": {
        "messaging_product": "whatsapp",
        "contacts": [
            {
                "input": "5531973581453",
                "wa_id": "553173581453"
            }
        ],
        "messages": [
            {
                "id": "wamid.HBgMNTUzMTczNTgxNDUzFQIAERgSRjM3RDYzMUUyMkY2Rjk5OTJEAA=="
            }
        ]
    }
}

有一个规则在WhatsApp 商业 API https://developers.facebook.com/docs/whatsapp/cloud-api/get-started#sent-test-message,

消息模板是唯一可以发送给尚未向您发送消息或在过去 24 小时内未向您发送消息的客户的消息类型。因此,消息模板主要用于发起与客户的对话。

这意味着只有用户在 24 小时窗口内回复业务,业务才能发送其他类型的消息。

其次,WhatsApp 只会在 webhook 中转发此类错误,因此发送消息 API 响应会成功,但要检查消息的真实状态,您需要设置网络钩子 https://developers.facebook.com/docs/whatsapp/cloud-api/guides/set-up-webhooks.


如果你真的想检查用户是否在 24 小时内回复,那么我会建议你一种处理这种情况的方法,

  • 首先,您需要设置webhook,因为您将在webhook中接收用户的消息
  • 当您在 webhook 中收到来自用户的消息时,您需要存储(在数据库中)该用户的联系号码和日期
  • 发送消息时检查数据库中的电话号码是否在 24 小时内得到回复,然后您可以发送其他类型的消息,否则发送模板类型的消息
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WhatsappAPI - 如何知道是否可以发送任何消息或仅发送模板消息 的相关文章

随机推荐