A simple SparkPost webhook controller to help with email events. Useful for notifying users that you cannot reach them via email inside your application. Compatible with Laravel 5+ and Lumen 5+.
composer require brentnd/laravel-sparkposthooks
- Create a controller that extends SparkPostWebhookController as follows. You can then handle any SparkPost webhook event.
use Brentnd\Api\Webhooks\SparkPostWebhookController;
class MySparkPostController extends SparkPostWebhookController {
/**
* Handle a bounced email
*
* @param $payload
*/
public function handleMessageEventBounce($payload)
{
$email = $payload['rcpt_to'];
}
/**
* Handle a rejected email
*
* @param $payload
*/
public function handleMessageEventPolicyRejection($payload)
{
$email = $payload['rcpt_to'];
}
/**
* Handle an email open
*
* @param $payload
*/
public function handleTrackEventOpen($payload)
{
$transmissionId = $payload['transmission_id'];
}
}
- Create the route to handle the webhook. In your routes.php file add the following.
post('sparkpost-webhook', ['as' => 'sparkpost.webhook', 'uses' => 'MySparkPostController@handleWebhook']);
-
Exclude your route from CSRF protection so it will not fail.
-
Make sure you add your webhook in SparkPost to point to your route. You can do this here: https://app.sparkpost.com/webhooks
Common events and their handlers. For other events, just follow the same pattern.
Event type | Event | Method |
---|---|---|
Ping | - | handlePing() |
Message Events | Bounce | handleMessageEventBounce() |
Message Events | Delivery | handleMessageEventDelivery() |
Message Events | Injection | handleMessageEventInjection() |
Message Events | Policy Rejection | handleMessageEventPolicyRejection() |
Message Events | Delay | handleMessageEventDelay() |
Engagement Events | Click | handleTrackEventClick() |
Engagement Events | Open | handleTrackEventOpen() |
Engagement Events | Initial Open | handleTrackEventInitialOpen() |
Unsubscribe Events | List Unsubscribe | handleUnsubscribeEventListUnsubscribe() |
Unsubscribe Events | Link Unsubscribe | handleUnsubscribeEventLinkUnsubscribe() |
Based on eventhomes/laravel-mandrillhooks