/laravel-fb-messenger

Laravel Facebook Messenger Provider

Primary LanguagePHPMIT LicenseMIT

Laravel Facebook Messenger Provider

Build Status Coverage Status StyleCI Latest Stable Version Latest Unstable Version Total Downloads Monthly Downloads

Easy to making your facebook messenger chatbot.

Installation

Composer

composer require casperlaitw/laravel-fb-messenger

Laravel

Add Provider

In your config/app.php add Casperlaitw\LaravelFbMessenger\LaravelFbMessengerServiceProvider::class to the providers array:

'providers' => [
    ...
    Casperlaitw\LaravelFbMessenger\LaravelFbMessengerServiceProvider::class,
    ...
],

Publish Configuration

php artisan vendor:publish --provider="Casperlaitw\LaravelFbMessenger\LaravelFbMessengerServiceProvider"

Configuration

Token

Add you token to .env file or modify fb-messenger.php config.

If you don't know how to get token, please checkout Facebook Developer

.env

...
MESSENGER_VERIFY_TOKEN="By You Writing"
MESSENGER_APP_TOKEN="Page Access Token"
...

Auto Typing

Typing

Auto typing is enabled by default.

If you don't want to enable, set auto_typing to false

return [
    'verify_token' => env('MESSENGER_VERIFY_TOKEN'),
    'app_token' => env('MESSENGER_APP_TOKEN'),
    'auto_typing' => false,  // disabled
    'handlers' => [App\YourHandler::class],
    'postbacks' => [
        App\StartupPostback::class,
    ],
];    

Custom Url

If you want to custom url, replace /webhook to you want.

Finally, you can run php artisan route:list to check.

 return [
     'verify_token' => env('MESSENGER_VERIFY_TOKEN'),
     'app_token' => env('MESSENGER_APP_TOKEN'),
     'auto_typing' => true,
     'handlers' => [App\YourHandler::class],
     'custom_url' => '/chatbot', // like this
     'postbacks' => [],
 ];

Custom Handler

The DefaultHandler will reply the same words to user.

You can check out DefaultHandler

Handler MUST BE extends BaseHandler.

<?php

use Casperlaitw\LaravelFbMessenger\Contracts\BaseHandler;
use Casperlaitw\LaravelFbMessenger\Messages\ReceiveMessage;

class DefaultHandler extends BaseHandler
{
    /**
     *  handle method is required. 
     */
    public function handle(ReceiveMessage $message)
    {
        $this->send(new Text($message->getSender(), "Default Handler: {$message->getMessage()}"));
    }
}

Postback Handler

  1. Create your postback handler

$payload is you setting that fb:get-start command or button message's postback button etc.

$payload support regex or string.

use Casperlaitw\LaravelFbMessenger\Contracts\PostbackHandler;
use Casperlaitw\LaravelFbMessenger\Messages\ReceiveMessage;
use Casperlaitw\LaravelFbMessenger\Messages\Text;

class StartupPostback extends PostbackHandler
{
    // If webhook get the $payload is `USER_DEFINED_PAYLOAD` will run this postback handler
    protected $payload = 'USER_DEFINED_PAYLOAD'; // You also can use regex!

    /**
     * Handle the chatbot message
     *
     * @param ReceiveMessage $message
     *
     * @return mixed
     */
    public function handle(ReceiveMessage $message)
    {
        $this->send(new Text($message->getSender(), "I got your payload"));
    }
}
  1. Add to fb-messenger.php config
return [
    'verify_token' => env('MESSENGER_VERIFY_TOKEN'),
    'app_token' => env('MESSENGER_APP_TOKEN'),
    'auto_typing' => true,
    'handlers' => [App\YourHandler::class],
    'postbacks' => [
        App\StartupPostback::class,
    ],
];

Example

API

API Document

Commands

See the document

License

This package is licensed under the MIT license.