在台灣幾乎每個人都有Line帳號,很多公事、同學聯繫也都依靠LINE
這篇文章就是紀錄怎麼開發一個LINE聊天機器人,能夠主動發送訊息
取代以往用簡訊或EMAIL提醒的功能,畢竟大家會去看LINE的頻率應該
比打開手機/電腦看email的頻率要高吧。
[建立機器人]
首先從網頁上登入進入developers,登入你的line帳號後
建立一個channels,進入MessageAPI中,可以取得你的Channel access token
接著再Basic Setting中可以找到你的Channel secret,以及user id,先把這
幾個資訊記錄下來。
接著到MessageAPI中,有一個QR code,妳可以開啟你的LINE掃描,就可以將
這個line機器人加入成為朋友了;在這邊你也可以設定是否可以自動加入朋友
自動回覆訊息、加入好友歡迎訊息等設定,基本上一個沒有任何功能的機器人。
就完成了。
[傳送與回覆訊息]
line機器人傳送訊息只是透過簡單的WEB API,再header加上剛剛取得的access token
並將要傳送的對象,訊息內容用json格式包起來
以php為例
傳送給某一位朋友或是一個聊天室
function push($message)
{
global $channelAccessToken;
$payload = [
'to' => "要傳送對象的userID",
'messages' => [
[
'type' => 'text',
'text' => $message
]
]
];
// Send Request by CURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.line.me/v2/bot/message/push');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: Bearer ' . $channelAccessToken
]);
$result = curl_exec($ch);
curl_close($ch);
}
在payload中放入要傳送的對象以及內容即可(如何取得userid或是group id後面會再提到)。
傳送給所有人的話方法一樣,URL改成https://api.line.me/v2/bot/message/multicast 即可
若機器人單純只是要主動傳送訊息到這邊即可。
[接收訊息以及webhook]
在MessageAPI中有一個webhook設定,webhook是類似一個中介的作用,可以攔截所有的原始訊息
可以透過webhook找到使用者/群組的ID,也可以依據使用者傳送的訊息進行回覆。
首先你必須要申請一個網站,以及https的憑證,設定完Webhook URL後點下verify,顯示成功後
接著到webhook的網頁上放上這兩行
$json_string = file_get_contents('php://input');
error_log($json_string);
接著到聊天室中隨便點傳一個訊息,在/var/log/httpd/ssl_error_log中就可以看到類似下面的內容
{
"destination":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"events":
[
{
"type":"message",
"message":
{
"type":"text",
"id":"xxxxxxxxxxxxxxxxxxxx",
"text":"123"
},
"timestamp":1620617008589,
"source":
{
"type":"user",
"userId":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" #從這邊可以取得你的ID,或是群組的ID
},
"replyToken":"token", #如果要回覆訊息需要加上這個token
"mode":"active"
}
]
}
可以看到詳細的一些內容,要回覆訊息的話就是依據text的內容去呼叫reply得函式
以下的範例就是當收到有人說"測試"時,使用reply回覆"測試回覆"。
$access_token ='access_token';
$json_string = file_get_contents('php://input');
$json_obj = json_decode($json_string);
$event = $json_obj->{"events"}[0];
$message = $event->{"message"}->{"text"};
$reply_token = $event->{"replyToken"};
if($message == "測試")
reply("測試回覆",$reply_token);
function reply($message,$reply_token)
{
global $access_token;
$post_data = [
"replyToken" => $reply_token,
"messages" => [
[
"type" => "text",
"text" => $message
]
]
];
$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_POSTFIELDS, json_encode($post_data));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Authorization: Bearer '.$access_token
));
$result = curl_exec($ch);
curl_close($ch);
}
PS:Line機器人有付費的版本也有免費的版本,免費版有限制每個月可以"主動"發送訊息的數量,但是回覆訊息的
數量是沒有限制的。
這篇文章就是紀錄怎麼開發一個LINE聊天機器人,能夠主動發送訊息
取代以往用簡訊或EMAIL提醒的功能,畢竟大家會去看LINE的頻率應該
比打開手機/電腦看email的頻率要高吧。
[建立機器人]
首先從網頁上登入進入developers,登入你的line帳號後
建立一個channels,進入MessageAPI中,可以取得你的Channel access token
接著再Basic Setting中可以找到你的Channel secret,以及user id,先把這
幾個資訊記錄下來。
接著到MessageAPI中,有一個QR code,妳可以開啟你的LINE掃描,就可以將
這個line機器人加入成為朋友了;在這邊你也可以設定是否可以自動加入朋友
自動回覆訊息、加入好友歡迎訊息等設定,基本上一個沒有任何功能的機器人。
就完成了。
[傳送與回覆訊息]
line機器人傳送訊息只是透過簡單的WEB API,再header加上剛剛取得的access token
並將要傳送的對象,訊息內容用json格式包起來
以php為例
傳送給某一位朋友或是一個聊天室
function push($message)
{
global $channelAccessToken;
$payload = [
'to' => "要傳送對象的userID",
'messages' => [
[
'type' => 'text',
'text' => $message
]
]
];
// Send Request by CURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.line.me/v2/bot/message/push');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: Bearer ' . $channelAccessToken
]);
$result = curl_exec($ch);
curl_close($ch);
}
在payload中放入要傳送的對象以及內容即可(如何取得userid或是group id後面會再提到)。
傳送給所有人的話方法一樣,URL改成https://api.line.me/v2/bot/message/multicast 即可
若機器人單純只是要主動傳送訊息到這邊即可。
[接收訊息以及webhook]
在MessageAPI中有一個webhook設定,webhook是類似一個中介的作用,可以攔截所有的原始訊息
可以透過webhook找到使用者/群組的ID,也可以依據使用者傳送的訊息進行回覆。
首先你必須要申請一個網站,以及https的憑證,設定完Webhook URL後點下verify,顯示成功後
接著到webhook的網頁上放上這兩行
$json_string = file_get_contents('php://input');
error_log($json_string);
接著到聊天室中隨便點傳一個訊息,在/var/log/httpd/ssl_error_log中就可以看到類似下面的內容
{
"destination":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"events":
[
{
"type":"message",
"message":
{
"type":"text",
"id":"xxxxxxxxxxxxxxxxxxxx",
"text":"123"
},
"timestamp":1620617008589,
"source":
{
"type":"user",
"userId":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" #從這邊可以取得你的ID,或是群組的ID
},
"replyToken":"token", #如果要回覆訊息需要加上這個token
"mode":"active"
}
]
}
可以看到詳細的一些內容,要回覆訊息的話就是依據text的內容去呼叫reply得函式
以下的範例就是當收到有人說"測試"時,使用reply回覆"測試回覆"。
$access_token ='access_token';
$json_string = file_get_contents('php://input');
$json_obj = json_decode($json_string);
$event = $json_obj->{"events"}[0];
$message = $event->{"message"}->{"text"};
$reply_token = $event->{"replyToken"};
if($message == "測試")
reply("測試回覆",$reply_token);
function reply($message,$reply_token)
{
global $access_token;
$post_data = [
"replyToken" => $reply_token,
"messages" => [
[
"type" => "text",
"text" => $message
]
]
];
$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_POSTFIELDS, json_encode($post_data));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Authorization: Bearer '.$access_token
));
$result = curl_exec($ch);
curl_close($ch);
}
PS:Line機器人有付費的版本也有免費的版本,免費版有限制每個月可以"主動"發送訊息的數量,但是回覆訊息的
數量是沒有限制的。