One of the exciting new features that came out in Laravel 5.3 was Laravel Notifications, and they allow you to send quick updates through a variety of services.
Included in the Laravel core is support for Email, Slack, and Nexmo but you can build your own or visit the community project where a lot of integrations have already been built.
As I am working on this site I wanted to automatically send a tweet whenever a new post is published and a package, for this has already been created by Christoph Rumpel. Let’s take a look at how easy it is to integrate the Twitter package and automatically tweet out new posts.
Twitter Package Setup
First, install the package:
1composer require laravel-notification-channels/twitter
Next, add the provider to config/app.php
1...2'providers' => [3 ...4 NotificationChannels\Twitter\TwitterServiceProvider::class,5],6...
Finally, create a new app on Twitter and add your config to the config/services.php file and your .env:
1...2'twitter' => [3 'consumer_key' => getenv('TWITTER_CONSUMER_KEY'),4 'consumer_secret' => getenv('TWITTER_CONSUMER_SECRET'),5 'access_token' => getenv('TWITTER_ACCESS_TOKEN'),6 'access_secret' => getenv('TWITTER_ACCESS_SECRET')7]8...
Tip: The access_token and access_secret can be found on the “Keys and Access Tokens” tab of your Twitter app page.
Sending the Tweet
For my setup, I have a Post model that I’ll be using to send out the tweet from, but you can use any model you already have. Just add the Notifiable trait to it:
1class Post extends Model2{3 use Notifiable;
Next, create your notification class:
1php artisan make:notification PostPublished
Open up this file and adjust the via
method and add a toTwitter
method. Here is the completed class:
1<?php 2 3namespace App\Notifications; 4 5use Illuminate\Notifications\Notification; 6use NotificationChannels\Twitter\TwitterChannel; 7use NotificationChannels\Twitter\TwitterStatusUpdate; 8 9class PostPublished extends Notification10{11 public function via($notifiable)12 {13 return [TwitterChannel::class];14 }1516 public function toTwitter($notifiable) {17 return new TwitterStatusUpdate('You should follow @laravelnews https://laravel-news.com/');18 }19}
Now to call this all you have to do is grab a Post and send it off:
1$post = Post::find(1);2$post->notify(new PostPublished());
The final change we need to make is to update the toTwitter
method in the PostPublished class, so it includes the actual post data.
1public function toTwitter($post) {2 return new TwitterStatusUpdate($post->title .' https://laravel-news.com/'. $post->uri, [$post->featured_image]);3}
The Post model is passed into the method, and then I just pull out the title, the full path to the post and add the post’s featured image as a second param.
That’s it!
These notification channels are simplifying the integration with a lot of external services that in the past would have been a chore to setup manually. If you’d like to go further here is a tutorial on how to send notifications to Telegram
Filed in: