iT邦幫忙

0

Line Messaging API 串接筆記-Receiving Message & Sending Reply Message

  • 分享至 

  • xImage
  •  

前言

目標:掌握 Line Messaging API,客製自動回覆功能,這次串接是參考 Line Messaging API 串接手冊
Channel 設定跟 Access token 都好了之後,就可以來玩玩 Line Messaging API
Line Messaging API 串接需要了解兩個部分:

  • 接收訊息或動作( ex. 加入好友) - 接收 Line 傳給你的 webhook event object
  • 發送訊息 - 透過 API 傳訊息到 Line

接收訊息或動作 - Webhook event object

Receiving messages (webhooks) 這篇有寫,如果有人家好友或是傳訊息到這個 Line 官方帳號,LINE 會用 HTTP POST 的方式傳送 webhook event object 到你在 LINE Developers Console(Channel) 的 Webhook URL 填寫的網址。

Webhook event
https://ithelp.ithome.com.tw/upload/images/20220531/20136310LA8ff9ZyyY.jpg
圖片來源:https://developers.line.biz/en/docs/messaging-api/receiving-messages/#webhook-event-in-one-on-one-talk-or-group-chat

幾個比較基本的

  • Message Event:只要有人發訊息給官方帳號,不管是個人或是群組都會收到,cx 有人發了 「你好」,收到的 event object 就會有 「你好」,就可以再透過「你好」這個訊息來做一些判斷了~
  • Follow Event:加入官方帳號好友
  • Join Event:加入有官方帳號在的群組

有了 event object 之後,你就可以透過 event object 的資訊來決定要發送怎樣的訊息到 Line


發送訊息 - Sending Message

發送訊息依發送的方式有兩種,一個被動發送(Send reply message)、一個是主動發送(Send push message),兩者的差別在於「被動發送」一定是要先有人發送訊息(或其他動作)給你,然後會收到 replyToken,再透過 replyToken 回訊息給他,「主動發送」則不用 replyToken 就可以發送訊息。

  • Send push message 如果達到上限則數就不能再發送,除非加購增加則數,一個群組裡面的人數有多少,一則訊息就會乘上群組人數計算(ex. 如果官方帳號所在群組有 10 個人在裡面,假設這個月他發 5 則訊息, LINE Push 計算的則數會是 10*5= 50 則,所以人數越多,越快達到 500 則上限

Send reply message

格式 application/json
URL https://api.line.me/v2/bot/message/reply
請求方式 POST
Authorization Bearer {channel access token}

Body 參數:

參數 類型 說明
replyToken string webhook event 傳給你的 replyToken
messages obj 要傳送的訊息 (最多 5 則)

以 PHP 為例

<?php 
	//設定Token 
	$ChannelAccessToken = '你的 Channel access token...';  // 我用 long-lived
	
	// get message event 接受 webhook 用的
	$HttpRequestBody = file_get_contents('php://input'); 
	
	$data = json_decode($HttpRequestBody, true);
	foreach($data as $value){
		if(is_array($value)){
			foreach($value as $events){
               extract($events); // 取出 object 裡的 key value
			}
		}
	}

	$Payload = '{
	    "replyToken":"'.$replyToken.'", //webhook event object 裡的 event object
	    "messages":[
	        {
	            "type":"text",
	            "text":"Hello, user"
	        },
	        {
	            "type":"text",
	            "text":"May I help you?"
	        }
	    ]
	}';
	
	$ChannelAccessToken = "你的 Channel Access Token....";// 我用的是 long-lived
	$ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, '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, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $Payload);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
      'Content-Type: application/json',
      'Authorization: Bearer ' . $ChannelAccessToken
  ]);
  $Result = curl_exec($ch);
  curl_close($ch);
?>

發出訊息的訊息會長這樣
https://ithelp.ithome.com.tw/upload/images/20220531/20136310rpDDF4bFlW.jpg

這樣就成功用 Line Messaging API 發出 reply message

參考資料

Send reply message
Receiving messages (webhooks)


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言