# Amazon Simple Notification Service (AWS SNS) notification channel for Laravel

Latest Version on Packagist Software License Build Status StyleCI Quality Score Code Coverage Total Downloads

This package makes it easy to send notifications using AWS SNS with Laravel 5.5+ and 6.0. Since Laravel already ships with SES email support, this package focuses on sending only SMS notifications for now. More advanced features like support for topics could be added in the future.

# Contents

# Installation

You can install the package via composer:

composer require laravel-notification-channels/aws-sns

# Setting up the AWS SNS service

Add your AWS key ID, secret and default region to your config/services.php:

// config/services.php

// ...
'sns' => [
    'key' => env('AWS_ACCESS_KEY_ID'),
    'secret' => env('AWS_SECRET_ACCESS_KEY'),
    'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
    'version' => 'latest',
],
// ...

# Usage

Now you can use the channel in your via() method inside the notification:

use NotificationChannels\AwsSns\SnsChannel;
use NotificationChannels\AwsSns\SnsMessage;
use Illuminate\Notifications\Notification;

class AccountApproved extends Notification
{
    public function via($notifiable)
    {
        return [SnsChannel::class];
    }

    public function toSns($notifiable)
    {
        return "Your {$notifiable->service} account was approved!";
        
        // or 

        return new SnsMessage("Your {$notifiable->service} account was approved!");
        
        // or

        return SnsMessage::create()
            ->body("Your {$notifiable->service} account was approved!")
            ->transactional();
    
        // or

        return SnsMessage::create([
            'body' => "Your {$notifiable->service} account was approved!",
            'transactional' => true
        ]);

        // or

        return SnsMessage::create([
            'body' => "Your {$notifiable->service} account was approved!"
        ])->promotional();
    }
}

In order to let your Notification know which phone are you sending to, the channel will look for the phone, phone_number or full_phone attribute of the Notifiable model. If you want to override this behaviour, add the routeNotificationForSns method to your Notifiable model.

public function routeNotificationForSns()
{
    return '+1234567890';
}

# Available SnsMessage methods

  • create([]): Accepts an array of key-values where the keys corresponds to the methods below and the values are passed as parameters.
  • body(''): Accepts a string value for the notification body. Messages with more than 140 characters will be split into multiple messages by SNS without breaking any words.
  • promotional(bool): Sets the SMS attribute as the promotional delivery type (default). Optimizes the delivery for lower costs.
  • transactional(bool): Sets the SMS attribute as the transactional delivery type. Optimizes the delivery to achieve the highest reliability (it also costs more).

More information about the SMS Attributes can be found on the AWS SNS Docs. It's important to know that the attributes set on the message will override the default ones configured in your AWS account.

# Changelog

Please see CHANGELOG for more information what has changed recently.

# Testing

$ composer test

# Security

If you discover any security related issues, please email claudson@outlook.com instead of using the issue tracker.

# Contributing

Please see CONTRIBUTING for details.

# Credits

# License

The MIT License (MIT). Please see License File for more information.