thekdesign / fbots
chatbot
Installs: 816
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 0
Forks: 1
pkg:composer/thekdesign/fbots
Requires
- php: >=7.0.0
- botman/botman: ^2.1
- botman/driver-facebook: ^1.5
- laravel/framework: >=5.5.0
README
reference - BotMan
reference - Messenger
reference - Pages
開始使用 Getting Started
- 產生一個空的 laravel 專案
- new a laravel project
laravel new fbots
or
composer create-project --prefer-dist laravel/laravel fbots
- 
有一個 facebook developer 的帳號 
- 
have a facebook developer account 
- 
擁有一個 https 的網址 (推薦使用 heroku 部署) 
- 
have a https web (recommend heroku) 
必要條件 Prerequisites
- 確定你有一個 facebook developer 帳號,並新建一個應用程式
- make sure that you have a facebook developer account and create an application
安裝及設定 Install and Settings
composer require thekdesign/fbots
到 .env 檔內新增三個設定值 add three values in .env
//粉絲專頁的權杖
FACEBOOK_TOKEN = "your-facebook-page-token"
//自己設定,主要是拿來驗證webhook
FACEBOOK_VERIFICATION = "your-facebook-verification-token"
//應用程式的密鑰
FACEBOOK_APP_SECRET = "your-facebook-app-secret"
快速使用 Quick Start
安裝所有元件 install all
composer require thekdesign/fbots
新增一個 Controller 再新增一個 function
new a Controller and new a function
Controller
class ChatController extends Controller
{
    public function talk(Request $request)
    {
    
        
        /*************************************************************/
        /*                            config                         */
        /* --------------------------------------------------------- */
        /* token         : facebook page's access_token              */
        /* app_secret    : application's secret                      */
        /* verification  : to connect webhook, so it depends on you  */
        /* --------------------------------------------------------- */
        /*************************************************************/
        // 記得去獲取永久不過期的 facebook page's access_token
        // get the facebook page's access_token that never expires
        $config = [
            'facebook' => [
                'token' => env('FACEBOOK_TOKEN'),
                'app_secret' => env('FACEBOOK_APP_SECRET'),
                'verification' => env('FACEBOOK_VERIFICATION'),
            ]
        ];
        $bots = new FBots($request, $config);
        $bots->chat('Hey', 'Hello');
        $bots->listen();
    }
}
Route
Route::match(['get', 'post'], '/bots', 'ChatController@talk');
VerifyCsrfToken
reference - https://laravel.com/docs/5.5/csrf#csrf-excluding-uris
將你的route加入白名單 
Excluding URIs From CSRF Protection
Messenger 設定 Messenger Settings
參考 https://developers.facebook.com/docs/messenger-platform
reference https://developers.facebook.com/docs/messenger-platform
功能說明 functions
詳細功能請查閱 https://botman.io/2.0/driver-facebook-messenger
reference https://botman.io/2.0/driver-facebook-messenger
聊天機器人
ChatBots
    /************************/
    /* -------------------- */
    /*         Chat         */
    /* -------------------- */
    /************************/
    
    // new a fbot
    
        $bots = new FBots($request);
    
    // chat function
    
        $bots->chat('Hey', 'Hello!');
        
    // other chat function ($method is array or object)
    
        $bots->chat('Hey', $method);
    // conversation function (YourConversation is class)
    
        $bots->chat('Hey', startConvesation(new YourConversation));
        
    // listen function
    
        $bots->listen();
        $bots = new FBots($request);
        
        // 按鈕形式 button template
        $button = ButtonTemplate::create('123')
            ->addButtons([
                    ElementButton::create('Tell me more')->type("postback")->payload("tellmemore"),
                    ElementButton::create('visit')->url("http://botman.io/")
                ]
            );
        // 滑動瀏覽 generic template
        $generic = GenericTemplate::create()
            ->addImageAspectRatio(GenericTemplate::RATIO_SQUARE)
            ->addElements([
                Element::create('BotMan Documentation')
                    ->subtitle('All about BotMan')
                    ->image('http://botman.io/img/botman-body.png')
                    ->addButton(ElementButton::create('visit')->url('http://botman.io'))
                    ->addButton(ElementButton::create('tell me more')
                        ->payload('tellmemore')->type('postback')),
                Element::create('BotMan Laravel Starter')
                    ->subtitle('This is the best way to start with Laravel and BotMan')
                    ->image('http://botman.io/img/botman-body.png')
                    ->addButton(ElementButton::create('visit')
                        ->url('https://github.com/mpociot/botman-laravel-starter')
                    )
            ]);
        //列表形式 list template
        $list = ListTemplate::create()
            ->useCompactView()
            ->addGlobalButton(ElementButton::create('view more')->url('http://test.at'))
            ->addElements([
                Element::create('BotMan Documentation')
                    ->subtitle('All about BotMan')
                    ->image('http://botman.io/img/botman-body.png')
                    ->addButton(ElementButton::create('tell me more')
                        ->payload('tellmemore')->type('postback')),
                Element::create('BotMan Laravel Starter')
                    ->subtitle('This is the best way to start with Laravel and BotMan')
                    ->image('http://botman.io/img/botman-body.png')
                    ->addButton(ElementButton::create('visit')
                        ->url('https://github.com/mpociot/botman-laravel-starter')
                    )
            ]);
        // 點餐形式 receipt template
        $receipt = ReceiptTemplate::create()
            ->recipientName('Christoph Rumpel')
            ->merchantName('BotMan GmbH')
            ->orderNumber('342343434343')
            ->timestamp('1428444852')
            ->orderUrl('http://test.at')
            ->currency('USD')
            ->paymentMethod('VISA')
            ->addElement(ReceiptElement::create('T-Shirt Small')->price(15.99)->image('http://botman.io/img/botman-body.png'))
            ->addElement(ReceiptElement::create('Sticker')->price(2.99)->image('http://botman.io/img/botman-body.png'))
            ->addAddress(ReceiptAddress::create()
                ->street1('Watsonstreet 12')
                ->city('Bot City')
                ->postalCode(100000)
                ->state('Washington AI')
                ->country('Botmanland')
            )
            ->addSummary(ReceiptSummary::create()
                ->subtotal(18.98)
                ->shippingCost(10)
                ->totalTax(15)
                ->totalCost(23.98)
            )
            ->addAdjustment(ReceiptAdjustment::create('Laravel Bonus')->amount(5));
        // 圖片形式 image template
        $image = MediaTemplate::create()
            ->element(MediaAttachmentElement::create('image')
                ->attachmentId('1543527005693234')
                ->addButton(ElementButton::create('Tell me more')
                    ->type('postback')
                    ->payload('Tell me more'))
                ->addButton(ElementButton::create('Documentation')
                    ->url('https://botman.io/')));
        //影片形式 video template
       $video = MediaTemplate::create()
            ->element(MediaUrlElement::create('video')
                ->url('https://www.facebook.com/liechteneckers/videos/10155225087428922/')
                ->addButtons([
                    ElementButton::create('Web URL')
                        ->url('http://liechtenecker.at'),
                    ElementButton::create('payload')
                        ->type('postback')
                        ->payload('test'),
                ]));
        $bots->chat('Hey', 'Hello!');
        
        // 加入你想要的 add whatever you want
        // $bots->chat('give me button', $button);
        // $bots->chat('give me generic', $generic);
        // $bots->chat('give me list', $list);
        // $bots->chat('give me receipt', $receipt);
        // $bots->chat('give me image', $image);
        // $bots->chat('give me video', $video);
        $bots->listen();
