LINE Corporation 於2023年10月1日成爲 LY Corporation。LY Corporation 的新部落格在這裏。LY Corporation Tech Blog

Blog


LINE聊天機器人活動分享

我是LINE的工程師Ange。這篇文章將分享LINE內部規劃與建置LINE聊天機器人的經驗。

我們分別在2016年12月16日與2017年1月26日推出了「LINE FRIENDS CAFE & STORE新光三越A11開幕活動」以及「LINE祝福好聲音」這兩個LINE聊天機器人,在「LINE FRIENDS」與「LINE台灣」官方帳號(Official Account;簡稱OA)中舉辦活動。這些活動透過在LINE Banner、LINE官方帳號、〈其他〉頁面、LINE Points任務牆等廣告版位同步做推廣,並且達到百萬人次分享與宣傳的效果。以下將介紹這兩個LINE聊天機器人的基本功能、系統設計與建置、資安考量以及帶來的效益。

活動內容概要

LINE FRIENDS CAFE & STORE新光三越A11開幕活動

LINE FRIENDS CAFE & STORE新光三越A11 聊天機器人是LINE在2016年12月16日推出的機器人,目的在宣傳同年12月23日於新光三越A11館開幕的全台第一家複合式LINE FRIENDS CAFE & STORE,進而吸引更多用戶加入官方帳號,以及到實體店面參觀與消費。此活動整合線上(online)與線下(offline),用戶透過與官方帳號裡的圖文訊息選單與LINE聊天機器人互動,藉以了解即將開幕的LINE FRIENDS CAFE & STORE的地點與相關訊息,同時也有機會獲得LINE FRIENDS CAFE折價卷抽獎的機會。LINE用戶可以透過LINE或Facebook分享活動網頁,每五位朋友點擊用戶分享的網頁,就可以獲得一次抽獎機會, LINE聊天機器人將會把抽獎訊息自動推送給用戶。

新光三越A11館LINE FRIENDS CAFE & STORE

活動網頁 – 用戶分享的網頁(左圖),圖文訊息選單(右圖)

在LINE FRIENDS官方帳號中,我們設定的圖文訊息選單中提供了以下四項功能:

  1. CHOCO’S HOUSE
  2. CHOCO’S CAFÉ
  3. 分享抽折價券
  4. 確認抽獎機會

用戶在觸碰「CHOCO’S HOUSE」或「分享抽折價券」選項後,將直接開啟活動網頁觀看活動資訊或分享連結;點擊「CHOCO’S CAFÉ」後,會從LINE FRIENDS官方帳號的聊天視窗送出一個關鍵字給聊天機器人,聊天機器人再回傳對應的圖片與影片;點擊「確認抽獎機會」後,LINE app聊天室內則會送出一個關鍵字告訴聊天機器人去檢查此用戶是否存在著抽獎機會。 除了透過圖文訊息選單與用戶互動外,我們也會不定時主動推播訊息給用戶,例如用戶分享的活動網頁被5位朋友點擊,系統將主動送抽獎訊息給該用戶。

活動頁面部分內容

分享抽折價券

CHOCO’S CAFÉ(左圖),Facebook分享(右圖)

LINE祝福好聲音

LINE祝福好聲音是在2017年1月26日推出的一個聊天機器人,為慶祝農曆過年時的一項宣傳活動。用戶可以任意選擇一個LINE FRIENDS角色,錄製一段語音訊息,例如過年祝賀語,系統將產生角色拜年的網頁,讓用戶可以分享給朋友。在這個拜年網頁中,錄製的聲音將會透過LINE FRIENDS角色「開口」說出。

活動網頁(左圖),圖文訊息選單(右圖)

這個LINE聊天機器人同樣使用了圖文訊息選單,讓用戶選擇LINE FRIENDS的角色(熊大、兔兔、部長或是莎莉)或查看活動說明。用戶選定角色後,LINE app聊天室內會送出關鍵字給聊天機器人,聊天機器人記錄用戶選取的角色後會回傳錄音步驟,待用戶錄音完畢,聊天機器人將產生具有拜年訊息語音的網頁並回傳連結,用戶可以透過LINE app分享訊息的功能分享給朋友。

用戶上傳錄音檔案畫面(左圖,中圖),用戶產生的拜年網頁(右圖)

系統設計

建立一組LINE聊天機器人,首先需要建立LINE Channel,在LINE Channel Console中設定好event endpoint URL、callback URL、app icon等資訊,並且取得Channel access token和Channel secret以作爲聊天機器人傳送訊息與接收訊息時的驗證使用。這兩個聊天機器人都是應用在既有的官方帳號中,因此需要在官方帳號管理後台啟用聊天機器人功能,圖文訊息選單也是在此設定。一般用戶如果想要開發類似應用服務,可以在LINE Business Center申請Messaging API帳號。關於Channel的建立與設定,請參考Getting started with the Messaging API文件的說明。

