i-rocky / laravel-twilio
支持laravel的Twilio传真、短信、MMS、语音通话录音、接收和发送
Requires
- twilio/sdk: ^5.38
Requires (Dev)
- orchestra/testbench: ^4.0
- phpunit/phpunit: ^8.4
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
来电
从活动号码进入您的电话号码配置,然后点击所需的号码。
- 在
Voice & Fax
下的Accept Incoming
中选择Voice Calls
- 在
Configure With
中选择Webhooks, TwiML Bins, Functions, Studio, or Proxy
- 在
A Call Comes In
中选择Webhook
并将其值设置为https://your-domain.tld/api/laravel-twilio/voice/incoming
来电传真
从活动号码进入您的电话号码配置,然后点击所需的号码。
- 在
Voice & Fax
下的Accept Incoming
中选择Faxes
- 在
Configure With
中选择Webhooks, TwiML Bins, Functions, Studio, or Proxy
- 在
A Fax Comes In
中选择Webhook
并将其值设置为https://your-domain.tld/api/laravel-twilio/fax/incoming
来电消息
从活动号码进入您的电话号码配置,然后点击所需的号码。
- 在
Configure With
中选择Webhooks, TwiML Bins, Functions, Studio, or Proxy
- 在
A Message Comes In
中选择Webhook
并将其值设置为https://your-domain.tld/api/laravel-twilio/message/incoming
去电
转到TwiML Apps 列表并选择所需的应用程序或创建新的应用程序
- 在
Voice
下设置REQUEST URI
为https://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
实现中实现phone
、phone_number
属性或routeNotificationForTwilio()
方法。号码必须以+
开头,后跟国家代码。
如果您在Auth提供者模型中没有定义
username
属性,您必须实现laravelTwilioIdentity()
方法,以便您的代理有呼叫的身份。
事件
命名空间 Rocky\LaravelTwilio\Events
LaravelTwilioIncomingMessage::class
[在$event->getMessage()
中提供对IncomingMessage
的访问]LaravelTwilioIncomingFax::class
[在$event->getFax()
中提供对IncomingFax
的访问]LaravelTwilioMessageSent::class
[在$event->getMessage()
和$event->getNotifiable()
中提供对InstanceResource
和Notifiable
的访问]LaravelTwilioMessageSendingFailed::class
[在$event->getException()
、$event->getNotification()
和$event->getNotifiable()
中提供对Exception
、Notification
和Notifiable
的访问]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();
###传入的传真实现未经过测试。
请查看源代码以获得更清晰的理解。