幫我們的粉絲專頁按個讚!
本篇教學 GitHub 專案
https://github.com/GoneToneStudio/line-example-bot-tiny-php
目錄 (點擊快速移動)
介紹
Line Bot 最近這幾年來各行各業很夯,在台灣 Line 使用者人數非常龐大,商業結合可打造出服務機器人,當客戶輸入關鍵指令時做出相對應的回覆,可提升與客戶的互動率。
當然也有很多人是因為有趣,想自己開發出獨特的功能,吸引其他人使用。
Line Bot 帳號並不是一般的帳號,而是使用 Line@,而且機器人是可以邀請進入群組的,但目前一個群組只能有一隻 Line@ 機器人帳號,除非使用非官方的 API,但如果被 Line 官方抓到有可能會被刪除帳號,期望未來 Line 官方可以開放一個群組能有好幾隻 Line@ 機器人帳號。
進入重點,來教您如何開發一隻專屬於自己的 Line Bot!
Line Bot 使用 Webhook 進行通訊,Webhook 是「用戶定義的 HTTP 回呼」。Webhook 通常被某些事件啟用,比如將程式碼推播到版本庫或評論部落格。當此事件發生時,原網站將向為 Webhook 組態的 URL 傳送 HTTP 請求。用戶可組態它們引發網頁上的事件以呼叫另一個網站的行為。此操作可為任何事件。Webhook 常用於啟用持續整合系統的構建操作或用於提醒缺陷跟蹤管理系統。由於 Webhook 使用 HTTP,它們可以被無縫整合入網頁服務而無需添加新的基礎設施。
基於資料通訊安全的因素,在 LINE 平台上開發應用服務的所有資料傳送都必須透過加密通道。因此,當開發者架設 LINE Messaging API 的 Webhook 伺服器時,一定要使用 HTTPS 通訊協定。

自行簽署的憑證是不能的,如果預算有限不想花錢申請憑證,可以使用 Let’s Encrypt。
建立機器人帳號
在開始寫程式前,要先建立一隻機器人帳號,前往 https://developers.line.biz/console/,登入後點擊「Create New Provider」(如果之前已經創建過可以省略這步驟)。

創建完畢後點擊「Create new channel」。

然後點擊「Messaging API」。

將所有資料都輸入完,在「Plan」設定處要修改成「Free」,完成後點選「Confirm」。

接下來確認資料,確認無誤後將圖片中框起來的地方打勾,然後點擊「Create」。

接著找到「Channel access token」,點擊「Issue」。

再點擊一次「Issue」。

「Channel access token」是後面寫程式時會用到的。
如果您想讓機器人可以加入群組,請將「Allow bot to join group chats」設定為「Enabled」。

這時還不用設定 Webhook,在文章後面才會設定,所以請先忽略。
接著把「Using LINE@ features」這區內的設定全部修改成「Disabled」,因為我們要使用程式碼寫功能,而不是直接使用 LINE@ 的功能。

開始進入程式碼
開始進入程式碼的部分。
請先到 https://github.com/GoneToneStudio/line-example-bot-tiny-php下載完整範例。
範例專案內有一個檔案名為「config.ini」,內容如下。
; Copyright 2020 GoneTone ; ; Line Bot ; 範例 Example Bot 配置文件 ; ; 此範例 GitHub 專案:https://github.com/GoneToneStudio/line-example-bot-tiny-php ; 此範例教學文章:https://blog.reh.tw/archives/988 ; ; 官方文檔:https://developers.line.biz/en/reference/messaging-api/ [Channel] ; 請在雙引號內輸入您的 Line Bot "Channel access token" Token = "" ; 請在雙引號內輸入您的 Line Bot "Channel secret" Secret = ""
這個檔案是機器人配置檔,編輯並填寫您的「Channel Access Token」和「Channel Secret」,資料在剛剛的機器人設定頁,填寫完後存檔。


