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