使用PHP,在CodeIgniter環境下建立Line機器人
本篇主要方向:初步達成自動回話的功能
第一次紀錄PHP就用Line機器人來做開端吧。
CodeIgniter是個MVC架構的Framework,所以只要建立一個Linebot的Controller,把這個Controller當成Webhook就行了。
我使用的環境:
XAMPP 3.2.2整包裝起來
IDE:NetBeans
Framework:CodeIgniter 3.1.6
XAMPP 3.2.2整包裝起來
IDE:NetBeans
Framework:CodeIgniter 3.1.6
在一切設定完畢後,開啟NetBeans並建立一個專案,在Controller下建立LINEBOT.php
並且在這個Controller下輸入程式碼,概念上就是Line使用者對機器人發送訊息,機器人對Webhook Server發送Post,
而Webhook Server取得Post訊息後,分析內文再進行操作(回覆訊息,執行程式等)。
程式碼來源:這裡 感謝這位大師的無私分享
<?php
Class LineBot extends CI_Controller
{
public function index()
{
//從Line Developer上申請的Token
$accessToken = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
//取得機器人丟過來的訊息
$jsonString = file_get_contents('php://input');
//轉成JSON
$jsonObj = json_decode($jsonString);
//設定變數給JSON的各欄位
$event = $jsonObj->{"events"}[0];
$type = $event->{"message"}->{"type"};
$message = $event->{"message"};
$replyToken = $event->{"replyToken"};
//回覆的訊息,replyToken
$postData = [
"replyToken" => $replyToken,
"messages" => [
[
"type" => "text",
"text" => $message->{"text"}
]
]
];
//post url init
$ch = curl_init("https://api.line.me/v2/bot/message/reply");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Authorization: Bearer ' . $accessToken
//'Authorization: Bearer '. TOKEN
));
curl_exec($ch);
curl_close($ch);
}
}
概念上其實跟使用C#建構是一模模一樣樣的,問題來了:如果我只是想測試,不想為了一個HTTPS搞半天怎麼辦?
我測試的時候習慣用這個 Ngrok.exe
只要輸入指令就可以生成一個超簡單翻牆程式,用於測試上很方便。
下載後開啟視窗並輸入 ngrok.exe http 80,搞定!自動幫你生出HTTPS!這樣就可以快速解決惱人的Webhook了 (當然,這只是測試,正規作法請考慮AWS,Azure,Heroku 或者自己買個Domain之類的 ...)
如此,我們就初步完成了一個基本的回聲蟲機器人,你說什麼他就回什麼~
單純筆記,皆為非正規作法,旁門左道,胡搞瞎搞。