# 社群軟體開發應用
僑光科技大學 資訊科技系
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;
```