在專案內「example_bot.php」這是 Line Bot 主要的檔案,也是 Webhook 要設定的路徑檔案,可以自行修改檔案名稱。
接著要開始設定剛剛沒設定的 Webhook URL,請先將剛剛下載 (包含編輯) 的檔案上傳到您的 Web 伺服器。
假設您 Web 伺服器 Line Bot 目錄的連線網址是 example.com,請在 Line Bot 設定頁面「Webhook URL」欄位編輯輸入「example.com/example_bot.php」,然後保存。

接著把「Use webhooks」設定為「Enabled」,保存後點擊下方的「Verify」。

Webhook URL 請不要照抄,要使用您自己的網址,網址必須要設定 SSL 證書。
現在機器人應該是可以正常運作的,您可以發送「文字」「圖片」「影片」「音樂」「位置」「貼圖」「圖片地圖」「按鈕模板」「確認模板」「輪播模板」這些關鍵字訊息給機器人試試。
開始解釋程式碼
首先開啟「example_bot.php」,內容如下:
<?php
/**
* Copyright 2020 GoneTone
*
* Line Bot
* 範例 Example Bot 執行主文件
*
* 此範例 GitHub 專案:https://github.com/GoneToneStudio/line-example-bot-tiny-php
* 此範例教學文章:https://blog.reh.tw/archives/988
*
* 官方文檔:https://developers.line.biz/en/reference/messaging-api/
*/
date_default_timezone_set("Asia/Taipei"); //設定時區為台北時區
require_once('LINEBotTiny.php');
$channelAccessToken = '';
$channelSecret = '';
if (file_exists(__DIR__ . '/config.ini')) {
$config = parse_ini_file("config.ini", true); //解析配置檔
if ($config['Channel']['Token'] == null || $config['Channel']['Secret'] == null) {
error_log("config.ini 配置檔未設定完全!", 0); //輸出錯誤
} else {
$channelAccessToken = $config['Channel']['Token'];
$channelSecret = $config['Channel']['Secret'];
}
} else {
$configFile = fopen("config.ini", "w") or die("Unable to open file!");
$configFileContent = '; Copyright 2020 GoneTone
;
; Line Bot
; 範例 Example Bot 配置文件
;
; 此範例 GitHub 專案:https://github.com/GoneToneStudio/line-example-bot-tiny-php
; 此範例教學文章:https://blog.reh.tw/archives/988
;
; 官方文檔:https://developers.line.biz/en/reference/messaging-api/
[Channel]
; 請在雙引號內輸入您的 Line Bot "Channel access token"
Token = ""
; 請在雙引號內輸入您的 Line Bot "Channel secret"
Secret = ""
';
fwrite($configFile, $configFileContent); //建立文件並寫入
fclose($configFile); //關閉文件
error_log("config.ini 配置檔建立成功,請編輯檔案填入資料!", 0); //輸出錯誤
}
$message = null;
$event = null;
$client = new LINEBotTiny($channelAccessToken, $channelSecret);
foreach ($client->parseEvents() as $event) {
switch ($event['type']) {
case 'message': //訊息觸發
$message = $event['message'];
switch ($message['type']) {
case 'text': //訊息為文字
require_once('includes/text.php'); //Type: Text
require_once('includes/image.php'); //Type: Image
require_once('includes/video.php'); //Type: Video
require_once('includes/audio.php'); //Type: Audio
require_once('includes/location.php'); //Type: Location
require_once('includes/sticker.php'); //Type: Sticker
require_once('includes/imagemap.php'); //Type: Imagemap
require_once('includes/template.php'); //Type: Template
break;
default:
//error_log("Unsupporeted message type: " . $message['type']);
break;
}
break;
case 'postback': //postback 觸發
//require_once('postback.php'); //postback
break;
case 'follow': //加為好友觸發
$client->replyMessage(array(
'replyToken' => $event['replyToken'],
'messages' => array(
array(
'type' => 'text',
'text' => '您好,這是一個範例 Bot OuO
範例程式開源至 GitHub (包含教學):
https://github.com/GoneTone/line-example-bot-php'
)
)
));
break;
case 'join': //加入群組觸發
$client->replyMessage(array(
'replyToken' => $event['replyToken'],
'messages' => array(
array(
'type' => 'text',
'text' => '大家好,這是一個範例 Bot OuO
範例程式開源至 GitHub (包含教學):
https://github.com/GoneTone/line-example-bot-php'
)
)
));
break;
default:
//error_log("Unsupporeted event type: " . $event['type']);
break;
}
}
在程式碼內 $event['type'] 是用來取得使用者與機器人互動的資料類型。
程式碼我都有寫註解,基本上應該很好理解。
進入「includes」資料夾內,會看到各類型的訊息檔案,我們先來看如何發送文字類型的訊息。
跟 Line 伺服器溝通都是使用 Json 格式,所以要回覆訊息發送過去的資料都是 Json 格式。
文字訊息
文字類型的訊息會發送以下格式的 Json 至 Line 伺服器。
{
"type": "text",
"text": "Hello, world!"
}
當使用者輸入 text 或 文字 關鍵字時就會回覆 Hello, world!,範例程式如下。
if (strtolower($message['text']) == "text" || $message['text'] == "文字") {
$client->replyMessage(array(
'replyToken' => $event['replyToken'],
'messages' => array(
array(
'type' => 'text', //訊息類型 (文字)
'text' => 'Hello, world!' //回覆訊息
)
)
));
}
文字訊息 – 官方文檔:https://developers.line.biz/en/reference/messaging-api#text-message

