-
Notifications
You must be signed in to change notification settings - Fork 27
Example
Casper Lai edited this page Aug 9, 2017
·
16 revisions
Example only show handle
method
namespace App;
use Casperlaitw\LaravelFbMessenger\Contracts\BaseHandler;
use Casperlaitw\LaravelFbMessenger\Messages\ReceiveMessage;
use Casperlaitw\LaravelFbMessenger\Messages\Text;
class TextHandler extends BaseHandler
{
public function handle(ReceiveMessage $message)
{
$this->send(new Text($message->getSender(), "Your Messages"));
}
}
Support reusable in the v2.0
namespace App;
use Casperlaitw\LaravelFbMessenger\Contracts\BaseHandler;
use Casperlaitw\LaravelFbMessenger\Messages\ReceiveMessage;
use Casperlaitw\LaravelFbMessenger\Messages\Image;
class ImageHandler extends BaseHandler
{
public function handle(ReceiveMessage $message)
{
$image = new Image($message->getSender(), 'https://petersapparel.parseapp.com/img/shirt.png');
// If you want to reusable.
$image->enableReuse();
$response = $this->send($image);
// You can store attachment_id to reusable
$attachmentId = $response->getResponse()['attachment_id'] ;
}
}
If my attachment_id = 1379437372074251
namespace App;
use Casperlaitw\LaravelFbMessenger\Contracts\BaseHandler;
use Casperlaitw\LaravelFbMessenger\Messages\ReceiveMessage;
use Casperlaitw\LaravelFbMessenger\Messages\Image;
class AttachmentReUseableHandler extends BaseHandler
{
public function handle(ReceiveMessage $message)
{
$image = new Image($message->getSender(), null);
$image->setAttachmentId(1379437372074251);
$this->send($image);
}
}
namespace App;
use Casperlaitw\LaravelFbMessenger\Contracts\BaseHandler;
use Casperlaitw\LaravelFbMessenger\Messages\ReceiveMessage;
use Casperlaitw\LaravelFbMessenger\Messages\ButtonTemplate;
class ButtonTemplateHandler extends BaseHandler
{
public function handle(ReceiveMessage $message)
{
$button = new ButtonTemplate($message->getSender(), 'Default text');
$button
->setText('Choose')
->addPostBackButton('First Bbutton')
->addPostBackButton('Second Button')
->addPostBackButton('Third button');
$this->send($button);
}
}
Call button only use by itself.
namespace App;
use Casperlaitw\LaravelFbMessenger\Contracts\BaseHandler;
use Casperlaitw\LaravelFbMessenger\Messages\ReceiveMessage;
use Casperlaitw\LaravelFbMessenger\Messages\ButtonTemplate;
class CallButtonHandler extends BaseHandler
{
public function handle(ReceiveMessage $message)
{
$button = new ButtonTemplate($message->getSender(), 'Default text');
$button
->setText('Choose')
->addCallButton('title', '+15105551234');
$this->send($button);
}
}
Share button only use in the Generic Template Message
namespace App;
use Casperlaitw\LaravelFbMessenger\Contracts\BaseHandler;
use Casperlaitw\LaravelFbMessenger\Messages\ReceiveMessage;
use Casperlaitw\LaravelFbMessenger\Messages\GenericTemplate;
class GenericTemplateHandler extends BaseHandler
{
public function handle(ReceiveMessage $message)
{
$generic = new GenericTemplate($message->getSender());
$defaultButton = new UrlButton(null, 'https://developers.facebook.com/docs/messenger-platform/send-api-reference/list-template');
$generic
->addElement('First item', 'description')
->buttons()
->addPostBackButton('First Button')
->addWebButton('facebook', 'https://facebook.com');
$generic->addElement('Second item', 'description')
->buttons()
->addPostBackButton('Second Button')
->addWebButton('google', 'http://www.google.com')
->addShareButton();
$this->send($generic);
}
}
Support in v2.0
namespace App;
use Casperlaitw\LaravelFbMessenger\Contracts\BaseHandler;
use Casperlaitw\LaravelFbMessenger\Messages\ReceiveMessage;
use Casperlaitw\LaravelFbMessenger\Messages\GenericTemplate;
class AccountLinkHandler extends BaseHandler
{
public function handle(ReceiveMessage $message)
{
$generic = new GenericTemplate($message->getSender());
$generic
->addElement('First item', 'description')
->buttons()
->addPostBackButton('First Button')
->addAccountLinkButton('My auth url');
$this->send($generic);
}
}
namespace App;
use Casperlaitw\LaravelFbMessenger\Contracts\BaseHandler;
use Casperlaitw\LaravelFbMessenger\Messages\ReceiveMessage;
use Casperlaitw\LaravelFbMessenger\Messages\ListTemplate;
use Casperlaitw\LaravelFbMessenger\Messages\UrlButton;
class ListTemplateHandler extends BaseHandler
{
public function handle(ReceiveMessage $message)
{
$template = new ListTemplate($message->getSender());
$template->setButton(new Button(Button::TYPE_POSTBACK, 'Read More', 'GET_MORE_LIST'));
$defaultButton = new UrlButton(null, 'https://developers.facebook.com/docs/messenger-platform/send-api-reference/list-template');
$template->addElement('Moving list', 'Help you to check all of them', 'http://www.mk-sokolovi.com/wp/wp-content/uploads/2013/07/T-shirt-Vector.jpg')
->setDefaultAction($defaultButton)
->buttons()
->addWebButton('View', 'https://developers.facebook.com/docs/messenger-platform/send-api-reference/list-template');
$template->addElement('Cleaning list', 'Help you to check all of them', 'http://www.mk-sokolovi.com/wp/wp-content/uploads/2013/07/T-shirt-Vector.jpg')
->setDefaultAction($defaultButton)
->buttons()
->addWebButton('View', 'https://developers.facebook.com/docs/messenger-platform/send-api-reference/list-template');
$this->send($template);
}
}
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';
/**
* Handle the chatbot message
*
* @param ReceiveMessage $message
*
* @return mixed
*/
public function handle(ReceiveMessage $message)
{
$this->send(new Text($message->getSender(), "I got your payload"));
}
}
If you want to get payload equals MORE 1
~ MORE 99
or more...
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 `MORE 1` or `MORE (\d+)` will run this postback handler
protected $payload = '^MORE\s(?P<id>[0-9]*)$';
/**
* Handle the chatbot message
*
* @param ReceiveMessage $message
*
* @return mixed
*/
public function handle(ReceiveMessage $message)
{
$id = $this->getId($message->getPostback());
$this->send(new Text($message->getSender(), "I got your payload. Your id: {$id}"));
}
/**
* @param $payload
* @return string
*/
protected function getId($payload)
{
preg_match("/{$this->payload}/", $payload, $matches);
return $matches['id'];
}
}
namespace App;
use Casperlaitw\LaravelFbMessenger\Contracts\BaseHandler;
use Casperlaitw\LaravelFbMessenger\Messages\ReceiveMessage;
use Casperlaitw\LaravelFbMessenger\Messages\Text;
use Casperlaitw\LaravelFbMessenger\Messages\QuickReply;
class QuickReplyHandler extends BaseHandler
{
public function handle(ReceiveMessage $message)
{
$text = new Text($message->getSender(), "Default Handler: {$message->getMessage()}");
$text->addQuick(new QuickReply('Red', 'PAYLOAD_RED'))
->addQuick(new QuickReply('Green', 'PAYLOAD_GREEN'));
$this->send($text);
}
}
User click your quick reply, Webhook
will receive Postback
object.
So You should use PostbackHandler
processed.
Get user info from sender id.
Response columns reference docs
namespace App;
use Casperlaitw\LaravelFbMessenger\Contracts\BaseHandler;
use Casperlaitw\LaravelFbMessenger\Messages\ReceiveMessage;
use Casperlaitw\LaravelFbMessenger\Messages\User;
class UserInfoHandler extends BaseHandler
{
public function handle(ReceiveMessage $message)
{
// response will get user info array.
$response = $this->send(new User($message->getSender());
}
}