
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:
composer require laravel-notification-channels/twitter
Next, add the provider to config/app.php
...
'providers' => [
...
NotificationChannels\Twitter\TwitterServiceProvider::class,
],
...
Finally, create a new app on Twitter and add your config to the config/services.php file and your .env:
...
'twitter' => [
'consumer_key' => getenv('TWITTER_CONSUMER_KEY'),
'consumer_secret' => getenv('TWITTER_CONSUMER_SECRET'),
'access_token' => getenv('TWITTER_ACCESS_TOKEN'),
'access_secret' => getenv('TWITTER_ACCESS_SECRET')
]
...
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:
class Post extends Model
{
use Notifiable;
Next, create your notification class:
php artisan make:notification PostPublished
Open up this file and adjust the via
method and add a toTwitter
method. Here is the completed class:
<?php
namespace App\Notifications;
use Illuminate\Notifications\Notification;
use NotificationChannels\Twitter\TwitterChannel;
use NotificationChannels\Twitter\TwitterStatusUpdate;
class PostPublished extends Notification
{
public function via($notifiable)
{
return [TwitterChannel::class];
}
public function toTwitter($notifiable) {
return new TwitterStatusUpdate('You should follow @laravelnews https://laravel-news.com/');
}
}
Now to call this all you have to do is grab a Post and send it off:
$post = Post::find(1);
$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.
public function toTwitter($post) {
return new TwitterStatusUpdate($post->title .' https://laravel-news.com/'. $post->uri, [$post->featured_image]);
}
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 integration with a lot of external services that in the past would have been a chore to setup manually.