Line Bot 開發教學,基礎範例程式碼 (PHP) – 輕量版 LINEBotTiny.php

2 個月前 |

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 Provider」

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

點擊「Create new channel」

然後點擊「Messaging API」。

點擊「Messaging API」

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

全部資料輸入完,「Plan」設定成「Free」,完成後點選「Confirm」

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

確認資料,框起來的地方打勾,然後點擊「Create」

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


點擊「Issue」

再點擊一次「Issue」。

點擊「Issue」

「Channel access token」是後面寫程式時會用到的。

如果您想讓機器人可以加入群組,請將「Allow bot to join group chats」設定為「Enabled」。

「Allow bot to join group chats」設定為「Enabled」機器人才可進入群組

這時還不用設定 Webhook,在文章後面才會設定,所以請先忽略。

接著把「Using LINE@ features」這區內的設定全部修改成「Disabled」,因為我們要使用程式碼寫功能,而不是直接使用 LINE@ 的功能。

把「Using LINE@ features」這區內的設定全部修改成「Disabled」

開始進入程式碼的部分。

請先到 https://github.com/GoneTone/line-example-bot-tiny-php 下載完整範例。

範例專案內有一個檔案名為「config.ini」,內容如下。

; Copyright 2019 GoneTone
;
; Line Bot
; 範例 Example Bot 配置文件
;
; 此範例 GitHub 專案:https://github.com/GoneTone/line-example-bot-php
; 官方文檔: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」,資料在剛剛的機器人設定頁,填寫完後存檔。

Channel Secret
Channel Access Token

在專案內「example_bot.php」這是 Line Bot 主要的檔案,也是 Webhook 要設定的路徑檔案,可以自行修改檔案名稱。

接著要開始設定剛剛沒設定的 Webhook URL,請先將剛剛下載 (包含編輯) 的檔案上傳到您的 Web 伺服器。

假設您 Web 伺服器 Line Bot 目錄的連線網址是 example.com,請在 Line Bot 設定頁面「Webhook URL」欄位編輯輸入「example.com/example_bot.php」,然後保存。

Webhook URL 設定

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

「Use webhooks」設定為「Enabled」,保存後點擊「Verify」

Webhook URL 請不要照抄,要使用您自己的網址,網址必須要設定 SSL 證書。

現在機器人應該是可以正常運作的,您可以發送「文字」「圖片」「影片」「音樂」「位置」「貼圖」「圖片地圖」「按鈕模板」「確認模板」「輪播模板」這些關鍵字訊息給機器人試試。

開始來解釋程式碼,首先開啟「example_bot.php」,內容如下。

<?php
/**
 * Copyright 2017 GoneTone
 *
 * Line Bot
 * 範例 Example Bot 執行主文件
 *
 * 此範例 GitHub 專案:https://github.com/GoneTone/line-example-bot-php
 * 官方文檔:https://developers.line.biz/en/reference/messaging-api/
 */
error_reporting(0); // 不顯示錯誤 (Debug 時請註解掉)
date_default_timezone_set("Asia/Taipei"); // 設定時區為台北時區

require_once('LINEBotTiny.php');

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 2019 GoneTone
;
; Line Bot
; 範例 Example Bot 配置文件
;
; 此範例 GitHub 專案:https://github.com/GoneTone/line-example-bot-php
; 官方文檔: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); // 輸出錯誤
}

$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':
            //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;
    }
};
?>

在程式碼第 48 行的 $event['type'] 是用來取得使用者與機器人互動的資料類型,例如第 49 行就是判斷資料類型是不是 message,也就是是否為訊息。

第 70 行資料類型為 follow 就發送訊息,就是使用者將機器人加為好友時觸發。

第 84 行資料類型為 join 就發送訊息,就是使用者將機器人加入群組時觸發。

第 53 至 60 行就是各類型訊息範例,我另外寫成獨立檔案再引入。

進入「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!' // 回復訊息
            )
        )
    ));
}
  • 在 type 那我們設定 text,代表訊息類型為文字。
  • 在 text 那可以自行修改成您想讓機器人回復的訊息。 PS:文字最大 2000 個字符
  • 判斷式中的 $message['text'] 為使用者傳送的文字,您可自行修改判斷式。
文字訊息 – 範例圖

文字訊息 – 官方文檔:https://developers.line.biz/en/reference/messaging-api#text-message

  圖片訊息 

如果我們要讓機器人回傳圖片訊息,Json 格式如下。

{
    "type": "image",
    "originalContentUrl": "https://api.reh.tw/line/bot/example/assets/images/example.jpg",
    "previewImageUrl": "https://api.reh.tw/line/bot/example/assets/images/example.jpg"
}

