The package comes with more controllers that will handle each service separately, so you should be implementing different topics for each controller.

You should create a controller that extends one of the package controllers that are displayed below, based on the service you want to get SNS notifications from:

  • \RenokiCo\AwsWebhooks\Http\Controllers\SesWebhook

  • \RenokiCo\AwsWebhooks\Http\Controllers\CloudwatchWebhook

  • \RenokiCo\AwsWebhooks\Http\Controllers\EventbridgeWebhook

A controller that will handle the response for you should be extended & registered in your routes:

use RenokiCo\AwsWebhooks\Http\Controllers\SesWebhook;

class MyAwesomeSesWebhook extends SesWebhook
     * Handle the Bounce event.
     * @param  array  $message
     * @param  array  $originalMessage
     * @param  \Illuminate\Http\Request  $request
     * @return void
    protected function onBounce(array $message, array $originalMessage, Request $request)
        // Unsubscribe the user from newsletter in case of bounce.

        foreach ($message['bounce']['bouncedRecipients'] as $recipient) {
            if ($user = User::whereEmail($recipient['emailAddress'])->first()) {
                    'subscribed' => false,
Route::any('/aws-sns-ses', [MyAwesomeSesWebhook::class, 'handle']);

Make sure to whitelist your route in your VerifyCsrfToken.php:

protected $except = [
    // ...

If you have registered the route and created an SNS Topic, you should register the URL and click the confirmation button from the AWS Dashboard. In a short while, if you implemented the route well, you'll be seeing that your endpoint is registered.

Last updated