Laravel Twilio API Integration
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"
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.
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();
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.
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.
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);
laravel-twilio is open-sourced software licensed under the MIT license