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

立川企業社
·
·
IPFS
·

使用 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 的聊天機器人了

CC BY-NC-ND 2.0 授权

喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!

立川企業社立川創意工作室的創始者,同時也是 PHP 的 Laravel 框架的喜愛者,目前用 Voyager 套件用成後台,有了它至少減少約 40% 的時間做後台界面,喜愛它的就看看吧!
  • 来自作者
  • 相关推荐

玩轉 Laravel 的 API - 一個簡單的註冊以及登入

jQuery 裡面的自動完成 - autocomplete 的問題

jQuery 如何可對 checkbox 做出全選/全部取消