當機器人收到關鍵字訊息 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/line/bot/example/assets/images/example.jpg', // 回復圖片
                'previewImageUrl' => 'https://api.reh.tw/line/bot/example/assets/images/example.jpg' // 回復的預覽圖片
            )
        )
    ));
}
  • 在 type 那我們設定 image,代表訊息類型為圖片。
  • 在 originalContentUrl 那可以自行修改成您想讓機器人回復的圖片網址。 PS:必須是 https 加密、網址最大 1000 個字符、圖片長寬最大 1024 x 1024、圖片大小最大 1 MB
  • 在 previewImageUrl 那可以自行修改成您想讓機器人回復的預覽圖片網址。 PS:必須是 https 加密、網址最大 1000 個字符、圖片長寬最大 240 x 240、圖片大小最大 1 MB
  • 判斷式中的 $message['text'] 為使用者傳送的文字,您可自行修改判斷式。
圖片訊息 – 範例圖

圖片訊息 – 官方文檔: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' // 回復的預覽圖片
            )
        )
    ));
}
  • 在 type 那我們設定 video,代表訊息類型為影片。
  • 在 originalContentUrl 那可以自行修改成您想讓機器人回復的影片網址。 PS:必須是 https 加密、網址最大 1000 個字符、影片長度小於 1 分鐘、影片大小最大 10 MB
  • 在 previewImageUrl 那可以自行修改成您想讓機器人回復的預覽圖片網址。 PS:必須是 https 加密、網址最大 1000 個字符、圖片長寬最大 240 x 240、圖片大小最大 1 MB
  • 判斷式中的 $message['text'] 為使用者傳送的文字,您可自行修改判斷式。
影片訊息 – 範例圖

影片訊息 – 官方文檔: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__)).'/assets/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 // 音樂長度 (毫秒)
            )
        )
    ));
}
  • 在 type 那我們設定 audio,代表訊息類型為音頻。
  • 在 originalContentUrl 那可以自行修改成您想讓機器人回復的音頻網址。 PS:必須是 https 加密、網址最大 1000 個字符、音頻長度小於 1 分鐘、影片大小最大 10 MB
  • 在 duration 那設定為音頻長度 (毫秒),單位計算 1 秒 * 1000。 PS:我們使用了 getID3 自動取得音樂長度,詳情請看專案
  • 判斷式中的 $message['text'] 為使用者傳送的文字,您可自行修改判斷式。
音頻訊息 – 範例圖

音頻訊息 – 官方文檔: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 // 地址經度
            )
        )
    ));
}
  • 在 type 那我們設定 location,代表訊息類型為位置。
  • 在 title 那可以自行修改成您想讓機器人回復位置時顯示的標題。 PS:文字最大 100 個字符
  • 在 address 那可以自行修改成您想讓機器人回復位置時顯示的位置名稱。 PS:文字最大 100 個字符
  • 在 latitude 那可以自行修改成您想讓機器人回復位置的緯度。 PS:網路上有工具可將地址轉換成經緯度
  • 在 longitude 那可以自行修改成您想讓機器人回復位置的經度。 PS:網路上有工具可將地址轉換成經緯度
  • 判斷式中的 $message['text'] 為使用者傳送的文字,您可自行修改判斷式。
位置訊息 – 範例圖

位置訊息 – 官方文檔: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
            )
        )
    ));
}
貼圖訊息 – 範例圖

貼圖訊息 – 官方文檔: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/GoneTone/line-example-bot-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/GoneTone/line-example-bot-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 // 點擊範圍高度
                        )
                    )
                )
            )
        )
    ));
}
  • 在 type 那我們設定 imagemap,代表訊息類型為圖片地圖。
  • 在 baseUrl 那可以自行修改成您想讓機器人回復的圖片。 PS:圖片網址結尾必須包含圖片的像素,例如 https://api.reh.tw/line/bot/example/assets/images/example/1040 (詳情請看專案)、網址最大 1000 個字符
  • 在 altText 那可以自行修改成您想讓機器人回復圖片地圖的替代文字。 文字最大 400 個字元
  • 在 baseSize.width 那設定為 1040 像素。
  • 在 baseSize.height 那設定為 1040 像素。
  • 在 actions.type 那可以使用的功能為 uri 、 message
  • 判斷式中的 $message['text'] 為使用者傳送的文字,您可自行修改判斷式。
圖片地圖訊息 – 範例圖