圖片訊息
如果我們要讓機器人回傳圖片訊息,Json 格式如下。
{
"type": "image",
"originalContentUrl": "https://api.reh.tw/images/gonetone/logos/icons/icon-256x256.png",
"previewImageUrl": "https://api.reh.tw/images/gonetone/logos/icons/icon-256x256.png"
}
當機器人收到關鍵字訊息 image 或 圖片,則回傳圖片,PHP 的寫法如下。
if (strtolower($message['text']) == "image" || $message['text'] == "圖片") {
$client->replyMessage(array(
'replyToken' => $event['replyToken'],
'messages' => array(
array(
'type' => 'image', //訊息類型 (圖片)
'originalContentUrl' => 'https://api.reh.tw/images/gonetone/logos/icons/icon-256x256.png', //回覆圖片
'previewImageUrl' => 'https://api.reh.tw/images/gonetone/logos/icons/icon-256x256.png' //回覆的預覽圖片
)
)
));
}
圖片訊息 – 官方文檔:https://developers.line.biz/en/reference/messaging-api#image-message

影片訊息
如果我們要讓機器人回傳影片訊息,Json 格式如下。
{
"type": "video",
"originalContentUrl": "https://api.reh.tw/line/bot/example/assets/videos/example.mp4",
"previewImageUrl": "https://api.reh.tw/line/bot/example/assets/images/example.jpg"
}
當機器人收到關鍵字訊息 video 或 視頻 或 影片,則回傳影片,PHP 的寫法如下。
if (strtolower($message['text']) == "video" || $message['text'] == "視頻" || $message['text'] == "影片") {
$client->replyMessage(array(
'replyToken' => $event['replyToken'],
'messages' => array(
array(
'type' => 'video', //訊息類型 (影片)
'originalContentUrl' => 'https://api.reh.tw/line/bot/example/assets/videos/example.mp4', //回覆影片
'previewImageUrl' => 'https://api.reh.tw/line/bot/example/assets/images/example.jpg' //回覆的預覽圖片
)
)
));
}
影片訊息 – 官方文檔:https://developers.line.biz/en/reference/messaging-api#video-message

