Skip to content

Example

Casper Lai edited this page Aug 9, 2017 · 16 revisions

Example only show handle method

Text Message

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"));
    }
}

Attachment Message

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'] ; 
    }
}

Attachment Reuseable

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);
    }
}

Button Template Message

Default

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

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);
    }
}

Generic Template Message

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);
    }
}

Account Link

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);
    }
}

List Template

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);
    }
}

Postback Handler

Normal Payload

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"));
    }
}

Regex 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'];
    }
}

Quick Reply

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);
    }
}

Quick reply image

User click your quick reply, Webhook will receive Postback object. So You should use PostbackHandler processed.

Get User Info

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());
        
    }
}