fleetbase / twilio
Twilio API for Laravel
Fund package maintenance!
hannesvdvreken
Requires
- php: >=7.2.0
- twilio/sdk: ^6.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
- illuminate/console: ~6||~7||~8||~9
- illuminate/support: ~6||~7||~8||~9
- phpunit/phpunit: ^8.0
README
Laravel Twilio API Integration
Installation
Begin by installing this package through Composer. Run this command from the Terminal:
composer require fleetbase/twilio
This will register two new artisan commands for you:
twilio:sms
twilio:call
And make these objects resolvable from the IoC container:
Fleetbase\Twilio\Manager
(aliased astwilio
)Fleetbase\Twilio\TwilioInterface
(resolves aTwilio
object, the default connection object created by theManager
).
There's a Facade class available for you, if you like. In your app.php
config file add the following
line to the aliases
array if you want to use a short class name:
'Twilio' => 'Fleetbase\Twilio\Support\Laravel\Facade',
You can publish the default config file to config/twilio.php
with the terminal command
php artisan vendor:publish --provider="Fleetbase\Twilio\Support\Laravel\ServiceProvider"
Facade
The facade has the exact same methods as the Fleetbase\Twilio\TwilioInterface
. First, include the Facade
class at the top of your file:
use Twilio;
To send a message using the default entry from your twilio
config file:
Twilio::message($user->phone, $message);
One extra feature is that you can define which settings (and which sender phone number) to use:
Twilio::from('call_center')->message($user->phone, $message); Twilio::from('board_room')->message($boss->phone, 'Hi there boss!');
Define multiple entries in your twilio
config file to make use of this feature.
Usage
Creating a Twilio object. This object implements the Fleetbase\Twilio\TwilioInterface
.
$twilio = new Fleetbase\Twilio\Twilio($accountId, $token, $fromNumber);
Sending a text message:
$twilio->message('+18085551212', 'Pink Elephants and Happy Rainbows');
Creating a call:
$twilio->call('+18085551212', 'http://foo.com/call.xml');
Generating a call and building the message in one go:
$twilio->call('+18085551212', function (\Twilio\TwiML\VoiceResponse $message) { $message->say('Hello'); $message->play('https://api.twilio.com/cowbell.mp3', ['loop' => 5]); });
or to make a call with any Twiml description you can pass along any Twiml object:
$message = new \Twilio\TwiML\VoiceResponse(); $message->say('Hello'); $message->play('https://api.twilio.com/cowbell.mp3', ['loop' => 5]); $twilio->call('+18085551212', $message);
Access the configured Twilio\Rest\Client
object:
$sdk = $twilio->getTwilio();
You can also access this via the Facade as well:
$sdk = Twilio::getTwilio();
Pass as many optional parameters as you want
If you want to pass on extra optional parameters to the messages->sendMessage(...)
method from the Twilio SDK, you can do so
by adding to the message
method. All arguments are passed on, and the from
field is prepended from configuration.
$twilio->message($to, $message, $mediaUrls, $params); // passes all these params on.
The same is true for the call method.
$twilio->call($to, $message, $params); // passes all these params on.
Dummy class
There is a dummy implementation of the TwilioInterface
available: Fleetbase\Twilio\Dummy
. This class
allows you to inject this instead of a working implementation in case you need to run quick integration tests.
Logging decorator
There is one more class available for you: the Fleetbase\Twilio\LoggingDecorator
. This class wraps any
TwilioInterface
object and logs whatever Twilio will do for you. It also takes a Psr\Log\LoggerInterface
object
(like Monolog) for logging, you know.
By default the service providers don't wrap objects with the LoggingDecorator
,
but it is at your disposal in case you want it. A possible use case is to construct a
TwilioInterface
object that logs what will happen, but doesn't actually call Twilio (using the Dummy class):
if (getenv('APP_ENV') === 'production') { $twilio = $container->make(\Fleetbase\Twilio\Manager::class); } else { $psrLogger = $container->make(\Psr\Log\LoggerInterface::class); $twilio = new LoggingDecorator($psrLogger, new \Fleetbase\Twilio\Dummy()); } // Inject it wherever you want. $notifier = new Notifier($twilio);
Credits
License
laravel-twilio is open-sourced software licensed under the MIT license