音頻訊息
我們要讓機器人回傳音頻訊息,Json 格式如下。
{
"type": "audio",
"originalContentUrl": "https://api.reh.tw/line/bot/example/assets/audios/example.ogg",
"duration": 3000
}
當機器人收到關鍵字訊息 audio 或 音頻 或 音樂,則回傳音頻,PHP 的寫法如下。
if (strtolower($message['text']) == "audio" || $message['text'] == "音頻" || $message['text'] == "音樂") {
$audiofile = dirname(dirname(__FILE__)) . '/assets/audios/example.ogg'; //音樂文件路徑
$audiofileurl = 'https://api.reh.tw/line/bot/example/assets/audios/example.ogg'; //音樂文件網址
//使用 getID3 取得音樂長度 (毫秒)
require_once(dirname(dirname(__FILE__)) . '/lib/getid3/getid3.php');
$getID3 = new getID3;
$file = $getID3->analyze($audiofile);
$milliseconds = round($file['playtime_seconds'] * 1000); //音樂長度 (毫秒)
$client->replyMessage(array(
'replyToken' => $event['replyToken'],
'messages' => array(
array(
'type' => 'audio', //訊息類型 (音樂)
'originalContentUrl' => $audiofileurl, //回覆音樂
'duration' => $milliseconds //音樂長度 (毫秒)
)
)
));
}
音頻訊息 – 官方文檔:https://developers.line.biz/en/reference/messaging-api#audio-message

位置訊息
我們要讓機器人回傳位置訊息,Json 格式如下,
{
"type": "location",
"title": "Example location",
"address": "台灣高雄市三民區大昌一路 98 號 (立志中學)",
"latitude": 22.653742,
"longitude": 120.32652400000006
}
當機器人收到關鍵字訊息 location 或 地址 或 位置,則回傳位置,PHP 的寫法如下。
if (strtolower($message['text']) == "location" || $message['text'] == "地址" || $message['text'] == "位置") {
$client->replyMessage(array(
'replyToken' => $event['replyToken'],
'messages' => array(
array(
'type' => 'location', //訊息類型 (位置)
'title' => 'Example location', //回覆標題
'address' => '台灣高雄市三民區大昌一路 98 號 (立志中學)', //回覆地址
'latitude' => 22.653742, //地址緯度
'longitude' => 120.32652400000006 //地址經度
)
)
));
}
位置訊息 – 官方文檔:https://developers.line.biz/en/reference/messaging-api#location-message

貼圖訊息
我們要讓機器人回傳貼圖訊息,Json 格式如下。
{
"type": "sticker",
"packageId": 1,
"stickerId": 1
}
當機器人收到關鍵字訊息 sticker 或 貼圖 或 貼紙,則回傳貼圖,PHP 的寫法如下。
if (strtolower($message['text']) == "sticker" || $message['text'] == "貼圖" || $message['text'] == "貼紙") {
$client->replyMessage(array(
'replyToken' => $event['replyToken'],
'messages' => array(
array(
'type' => 'sticker', //訊息類型 (貼圖)
'packageId' => 1, //貼圖包 ID
'stickerId' => 1 //貼圖 ID
)
)
));
}
貼圖 ID 查詢:https://developers.line.biz/media/messaging-api/sticker_list.pdf
貼圖訊息 – 官方文檔:https://developers.line.biz/en/reference/messaging-api#sticker-message

