i-rocky/laravel-twilio

支持laravel的Twilio传真、短信、MMS、语音通话录音、接收和发送

1.1.0 2019-11-30 08:35 UTC

This package is auto-updated.

Last update: 2024-08-29 05:23:35 UTC


README

安装

运行以下命令

composer require i-rocky/laravel-twilio

php artisan laravel-twilio:install

这将发布以下文件

project
└───config
|       laravel-twilio.php
|
└───resources
    └───assets
        └───js
            └───vendor
                └───laravel-twilio
                    └───mappers
                    |       ResponseMapper.js //maps the response into Response instance
                    |
                    └───models
                    |       Response.js //response model
                    |
                    └───services
                            HttpService.js //proxy for axios requests
                            TwilioService.js //wrapper for twilio client

要使用 TwilioService.js,请运行 yarn add axios twilio-client

您可以添加、更新、删除或移动文件,并按需使用

设置

更新 config/services.php

...   
    'twilio' => [
        'account_sid' => env('TWILIO_ACCOUNT_SID'),
        'auth_token'  => env('TWILIO_AUTH_TOKEN'),
        'caller_id'   => env('TWILIO_NUMBER'),
        'username'    => env('TWILIO_USERNAME'),
        'password'    => env('TWILIO_PASSWORD'),
        'app_sid'     => env('TWIML_APP_SID'),
    ],
...

更新 .env

TWILIO_ACCOUNT_SID=
TWILIO_AUTH_TOKEN=
TWILIO_NUMBER=
TWIML_APP_SID=

LARAVEL_TWILIO_BASE_URL=laravel-twilio 
LARAVEL_TWILIO_ENABLE_CALL=true
LARAVEL_TWILIO_RECORD_CALL=true
LARAVEL_TWILIO_REJECT_CALL_MESSAGE="Thank you for calling us"
LARAVEL_TWILIO_REPLY_MESSAGE=null
MIX_LARAVEL_TWILIO_BASE_URL="${LARAVEL_TWILIO_BASE_URL}"
  • TWIML_APP_SID - 您需要创建一个用于浏览器呼叫的TwiML应用程序
  • LARAVEL_TWILIO_BASE_URL - laravel-twilio的URL前缀
  • LARAVEL_TWILIO_REJECT_CALL_MESSAGE - 禁用呼叫时,使用此消息拒绝来电
  • LARAVEL_TWILIO_REPLY_MESSAGE - 回复来电消息,null表示不回复

现在您必须在Twilio控制台中设置Webhook URL。

将Webhook URL中的 laravel-twilio 替换为在 .env 中为 LARAVEL_TWILIO_BASE_URL 设置的基本URL

来电

活动号码进入您的电话号码配置,然后点击所需的号码。

  1. Voice & Fax 下的 Accept Incoming 中选择 Voice Calls
  2. Configure With 中选择 Webhooks, TwiML Bins, Functions, Studio, or Proxy
  3. A Call Comes In 中选择 Webhook 并将其值设置为 https://your-domain.tld/api/laravel-twilio/voice/incoming

来电传真

活动号码进入您的电话号码配置,然后点击所需的号码。

  1. Voice & Fax 下的 Accept Incoming 中选择 Faxes
  2. Configure With 中选择 Webhooks, TwiML Bins, Functions, Studio, or Proxy
  3. A Fax Comes In 中选择 Webhook 并将其值设置为 https://your-domain.tld/api/laravel-twilio/fax/incoming

来电消息

活动号码进入您的电话号码配置,然后点击所需的号码。

  1. Configure With 中选择 Webhooks, TwiML Bins, Functions, Studio, or Proxy
  2. A Message Comes In 中选择 Webhook 并将其值设置为 https://your-domain.tld/api/laravel-twilio/message/incoming

去电

转到TwiML Apps 列表并选择所需的应用程序或创建新的应用程序

  1. Voice 下设置 REQUEST URIhttps://your-domain.tld/api/laravel-twilio/voice

用法

实现 Notifiable