在官方帳號管理後台中,用戶可以啟用圖文訊息選單。以LINE FRIENDS為例,啟用方式包括選擇樣版,上傳圖片,並且設定想要與用戶互動的方式。

互動的訊息內容格式包括關鍵字、網址、文字。若設定網址,當用戶點擊時,將直接連結到該網頁;若設定為文字,聊天機器人必須針對接收到的文字有所回應;若是設定關鏈字,則需事先建立關鍵字回應(keyword reply),才能在圖文訊息選單選取關鍵字。

接下來就可以開始建置聊天機器人,處理與LINE平台的互動邏輯。為了因應LINE廣大的用戶與瞬間流量,系統的穩定度是我們優先考慮的。這兩個聊天機器人的應用雖然不同,但系統架構類似,均處理了訊息的接收與回覆,並以資料庫儲存相關資訊,以及產生分享網頁。

LINE聊天機器人的基本建置可分為兩個部分:一是訊息的接收,二是接收後的處理。從LINE平台傳來的訊息先由webhook接收後放入message queue,再由worker(queue consumer)取出訊息並分析內容執行相對應的程序,應用邏輯都是實作在worker中。我們在worker中套用了LINE bot SDK以方便與LINE平台進行互動,並且利用資料庫儲存抽獎與祝福好聲音的錄音檔名稱等資訊。為了提供用戶流暢的使用經驗,所有的圖案與影片均透過content delivery network(以下簡稱CDN)傳送給用戶。

為了確保資訊安全,聊天機器人與LINE平台之間的每一次互動都需要驗證訊息是否確實來自對方,驗證方式是利用Channel secret與Channel access token,這兩項資訊可以在Channel Console中取得。LINE平台傳送訊息給聊天機器人時,會在HTTP header中加上Channel signature。Channel signature是以Channel secret爲key將HTTP body經過加密演算法處理後產生,當webhook收到來自LINE平台的訊息時,首先必須要驗證Channel signature是否正確,才能進行後續處理。Worker處理完成後,要將結果傳送到LINE平台時,必須在HTTP header加上Channel access token,以證明該訊息是來自正確的Channel應用服務。需要注意的是:Channel access token有使用期限,必須定期更新,一旦過期將無法傳送訊息給LINE平台。

LINE提供了多種程式語言的bot SDK,包括Java、PHP、Go、Perl、Ruby與Python。透過SDK可以比較容易地分析收到的訊息,以及組成所要傳送的訊息。在Messaging API中,我們主要使用reply messagepush message這兩個API。Reply message用於回覆用戶的訊息,push message則是用於主動傳送訊息給用戶,例如通知用戶獲得一次抽獎機會。這兩次活動中,我們所使用的訊息型態包括text、video、imagemap與template,使用方式在API reference中有詳細說明。其中有一點可以分享的小技巧是:image message所呈現的圖是比較小的,如果想顯示大圖,不妨使用imagemap message,並且將可點擊區域設定在非常小的範圍以避免用戶觸擊,這樣就能產生純大圖的效果。

為了追蹤哪個用戶點擊哪個分享頁面,我們為每位分享者產生了專屬的網頁,透過整合LINE Login可得知是哪位LINE用戶做了點擊。當網頁被點擊時,系統會記錄該點擊者接受了一次分享,將此數字貢獻給分享者,並將記錄儲存於資料庫中。在該網頁被點擊時,同時也會進行資料庫記錄的檢查,統計此網頁分享次數是否爲5的倍數;若是5的倍數,聊天機器人則會推送可抽獎的訊息給分享者。當分享者按下抽獎,聊天機器人會與資料庫互動取得抽獎結果回覆分享者,並更新獎品數量資料。

系統推播抽獎機會

祝福好聲音聊天機器人的worker邏輯就比較單純:先將用戶的語言訊息存在資料庫後產生對應網頁,並將該網頁的連結回傳用戶,用戶就可以分享給朋友。

