Easy to making your facebook messenger chatbot.
composer require casperlaitw/laravel-fb-messenger
In your config/app.php
add Casperlaitw\LaravelFbMessenger\LaravelFbMessengerServiceProvider::class
to the providers array:
'providers' => [
...
Casperlaitw\LaravelFbMessenger\LaravelFbMessengerServiceProvider::class,
...
],
php artisan vendor:publish --provider="Casperlaitw\LaravelFbMessenger\LaravelFbMessengerServiceProvider"
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 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,
],
];
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\DefaultHandler::class],
'custom_url' => '/chatbot', // like this
'postbacks' => [],
];
The DefaultHandler
will reply the same words to user.
You can check out DefaultHandler
Handler MUST BE extends BaseHandler
.
<?php
namespace App;
use Casperlaitw\LaravelFbMessenger\Contracts\BaseHandler;
use Casperlaitw\LaravelFbMessenger\Messages\ReceiveMessage;
use Casperlaitw\LaravelFbMessenger\Messages\Text;
class DefaultHandler extends BaseHandler
{
/**
* handle method is required.
*/
public function handle(ReceiveMessage $message)
{
$this->send(new Text($message->getSender(), "Default Handler: {$message->getMessage()}"));
}
}
$payload
is you setting that fb:get-start command or button message's postback button etc.
$payload
support regex or string.
<?php
namespace App;
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"));
}
}
return [
'verify_token' => env('MESSENGER_VERIFY_TOKEN'),
'app_token' => env('MESSENGER_APP_TOKEN'),
'auto_typing' => true,
'handlers' => [App\YourHandler::class],
'postbacks' => [
App\StartupPostback::class,
],
];
The debug route using Pusher
APP_DEBUG=true
BROADCAST_DRIVER=pusher
PUSHER_APP_ID=
PUSHER_KEY=
PUSHER_SECRET=
If package updated, you need to run this script again. Keep your javascript is up-to-date
php artisan vendor:publish --provider="Casperlaitw\LaravelFbMessenger\LaravelFbMessengerServiceProvider" --tag="public --force"
http://[your-site]/fb-messenger/debug
See the document
This package is licensed under the MIT license.