圖片地圖訊息
我們要讓機器人回傳圖片地圖訊息,Json 格式如下。
{
"type": "imagemap",
"baseUrl": "https://api.reh.tw/line/bot/example/assets/images/example",
"altText": "Example imagemap"
"baseSize": {
"height": 1040,
"width": 1040
},
"actions": [
{
"type": "uri",
"linkUri": "https://github.com/GoneToneStudio/line-example-bot-tiny-php",
"area": {
"x": 0,
"y": 0,
"width": 520,
"height": 1040
}
},
{
"type": "message",
"text": "Hello",
"area": {
"x": 520,
"y": 0,
"width": 520,
"height": 1040
}
}
]
}
當機器人收到關鍵字訊息 imagemap 或 圖像地圖 或 圖片地圖,則回傳圖片地圖,PHP 的寫法如下。
if (strtolower($message['text']) == "imagemap" || $message['text'] == "圖像地圖" || $message['text'] == "圖片地圖") {
$client->replyMessage(array(
'replyToken' => $event['replyToken'],
'messages' => array(
array(
'type' => 'imagemap', //訊息類型 (圖片地圖)
'baseUrl' => 'https://api.reh.tw/line/bot/example/assets/images/example', //圖片網址 (可調整大小 240px, 300px, 460px, 700px, 1040px)
'altText' => 'Example imagemap', //替代文字
'baseSize' => array(
'height' => 1040, //圖片寬
'width' => 1040 //圖片高
),
'actions' => array(
array(
'type' => 'uri', //類型 (網址)
'linkUri' => 'https://github.com/GoneToneStudio/line-example-bot-tiny-php', //連結網址
'area' => array(
'x' => 0, //點擊位置 X 軸
'y' => 0, //點擊位置 Y 軸
'width' => 520, //點擊範圍寬度
'height' => 1040 //點擊範圍高度
)
),
array(
'type' => 'message', //類型 (用戶發送訊息)
'text' => 'Hello', //發送訊息
'area' => array(
'x' => 520, //點擊位置 X 軸
'y' => 0, //點擊位置 Y 軸
'width' => 520, //點擊範圍寬度
'height' => 1040 //點擊範圍高度
)
)
)
)
)
));
}
圖片地圖訊息 – 官方文檔:https://developers.line.biz/en/reference/messaging-api#imagemap-message

按鈕模板訊息
我們要讓機器人回傳按鈕模板訊息,Json 格式如下。
{
"type": "template",
"altText": "Example buttons template",
"template": {
"type": "buttons",
"thumbnailImageUrl": "https://api.reh.tw/line/bot/example/assets/images/example.jpg",
"title": "Example Menu",
"text": "Please select",
"actions": [
{
"type": "postback",
"label": "Postback example",
"data": "action=buy&itemid=123"
},
{
"type": "message",
"label": "Message example",
"text": "Message example"
},
{
"type": "uri",
"label": "Uri example",
"uri": "https://github.com/GoneToneStudio/line-example-bot-tiny-php"
}
]
}
}
當機器人收到關鍵字訊息 buttons template 或 按鈕模板,則回傳按鈕模板,PHP 的寫法如下 。
if (strtolower($message['text']) == "buttons template" || $message['text'] == "按鈕模板") {
$client->replyMessage(array(
'replyToken' => $event['replyToken'],
'messages' => array(
array(
'type' => 'template', //訊息類型 (模板)
'altText' => 'Example buttons template', //替代文字
'template' => array(
'type' => 'buttons', //類型 (按鈕)
'thumbnailImageUrl' => 'https://api.reh.tw/line/bot/example/assets/images/example.jpg', //圖片網址 <不一定需要>
'title' => 'Example Menu', //標題 <不一定需要>
'text' => 'Please select', //文字
'actions' => array(
array(
'type' => 'postback', //類型 (回傳)
'label' => 'Postback example', //標籤 1
'data' => 'action=buy&itemid=123' //資料
),
array(
'type' => 'message', //類型 (訊息)
'label' => 'Message example', //標籤 2
'text' => 'Message example' //用戶發送文字
),
array(
'type' => 'uri', //類型 (連結)
'label' => 'Uri example', //標籤 3
'uri' => 'https://github.com/GoneToneStudio/line-example-bot-tiny-php' //連結網址
)
)
)
)
)
));
}
按鈕模板訊息 – 官方文檔:https://developers.line.biz/en/reference/messaging-api/#buttons

