Skip to content

Latest commit

 

History

History
240 lines (156 loc) · 7.28 KB

README.md

File metadata and controls

240 lines (156 loc) · 7.28 KB

Scrutinizer Code Quality Code Coverage Build Status Total Downloads Latest Stable Version License

Facebook Messenger

This repo contain some tools to work with facebook messenger bot and laravel/lumen. This repo work on beta of facebook messenger. Some big change are coming for sure but I guess that can help you.

Table of contents

  1. Installation
  2. Implement contract
  3. Change service provider
  4. Example of MessengerContract implementation
  5. Create application
  6. Host your application
  7. Facade
    1. sendTextMessage
    2. sendImageMessage
    3. getCurrentUserProfile
    4. sendCard
    5. persistMenu
  8. Example

##Installation for Laravel

composer required distilleries/messenger

Add Service provider to bootstrap/app.php:

   
   $app->register(Distilleries\Messenger\MessengerLumenServiceProvider::class);
   

##Installation for Lumen

composer required distilleries/messenger

Add Service provider to config/app.php:

    'providers' => [
          \Distilleries\Messenger\MessengerServiceProvider::class,
    ]

And Facade (also in config/app.php) replace the laravel facade Mail

    'aliases' => [
       'Messenger'           => 'Distilleries\Messenger\Facades\Messenger'
    ]

Implement contract

To easily implement the fonctionality for your application I created a Distilleries\Messenger\Contracts\MessengerReceiverContract.

Event Method Description
messaging_optins receivedAuthentication Subscribes to Authentication Callback via the Send-to-Messenger Plugin
message receivedMessage Subscribes to Message Received Callback
message_deliveries receivedDeliveryConfirmation Subscribes to Message Delivered Callback
messaging_postbacks receivedPostback Subscribes to Postback Received Callback
all other defaultHookUndefinedAction Call when the other methods was no called

Change service provider

To change the class use go to app/Providers/MessengerServiceProvider.php and change the class inside the share function.

    
    $this->app->singleton('Distilleries\Messenger\Contracts\MessengerReceiverContract', function ($app) {
                return new MyMessengerClass();
    });
      

Example of MessengerContract implementation

class MyMessengerClass implements MessengerContract
{

  
    public function receivedAuthentication($event)
    {
        $senderID    = $event->sender->id;
        Messenger::sendTextMessage($senderID, "Authentication successful");
    }


    public function receivedMessage($event)
    {
        $senderID    = $event->sender->id;
        Messenger::sendTextMessage($senderID, 'Test');
        Messenger::sendImageMessage($senderID, env('APP_URL') . '/assets/images/logo.png');,
        Messenger::sendCard($senderID, [
            'template_type' => 'generic',
            'elements'      => [
                [
                    "title"     => "Messenger Boilerplate",
                    "image_url" => env('APP_URL') . '/assets/images/logo.png',
                    "subtitle"  => "example subtitle",
                    'buttons'   => [
                        [
                            'type'  => "web_url",
                            'url'   => "https://github.com/Distilleries/lumen-messenger-boilerplate",
                            'title' => "Come download it!"
                        ]
                    ]
                ]

            ]
        ]);
  
    }

    public function receivedDeliveryConfirmation($event)
    {
        $senderID    = $event->sender->id;
        Messenger::sendTextMessage($senderID, 'Test');
    }


    public function receivedPostback($event)
    {
       $senderID       = $event->sender->id;
       Messenger::sendTextMessage($senderID, 'Test');
    }

}

Create application

Follow the messenger documentation to create the app https://developers.facebook.com/docs/messenger-platform/quickstart.

  • For the webhook uri use /webhook
  • For the VALIDATION_TOKEN, generate a random key

After the application created and the page created and associated copy the .env.example to .env

    VALIDATION_TOKEN=
    PAGE_ACCESS_TOKEN=

Host your application

You have to host your application to become use it. Facebook can't send you a web hook in local. So make sure you have an hosting ready before start you development.

Your bot is in sandobox by default. Only the people with the permission in your application can talk with it.

Facade

sendTextMessage

Officiale documention

   Messenger::sendTextMessage($senderID, "Authentication successful");

sendImageMessage

Officiale documention

  Messenger::sendImageMessage($senderID, env('APP_URL') . '/assets/images/logo.png');
  

getCurrentUserProfile

Officiale documention

  Messenger::getCurrentUserProfile($senderID);
  

sendCard

Officiale documention

        Messenger::sendCard($senderID, [
             'template_type' => 'generic',
             'elements'      => [
                 [
                     "title"     => "Messenger Boilerplate",
                     "image_url" => env('APP_URL') . '/assets/images/logo.png',
                     "subtitle"  => "example subtitle",
                     'buttons'   => [
                         [
                             'type'  => "web_url",
                             'url'   => "https://github.com/Distilleries/lumen-messenger-boilerplate",
                             'title' => "Come download it!"
                         ]
                     ]
                 ]
 
             ]
         ]);

Example

On this messenger class you can say hi and the bot give you an answer like this :

Hi First name Last name

Send a picture with a picto on the bottom right`

I customize your profile picture. Do you like it?