ka4ivan / laravel-notification-channel-instagram
Instagram Notifications Channel for Laravel
Requires
- php: >=8.1
- illuminate/notifications: ~9.0 || ~10.0 || ~11.0 || ~12.0
- illuminate/support: ~9.0 || ~10.0 || ~11.0 || ~12.0
Requires (Dev)
- mockery/mockery: ^1.0
- phpunit/phpunit: ^9.0 || ^10.0
README
This package makes it easy to send notifications using the Instagram Messenger with Laravel.
Contents
Installation
You can install the package via composer:
composer require ka4ivan/laravel-notification-channel-instagram
Setting up your Instagram Bot
Get Profile ID
curl -X GET "https://graph.instagram.com/me?fields=id,username&access_token=ACCESS_TOKEN"
Set config
Next we need to add tokens to our Laravel configurations. Create a new Instagram section inside config/services.php
and place the page token there:
// config/services.php 'instagram' => [ 'api_version' => env('INSTAGRAM_API_VERSION', '22.0'), 'access_token' => env('INSTAGRAM_ACCESS_TOKEN', ''), 'profile_id' => env('INSTAGRAM_PROFILE_ID', ''), 'start_buttons' => [ [ 'question' => 'Start', 'payload' => 'start', ], ], ],
Set start buttons
Run the command to set the start buttons
php artisan instagram:set-start-buttons
Possible options for the command
{--access_token= : Instagram access token} {--profile_id= : Instagram profile ID} {--api_version= : Instagram API version (default from config)}'
This command will add the start buttons that appear when entering the chat for the first time
Usage
You can now use the Instagram channel in your via()
method, inside the InvoicePaid class. The to($recipientId)
(IGSID) method defines the Instagram user, you want to send the notification to.
use NotificationChannels\Instagram\InstagramChannel; use NotificationChannels\Instagram\InstagramMessage; use Illuminate\Notifications\Notification; class ChannelConnected extends Notification { public function via($notifiable) { return [InstagramChannel::class]; } public function toInstagram($notifiable) { return InstagramMessage::create() ->to($notifiable->instagram_id) // Optional ->text('Congratulations, the communication channel is connected'); } }
The notification will be sent from your Instagram page, whose page token you have configured earlier. Here's a screenshot preview of the notification inside the chat window.
Message Examples
Basic Text Message
return InstagramMessage::create('You have just paid your monthly fee! Thanks');
Message With Attachment
return InstagramMessage::create() ->attach(AttachmentType::IMAGE, url('images/'.$this->product->id)) ->to($notifiable->instagram_id);
Media types and specifications
Media Type | Supported Format | Supported Size Maximum |
---|---|---|
Audio | aac, m4a, wav, mp4 | 25MB |
Image | png, jpeg, gif | 8MB |
Video | mp4, ogg, avi, mov, webm | 25MB |
Message With Buttons
return InstagramMessage::create() ->to($notifiable->instagram_id) ->text('How can we help?') ->buttons([ Button::create('View Website', $url)->isTypeWebUrl(), Button::create('Start Chatting', ['user' => $this->user->id])->isTypePostback() // Custom payload sent back to your server ]);
Routing a message
You can either send the notification by providing with the page-scoped user id of the recipient to the to($recipientId)
(IGSID) method like shown in the above example or add a routeNotificationForInstagram()
method in your notifiable model:
/** * Route notifications for the Instagram channel. * * @return int */ public function routeNotificationForInstagram() { return $this->instagram_id; }
Available Message methods
to($recipientId)
: (string) User (recipient) Instagram ID (IGSID).text('')
: (string) Notification message.attach($attachmentType, $url)
: (AttachmentType, string) An attachment type (IMAGE, AUDIO, VIDEO) and the url of this attachment.buttons($buttons = [])
: (array) An array of "Call to Action" buttons (Created using NotificationChannels\Instagram\Components\Button::create()). You can add up to 3 buttons of one of the following types: web_url or postback. See Button methods below for more details.
Available Button methods
title('')
: (string) Button Title.data('')
: (string) Button Data - It can be a web url or postback data.type('')
: (string) Button Type -web_url
orpostback
. UseButtonType
enumerator for guaranteeing valid valuesisTypeWebUrl()
: Helper method to create aweb_url
type button.isTypePostback()
: Helper method to create apostback
type button.
Contributing
Please see CONTRIBUTING for details.
License
The MIT License (MIT). Please see License File for more information.