不過這次發佈之後,唉唉唉要用Push主動發送還是要錢啊!!!! (好貴....)
嘛啊算了....... 加減用了XD
LINE Messaging 申請網址
https://business.line.me/zh-hant/services/bot
API reference
https://developers.line.me/businessconnect/api-reference
※簡單申請設定流程說明
1.新增一個 LINE@ 帳號
2.到 https://business.line.me/zh-hant/companies/ 選擇公司/經營者後會看到你建立的 LINE@ 帳號,先點 LINE@MANAGER,到「帳號設定→BOT設定」去把BOT開啟即可(webhook傳訊記得打勾,下面的加入群組聊天室選允許,自動回應設取消,問後語的部份就看你是不是要跟著LINE@的設定)
3.接著回到2的那頁,該LINE@帳號上面就會多出現一個 Messaging API ,點 LINE Developers 進入設定畫面
4.把 ChannelID 及 Channel Secret 記下來,下面 Webhook URL 則是你接收 LINE 訊息的程式網址(必需為 https:// ,如果沒有SSL可以使用 SSL for Free 請參考此網址教學 https://free.com.tw/ssl-for-free/ )
5.Channel Access Token 點擊後產生,這之後也會用到
6.以上都設定完後就沒事了,再來就程式的部份
申請的部份就不多講了,補充幾個重點
(申請可以看官方影片 https://developers.line.me/messaging-api/getting-started)
1.LINE Messaging 只能用 LINE@ 的帳號
2.可以舊有的 LINE@ 直接轉,不過一但轉了就無法再轉回來人工回覆了喔,要注意!
以下範例是 PHP (注意必需要 PHP 5.6 以上哦)的,其它的就請自行研究 ^^"
line-bot-sdk-php
https://github.com/line/line-bot-sdk-php
不過因為它很肥所以我改了一下 composer.json
{ "type": "library", "homepage": "https://github.com/line/line-bot-sdk-php", "license": "Apache License Version 2.0", "require": { "php": ">=5.6", "linecorp/line-bot-sdk":"dev-master" }, "autoload": { "psr-4": { "LINE\\": "src/" } } }
※載入LINEBOT
$bot = new \LINE\LINEBot( new \LINE\LINEBot\HTTPClient\CurlHTTPClient('你的Channel Access Token'), ['channelSecret' => '你的Channel Secret'] );(至於 ChannelID 的部份,好像沒地方會用到..........)
※取得即時聊天的內容
$signature = $_SERVER["HTTP_".\LINE\LINEBot\Constant\HTTPHeader::LINE_SIGNATURE]; $body = file_get_contents("php://input"); try { $events = $bot->parseEventRequest($body, $signature); } catch (Exception $e) { var_dump($e); //錯誤內容 }接下來你就可以把 $events 這個陣列寫到 log 裡去看了,它大概會是下面的一個格式
※補充說明
$replyToken:指的是講話者的回覆token,在1:1聊天、群組聊天、聊天室聊天都會有此參數
$groupId:指群組的id,退出群組時會使用到,僅群組聊天才會有此參數
$roomId:指聊天室的id,退出聊天室時會使用到,僅聊天室聊天才會有此參數
$userId:使用者的id,1:1視窗聊天時才會有此參數
將bot邀到聊天室或群組時,只要你設定裡是將「加入群組聊天室選允許」的話,它是會自動加入的,如果邀了沒馬上加入,那就踢掉再重邀一次XD
接下來下面解說一下常用的回覆功能
※一般文字訊息(有兩種方式)
1.方法1
$bot->sendText($replyToken, "文字訊息");2.方法2
$msg = new \LINE\LINEBot\MessageBuilder\TextMessageBuilder("文字訊係"); $bot->replyMessage($replyToken,$msg);
※傳送多筆訊息(每次最多5筆)
$msg = new \LINE\LINEBot\MessageBuilder\MultiMessageBuilder(); for($i=0;$i<5;$i++) { $_msg = new \LINE\LINEBot\MessageBuilder\TextMessageBuilder("訊息內容".$i); $msg->add($_msg); } $bot->replyMessage($replyToken,$msg);
※傳送貼圖訊息(貼圖僅能用官方提供的)
貼圖列表 https://devdocs.line.me/en/files/sticker_list.pdf
$msg = new \LINE\LINEBot\MessageBuilder\StickerMessageBuilder($packageId,$stickerId); $bot->replyMessage($reply_token,$msg);
※傳送座標訊息
$msg = new \LINE\LINEBot\MessageBuilder\LocationMessageBuilder("位址名稱", "地址", 緯度, 經度); $bot->replyMessage($replyToken,$msg);
※樣版類型(此訊息僅在手機上才看的到)
https://devdocs.line.me/en/#template-messages
補充: 圖片的部份必需走 https 僅接受 png 或 jpg 檔,最大寬度 1024px,檔案上限1MB
actions 分為下列3種,可以混合使用
1) Postback action - PostbackTemplateActionBuilder 互動型,例如使用者點擊後要帶一些參數過去,接收到參數時處理的(例如分頁換頁)
2) Message action - MessageTemplateActionBuilder 一般訊息型,點擊後直接送出回應文字
3) URI action - UriTemplateActionBuilder 網址型,點擊後開啟網頁
1.一般圖片、文字按鈕(actions每項最多4個)
$actions = array( //一般訊息型 action new \LINE\LINEBot\TemplateActionBuilder\MessageTemplateActionBuilder("按鈕1","文字1"), //網址型 action new \LINE\LINEBot\TemplateActionBuilder\UriTemplateActionBuilder("Google","http://www.google.com"), //下列兩筆均為互動型action new \LINE\LINEBot\TemplateActionBuilder\PostbackTemplateActionBuilder("下一頁", "page=3"), new \LINE\LINEBot\TemplateActionBuilder\PostbackTemplateActionBuilder("上一頁", "page=1") ); $img_url = "圖片網址,必需為 https (圖片非必填欄位)"; $button = new \LINE\LINEBot\MessageBuilder\TemplateBuilder\ButtonTemplateBuilder("按鈕文字","說明", $img_url, $actions); $msg = new \LINE\LINEBot\MessageBuilder\TemplateMessageBuilder("這訊息要用手機的賴才看的到哦", $button); $bot->replyMessage($replyToken,$msg);
上面範例在手機上看會是像下面的樣子
如果是Postback互動型,則點擊後在$events會收到postback便可以另外做邏輯處理
{"userId":"Uc13b7ce6fd52195f122fd78fc9ae86c4","type":"user"},"timestamp":1478658496577,"postback":{"data":"page=3"}}]}
2.確認型(是否的那種)(actions每項最多2個)
$actions = array( new \LINE\LINEBot\TemplateActionBuilder\PostbackTemplateActionBuilder("是", "ans=Y"), new \LINE\LINEBot\TemplateActionBuilder\PostbackTemplateActionBuilder("否", "ans=N") ); $button = new \LINE\LINEBot\MessageBuilder\TemplateBuilder\ConfirmTemplateBuilder("問題", $actions); $msg = new \LINE\LINEBot\MessageBuilder\TemplateMessageBuilder("這訊息要用手機的賴才看的到哦", $button); $bot->replyMessage($replyToken,$msg);
上面範例在手機上看會是像下面的樣子
3.Carousel 多筆型(最多5筆,actions每項最多3個)
//輪播型(僅手機看的到) $columns = array(); $img_url = "圖片網址,必需為 https (圖片非必填欄位)"; for($i=0;$i<5;$i++) //最多5筆 { $actions = array( //一般訊息型 action new \LINE\LINEBot\TemplateActionBuilder\MessageTemplateActionBuilder("按鈕1","文字1"), //網址型 action new \LINE\LINEBot\TemplateActionBuilder\UriTemplateActionBuilder("觀看食記","http://www.google.com") ); $column = new \LINE\LINEBot\MessageBuilder\TemplateBuilder\CarouselColumnTemplateBuilder("標題".$i, "說明".$i, $img_url , $actions); $columns[] = $column; } $carousel = new \LINE\LINEBot\MessageBuilder\TemplateBuilder\CarouselTemplateBuilder($columns); $msg = new \LINE\LINEBot\MessageBuilder\TemplateMessageBuilder("這訊息要用手機的賴才看的到哦", $carousel); $bot->replyMessage($replyToken,$msg);
上面範例在手機上看會是像下面的樣子
※退出聊天室或群組
if($event->isRoomEvent()==true || $event->isGroupEvent()==true) //檢查是否為聊天示或群組訊息 { //這邊我有另外加了要先顯示訊息才退出,這看個人使用 $msg = new \LINE\LINEBot\MessageBuilder\TextMessageBuilder("退出聊天室要顯示的訊息"); $bot->replyMessage($replyToken,$msg); if($event->isGroupEvent()==true) { $bot->leaveGroup($event->getGroupId()); //退出群組 } else if($event->isRoomEvent()==true) { $bot->leaveRoom($event->getRoomId()); //退出聊天室 } }
※取得1:1交談對方的資料(注意僅1:1交談才會有userId)
$response = $bot->getProfile($event->getUserId()); if ($response->isSucceeded()) { $profile = $response->getJSONDecodedBody(); //$profile 為陣列,內容裡會有對方的姓名、userId(這不確定是不是會變動)、圖像網址、狀態訊息 }
※將 LINE 回傳訊息寫入至 LOG
file_put_contents("debug.txt", file_get_contents("php://input")."\r\n",FILE_APPEND);