2014年6月19日 星期四

LINE官方帳號2.0的行銷操作 & 聊天機器人開發概念

上午8:32 Posted by Envisioning U-Commerce Lab

LINE官方帳號2.0已經有完善的行銷操作工具:



    LINE@生活圈已經有完善的行銷操作工具:



    LINE@生活圈官方帳號2.0結合Messaging API打造LINE BOT機器人:

    • 先依照前述官方帳號2.0的新帳號創建、圖文選單、自動回應訊息等設定,比照下列範例創建一個官方帳號
    • 除了回覆文字或貼圖,還有所謂的Flex Message,LINE Developers平台上也提供了產生這種訊息的工具Flex Message Simulator,先從Showcase找一個想要呈現的樣式再加以調整,然後View as JSON就能取得其JSON碼,再參考程式碼此Script(建立副本即可取得),將Flex Message的JSON碼複製到正確的位置上。





    • 前一個範例中的Postback action,特別多寫一個測試範例呈現如何用來將連續對話能在最後串起所有回答內容,程式碼參考此Script(建立副本即可取得)。這裡傳輸資料採用了JSON結構化資料,原則上就是不想讓使用者看見這樣的訊息,所以不使用Message action。


    • Template Message裡面有一種Carousel格式,是採橫向滑動呈現的選單類型,蠻適合用來做訂便當之類的應用,所以也做出一個範例(程式碼參考此Script建立副本即可取得)當使用者輸入"M"或"菜單",程式26~171行就會組成一個Carousel Template,並執行212行(呼叫218~229行的function)將便當菜單呈現出來,只要使用者按下某個便當項目的加入購物車,就會被判斷出是Postback action執行201~219行的function,提示接著輸入訂便當數量,然後在使用者輸入數字後就會執行173~185行的確認回應(到這裡有個問題要解決,要能知道剛選擇的便當項目,才能在資料庫記錄什麼便當訂了幾個,但是這個問題就不在此範例中繼續討論下去)
    • 前述問題解決之後的範例,就不提供程式碼囉



    • 若要讓聊天機器人可以進一步整合IoT物聯網應用(譬如Webduino),那就至少要能存取Firebase這種Realtime Database。那我們就來看看如何讓Google Apps Script能存取Firebase,參考這篇這篇的做法(注意要引入程式庫必須輸入MYeP8ZEEt1ylVDxS7uyg9plDOcoke7-2l),然後再練習這個範例(程式碼參考此Script建立副本即可取得)。然後也利用Webduino Blovkly程式積木設計一個簡單的燈光控制專案(此例尚未將開發板功能放上去),就能在該專案執行後看到燈泡因為Firebase參數的改變而立即作動開關







    • 一個可以在 LINE app 內運作的前端頁面框架LIFF ( LINE Front-end Framework),傳遞參數方式可參考這篇LINE LIFF App初嘗試這個Example-liff2最簡單的測試方式就是不要用Google Apps Script產生的那個前端頁面(程式碼參考此Script建立副本即可取得),而是直接在LIFF設定前端網頁之網址為https://testliff.azurewebsites.net/default.html,就可以正確執行傳遞參數的動作了。





      其實
      Develop a LIFF app就是寫一個前端網頁,傳遞參數方式就是引用LIFF SDK,以liff.init()、liff.getProfile()、liff.sendMessages()等方法與LINE介接資料。



      但是在Google Apps Script寫出來的前端頁面引用LIFF SDK卻無法發揮作用,猜測應該是因為該頁面是被包在frame裡執行,隔了一層而無法正確傳遞。所以就只好另尋提供website hosting的平台,推薦初學者試試最容易上手Netlify (佈建方式可以是直接拖曳資料夾上傳),把你自己寫好的LIFF app的HTML檔案(可參考前述Example-liff2改寫成原始Javascript版的程式碼jsfiddlejsbin)放在Netlify就可以比照前述方式測試。



      自 2020/02/05 起,已無法再於 Messaging API 頻道中建立 LIFF App ,必須改用 LINE Login 頻道,參考如何新增 LINE LIFF。提醒在設定Scopes時,除了勾選Profile和Open ID之外,因為測試程式有回傳訊息就必須將chat_message.write也勾選起來。最後要記得將狀態從"開發中(Developing)"更新為"已發佈(Published)",否則存取 LIFF App 時會遭遇 400 Bad Request。完成LIFF設定之後,再回到官方帳號2.0設定圖文選單中的一個選項就是該LIFF連結,這樣就能執行看看囉。




    • 如果要讓LINE BOT更具人性化的聊天(具備自然語言處理能力),可以嘗試用Dialogflow平台支援對話的處理。首先,參考這篇聊天機器人-Dialogflow入門,在Dialogflow先建立一個Agent,了解最基本的Intent建立方式,最後可以做個Web Demo。
       


      前述練習,應該能讓我們對於聊天機器人-語意分析有一些基本認識,也就是自然語言理解(NLU, Natural Language Understanding)的Intent based方式,Dialogflow平台採用Intent + Entity的方式,Intent就是所謂的意圖,像是 "我要坐高鐵去台北",這句話的意圖就是 "某個人" + "用某種交通工具" + "去某個地點" , 而有關 人、交通工具、地點 都是Entity(直翻叫做實體,可以解釋為屬於相同類型的名詞,也可以定義為參數)。

      但前述練習尚未提到Entity,繼續參考這篇Dialogflow對話機器人製作流程,先把每個高鐵站所在地名稱都建立成一個名為Location的Entity,並建立能判讀出要訂高鐵票起迄站及時間的Intent及其Training phrases、Action and parameters、Responses,然後就可以測試看看對話的效果囉(尚無需在Fulifillment設定Webhook之前就能測試)。

      若要讓前述訂高鐵票起迄站及時間的對話能搬到LINE上面來做,參考這篇如何使用Dialogflow建立Chatbot #6 部署至Line bot上,就是把LINE BOT的Webhook URL導到Dialogflow這邊來,就能讓這裡完全接手處理對話了。

    • 經過上述練習若對於Entity還不太懂,再試著參考這篇Dialogflow Restaurant Chatbot Tutorial 4,以餐廳訂位的對話處理,一定是要問出訂位的 "人數"、"日期"、"時間",這三個參數也就是要判讀出訂位需求的Intent必須問到的Entity。以下列的對話流程圖來看,如果客戶只先講了一句Book a table(要訂位)或Book a table tomorrow at 9pm(訂明天晚上九點的位子),因為沒提到 "人數" 這個Entity,所以就要追問For how many people(有幾人)? 而對話流程圖的其他部分也是類似的情況而需要再追問 "日期" 或 "時間",所以要在Training phrases中建立足夠的訓練短句有包含這三個Entity,而且在Action and parameters設定REQUIRED及需要提問時的PROMPTS。


    • 延續前述餐廳訂位練習,進一步參考這篇Dialogflow Restaurant Chatbot Tutorial 5,在Fulfillment裡面Enable the Inline Editor撰寫簡單的程式邏輯把得到的參數進行處理。(Fulfillment is code that's deployed as a webhook that lets your Dialogflow agent call business logic on an intent-by-intent basis.)

    • 另外一種方式,則是在Fulfillment開啟Webhook設定,將參數傳遞到外部系統進階處理。


      最簡單的例子,仍是以Google Apps Script來做個簡單的後端記錄,參考這個Google Sheet建立副本,然後進入 工具 > 指令碼編輯器,可以看到Script非常簡單,就是把接收POST得到的資料寫入Sheet中。在指令碼編輯器視窗開啟之後,就只要執行 發佈 > 部署為網路應用程式(這裡要做的設定必須是 [專案版本 : 新增]、[將應用程式執行為 : 我]、[具有應用程式存取權的使用者 : 任何人,甚至是匿名使用者],再按下部署),最後就能得到該網頁程式的網址。



      將該網址複製起來,
      在Fulfillment開啟Webhook貼上該網址。而且也要在Intents裡面啟動Fulfillment設定為Enable webhook call for this intent。


      如此一來,只要完成一整個對話後,該Intent的資料就會鈄過POST方式
      將參數傳遞到我們寫的Script處理,將其記錄在Sheet。


      至於Webhook response,最簡單的是回應一個JSON格式資訊裡面有個fulfillmentText欄位內容,而更進一步的欄位還有fulfillmentMessages[]、source、payload、outputContexts[]、followupEventInput(The response must occur within 10 seconds for Actions on Google applications or 5 seconds for all other applications, otherwise the request will time out. The response must be less than or equal to 64 KB in size.)



    延伸閱讀: