Automatically Send Tweets through Laravel Notifications

Tutorials

November 3rd, 2016

laravel-twitter.png

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 Model
2{
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 Notification
10{
11 public function via($notifiable)
12 {
13 return [TwitterChannel::class];
14 }
15
16 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:

Eric L. Barnes

Eric is the creator of Laravel News and has been covering Laravel since 2012.