大家好~
昨天我们已经将 LINEBot 安装完成啦~
今天来做个 Echo bot 简单认识一下 LINEBot 的实作过程吧~
首先来为我们的 Webhook 准备好 Route 与 Controller 吧!
php artisan make:controller LinebotController
Route::post('/linebot-reply',[LinebotController::class,'reply']);
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Log;
use LINE\LINEBot\HTTPClient\CurlHTTPClient;
use LINE\LINEBot;
public function reply(Request $request)
{
Log::info($request->all());
return response('HTTP_OK',Response::HTTP_OK);
}
先来测试 Webhook 连线是否正常吧~
顺便看看 Request body 长怎样。
至於 URL 就先用 ngrok 协助我们测试吧!
在 Messaging API settings 的页面下可以设定 Webhook URL,
按下 Verify 可以测试我们的 API 是否可以成功接收 Request。
然後记得要启用 Webhook 喔。
下图就是用 Line 传送文字讯息给我们的 LINEBot 後所获得的 Request body 格式。
public function reply(Request $request)
{
$httpClient = new CurlHTTPClient(env('LINE_BOT_CHANNEL_ACCESS_TOKEN'));
$bot = new LINEBot($httpClient, ['channelSecret' => env('LINE_BOT_CHANNEL_SECRET')]);
try {
$bot->parseEventRequest($request->getContent(), $request->header('X-Line-Signature'));
}catch (LINEBot\Exception\InvalidSignatureException $exception){
return response('An exception class that is raised when signature is invalid.',Response::HTTP_FORBIDDEN);
}catch (LINEBot\Exception\InvalidEventRequestException $exception){
return response('An exception class that is raised when received invalid event request.',Response::HTTP_FORBIDDEN);
}
$text = $request['events'][0]['message']['text'];
$replyToken = $request['events'][0]['replyToken'];
$response = $bot->replyText($replyToken, $text);
if ($response->isSucceeded()){
return response('HTTP_OK', Response::HTTP_OK);
}else{
Log::debug($response->getHTTPStatus());
Log::debug($response->getRawBody());
return response('HTTP_UNPROCESSABLE_ENTITY', Response::HTTP_UNPROCESSABLE_ENTITY);
}
要记得将 Channel access token 与 Channel secret 写入 .env
喔~
成果如下图。
这个 Function 可以帮我们验证签名与判断 Event type。
LINEBot 有着多种的 MessageBuilder,
不过以我们目前的 Echo bot 来说,
使用 replyText()
就足够应付了。
今天就先这样啦~
大家明天见!
若文章有任何问题,
还请大家不吝赐教!
1.变数不影响他人的方式(合作时要用) (1)把自己的计划包起来,变数执行完之後就舍弃 IIFE =...
前言 感谢我们一同坚持到第 30 天,本篇以「团队共生」为题,总括前述所谈,萃取我认为在团队共同成长...
要进入写测试之前呀~我们必须要先了解为什麽要写测试,及我们会说明一种测试的开发方法(TDD) 写测试...
前情提要 一般我们在做传值动作的时候,会有好几种方式可以做,像是用 Segue、Closure、De...
我的背景 目前自己前端的程序能力只学过基础 html+css+js,没有独立开发过大型专案的经验,算...