PHP Twilio无法过滤邮件

时间:2016-11-23 14:38:31

标签: php twilio

我正在尝试使用PHP帮助程序库(最新的GitHub)检索邮件历史记录,但我似乎无法使过滤器正常工作。我想只看2016-11-02之后的消息。如果我删除" grater而不是"符号,我看到2016-11-02创建的消息。如果我包括" grater而不是"符号,我收到所有消息(即使是那些比2016-11-02更早的消息)。这是我的代码;

使用此功能,我会看到所有消息(包括2016-11-02之前和之后的消息)

        $client = new Client($account_sid, $auth_token);
        echo "<pre>\n";
        foreach ($client->messages->read(array( 'dateSent>' => date('2016-11-02'))) as $message) {
            echo $message->from . "\n";
            echo $message->to . "\n";
            echo $message->body . "\n";
            echo $message->status . "\n";
            echo $message->dateSent->format('Y-m-d H:i:s') . "\n";
            echo "<br />\n";
        }
        echo "</pre>\n";

使用此功能,我只会在2016-11-02

中看到消息
        $client = new Client($account_sid, $auth_token);
        echo "<pre>\n";
        foreach ($client->messages->read(array( 'dateSent' => date('2016-11-02'))) as $message) {
            echo $message->from . "\n";
            echo $message->to . "\n";
            echo $message->body . "\n";
            echo $message->status . "\n";
            echo $message->dateSent->format('Y-m-d H:i:s') . "\n";
            echo "<br />\n";
        }
        echo "</pre>\n";

我已经尝试过了;

array( 'dateSent>' => date('2016-11-02'))
array( 'dateSent >' => date('2016-11-02'))
array( 'DateSent>' => date('2016-11-02'))
array( 'DateSent >' => date('2016-11-02'))
array( 'date_sent>' => date('2016-11-02'))
array( 'date_sent >' => date('2016-11-02'))

1 个答案:

答案 0 :(得分:2)

我从这里开始挖掘https://www.twilio.com/docs/api/rest/message#list-get-filters

乍一看,似乎至少有一个你尝试过的应该有效。具体来说是array( 'DateSent>' => date('2016-11-02'))。然而,有两件事似乎很奇怪。首先,该文档提到将过滤器作为查询字符串参数发送,这不是这里发生的事情。其次,它清楚地表明参数区分大小写。但是,您开始工作的示例有array( 'dateSent' => date('2016-11-02')),与DateSent的指示情况不符。

所以API文档很糟糕。关闭实际代码!

在跟踪了一系列类和方法之后,我们最终在https://twilio.github.io/twilio-php/source-class-Twilio.Rest.Api.V2010.Account.MessageList.html#99-117。现在,read()方法本身对于解决这个谜团再次无益。我们按照stream()然后转到page()最终为我们提供了所需内容:

$params = Values::of(array(
            'To' => $options['to'],
            'From' => $options['from'],
            'DateSent<' => $options['dateSentBefore'],
            'DateSent' => $options['dateSent'],
            'DateSent>' => $options['dateSentAfter'],
            'PageToken' => $pageToken,
            'Page' => $pageNumber,
            'PageSize' => $pageSize,
        ));

啊哈!您在代码中成功使用了dateSent,在这里我们看到它被使用了!所以,如果我们足够幸运,我们找到了你需要使用的数组索引。

最终,您的问题的答案是您需要使用$client->messages->read(array( 'dateSentAfter' => '2016-11-02'))(实际上没有必要像您在原始代码中那样调用date()函数)