---
# System prepended metadata

title: 社群軟體開發應用
tags: [講義]

---

# 社群軟體開發應用
僑光科技大學 資訊科技系
2019/09/09 ~ 2020/01/11
資科三忠、三孝：星期五第5、6、7節
授課老師：高吉隆
電子信箱：[kevinkao888@gmail.com](mailto://kevinkao888@gmail.com)
[專業教室使用規則](https://hackmd.io/@nu1gpWVGTf2ERQf4G8_eUg/S1hjuuNLB#/)
###### tags: `講義`

---

# 課程介紹
* 課程大綱
* 每週目標
* 評分標準
* 使用教科書

----

## 課程大綱
* 課程是介紹各種社群軟體的程式應用技術
* 研究如何使用<font color="red">程式語言</font>方式來開發社群的應用
* 內容包括LINE官方帳號2.0(原LINE@生活圈)
* 使用程式語言透過API來製作LINE機器人
* 使用<font color="red">Node.js</font>程式語言
* 使用<font color="red">POSTMAN、VSC</font>等開發工具
* 課程內容分為
    * LINE官方帳號管理-建立、設定官方帳號
    * 歡迎、自動、群發、圖文、影片等訊息
    * LINE訊息API、LINE登入API

----

## 每週目標
* 前 9 週上課目標
    * 課程講解：LINE官方帳號管理(設定、訊息)
    * 作業繳交：程式解說
    * 期中報告：專題實作
* 後 9 週上課目標
    * 課程講解：LINE訊息API、登入API
    * 作業繳交：程式解說
    * 期末報告：專題實作

----

|週|日期| 前 9 週上課目標 |
|:-:|:-:|--------------- |
|1|09/13|中秋節放假1天|
|2|09/20|課程簡介、官方帳號建立設定|
|3|09/27|自動回應訊息、圖文選單|
|4|10/04|作業1說明、撰寫、期中報告說明|
|5|10/11|國慶日連假、作業1繳交|
|6|10/18|POSTMAN發送訊息、Webhook伺服器|
|7|10/25|PHP、Node.js介紹|
|8|11/01|分組討論、報告實作| 
|9|11/08|期中報告繳交、上台報告|

----

|週|日期|後 9 週上課目標 |
|:-:|:-:| --------------- |
|10|11/15|PHP、Node.js程式設計|
|11|11/22|實作Template Message|
|12|11/29|實作Rich Menu、整合Line Login|
|13|12/06|Node.js連接資料庫|
|14|12/13|整合實作、小考1|
|15|12/20|期末報告分組討論|
|16|12/27|期末報告實作、作業2|
|17|01/03|期末報告實作|
|18|01/10|期末報告繳交、上台報告|

----

## 評分標準
* 平時成績：40%
    * 上課互動：10%
    * 第1次作業：10% (第5週)
    * 第1次小考：10% (第14週)
    * 第2次作業：10% (第16週)
* 期中成績：30%
    * 期中報告：30% (第9週)
* 期末成績：30%
    * 期末報告：30% (第18週)

----

### 使用教科書
* 書名：輕鬆學會LINE程式設計與AI聊天機器人實作開發
* 出版社：博碩文化
* 作者：黃士嘉、林敬傑
![](https://img.ruten.com.tw/s2/b/5a/ba/21929139083962_166.png =300x400)

----

### 作業一說明
* 參考資料：您認為有代表性的帳號
    * 自行搜尋或參考網址：[連結](https://www.linebiz.com/tw/case-study/)
* 填寫題目：請置換掉我的題目
    * 填寫網址：[連結](https://hackmd.io/1twT6HsPRMG1OwuCrFQR9g)
* 請於規定時間內上傳作業至Zuvio
    * 帳號：s學號@ocu.edu.tw
    * 密碼：123(預設密碼，請自行更改) 

----

### 期中報告說明
* 實作官方帳號：建立應用在某主題的帳號
    * 如某飲料店、餐廳
* 填寫題目：請置換掉我的題目
    * 填寫網址：[連結](https://hackmd.io/EbmoCShPQICritE48R7lYA)
* 請於規定時間內上傳作業至Zuvio
    * 帳號：s學號@ocu.edu.tw
    * 密碼：123(預設密碼，請自行更改) 

----

## 作業二
* 期末報告規畫報告
* 紙張為1-3頁
* 內容包括：
    * 組員名單
    * 系統名稱
    * 系統概述
    * 功能說明
    * 版面設計
* 請於12/27(五)上課前上傳至Zuvio
    * 上傳前請轉換成 pdf 檔

----

### 期末報告說明
* 實作官方帳號：建立應用在某主題的帳號
    * 如某店家、主題、目的
* 填寫題目：請置換掉我的題目
    * 填寫網址：[連結](https://hackmd.io/l5FFdfKXSsefRI8NAQkb_w)
* 請於規定時間內上傳作業至Zuvio
    * 帳號：s學號@ocu.edu.tw
    * 密碼：123(預設密碼，請自行更改) 

---

### LINE官方帳號2.0
* 升級公告(2019.04.18陸續升級)：[連結](https://event-web.line.me/ectw/publication/LINE+%E7%94%9F%E6%B4%BB%E5%9C%88%E5%85%A8%E9%9D%A2%E5%8D%87%E7%B4%9A+%E5%85%A8%E6%96%B0%E5%AE%98%E6%96%B9%E5%B8%B3%E8%99%9F2+0%E8%A8%88%E7%95%AB-3731de66d5b124d7624f064137ba31164baccd2f1cda1fe6bcd5a72e24c02eb8?utm_source=OA&utm_medium=LINE%40migration)
* 帳號來源
    * 由原有LINE@生活圈帳號升級
        * LINE@生活圈介紹：[連結](https://at.line.me/tw/)
    * 由原有的官方帳號1.0升級
        * Line Account Connect：[連結](https://www.linebiz.com/tw/service/line-account-connect/)
    * 全新建立：
        * 申請官方帳號：[連結](https://www.linebiz.com/tw/service/line-account-connect/?utm_source=at-blog.line.me&utm_medium=referral&utm_campaign=blog-old-essay)
        * 成功案例分享：[連結](https://www.linebiz.com/tw/case-study/)

----

### LINE官方帳號-課程範例
![](https://i.imgur.com/ECChwc2.png =600x600)



----

### LINE官方帳號-美麗菲凡創意市集
![](https://i.imgur.com/dkb7CIV.png =600x600)

----

### LINE官方帳號管理後台
* 後台網址：[連結](https://manager.line.biz/)
* 登入方式：
    * 使用LINE帳號登入：個人管理後台
    * 使用商用帳號登入：多人管理後台
* 帳號一覽：可同時申請多個官方帳號
* 後台功能：主頁、提醒、分析、聊天、設定
* 基本檔案：[連結](https://page.line.biz/)

----

### LINE官方帳號後台-主頁
* 群發訊息：發送至聊天區，會計數發送次數
* 貼文串：發送至貼文區，會計數發送次數
* 加入好友的歡迎訊息：第一次加入時的回應訊息
* 自動回應訊息：設定關鍵字可自動回應
* 圖文訊息：一連串的圖文訊息可以存成範本
* 圖文選單：固定在聊天區的下方選單，可設連結
* 加入好友：提供邀請進入官方帳號的各種方式

---

### 使用LINE Message API
* 官方帳號後台
    * 設定=>回應設定
        * 基本設定=>回應模式：聊天機器人
        * 進階設定=>Webhook：啟用
    * 設定=>Messaging API
        * 啓用Messaging API
        * 建立服務提供者：輸入名稱
        * Webhook網址：https://line.ocu.tw/學號/bot1.php
        * 連結LINE Developers網址：https://developers.line.biz/en/

----

### LINE Developer網站
* 建立/選擇Provider Name
* 取得Channel Secret
* 取得Channel Access Token
* Enable Use webhooks
* 下載網頁壓縮檔：https://line.ocu.tw/download/bot1.zip
* 上傳網頁：
    * 主機：line.ocu.tw
    * 帳號：line@ocu.tw
    * 密碼：xxxxxxxxx
* 修改 bot1.php
* 上傳至 /s106XXXXX/bot1.php

----

### API 回應資料庫訊息

* 資料庫後台：https://line.ocu.tw/sql/
* 帳號：ocutw_line
* 密碼：xxxxxxxx
* 下載網頁壓縮檔：https://line.ocu.tw/download/bot1.zip
* 修改 bot1.php
    * Channel Secret
    * Channel Access Token

----

### LINE BOT Designer

* 下載：https://developers.line.biz/en/bot-designer/download/
* 範例專案檔：[下載](https://line.ocu.tw/download/sample.lbd)
* PHP回應檔：[下載](https://line.ocu.tw/download/bot1.zip)

----

### LINE BOT Text Message Function
* 請自行修改文字內容
```php=
function text_emotion($code) {
    $bin = hex2bin(str_repeat('0', 8 - strlen($code)) . $code);
    return mb_convert_encoding($bin, 'UTF-8', 'UTF-32BE');
}

function message_text($string) {
  return array('type' => 'text',
               'text' => $string);
}
message_text("歡迎光臨！".text_emotion("100078"));
```
* 表情貼代碼：[下載](https://devdocs.line.me/files/emoticon.pdf)

----

### LINE BOT Image Message Function
* 請自行修改文字內容
```php=
function message_image($url) {
  return array('type' => 'image',
 'originalContentUrl' => $url,
    'previewImageUrl' => $url);
}
message_image("https://line.ocu.tw/upload/image.png");

```

----

### LINE BOT Video Message Function
* 請自行修改文字內容
```php=
function message_video($url,$image) {
  return array('type' => 'video',
 'originalContentUrl' => $url,
    'previewImageUrl' => $image);
}
message_video("https://line.ocu.tw/upload/video2.mp4",
              "https://line.ocu.tw/upload/video2.png");

```

----

### LINE BOT Audio Message Function
* 請自行修改文字內容
```php=
function message_audio($url, $duration) {
  return array('type' => 'audio',
 'originalContentUrl' => $url,
           'duration' => $duration);
}
message_audio("https://line.ocu.tw/upload/audio.mp3", 27000);

```

----

### LINE BOT Sticker Message Function
* 請自行修改文字內容
```php=
function message_sticker($package, $sticker) {
	return array('type' => 'sticker',
            'packageId' => $package,
            'stickerId' => $sticker);
}
message_sticker("11537", "52002740");

```
* 貼圖代碼：[下載]( https://developers.line.biz/media/messaging-api/sticker_list.pdf)


----

### LINE BOT Location Message Function
* 請自行修改文字內容
```php=
function message_location($title, $address, $latitude, $longitude) {
	return array('type' => 'location',
                'title' => $title,
              'address' => $address,
             'latitude' => $latitude,
            'longitude' => $longitude);
}
message_location("僑光科技大學",
    "407台中市西屯區僑光路100號",
    24.1900829,
    120.6415948);

```

----

### LINE BOT Template Buttons Message Function
* 請自行修改文字內容
```php=
function message_buttons($url, $title, $text, $actions) {
	return array('type' => 'template'
            , 'altText' => 'template'
           , 'template' => template_buttons($url, $title, $text, $actions));
}

function template_buttons($url, $title, $text, $actions) {
    $action_array = array();
    foreach ($actions as $value) {
        $action = array('type' => 'message');
        $keys = array("label", "text");
        for ($i = 0; $i < count($keys); $i++) {
            if ($i < count($value)) $action = $action + array($keys[$i] => $value[$i]);
        }
        array_push($action_array, $action);
    }
    return array('type' => 'buttons', 'thumbnailImageUrl' => $url, 'title' => $title, 'text' => $text, 'actions' => $action_array);
}
```

----

### LINE BOT Template Buttons Message Function Call
* 請自行修改文字內容
```php=
message_buttons("https://line.ocu.tw/upload/button.png"
              , "請選擇以下功能"
              , "選擇其一"
              , array(array('功能一','sticker')
                     ,array('功能二','location')
                     ,array('功能三','video')
                     )
                );
```

----

### LINE BOT Carousel Message Function
* 請自行修改文字內容
```php=
case 'carousel':
    $columns = array();
    array_push($columns, array("https://line.ocu.tw/upload/button.png", "請選擇以下功能", "選擇其一", array(array('功能一','sticker'),array('功能二','location'),array('功能三','video'))));
    array_push($columns, array("https://line.ocu.tw/upload/carousel.png", "請選擇以下功能", "選擇其一", array(array('功能四','button'),array('功能五','audio'),array('功能六','carousel'))));
    $echo_message = message_carousel($columns);
    break;
```
![](https://i.imgur.com/DIpTTMI.png =250x300)

----

### 將所有公用函數移至上層
* 將以下公用函數移至 LINEBotTool.php
    * 已建立 LINEBotTool.php，只要刪除即可
```php=
message_text($string)
text_emotion($code)
message_image($url)
message_video($url,$image)
message_audio($url, $duration)
message_sticker($package, $sticker)
message_location($title, $address, $latitude, $longitude)
message_buttons($url, $title, $text, $actions)
template_buttons($url, $title, $text, $actions)
message_carousel($columns)
template_columns($columns)
```
* 在原有程式加入以下程式(前幾行)
```php=
require_once('../LINEBotTool.php');
```

---

### 加入資料庫連結程式
* 加入以下連結資料庫程式碼
    * get_echo_message函數中的第1行
```php=
$DB = new mysqli("localhost", "ocutw_line", "password", "ocutw_line");
if ($DB->connect_errno) exit();
$DB->set_charset("utf8");
```
* 加入以下讀取資料庫的程式碼
    * get_echo_message函數中的switch case
```php=
case '1':
case '2':
case '3':
    $sql = "SELECT UserName FROM User WHERE UserNo = ".$event['message']['text'];
    $obj = $DB->query($sql)->fetch_object();
    $UserName = $obj->UserName;
    $echo_message = message_text($UserName);
    break;
```

----

### 匯入 Excel 檔至 MySQL
* 建立資料表 10601XXX_store(學號_store)
    * 請確認需要的欄位名稱
* 建立 Excel 檔含欄位名稱
    * 輸入正式的資料值
* 另存成 CSV 檔含欄位名稱
    * 請注意編碼為 UTF-8 或 BIG5
* 透過 phpMyAdmin 匯入 CSV 檔
    * 請選擇一致的編碼
    * 請略過第一列的欄位名稱
    * 請選擇所有欄位或部分欄位
    * 檢查中文資料是否正確？

----

#### 建立資料表(收集需要的欄位)
* 請依需求建立
    * 以麥當勞搜尋餐廳為例：[連結](https://www.mcdonalds.com.tw/tw/ch/restaurant_locator.html)
    * 輸入台中市、得來速的條件後的結果如下
![](https://i.imgur.com/EXnybmY.png)

----

#### 建立資料表 kevin_store
* 新增資料表 10601XXX_store(學號_store)
* 輸入結構以下的㯗位名稱及型態
    * 請使用編碼 utf8mb4_unicode_ci
![](https://i.imgur.com/2JOOWNg.png =600x400)

----

#### 建立 Excel 檔
* 建立 Excel 檔：store.xls，[下載](https://line.ocu.tw/download/store.xls)
* 輸入以下欄位及資料如下：
![](https://i.imgur.com/shCDFc8.png)
* 另存成 CSV 檔：store.csv
![](https://i.imgur.com/1wWhbYt.png)

----

#### 使用 phpMyAdmin 匯入 CSV 檔
* 選擇資料表：10601XXX_store(學號_store)
* 選擇匯入功能，並選擇 store.csv
    * 選擇編碼：將 UTF-8 改為 BIG5
        * Excel 另存 CSV 預設編碼為 BIG5
    * 由第一行開始跳過此數量的查詢：1
![](https://i.imgur.com/mz6PmKk.png =600x300)

----

#### 匯入部分欄位的 CSV 檔
* 若匯入全部欄位，可以省略以下步驟
* 若匯入部分欄位，需輸入㯗位名稱的清單：
    * 如 No,Name,City,Addr
![](https://i.imgur.com/cjnStkX.png)
* 請用瀏覽功能檢查是否匯入成功？
    * 尤其是中文是否正常顯示？
![](https://i.imgur.com/9H5Ucz7.png)

----

### 使用 SQL 指令將資料讀入
* 以讀出含兒童遊戲區的店家為例：
```sql=
SELECT No, Name, City, Addr, Tel FROM kevin_store WHERE IsChild = 1
```
* 執行後結果如下：
![](https://i.imgur.com/PI7iCoO.png)

----

### 使用 PHP 將資料讀入(文字顯示)
* 先將資料讀入變數 $row 中
```php=
$row = $DB->query($sql)
```
* 再用變數 $obj 讀出資料內容
```php=
$obj = $row->fetch_object(); echo $obj->Name;
```
```php=
case '0':
    $sql = "SELECT No, Name, City, Addr, Tel FROM kevin_store WHERE IsChild = ".$event['message']['text'];
    $row = $DB->query($sql);
    $msg = "";
    while($obj = $row->fetch_object()) {
        $msg .= $obj->Name."\n";
        $msg .= $obj->City.$obj->Addr."\n";
        $msg .= $obj->Tel."\n\n";
    }
    $echo_message = message_text($msg);
    break;
```

----

### Line中的顯示結果
![](https://line.ocu.tw/upload/DB2Text.jpg)

----

### 使用 PHP 將資料讀入(多頁訊息顯示)
* 先將變數 $pages 存放空陣列
```php=
$pages = array();
```
* 再用 array_push 將資料放入變數 $pages
```php=
array_push($pages, array($image, $title, $name,
  array(array($action1,$text1),array($action2,$text2))));
```
```php=
case '1':
    $sql = "SELECT No, Name, City, Addr, Tel FROM kevin_store WHERE IsChild = ".$event['message']['text'];
    $row = $DB->query($sql);
    $pages = array();
    while($obj = $row->fetch_object()) {
        array_push($pages, array("https://line.ocu.tw/upload/store".$obj->No.".png", $obj->Name, $obj->City.$obj->Addr,
        array(array($obj->Tel,$obj->Tel))));
    }
    $echo_message = message_carousel($pages);
    break;
```

----

### Line中的顯示結果
![](https://line.ocu.tw/upload/DB2Button.jpg =500x600)

----

### 由 OpenData 擷取資料示範

* 內政資料開放平台：[連結](https://data.moi.gov.tw/MoiOD/default/Index.aspx)
* 由關鍵字搜尋：如大廈管理
* 可以直接下載 CSV 檔：可刪除不必要的欄位
* 可以先建資料表結構：可只新增需要的欄位
* 再匯入 CSV 檔：請略過第一列的欄位名稱

---

## 使用 UserId 做身份驗證

* 新增資料表 10601001_user
* 新增欄位 No, UserId, Name, CheckId, Total
* 輸入測試資料
![](https://i.imgur.com/pPsDyHU.png)
![](https://i.imgur.com/FcSV4rp.png)

----

### 加入程式碼一
* 運用 $event["source"]["userId"] 辨識身份
* 若未驗證，回應請輸入驗證碼
* 若已驗證，回應此功能的內容
```php=
case 'user':
    $sql = "SELECT Name, Total FROM kevin_user WHERE UserId = '".$event["source"]["userId"]."'";
    $obj = $DB->query($sql)->fetch_object();
    if ($obj->Name == '') 
        $echo_message = message_text("您未驗證身份，請輸入檢查碼(身份證後6碼+生日4碼)！");
    else
        $echo_message = message_text($obj->Name."，您好！總共金額".$obj->Total."元");
    break;
```

----

### 加入程式碼二
```php=
default:
    if (strlen($event["message"]["text"]) == 10) {
        $sql = "SELECT No, Name, Total FROM kevin_user WHERE CheckId = '".$event["message"]["text"]."'";
        $obj = $DB->query($sql)->fetch_object();
        if ($obj->Name == '') {
            $echo_message = message_text("檢查碼錯誤，請重新輸入！");
        } else {
            $echo_message = message_text("檢查碼正確！".$obj->Name."，您好！總共金額".$obj->Total."元");
            $sql = "UPDATE kevin_user SET UserId = '".$event["source"]["userId"]."' WHERE No = $obj->No";
            $DB->query($sql);
        }
    }
    break;
```

----

### 利用 - 做關鍵字切割

```php=
$text1 = explode('-', $event['message']['text'])[0];
$text2 = "0";
if (count(explode('-', $event['message']['text'])) > 1) $text2 = explode('-', $event['message']['text'])[1];
switch ($text1) {
```
```php=
case 'store':
    $sql = "SELECT IsChild, Is24hr, IsCafe, IsWifi, IsDrive FROM kevin_store WHERE No = ".$text2;
    $obj = $DB->query($sql)->fetch_object();
    $echo_message = message_text($obj->IsChild.$obj->Is24hr.$obj->IsCafe.$obj->IsWifi.$obj->IsDrive);
    break;
```
```php=
array(array($obj->Tel,$obj->Tel),array("詳細資料","store-".$obj->No))));
```

---

## 應用案例說明：智慧報到機器人
* 活動痛點
    * 如何不讓與會者報到時，花費過長時間排隊？
    * 如何獲取與會者的詳細資訊？
    * 如何有效率地發放與會資料？
* 設計目標
    * 用 Line 聊天機器人提升活動效率
* 產品設計
    * 智慧報到機器人

----

### 智慧報到機器人 Chatbot 腳本設計
* 與會者掃描QRcode後，將與會者帶入對話視窗
* 觸發機器人跳出招呼語，並要求輸入與會編號
* 回應桌次和客戶資訊，並自動填入報到時間
* 報到完成，觸發機器人進入填寫問卷網頁
* 與會者填寫完問卷後，進入兌換贈品流程
* 憑卡片兌換贈品，由現場人員點擊核銷（僅限兌換一次）
* [參考資料](https://medium.com/8-interactive/%E9%AB%94%E7%8F%BE%E6%9C%8D%E5%8B%99%E8%A8%AD%E8%A8%88-%E6%99%BA%E6%85%A7%E5%A0%B1%E5%88%B0%E6%A9%9F%E5%99%A8%E4%BA%BA-%E9%87%8D%E7%A3%85%E7%99%BB%E5%A0%B4-400840faab12)

----

### 其它文章
* [旅遊業不可或缺的 FB / LINE 數位轉型工具](https://medium.com/8-interactive/%E6%97%85%E9%81%8A%E6%A5%AD%E4%B8%8D%E5%8F%AF%E6%88%96%E7%BC%BA%E7%9A%84-fb-line-%E6%95%B8%E4%BD%8D%E8%BD%89%E5%9E%8B%E5%B7%A5%E5%85%B7-428526fa96cb)
* [品牌與受眾的距離 - 大眾轉分眾的終局之戰](https://medium.com/8-interactive/line20-getcloserfromta-eba0c94103bd)
* [為什麼要在 LINE@ 上建立聊天機器人呢？](https://medium.com/8-interactive/%E7%82%BA%E4%BB%80%E9%BA%BC%E8%A6%81%E5%9C%A8-line-%E4%B8%8A%E5%BB%BA%E7%AB%8B%E8%81%8A%E5%A4%A9%E6%A9%9F%E5%99%A8%E4%BA%BA%E5%91%A2-6791f794cfba)
* [用問答設置顧客標籤，達成精準的物件推薦](https://medium.com/8-interactive/%E4%B8%80%E6%8B%9B%E9%97%96%E5%A4%A9%E4%B8%8B-%E6%88%BF%E4%BB%B2%E6%A5%AD%E5%BF%85%E5%82%99%E7%9A%84-%E6%A8%99%E7%B1%A4%E8%A8%AD%E7%BD%AE-3daef0116560)
* [用聊天機器人，讓預約看診體驗更聰明](https://medium.com/8-interactive/%E4%B8%80%E6%8B%9B%E9%97%96%E5%A4%A9%E4%B8%8B-%E7%89%99%E9%86%AB%E8%A8%BA%E6%89%80%E5%BF%85%E5%82%99%E7%9A%84-%E7%B7%9A%E4%B8%8A%E9%A0%90%E7%B4%84%E8%88%87%E7%9C%8B%E8%A8%BA%E9%80%9A%E7%9F%A5-f215f298b762)

---

### 回應多重訊息程式修改
* 請將函數get_echo_message最後回傳那一行
```php=
return array($echo_messsage);
```
* 改為
```php=
if (array_key_exists("type", $echo_message))
    $echo_message = array($echo_message);
return $echo_message;
```

----

### 回應多重訊息之範例
* 運用 array(message1, message2)
```php=
case "i+t":
    $echo_message = array(message_image("https://line.ocu.tw/upload/image.png"), message_text("歡迎光臨！"));
    break;
```
* 運用 array_push(message1); array_push(message2);
```php=
case "a+s":
    $echo_message = array();
    array_push($echo_message, message_audio("https://line.ocu.tw/upload/audio1.mp3", 30000));
    array_push($echo_message, message_sticker("11537", "52002740"));
    break;
```

----

### 製作快速回應
* 製作回應訊息陣列 replys
* 使用 message_text_reply(text, replys)
```php=
        case "reply1":
            $reply_actions = array(array("Label1", "Text1"), array("Label2", "Text2"));
            $echo_message = message_text_reply("歡迎光臨！", $reply_actions);
            break;
```
```php=
        case "reply2":
            $reply_actions = array();
            array_push($reply_actions, array("https://line.ocu.tw/upload/image.png", "Label1", "Text1"));
            array_push($reply_actions, array("https://line.ocu.tw/upload/image.png", "Label2", "Text2"));
            $echo_message = message_text_reply("歡迎光臨！", $reply_actions);
            break;
```

----

### 回應多重訊息+快速回應功能
```php=
case "v+r":
    $reply_actions = array();
    array_push($reply_actions, array("https://line.ocu.tw/upload/image.png", "好看！", "Good"));
    array_push($reply_actions, array("https://line.ocu.tw/upload/image.png", "不好看！", "Bad"));
    $echo_message = array();
    array_push($echo_message, message_video("https://line.ocu.tw/upload/video2.mp4", "https://line.ocu.tw/upload/video2.png"));
    array_push($echo_message, message_text_reply("您這影片好看嗎？", $reply_actions));
    break;
```

---

### 註冊會員範例(一)
* 請將 學號_user 的欄位 No 改為 SERIAL
* 增加以下程式在開啟資料庫後
```php=
$sql = "select Command from kevin_user where UserId = '".$event["source"]["userId"]."'";
$obj = $DB->query($sql)->fetch_object();
if ($obj->Command != "") {
        $event['message']['text'] = $obj->Command."-".$event['message']['text'];
}
```

----

### 註冊會員範例(二)
* 增加以下程式在 switch 中，來開始註冊
```php=
case "register":
    $sql = "select No, Name from kevin_user where UserId = '".$event["source"]["userId"]."'";
    $data = $DB->query($sql);
    if ($data->num_rows == 0) {
        $sql = "insert into kevin_user (UserId, Command) values ('".$event["source"]["userId"]."', 'name')";
        $DB->query($sql);
        $echo_message = message_text("您未註冊過，請輸入姓名！");
    } else {
        $obj = $data->fetch_object();
        $echo_message = message_text($obj->Name."，您好！您已註冊過了！");
    }
break;
case "name":
    $sql = "Update kevin_user set Name = '".$text2."', Command = '' where UserId = '".$event["source"]["userId"]."'";
    $data = $DB->query($sql);
    $echo_message = message_text($text2."，您好！感謝您的輸入！");
break;
```
