使用 Lumen 建立你的 Facebook Messanger 聊天機器人
使用 Lumen 建立一個屬於你的 Facebook Messanger 的機器人,所有的回答都要看你如何做了,它實際是回應機器人,只要有問,它一定就有回應,中間的做法看你是用 wit.ai 或者 dialogflow 都可以,做法可以有很多,至少不會太單調
這裏我使用 Lumen,這裏可以找到它的資訊
- 5.8 與 5.2 的版本有所不同,注意只有路由不太一樣
- 會選擇它的原因是它本身就沒有前端的界面
因爲使用 DB 的功能,必須先把它的註解拿掉
- 開啓 bootstrap/app.php
- 找到 // $app->withFacades();,將前面的註解拿掉就好了
建立你的路由 ( Route )
它的路徑是 routes/web.php
- 第一個用 get,主要是給 messanger 的驗證而已
- 第二個用 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 的聊天機器人了
