当前位置: 首页 > 知识库问答 >
问题:

twilio whatsapp api响应状态不正确

狄富
2023-03-14

我正在使用Twilio WhatsApp API。我有沙盒账户,我可以从Twilio向WhatsApp号码发送消息,但是,我面临一个问题,当消息不发送给收件人时,我从API获得的状态与我获得的成功相同。

{
"sid": "xxxxx",
"date_created": "Tue, 08 Jan 2019 09:42:38 +0000",
"date_updated": "Tue, 08 Jan 2019 09:42:38 +0000",
"date_sent": null,
"account_sid": "xxxxxx",
"to": "Whatsapp:xxxxxxx",
"from": "Whatsapp:+xxxxxxx",
"messaging_service_sid": null,
"body": "test",
"status": "queued",
"num_segments": "1",
"num_media": "0",
"direction": "outbound-api",
"api_version": "2010-04-01",
"price": null,
"price_unit": null,
"error_code": null,
"error_message": null,
"uri": "/2010-04-01/Accounts/xxxxxxxxxxxxxx/Messages/xxxxxxxxxxxxxxxxxx.json",
"subresource_uris": {
    "media": "/2010-04-01/Accounts/xxxxxxxxxxxxxxxxxx/Messages/xxxxxxxxxxxxxxxxxxxx/Media.json"
 }
}

如果需要,这里是我的代码。

    public function sendWhatsappMsg() {
    if ( ! empty( $this->apiKey ) && $this->apiKey != null && $this->apiKey != '' ) {
        if($this->apiKey == $_POST['apiKey']) {
            try {
                $to  = $_POST['to'];
                $msg = $_POST['msg'];
                if ( empty( $to ) && empty( $msg ) ) {
                    return array( 'Error' => 'Phone number and message is required!' );
                }
                if ( empty( $to ) ) {
                    return array( 'Error' => 'Phone number is required!' );
                }
                if ( empty( $msg ) ) {
                    return array( 'Error' => 'Message is required!' );
                }
                if(!empty($to) && !empty($msg)){
                    $isVaid = $this->verifyPhoneNumber($to);
                    if($isVaid['valid'] == false){
                        return array( 'Error' => 'Phone number should be valid!' );
                    }else{
                        $twilio = new Client( $this->sid, $this->token );
                        $message = $twilio->messages
                            ->create( "whatsapp:" . $isVaid['international_format'], // to
                                array(
                                    "from"           => "whatsapp:+14155238886",
                                    "body"           => $msg,
                                    "statusCallback" => "http://adwtpoc.digitalgravity.ae/Api.php?method=sendWhatsappMsgCallback"
                                )
                            );
                        return (array('accountSid'=>$message->accountSid,'messageServiceSid'=>$message->messagingServiceSid,'sid'=>$message->sid,'status'=>$message->status));
                    }
                }
            } //catch exception
            catch ( Exception $e ) {
                echo 'Exception: ' . $e->getMessage();
            }
        }else{
            header("HTTP/1.1 403 Forbidden" );
            die('403 Forbidden!');
        }
    }else{
        return array( 'Error' => 'No Api Key Defined!' );
    }
}

共有1个答案

何楷
2023-03-14

我已经对它进行了排序,我得到了messagesid作为响应,所以我使用了另一个API根据它的sid获得消息细节,我得到了我想要的响应。

下面是获取消息详细信息的代码

    public function getMessageStatus($messageSid){
    // Initialize CURL:
    $ch = curl_init('https://api.twilio.com/2010-04-01/Accounts/'.$this->AccountSid.'/Messages/'.$messageSid.'.json');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERPWD, $this->AccountSid . ":" . $this->token);

    // Store the data:
    $json = curl_exec($ch);
    curl_close($ch);

    // Decode JSON response:
    return json_decode($json, true);
}
 类似资料:
  • 我正在使用 webClient 调用调用服务 1,该服务 1 调用服务 2,然后服务 2 从数据库中获取数据并返回它们。问题:我有 onStatus 来捕获错误的响应,因此响应具有 400 或 500 个状态代码。代码示例: 在一些边缘情况下,响应带有200个状态代码,响应体有失败消息和失败原因。那么我如何检索它,然后用该失败消息抛出异常(在其他服务返回的响应对象中)。因为它试图映射并抛出错误。目

  • 问题内容: 我有一个API调用,我需要对其进行一些检查并可能返回各种状态代码。我不需要自定义视图或任何东西,我只需要返回正确的代码。如果用户未通过适当的凭据,则需要返回401状态。如果他们尚未发送受支持的请求格式,则需要返回400状态。 因为它是一个API,所以我真正想做的就是设置响应状态并以一条简单的愚蠢消息退出,该消息说明请求失败的原因(可能使用)。刚好足以完成工作,但我还无法使其正常工作。我

  • 我用的是和Gradle的协议。是否可以从状态更改URL捕获响应?例如,我正在向数据库中添加一条新记录。提供程序创建一个唯一的id,该id必须用于该记录的其他操作。

  • HTTP响应消息的响应状态行分为三部分:HTTP版本、状态码和状态信息,如下所示: HTTP/1.1 200 OK 其中HTTP版本可以是HTTP/1.1或HTTP/1.0,这由Web服务器所支持的HTTP版本决定。状态信息的内容和状态相关,如404状态码所对应的HTTP1.1规范中的状态信息是Not Found。由于HTTP版本一般是基本固定的,而状态信息是随着状态码的变化而变的。因此,在HTT

  • 因为它创建了一个新的资源,所以如果它返回状态代码201是合适的,但目前它返回200。 我发现如何设置状态代码的唯一方法是让方法返回一个并在那里设置它,但我确实不希望我的所有接口返回一个泛型响应,而不是实际的响应对象(在本例中是)。

  • 我目前正在使用Spring Cloud和Feign在我的应用程序中使用微服务。由于在单个服务实例中数据库连接或类似的情况可能会失败,使其返回500个HTTP状态代码,所以我想确保下一个服务器是由服务的客户机重试的。目前,Ribbon的重试机制在服务完全不运行时就像一个魅力一样工作,但当它收到500状态码时,它仍然会立即返回错误,而不进行任何重试。 如果一个实例返回500响应,是否可以配置假客户机或