粉絲團
Pages
    
        /***************************/
        /* ----------------------- */
        /*         Publish         */
        /* ----------------------- */
        /***************************/
        
    // new a publish
    
        $pages = new Publish();    
    /***********************************************************************/
    /*                          post method                                */
    /* ------------------------------------------------------------------- */
    /* $pages_id     : id from your facebook pages        | string         */
    /* $message      : write what you want to post        | string         */
    /* $link         : if you want to post include links  | string         */
    /* $photo        : if you want to post include photos | string(url)    */
    /* $published    : decide that publish now or later   | string(url)    */
    /* $publish_time : decide that publish time           | Unix timestamp */
    /* ------------------------------------------------------------------- */
    /***********************************************************************/
        
    // post function
    
    // 圖片請使用url
    // use url for photo 
    
        $pages->post($pages_id, $message);
    
    /*************************************************************/
    /*                          get method                       */
    /* --------------------------------------------------------- */
    /* $page_id  : the post's id                        | string */
    /* $type     : get information from pages or posts  | string */
    /* --------------------------------------------------------- */
    /*************************************************************/
        
    // get function
        
        $pages->get($page_id);
    /************************************************************************/
    /*                               reply method                           */
    /* -------------------------------------------------------------------- */
    /* $type     : comments, private_replies(Permissions problems) | string */
    /* $page_id  : the post's id                                   | string */
    /* $message  : write what you want to reply                    | string */
    /* -------------------------------------------------------------------- */
    /************************************************************************/
    
    // reply function
    
        $pages->reply($type, $post_id, $message);
    /**********************************************************/
    /*                    autoReply method                    */
    /* ------------------------------------------------------ */
    /* $type_reply : comments, private_replies    | string    */
    /* $post_id    : the post's id                | string    */
    /* $hears      : keyword that start to reply  | string    */
    /* $reply      : write what you want to reply | string    */
    /* $repeat     : remove the repeat user       | boolean   */
    /* ------------------------------------------------------ */
    /**********************************************************/
        
    // autoReply function
    
        $pages->autoReply($type_reply, $post_id, $hears, $reply);
        
    /****************************************/
    /*          finishPost method           */
    /* ------------------------------------ */
    /* $post_id  : the post's id   | string */
    /* ------------------------------------ */
    /****************************************/
    
    // finishPost function
    
        $pages->finishPost($post_id);
Get Method
reference - https://developers.facebook.com/docs/graph-api/reference/page/
$pages->get('page_id', $type);
    public function publish()
    {
        $pages = new Publish();
        $pages_id = '***';
        $message = 'Hello World';
        $link = 'https://github.com/ThekDesign';
        // $link = 'https://www.youtube.com/';
        $photo = 'https://c1.staticflickr.com/9/8755/16962787241_0f4839004a_b.jpg';
        
        /* 排定發佈,選擇false會得到response後的id,根據個人需要發佈的時機發佈 */
        /* If you set "$publish = false", you will get the id of response. */
        /* You can decide the publish time. */ 
        // reference - https://developers.facebook.com/docs/pages/publishing
        $publish = true;
        $result = $pages->post(
            $pages_id,
            $message,
            $link,
            $photo,
            $publish);
        return $result;
    }
    public function reply()
    {
        $pages = new Publish();
        // type: comments(公開回覆), private_replies(私人訊息)
        $pages->reply('comments', 'page_id', 'message');
    }
    
    public function obtain()
    {
        $pages = new Publish();
        // get the post 拿到那則貼文
        $result = $pages->get('page_id');
        
        // type: comments(公開回覆)
        // get all comments 拿到所有留言
        // $result = $pages->get('page_id', 'comments');
        return $result;
    }
    
    public function send()
    {
        $pages = new Publish();
        
        $pages->finishPost('page_id');
    }
Deployment
Built With
Contributing
Versioning
Authors
- Kevin Xu - Initial work - ThekDesign
License
FBots is licensed under the MIT License - see the LICENSE file for details