/**
 * @property string username
 * @property string phone
 * @property string phone_number
 */
clas User extends Authenticable {
    use Notifiable;

...

    public function routeNotificationForTwilio() {
        return "+{$this->phone}";
    }
    
    public function laravelTwilioIdentity() {
        return Str::snake($this->first_name);
    }
}

实现通知

use Rocky\LaravelTwilio\Foundation\TwilioMessage;
use Rocky\LaravelTwilio\Message\TwilioSMSMessage;
use Rocky\LaravelTwilio\Message\TwilioMMSMessage;
use Rocky\LaravelTwilio\Message\TwilioFaxMessage;
use Rocky\LaravelTwilio\Message\TwilioCallMessage;
use Rocky\LaravelTwilio\TwilioChannel;

class TwilioTestNotification extends Notification {

...

    public function via($notifiable) {
        return [TwilioChannel::class];
    }

...

    public function toTwilio($notifiable) {
        // SMS
        return (new TwilioSMSMessage())
            ->to('+receiver') // optional
            ->from('+sender') // optional
            ->text('Your message'); // required
    
        // MMS (only works for Canada and US number)
        return (new TwilioMMSMessage())
            ->to('+receiver') // optional
            ->from('+sender') // optional
            ->text('Your message') // optional
            ->mediaUrl('publicly accessible media url'); // required
    
        // Call
        return (new TwilioCallMessage())
            ->to('+receiver') // optional
            ->from('+sender') // optional
            ->mediaUrl('publicly accessible media'); // required
    
        // Fax
        return (new TwilioSMSMessage())
            ->to('+receiver') // optional
            ->from('+sender') // optional
            ->mediaUrl('publicly accessible media url'); // required
    }
}

如果您在消息构造中不使用 to('+number') 方法,您必须在 Notifiable 实现中实现 phonephone_number 属性或 routeNotificationForTwilio() 方法。号码必须以 + 开头,后跟国家代码。

如果您在Auth提供者模型中没有定义 username 属性,您必须实现 laravelTwilioIdentity() 方法,以便您的代理有呼叫的身份。

事件

命名空间 Rocky\LaravelTwilio\Events

  • LaravelTwilioIncomingMessage::class [在 $event->getMessage() 中提供对 IncomingMessage 的访问]
  • LaravelTwilioIncomingFax::class [在 $event->getFax() 中提供对 IncomingFax 的访问]
  • LaravelTwilioMessageSent::class [在 $event->getMessage()$event->getNotifiable() 中提供对 InstanceResourceNotifiable 的访问]
  • LaravelTwilioMessageSendingFailed::class [在 $event->getException()$event->getNotification()$event->getNotifiable() 中提供对 ExceptionNotificationNotifiable 的访问]
  • LaravelTwilioMessageDeliveryReport::class [在 $event->getReport() 中提供对 MessageDeliveryReport 的访问]
  • LaravelTwilioFaxDeliveryReport::class [在 $event->getReport() 中提供对 FaxDeliveryReport 的访问]
  • LaravelTwilioInboundCall::class [在 $event->getCall() 处提供对 InboundCall 的访问]
  • LaravelTwilioInboundCallRejected::class [在 $event->getCall() 处提供对 InboundCall 的访问]
  • LaravelTwilioOutboundCall::class [在 $event->getCall() 处提供对 OutboundCall 的访问]
  • LaravelTwilioCallStatusUpdate::class [在 $event->getStatus() 处提供对 CallStatus 的访问]
  • LaravelTwilioCallRecord::class [在 $event->getRecord() 处提供对 CallRecord 的访问]

Twilio 发送的参数都可在通过事件传递的实例中找到。一些常用属性已添加以支持自动完成。

示例

$call = $event->getCall();

$sid = $call->CallSid;
$sid = $call->callSid;
$sid = $call->call_sid;

$from = $call->From;
$from = $call->from;

$allParams = $call->all();

###传入的传真实现未经过测试。

请查看源代码以获得更清晰的理解。