圖片地圖訊息 – 官方文檔: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/GoneTone/line-example-bot-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/GoneTone/line-example-bot-php' // 連結網址
                        )
                    )
                )
            )
        )
    ));
}
  • 在 type 那我們設定 template,代表訊息類型為模板。
  • 在 altText 那可以自行修改成您想讓機器人回復圖片地圖的替代文字。 文字最大 400 個字元
  • 在 template.type 那可以使用的樣式為 buttons 、 confirm 、 carousel,我們設定為 buttons,代表訊息類型為按鈕模板。
  • 在 template.thumbnailImageUrl 那可以自行修改成您想讓機器人回復模板的封面圖片網址。PS:必須是 https 加密、網址最大 1000 個字符、圖片寬高比 1:1.51 、圖片最大寬度:1024 像素、圖片大小最大 1 MB,<不一定需要>
  • 在 template.title 那可以自行修改成您想讓機器人回復模板的標題。 PS:文字最大 40 個字符,<不一定需要>
  • 在 template.text 那可以自行修改成您想讓機器人回復模板的文字。 PS:文字最大 160 個字符 (無設定圖片或標題)、文字最大 60 個字符 (有設定圖片或標題)
  • 在 template.actions.type 那可以使用的功能為 postback 、 message 、 uri
  • 判斷式中的 $message['text'] 為使用者傳送的文字,您可自行修改判斷式。
按鈕模板訊息 – 範例圖

按鈕模板訊息 – 官方文檔: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
                        )
                    )
                )
            )
        )
    ));
}
  • 在 type 那我們設定 template,代表訊息類型為模板。
  • 在 altText 那可以自行修改成您想讓機器人回復圖片地圖的替代文字。 文字最大 400 個字元
  • 在 template.type 那可以使用的樣式為 buttons 、 confirm 、 carousel,我們設定為 confirm,代表訊息類型為確認模板。
  • 在 template.text 那可以自行修改成您想讓機器人回復模板的文字。 ***PS:文字最大 240 個字符 ***
  • 在 template.actions.type 那可以使用的功能為 postback 、 message 、 uri
  • 判斷式中的 $message['text'] 為使用者傳送的文字,您可自行修改判斷式。
確認模板訊息 – 範例圖

確認模板訊息 – 官方文檔: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/GoneTone/line-example-bot-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/GoneTone/line-example-bot-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/GoneTone/line-example-bot-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/GoneTone/line-example-bot-php' // 連結網址
                                )
                            )
                        )
                    )
                )
            )
        )
    ));
}
  • 在 type 那我們設定 template,代表訊息類型為模板。
  • 在 altText 那可以自行修改成您想讓機器人回復圖片地圖的替代文字。 文字最大 400 個字元
  • 在 template.type 那可以使用的樣式為 buttons 、 confirm 、 carousel,我們設定為 carousel,代表訊息類型為旋轉木馬模板。
  • 在 template.columns.thumbnailImageUrl 那可以自行修改成您想讓機器人回復模板的封面圖片網址。 PS:必須是 https 加密、網址最大 1000 個字符、圖片寬高比 1:1.51 、圖片最大寬度:1024 像素、圖片大小最大 1 MB,<不一定需要>
  • 在 template.columns.title 那可以自行修改成您想讓機器人回復模板的標題。 PS:文字最大 40 個字符,<不一定需要>
  • 在 template.columns.text 那可以自行修改成您想讓機器人回復模板的文字。 PS:文字最大 120 個字符 (無設定圖片或標題)、文字最大 60 個字符 (有設定圖片或標題)
  • 在 template.columns.actions.type 那可以使用的功能為 postback 、 message 、 uri
  • 判斷式中的 $message['text'] 為使用者傳送的文字,您可自行修改判斷式。
輪播模板訊息 – 範例圖

輪播模板訊息 – 官方文檔:https://developers.line.biz/en/reference/messaging-api/#carousel


以上就是各類型訊息的範例程式碼,教學到這邊結束!

可以將範例機器人加入好友來測試看看:@omp3220g
也歡迎將我開發的 Line Bot 加為好友 (開發方式與本篇文章不同):@fal0760p


Line Bot 開發教學,基礎範例程式碼 (PHP) – 輕量版 LINEBotTiny.php - QR Code
本站內容未經授權許可請勿擅自抄襲
如果需引用部分文章內容請註明來源網址

發表時間:2019-03-13 20:50:22
此文章網址:https://blog.reh.tw/archives/988
關於作者
張文相 Zhang Wenxiang 的頭像

張文相 Zhang Wenxiang

我是本站的站長,喜歡 Coding 的一位學生。

張文相 Zhang Wenxiang

我是本站的站長,喜歡 Coding 的一位學生。


分類:教學 科技 程式
標籤:Bot Line Messaging API PHP Webhook 機器人



Facebook 留言