確認模板訊息
我們要讓機器人回傳確認模板訊息,Json 格式如下。
{
"type": "template",
"altText": "Example confirm template",
"template": {
"type": "confirm",
"text": "Are you sure?",
"actions": [
{
"type": "message",
"label": "Yes",
"text": "Yes"
},
{
"type": "message",
"label": "No",
"text": "No"
}
]
}
}
當機器人收到關鍵字訊息 confirm template 或 確認模板,則回傳確認模板,PHP 的寫法如下。
if (strtolower($message['text']) == "confirm template" || $message['text'] == "確認模板") {
$client->replyMessage(array(
'replyToken' => $event['replyToken'],
'messages' => array(
array(
'type' => 'template', //訊息類型 (模板)
'altText' => 'Example confirm template', //替代文字
'template' => array(
'type' => 'confirm', //類型 (確認)
'text' => 'Are you sure?', //文字
'actions' => array(
array(
'type' => 'message', //類型 (訊息)
'label' => 'Yes', //標籤 1
'text' => 'Yes' //用戶發送文字 1
),
array(
'type' => 'message', //類型 (訊息)
'label' => 'No', //標籤 2
'text' => 'No' //用戶發送文字 2
)
)
)
)
)
));
}
確認模板訊息 – 官方文檔:https://developers.line.biz/en/reference/messaging-api/#confirm

輪播模板訊息
我們要讓機器人回傳輪播模板訊息,Json 格式如下。
{
"type": "template",
"altText": "Example carousel template",
"template": {
"type": "carousel",
"columns": [
{
"thumbnailImageUrl": "https://api.reh.tw/line/bot/example/assets/images/example.jpg",
"title": "Example Menu 1",
"text": "Description 1",
"actions": [
{
"type": "postback",
"label": "Postback example 1",
"data": "action=buy&itemid=123"
},
{
"type": "message",
"label": "Message example 1",
"text": "Message example 1"
},
{
"type": "uri",
"label": "Uri example 1",
"uri": "https://github.com/GoneToneStudio/line-example-bot-tiny-php"
}
]
},
{
"thumbnailImageUrl": "https://api.reh.tw/line/bot/example/assets/images/example.jpg",
"title": "Example Menu 2",
"text": "Description 2",
"actions": [
{
"type": "postback",
"label": "Postback example 2",
"data": "action=buy&itemid=123"
},
{
"type": "message",
"label": "Message example 2",
"text": "Message example 2"
},
{
"type": "uri",
"label": "Uri example 2",
"uri": "https://github.com/GoneToneStudio/line-example-bot-tiny-php"
}
]
}
]
}
}
當機器人收到關鍵字訊息 carousel template 或 旋轉木馬模板 或 輪播模板,則回傳輪播模板,PHP 的寫法如下。
if (strtolower($message['text']) == "carousel template" || $message['text'] == "旋轉木馬模板" || $message['text'] == "輪播模板") {
$client->replyMessage(array(
'replyToken' => $event['replyToken'],
'messages' => array(
array(
'type' => 'template', //訊息類型 (模板)
'altText' => 'Example buttons template', //替代文字
'template' => array(
'type' => 'carousel', //類型 (輪播)
'columns' => array(
array(
'thumbnailImageUrl' => 'https://api.reh.tw/line/bot/example/assets/images/example.jpg', //圖片網址 <不一定需要>
'title' => 'Example Menu 1', //標題 1 <不一定需要>
'text' => 'Description 1', //文字 1
'actions' => array(
array(
'type' => 'postback', //類型 (回傳)
'label' => 'Postback example 1', //標籤 1
'data' => 'action=buy&itemid=123' //資料
),
array(
'type' => 'message', //類型 (訊息)
'label' => 'Message example 1', //標籤 2
'text' => 'Message example 1' //用戶發送文字
),
array(
'type' => 'uri', //類型 (連結)
'label' => 'Uri example 1', //標籤 3
'uri' => 'https://github.com/GoneToneStudio/line-example-bot-tiny-php' //連結網址
)
)
),
array(
'thumbnailImageUrl' => 'https://api.reh.tw/line/bot/example/assets/images/example.jpg', //圖片網址 <不一定需要>
'title' => 'Example Menu 2', //標題 2 <不一定需要>
'text' => 'Description 2', //文字 2
'actions' => array(
array(
'type' => 'postback', //類型 (回傳)
'label' => 'Postback example 2', //標籤 1
'data' => 'action=buy&itemid=123' //資料
),
array(
'type' => 'message', //類型 (訊息)
'label' => 'Message example 2', //標籤 2
'text' => 'Message example 2' //用戶發送文字
),
array(
'type' => 'uri', //類型 (連結)
'label' => 'Uri example 2', //標籤 3
'uri' => 'https://github.com/GoneToneStudio/line-example-bot-tiny-php' //連結網址
)
)
)
)
)
)
)
));
}
輪播模板訊息 – 官方文檔:https://developers.line.biz/en/reference/messaging-api/#carousel

