parkourben99/laravel-sms-clicksend
| Install | |
|---|---|
composer require parkourben99/laravel-sms-clicksend |
|
| Latest Version: | 1.4 |
| PHP: | >=5.6.4 |
| License: | MIT |
| Last Updated: | May 13, 2020 |
| Links: | GitHub · Packagist |
ClickSend notifications channel for Laravel 5.1+
This package makes it easy to send notifications using clicksend.com with Laravel 5.1+. Uses ClickSend PHP API wrapper [https://github.com/ClickSend/clicksend-php]
Contents
Installation
Install the package via composer:
composer require parkourben99/laravel-sms-clicksend
Add the service provider to config/app.php:
...
'providers' => [
...
NotificationChannels\ClickSend\ClickSendServiceProvider::class,
],
...
Add your ClickSend username, api_key and optional default sender sms_from to your config/services.php:
...
'clicksend' => [
'username' => env('CLICKSEND_USERNAME'),
'api_key' => env('CLICKSEND_API_KEY'),
'sms_from' => env('CLICKSEND_SMS_FROM'), // optional
],
...
Usage
Use ClickSendChannel in via() method inside your notification classes. Example:
namespace App\Notifications;
use Illuminate\Notifications\Notification;
use NotificationChannels\ClickSend\ClickSendMessage;
use NotificationChannels\ClickSend\ClickSendChannel;
class ClickSendTest extends Notification
{
public $token;
/**
* Create a notification instance.
*
* @param string $token
*/
public function __construct($token)
{
$this->token = $token;
}
public function via($notifiable)
{
return [ClickSendChannel::class];
}
public function toClickSend($notifiable)
{
// statically create message object:
$message = ClickSendMessage::create("SMS test to user #{$notifiable->id} with token {$this->token} by ClickSend");
// OR instantiate:
$message = new ClickSendMessage("SMS test to user #{$notifiable->id} with token {$this->token} by ClickSend");
// available methods:
$message->content("SMS test to user #{$notifiable->id} with token {$this->token} by ClickSend");
$message->from('+6112345678'); // override sms_from from config
return $message;
}
}
In notifiable model (User), include method routeNotificationForClickSend() that returns recipient mobile number:
...
public function routeNotificationForClickSend()
{
return $this->phone;
}
...
From controller then send notification standard way:
$user = User::find(1);
try {
$user->notify(new ClickSendTest('ABC123'));
}
catch (\Exception $e) {
// do something when error
return $e->getMessage();
}
Events
Following events are triggered by Notification. By default:
- Illuminate\Notifications\Events\NotificationSending
- Illuminate\Notifications\Events\NotificationSent
and this channel triggers one when submission fails for any reason:
- Illuminate\Notifications\Events\NotificationFailed
To listen to those events create listener classes in app/Listeners folder e.g. to log failed SMS:
namespace App\Listeners;
use Illuminate\Notifications\Events\NotificationFailed;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Support\Facades\Log;
use NotificationChannels\ClickSend\ClickSendChannel;
class NotificationFailedListener
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Notification failed event handler
*
* @param NotificationFailed $event
* @return void
*/
public function handle(NotificationFailed $event)
{
// Handle fail event for ClickSend
//
if($event->channel == ClickSendChannel::class) {
echo 'failed'; dump($event);
$logData = [
'notifiable' => $event->notifiable->id,
'notification' => get_class($event->notification),
'channel' => $event->channel,
'data' => $event->data
];
Log::error('Notification Failed', $logData);
}
// ... handle other channels ...
}
}
Then register listeners in app/Providers/EventServiceProvider.php
...
protected $listen = [
'Illuminate\Notifications\Events\NotificationFailed' => [
'App\Listeners\NotificationFailedListener',
],
'Illuminate\Notifications\Events\NotificationSent' => [
'App\Listeners\NotificationSentListener',
],
'Illuminate\Notifications\Events\NotificationSending' => [
'App\Listeners\NotificationSendingListener',
],
];
...
API Client
To access the rest of ClickSend API you can get client from ClickSendApi:
$client = app(ClickSendApi::class)->getClient();
// then get for eaxample yor ClickSend account details:
$account = $client->getAccount()->getAccount();
// or list of countries:
$countries = $client->getCountries()->getCountries();
Changelog
Please see CHANGELOG for more information what has changed recently.
Testing
Incomplete
$ composer test
Contributing
Please see CONTRIBUTING for details.
Credits
License
The MIT License (MIT). Please see License File for more information.
Related Packages
This package makes it easy to send notifications using [turbosms.ua](https://tur...
Version History
| Version | Released | PHP | Laravel | License |
|---|---|---|---|---|
| 1.4 | >=5.6.4 | ^5.1 | | MIT | |
| 1.3 | >=5.6.4 | ^5.1 | MIT | |
| 1.2 | >=5.6.4 | ^5.1 | MIT | |
| v1.1.1 | >=5.6.4 | ^5.1 | MIT | |
| v1.1 | >=5.6.4 | ^5.1 | MIT | |
| v1.0.1 | >=5.6.4 | ^5.1 | MIT |