這兩個聊天機器人均是在既有公開的官方帳號上發佈,因此我們需要有個測試用的環境。我們申請了另一組測試用的官方帳號,並且建立beta環境來開發與測試,確定沒問題後,才發佈到既有的正式環境。網頁的壓力測試可以透過坊間現成的工具來達成,但是聊天機器人的壓力測試卻不容易,流量也難以預估。雖然我們根據以往的經驗大致上可以預估參與活動的用戶數量,但每個聊天機器人與用戶互動的方式不同,LINE平台接收訊息數量也會因而不同。目前LINE Messaging API有一分鐘最多存取LINE平台API一萬次的數量限制,這個限制在祝福好聲音上線後幾分鐘後就達到了,使得我們不得不調整系統以避免超過上限;另外,LINE平台在傳送訊息給聊天機器人後,必須在10秒鐘內得到回應;聊天機器人如果沒有在10秒內回覆正確的HTTP status code,就會發生timeout錯誤。這10秒包含網路通訊時間與聊天機器人處理時間,因此本次活動的聊天機器人在接收到LINE平台的訊息後,會先將訊息儲存到message queue,立即回覆HTTP status code 200並中斷連線,以避免發生timeout錯誤。

在設計分享機制時,原本只是單純記錄LINE用戶分享的網頁被其它用戶點擊的次數,做為抽獎機會的依據;但是在進行security review時,資安部門要求開發團隊必須修正系統以維護用戶隱私。由於LINE非常重視用戶個人的隱私,在LINE平台上所有的應用服務如果有可能會影響用戶隱私的行為都必須事先取得用戶同意,因此我們做了以下三項調整:

  1. 當用戶按下分享活動頁面連結,需簽署使用條款同意書,告知用戶本應用服務將得知被分享者是透過該用戶所分享的網頁而來造訪。
  2. 當被分享者嘗試瀏覽分享網頁時,需簽署使用條款同意書,告知被分享者本應用服務將得知被分享者是透過分享者網頁而來造訪。
  3. 本應用服務必須在用戶主動願意登入後才能取得用戶資訊。當LINE用戶點擊分享網頁時,我們並不會將用戶資訊記錄在用戶瀏覽器的cookie中,因此當用戶再次點擊相同或其他不同分享者的頁面時,仍需要再次登入。

分享時的使用條款同意書(左圖),被分享時的使用條款同意書(右圖)

上述流程上的調整雖然對LINE用戶帶來稍許不便利,也可能因此失去更多網頁被分享的機會,但是對於LINE用戶的個人隱私卻比較有保障。

活動成果

以下分享一下這兩次活動的流量與一些數據。

從2016年12月16日到2016年12月18日的每天上午10點,LINE FRIENDS CAFE & STORE活動訊息在event banner露出,達到一百多萬人次的點擊;〈其他〉頁面banner的露出在活動期間達到約20萬人次的點擊;此活動總共產生了約8萬個分享網頁,有1萬多個用戶是經由別人分享的網頁進來的,被分享網頁最多有44個訪客,活動網頁共產生15萬個page view,以及7萬多個不重複使用者(unique user),也讓LINE FRIENDS官方帳號在活動期中增加了5萬多個好友(原有160萬好友)。在抽獎的部分,共有8萬多人參與,抽獎的尖峰時間是在2016年12月16日上午10:30,在活動上線第一天的兩個小時內,LINE FRIENDS CAFE & STORE 10元、15元、20元的折價券均被抽完,在監視流量的同時,我們也緊急增加禮品數量。

祝福好聲音在2017年1月26日到2017年2月5日共有約150萬的分享網頁被產出,活動參與人數約85萬人,此活動總流量為440萬,不重複瀏覽量為330萬,LINE官方帳號人數共增加了約14萬好友(原有580萬好友),不重複進站人數約140萬,主要是透過LINE推播、活動說明、分享給好友以及宣傳影片進入到活動說明頁,其中以LINE推播成效最好,有66%的流量是來自於推播。

LINE內部可以宣傳活動的資源,包括〈其他〉頁面bottom banner、〈其他〉頁面thumbnail banner、event banner、官方帳號推播訊息、官方帳號Timeline、Facebook分享、LINE Points任務牆、Timeline廣告與LINE TODAY廣告等,其中以event banner以及LINE官方帳號推播的成效最佳。根據經驗,推播的時間大多是在上午10點、下午6點與下午9點能夠達到最多人數點擊的效果。

聊天室banner(左圖),任務牆(右圖)

官方帳號Top banner(左圖),〈其他〉頁面upper banner(右圖)

結論

這篇文章介紹了兩個近期在LINE實作的聊天機器人,並與大家分享透過LINE推播訊息的廣告效果。在系統的建置方面,我們首要考慮的是穩定度與回覆速度,我們使用message queue來暫存訊息並快速回覆LINE平台,由worker來後續處理訊息所對應的功能,並且將所有的圖檔以及影片上傳至CDN以快速傳送給用戶,提供更好的用戶體驗。此外,資訊安全上的考慮與用戶隱私的維護也是我們極為重視的。雖然這兩個活動都是屬於短期的行銷活動,但是讓我們了解LINE在導流上的能力,以及我們對用戶的責任,也讓我們思考未來如何能在短時間內提供更好的服務給用戶。