【问题标题】:I can't send SMS with Twilio and Aloha library我无法使用 Twilio 和 Aloha 库发送短信
【发布时间】:2018-11-18 16:15:49
【问题描述】:

我正在使用 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 日志时,也没有任何内容。

如何获得错误消息? 为什么这段代码不发送消息?

【问题讨论】:

  • 您的代码示例没有完全关闭它的括号,实际应用程序中是这种情况吗?您是否从您的 send 方法返回或渲染任何内容?

标签: php laravel sms try-catch twilio


【解决方案1】:

这里是狂热的 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 消息服务,则可以将“messagingServiceSid”替换为“from”。

服务/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 客户端或传递任何配置数据。

我希望这会有所帮助。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我认为不可能从 Twilio 后台发送短信
    • 您可以使用 API explorer 在 Twilio 控制台中测试 Twilio API 端点。
    猜你喜欢
    • 1970-01-01
    • 2018-06-03
    • 2019-03-26
    • 2014-05-30
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 2015-08-08
    相关资源
    最近更新 更多