Add Nexmo functionality such as SMS and voice calling to your Laravel app with this Laravel Service Provider.
This is a simple Laravel Service Provider providing access to the Nexmo PHP Client Library.
To install the PHP client library using Composer:
composer require nexmo/laravel
Alternatively, add these two lines to your composer require section:
{ "require": { "nexmo/laravel": "^2.0" } }
If you're using Laravel 5.5 or above, the package will automatically register the
Nexmoprovider and facade.
Add
Nexmo\Laravel\NexmoServiceProviderto the
providersarray in your
config/app.php:
'providers' => [ // Other service providers...Nexmo\Laravel\NexmoServiceProvider::class,
],
If you want to use the facade interface, you can
usethe facade class when needed:
use Nexmo\Laravel\Facade\Nexmo;
Or add an alias in your
config/app.php:
'aliases' => [ ... 'Nexmo' => Nexmo\Laravel\Facade\Nexmo::class, ],
Nexmo-Laravel works with Lumen too! You'll need to do a little work by hand to get it up and running. First, install the package using composer:
composer require nexmo/laravel
Next, we have to tell Lumen that our library exists. Update
bootstrap/app.phpand register the
NexmoServiceProvider:
$app->register(Nexmo\Laravel\NexmoServiceProvider::class);
Finally, we need to configure the library. Unfortunately Lumen doesn't support auto-publishing files so you'll have to create the config file yourself by creating a config directory and copying the config file out of the package in to your project:
mkdir config cp vendor/nexmo/laravel/config/nexmo.php config/nexmo.php
At this point, set
NEXMO_KEYand
NEXMO_SECRETin your
.envfile and it should be working for you. You can test this with the following route:
$router->get('/', function () use ($router) { app(Nexmo\Client::class); });
By default, this package uses
nexmo/client, which includes a Guzzle adapter for accessing the API. Some other libraries supply their own Guzzle adapter, leading to composer not being able to resolve a list of dependencies. You may get an error when adding
nexmo/laravelto your application because of this.
The Nexmo client allows you to override the HTTP adapter that is being used. This takes a bit more configuration, but this package allows you to use
nexmo/client-coreto supply your own HTTP adapter.
To do this:
composer require nexmo/client-coreto install the Core SDK
httplug-compatible adapter. For example, to use Symfony's HTTP Client:
composer require symfony/http-client php-http/message-factory php-http/httplug nyholm/psr7
composer require nexmo/laravelto install this package
In your
.envfile, add the following configuration:
NEXMO_HTTP_CLIENT="Symfony\\Component\\HttpClient\\HttplugClient"
You can now pull the
Nexmo\Clientobject from the Laravel Service Container, or use the Facade provided by this package.
You can use
artisan vendor:publishto copy the distribution configuration file to your app's config directory:
php artisan vendor:publish
Then update
config/nexmo.phpwith your credentials. Alternatively, you can update your
.envfile with the following:
NEXMO_KEY=my_api_key NEXMO_SECRET=my_secret
Optionally, you could also set an
application_idand
private_keyif required:
NEXMO_APPLICATION_ID=my_application_id NEXMO_PRIVATE_KEY=./private.key
Private keys can either be a path to a file, like above, or the string of the key itself:
NEXMO_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n[...]\n-----END PRIVATE KEY-----\n"
NEXMO_PRIVATE_KEY="-----BEGIN PRIVATE KEY----- [...] -----END PRIVATE KEY----- "
To use the Nexmo Client Library you can use the facade, or request the instance from the service container:
Nexmo::message()->send([ 'to' => '14845551244', 'from' => '16105552344', 'text' => 'Using the facade to send a message.' ]);
Or
$nexmo = app('Nexmo\Client');$nexmo->message()->send([ 'to' => '14845551244', 'from' => '16105552344', 'text' => 'Using the instance to send a message.' ]);
If you're using private key authentication, try making a voice call:
Nexmo::calls()->create([ 'to' => [[ 'type' => 'phone', 'number' => '14155550100' ]], 'from' => [ 'type' => 'phone', 'number' => '14155550101' ], 'answer_url' => ['https://example.com/webhook/answer'], 'event_url' => ['https://example.com/webhook/event'] ]);
For more information on using the Nexmo client library, see the official client library repository.