danidoble / laravel-notification-whatsapp
WhatsApp notification channel for Laravel
Fund package maintenance!
danidoble
Requires
- php: ^8.1
- illuminate/notifications: ^10.0|^11.0
- illuminate/support: ^10.0|^11.0
- netflie/whatsapp-cloud-api: ^2.2.0
Requires (Dev)
- laravel/pint: ^1.14
- orchestra/testbench: ^8.21|^v9.0.0
- pestphp/pest: ^2.34
Conflicts
README
This package makes it easy to send notifications using WhatsApp Cloud API with Laravel.
This package uses the whatsapp-cloud-api library that will allow you to send messages via the WhatsApp Cloud API from any type of project and framework written in PHP.
Forked from
This package is a Fork from netflie/laravel-notification-whatsapp to add support for Laravel 11
Check the CHANGELOG.md for more information about the changes.
Requirements
- PHP 8.1 or higher
- Laravel 10.0 or higher
Contents
Installation
You can install the package via composer:
composer require danidoble/laravel-notification-whatsapp
Setting up the WhatsApp Cloud API
Create a new Meta application and get your Whatsapp application token
and phone number id
following
the "Get Started"
guide. Place them inside your .env
file like this:
WHATSAPP_FROM_PHONE_NUMBER_ID=your-phone-number-id WHATSAPP_TOKEN=your-token
Usage
The Whatsapp API only allows you to start conversations if you send a template message. This means that you will only be able to send template notifications from this package.
Whatsapp forces you to configure your templates before using them. You can learn how to configure your templates by following Meta's official guide on "How to create templates".
WhatsApp templates sections
A template is divided into 4 sections: header, body, footer and buttons. The header, body and buttons accept variables. The footer doesn't accept variables. You can only send variables from this package for the header and body.
Components
You have available several components that can be used to add context (variables) to your templates. The different components can be created with the component factory:
<?php use NotificationChannels\WhatsApp\Component; Component::currency($amount, $code = 'EUR'); Component::dateTime($dateTime, $format = 'Y-m-d H:i:s'); Component::document($link); Component::image($link); Component::video($link); Component::text($text); Component::urlButton($array_of_urls); Component::quickReplyButton($array_of_payloads); Component::flowButton($flow_token, $array_of_data); Component::location($name, $address, $latitude, $longitude);
Components supported by Whatsapp template sections:
- Header: image, video, document, location and text (the text accepts currency, datetime and text variables)
- Body: currency, datetime and text
- Buttons: url and quick reply
Send a notification from a template
To use this package, you need to create a notification class, like MovieTicketPaid
from the example below, in your
Laravel application. Make sure to check out Laravel's documentation for
this process.
<?php namespace App\Notifications; use Illuminate\Notifications\Notification; use NotificationChannels\WhatsApp\Component; use NotificationChannels\WhatsApp\WhatsAppChannel; use NotificationChannels\WhatsApp\WhatsAppTemplate; class MovieTicketPaid extends Notification { /** * Get the notification's delivery channels. * * @param mixed $notifiable * @return array */ public function via($notifiable) { return [WhatsAppChannel::class]; } public function toWhatsapp($notifiable) { return WhatsAppTemplate::create() ->name('sample_movie_ticket_confirmation') // Name of your configured template ->header(Component::image('https://lumiere-a.akamaihd.net/v1/images/image_c671e2ee.jpeg')) ->body(Component::text('Star Wars')) ->body(Component::dateTime(new \DateTimeImmutable)) ->body(Component::text('Star Wars')) ->body(Component::text('5')) ->buttons(Component::quickReplyButton(['Thanks for your reply!'])) ->buttons(Component::urlButton(['reply/01234'])) // List of url suffixes ->to('34676010101'); } }
Send a text message
You can only send a text message after you've send a template and the user responded.
<?php namespace App\Notifications; use Illuminate\Notifications\Notification; use NotificationChannels\WhatsApp\Component; use NotificationChannels\WhatsApp\WhatsAppChannel; use NotificationChannels\WhatsApp\WhatsAppTextMessage; class MovieTicketPaid extends Notification { /** * Get the notification's delivery channels. * * @param mixed $notifiable * @return array */ public function via($notifiable) { return [WhatsAppChannel::class]; } public function toWhatsapp($notifiable) { return WhatsAppTextMessage::create() ->message('Hello, this is a test message') ->to('34676010101'); } }
Changelog
Please see CHANGELOG for more information what has changed recently.
Testing
$ composer test
Security
If you discover any security related issues, please email hola@netflie.es 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.