圖片輪播模板訊息
我們要讓機器人回傳圖片輪播模板訊息,Json 格式如下:
{
"type": "template",
"altText": "Example image carousel template",
"template": {
"type": "image_carousel",
"columns": [
{
"imageUrl": "https://api.reh.tw/line/bot/example/assets/images/example_1-1.jpg",
"action": {
"type": "postback",
"label": "Pb example",
"data": "action=buy&itemid=123"
}
},
{
"imageUrl": "https://api.reh.tw/line/bot/example/assets/images/example_1-1.jpg",
"action": {
"type": "message",
"label": "Msg example",
"text": "Message example"
}
},
{
"imageUrl": "https://api.reh.tw/line/bot/example/assets/images/example_1-1.jpg",
"action": {
"type": "uri",
"label": "Uri example",
"uri": "https://github.com/GoneToneStudio/line-example-bot-tiny-php"
}
}
]
}
}
當機器人收到關鍵字訊息 image carousel template 或 圖片輪播模板,則回傳圖片輪播模板,PHP 的寫法如下:
if (strtolower($message['text']) == "image carousel template" || $message['text'] == "圖片輪播模板") {
$client->replyMessage(array(
'replyToken' => $event['replyToken'],
'messages' => array(
array(
'type' => 'template', //訊息類型 (模板)
'altText' => 'Example image carousel template', //替代文字
'template' => array(
'type' => 'image_carousel', //類型 (圖片輪播)
'columns' => array(
array(
'imageUrl' => 'https://api.reh.tw/line/bot/example/assets/images/example_1-1.jpg', //圖片網址
'action' => array(
'type' => 'postback', //類型 (回傳)
'label' => 'Pb example', //標籤
'data' => 'action=buy&itemid=123' //資料
)
),
array(
'imageUrl' => 'https://api.reh.tw/line/bot/example/assets/images/example_1-1.jpg', //圖片網址
'action' => array(
'type' => 'message', //類型 (訊息)
'label' => 'Msg example', //標籤
'text' => 'Message example' //用戶發送文字
)
),
array(
'imageUrl' => 'https://api.reh.tw/line/bot/example/assets/images/example_1-1.jpg', //圖片網址
'action' => array(
'type' => 'uri', //類型 (連結)
'label' => 'Uri example', //標籤
'uri' => 'https://github.com/GoneToneStudio/line-example-bot-tiny-php' //連結網址
)
)
)
)
)
)
));
}
圖片輪播模板訊息 – 官方文檔:https://developers.line.biz/en/reference/messaging-api/#image-carousel

