Twilio Fax, SMS, MMS, Voice Call recording, receiving, sending support for laravel
i-rocky/laravel-twilio is a Laravel package for twilio fax, sms, mms, voice call recording, receiving, sending support for laravel.
It currently has 4 GitHub stars and 45 downloads on Packagist (latest version 1.1.0).
Install it with composer require i-rocky/laravel-twilio.
Discover more Laravel packages by i-rocky
or browse all Laravel packages to compare alternatives.
Last updated
Run the following commands
composer require i-rocky/laravel-twilio
php artisan laravel-twilio:install
This should publish the following files
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
To use
TwilioService.jsrunyarn add axios twilio-client
You can add/update/remove/move the files and use as your wish
Update 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'),
],
...
Update .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 - you need to create a TwiML app for calling from browserLARAVEL_TWILIO_BASE_URL - URL prefix for laravel-twilioLARAVEL_TWILIO_REJECT_CALL_MESSAGE - reject incoming calls with this message when calling is disabledLARAVEL_TWILIO_REPLY_MESSAGE - reply to incoming messages, null for no replyNow you have to set the Webhook URL in Twilio console.
Replace
laravel-twilioin the Webhook URL with the base URL you've set forLARAVEL_TWILIO_BASE_URLin.env
Go to your phone number configuration from Active Numbers then click on the desired number.
Voice & Fax for Accept Incoming select Voice CallsConfigure With select Webhooks, TwiML Bins, Functions, Studio, or ProxyA Call Comes In select Webhook and set the value to https://your-domain.tld/api/laravel-twilio/voice/incomingGo to your phone number configuration from Active Numbers then click on the desired number.
Voice & Fax for Accept Incoming select FaxesConfigure With select Webhooks, TwiML Bins, Functions, Studio, or ProxyA Fax Comes In select Webhook and set the value to https://your-domain.tld/api/laravel-twilio/fax/incomingGo to your phone number configuration from Active Numbers then click on the desired number.
Configure With select Webhooks, TwiML Bins, Functions, Studio, or ProxyA Message Comes In select Webhook and set the value to https://your-domain.tld/api/laravel-twilio/message/incomingGo to TwiML Apps list and select desired app or create a new app
Voice set the REQUEST URI to https://your-domain.tld/api/laravel-twilio/voiceImplement 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);
}
}
Implement notification
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
}
}
If you don't use the
to('+number')method in your message construction, you must havephone,phone_numberproperty orrouteNotificationForTwilio()method implemented in yourNotifiableimplementation. The number must start with+followed by country code.
If you don't have
usernameproperty definition in your Auth provider model, you must implementlaravelTwilioIdentity()method to give your agents an identity for calling.
Namespace Rocky\LaravelTwilio\Events
LaravelTwilioIncomingMessage::class [gives access to IncomingMessage at $event->getMessage()]LaravelTwilioIncomingFax::class [gives access to IncomingFax at $event->getFax()]LaravelTwilioMessageSent::class [gives access to InstanceResource at $event->getMessage() and $notifiable at $event->getNotifiable()]LaravelTwilioMessageSendingFailed::class [gives access to Exception at $event->getException(), Notification at $event->getNotification(), $notifiable at $event->getNotifiable()]LaravelTwilioMessageDeliveryReport::class [gives access to MessageDeliveryReport at $event->getReport()]LaravelTwilioFaxDeliveryReport::class [gives access to FaxDeliveryReport at $event->getReport()]LaravelTwilioInboundCall::class [gives access to InboundCall at $event->getCall()]LaravelTwilioInboundCallRejected::class [gives access to InboundCall at $event->getCall()]LaravelTwilioOutboundCall::class [gives access to OutboundCall at $event->getCall()]LaravelTwilioCallStatusUpdate::class [gives access to CallStatus at $event->getStatus()]LaravelTwilioCallRecord::class [gives access to CallRecord at $event->getRecord()]All the parameters sent by Twilio are available in the instance passed through Event. Some of the frequently used properties are added for autocomplete support.
Example:
$call = $event->getCall();
$sid = $call->CallSid;
$sid = $call->callSid;
$sid = $call->call_sid;
$from = $call->From;
$from = $call->from;
$allParams = $call->all();
###The incoming fax implementation is not tested.
Look into the source code for a clearer understanding.