我无法通过Twilio和Aloha库发送短信

时间:2018-11-18 16:15:50

标签: php laravel sms try-catch twilio

我正在使用Laravel 5.1,并且想发送SMS消息,所以我安装了Aloha库: https://github.com/aloha/laravel-twilio

我使用以下命令编辑了.env文件:

TWILIO_SID=AC7556934234234234234uuuuuuuuuu3
TWILIO_TOKEN=ca8xxxxxb9b60e66666666666666d355cfe315
TWILIO_FROM=+555555555555

现在,我尝试发送一条包含以下代码的短信:

...
use Twilio;
use Illuminate\Database\Eloquent\Model;
use Aloha\Twilio\TwilioInterface;
use Services_Twilio_RestException;

class AdminController extends Controller {

    public function send() {
        try {
            Twilio::message('+77777777777', 'test test test');
        } catch (\Services_Twilio_RestException $e) {
            dd($e);
        }

当我运行功能send()时,什么都没发生(黑屏)-catch {}没有错误,但是我也没有收到短信。当我查看Twilio SMS日志时,也什么也没有。

如何获取错误消息? 为什么此代码不发送消息?

2 个答案:

答案 0 :(得分:1)

转到Twilio Web控制台,然后尝试发送消息。如果未成功发送消息,通常会给出消息或错误代码。

由于特定国家/地区的电信政策不接受来自未经请求的用户/帐户的消息,我遇到了Twilio无法发送消息的问题。

答案 1 :(得分:1)

这里有Avid Twilio用户。我建议在aloha / twilio上使用Twilio的本机PHP SDK。默认情况下,我认为aloha / twilio依赖于它,它会拉入twilio / sdk,但是我会删除aloha / twilio并仅使用twilio / sdk。

composer require twilio/sdk

然后,我建议在“ Services / Twilio.php”内部创建一个Twilio类,您可以在其中注入Twilio的客户端,创建一个新实例,并使用您的twilio配置数据实例化它。在此Service类中,您现在可以将所有Twilio方法(例如sendSMS(),sendMMS(),validatePhoneNumber()等)放入,并通过将新的Twilio服务类注入到控制器的构造函数中来访问它们。

它可能看起来像这样:

请注意,我的sendSMS()实现使用MessagingServiceSid而不是发件人号码。如果您未在平台中使用Twilio CoPilot消息服务,则可以用'from'替换'messagingServiceSid'。

服务/Twilio.php

namespace App\Services;

use Twilio\Rest\Client;

class Twilio
{


    /**
     * @var Client
     */
    protected $twilio;


    public function __construct() {
        try {
            $this->twilio = new Client(config('twilio.SID'), config('twilio.TOKEN'));
        }
        catch (\Exception $e) {
            //do something with the exception, client could not be instantiated.
        }
    }

//My sendSMS allows for the passing of an array in the $to argument, letting you send to
//multiple numbers (or just one)
    public function sendSMS($to, $message)
    {
        if (is_array($to)) {
            foreach($to as $value) {
                $this->twilio->messages->create($value, ['messagingServiceSid' => config('twilio.MESSAGING_SERVICE_SID'), 'body' => $message]);
            }
            return true;
        }
        $this->twilio->messages->create($to, ['messagingServiceSid' => config('twilio.MESSAGING_SERVICE_SID'), 'body' => $message]);
    }
}

AdminController.php

use App\Services\Twilio;

class AdminController extends Controller {

    protected $twilio;
    public function __construct(Twilio $twilio) 
    {
       $this->twilio = $twilio;
    }

    public function index()
{
$this->twilio->sendSMS('5551234567', 'Test message');
return 'Message was sent.';
}

}

如果以这种方式实现Twilio,您将能够在控制器内使用任何Twilio逻辑,而不必重复创建新的Twilio客户端或传递任何配置数据。

我希望这会有所帮助。