Flex 訊息
我們要讓機器人回傳 Flex 訊息,Json 格式如下:
{
"type": "flex",
"altText": "Example flex message template",
"contents": {
"type": "bubble",
"hero": {
"type": "image",
"url": "https://api.reh.tw/images/gonetone/logos/icons/icon-256x256.png",
"aspectRatio": "16:9",
"size": "full",
"aspectMode": "cover"
},
"body": {
"type": "box",
"layout": "vertical",
"contents": [
{
"type": "text",
"text": "Hello, world!",
"weight": "bold",
"size": "xl",
"margin": "md",
"wrap": true
},
{
"type": "text",
"text": "你好,世界!",
"wrap": true,
"color": "#e96bff"
}
]
},
"footer": {
"type": "box",
"layout": "vertical",
"contents": [
{
"type": "button",
"action": {
"type": "uri",
"label": "教學文章",
"uri": "https://blog.reh.tw/archives/988#Flex-%E8%A8%8A%E6%81%AF"
},
"style": "secondary",
"color": "#FFD798"
},
{
"type": "button",
"action": {
"type": "uri",
"uri": "https://github.com/GoneToneStudio/line-example-bot-tiny-php",
"label": "GitHub"
}
}
]
},
"size": "giga"
}
}
當機器人收到關鍵字訊息 flex,則回傳 Flex 訊息,PHP 的寫法如下:
/*
* 可以使用 Line 官方提供的 Flex Message Simulator 排版
* https://developers.line.biz/flex-simulator/
*
* Flex Message Simulator 是生成 Json,可以利用下方網頁快速轉換成陣列,當然你要手動寫也是可XDD
* https://www.appdevtools.com/json-php-array-converter
*/
if (strtolower($message['text']) == "flex") {
/* 注意,Flex Message Simulator 生成並轉換的陣列貼在這邊 */
$contentsArray = array(
"type" => "bubble",
"hero" => array(
"type" => "image",
"url" => "https://api.reh.tw/images/gonetone/logos/icons/icon-256x256.png",
"aspectRatio" => "16:9",
"size" => "full",
"aspectMode" => "cover"
),
"body" => array(
"type" => "box",
"layout" => "vertical",
"contents" => array(
array(
"type" => "text",
"text" => "Hello, world!",
"weight" => "bold",
"size" => "xl",
"margin" => "md",
"wrap" => true
),
array(
"type" => "text",
"text" => "你好,世界!",
"wrap" => true,
"color" => "#e96bff"
)
)
),
"footer" => array(
"type" => "box",
"layout" => "vertical",
"contents" => array(
array(
"type" => "button",
"action" => array(
"type" => "uri",
"label" => "教學文章",
"uri" => "https://blog.reh.tw/archives/988#Flex-%E8%A8%8A%E6%81%AF"
),
"style" => "secondary",
"color" => "#FFD798"
),
array(
"type" => "button",
"action" => array(
"type" => "uri",
"uri" => "https://github.com/GoneToneStudio/line-example-bot-tiny-php",
"label" => "GitHub"
)
)
)
),
"size" => "giga"
);
$client->replyMessage(array(
'replyToken' => $event['replyToken'],
'messages' => array(
array(
'type' => 'flex', //訊息類型 (flex)
'altText' => 'Example flex message template', //替代文字
'contents' => $contentsArray //Flex Message 內容
)
)
));
}
可以使用 Line 官方提供的 Flex Message Simulator 排版
https://developers.line.biz/flex-simulator/
Flex Message Simulator 是生成 Json,可以利用下方網頁快速轉換成陣列,當然你要手動寫也是可XDD
https://www.appdevtools.com/json-php-array-converter
Flex 訊息 – 官方文檔:https://developers.line.biz/en/reference/messaging-api/#flex-message

其他資訊
以上就是各類型訊息的範例程式碼,教學到這邊結束!
順便幫我的 GitHub 按星星喔XDD
https://github.com/GoneToneStudio/line-example-bot-tiny-php
可以將範例機器人加入好友來測試看看:@omp3220g
也歡迎將我開發的 Line Bot 加為好友 (開發方式與本篇文章不同):@fal0760p
張文相 Wenxiang Zhang
我是本站的站長,是一位 Web 工程師,喜歡 Coding XDD
本站內容未經授權許可請勿擅自抄襲
如果需引用部分內容請註明來源網址
發表時間:2019/03/13 20:50:22
修改時間:2021/02/27 15:58:59

