laravel,

使用 Lumen 建立你的 Facebook Messanger 聊天機器人

2019-03-20 · 3 mins read
使用 Lumen 建立你的 Facebook Messanger 聊天機器人

使用 Lumen 建立一個屬於你的 Facebook Messanger 的機器人,所有的回答都要看你如何做了,它實際是回應機器人,只要有問,它一定就有回應,中間的做法看你是用 wit.ai 或者 dialogflow 都可以,做法可以有很多,至少不會太單調

這裏我使用 Lumen,這裏可以找到它的資訊

  • 5.8 與 5.2 的版本有所不同,注意只有路由不太一樣
  • 會選擇它的原因是它本身就沒有前端的界面

Lumen 5.8 的資訊

因爲使用 DB 的功能,必須先把它的註解拿掉

  • 開啓 bootstrap/app.php
  • 找到 // $app->withFacades();,將前面的註解拿掉就好了

建立你的路由 ( Route )

它的路徑是 routes/web.php

  1. 第一個用 get,主要是給 messanger 的驗證而已
  2. 第二個用 post,這個是給傳遞訊息給 messanger server
$router->get('/webhook', 'BotController@verify_token');
$router->post('/webhook', 'BotController@handle_query');

建立一個 Controller

這個就已經將基本的流程做出來了,整個 copy 吧

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class BotController extends Controller {

    /**
     * The verification token for Facebook
     *
     * @var string
     */
    protected $token;

    public function __construct()
    {
        $this->token = env('BOT_VERIFY_TOKEN');
    }

    /**
     * Verify the token from Messenger. This helps verify your bot.
     *
     * @param  Request $request
     * @return \Illuminate\Http\Response|\Laravel\Lumen\Http\ResponseFactory
     */
    public function verify_token(Request $request)
    {
        $mode  = $request->get('hub_mode');
        $token = $request->get('hub_verify_token');

        if ($mode === "subscribe" && $this->token and $token === $this->token) {
            return response($request->get('hub_challenge'));
        }

        return response("Invalid token!", 400);
    }

    /**
     * Handle the query sent to the bot.
     *
     * @param Request $request
     * @return \Illuminate\Http\Response|\Laravel\Lumen\Http\ResponseFactory
     */
    public function handle_query(Request $request)
    {
        $entry = $request->get('entry');

        $sender  = array_get($entry, '0.messaging.0.sender.id');
        // $message = array_get($entry, '0.messaging.0.message.text');

        $this->dispatchResponse($sender, 'Hello world. You can customise my response.');

        return response('', 200);
    }

    /**
     * Post a message to the Facebook messenger API.
     *
     * @param  integer $id
     * @param  string  $response
     * @return bool
     */
    protected function dispatchResponse($id, $response)
    {
        $access_token = env('BOT_PAGE_ACCESS_TOKEN');
        $url = "https://graph.facebook.com/v2.6/me/messages?access_token={$access_token}";

        $data = json_encode([
            'recipient' => ['id' => $id],
            'message'   => ['text' => $response]
        ]);

        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
        $result = curl_exec($ch);
        curl_close($ch);

        return $result;
    }
}

最後就是修改 .env

注意這兩行

  • BOT_VERIFY_TOKEN=”這裏是放驗證要用到的字串”
  • BOT_PAGE_ACCESS_TOKEN=”這裏是要放 Messenger 選擇的粉絲團的存取權杖”
APP_ENV=local
APP_DEBUG=true
APP_KEY=
APP_TIMEZONE=UTC

BOT_VERIFY_TOKEN="INSERT_TOKEN_HERE"
BOT_PAGE_ACCESS_TOKEN="INSERT_ACCESS_TOKEN_HERE"

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

CACHE_DRIVER=file
QUEUE_DRIVER=sync

這樣你就可以有 Facebook Messanger 的聊天機器人了

如果您喜歡這篇文章,請幫我按 5 下拍手,這可以讓我收到來自 LikeCoin 基金會的獎勵,謝謝您囉!

Patrick Her
編寫者 Patrick Her Follow
我是 PHP 工程師,主要是 Laravel 結合 Voyager 做成 CMS 服務大衆


我的蝦皮



Laravel 搭配 Voyager 建置 CMS 網站



打造 LINE 聊天機器人



Facebook Messenger AI 聊天機器人