
(圖片來自: LINE Developer Document: Link user account )
前言
經營有成的電子商務網站,如果想要透過 LINE 官方帳號( OA: Official Account) 與聊天機器人來觸及更多使用者應該要怎麼做呢? 你要如何透過安全又有效的方式來串連網站與 OA 的互動呢?
這篇文章將介紹 LINE account binding,透過 account binding 可以讓你的 chatbot 了解面對的使用者身份。並且透過綁定帳號的方式來提供使用者一制化的體驗。並且透過一個範例來讓你更容易快速建置出來。
範例程式碼
https://github.com/kkdai/line-account-link
如何部署範例程式碼:
-
到 LINE Developer Console 建立相關的 Provider 跟 Channel
-
建立一個 LINE@ 並且打開 MessageAPI 的功能,並且將以下兩個資訊記住:
- Channel Secret
- Channel Token
-
到 https://github.com/kkdai/line-account-link 按下 Heroku Deploy ,建立該帳號並且部署該服務。這時候會要輸入三個資訊:
- LINECORP_PLATFORM_CHANNEL_CHANNELSECRET
- LINECORP_PLATFORM_CHANNEL_CHANNELTOKEN
- LINECORP_PLATFORM_CHANNEL_SERVERURL
- 這個資訊根據你的 heroku app 名稱來決定,假設你的 Heroku app 名稱叫做
test-api-1234那麼你就該填https://test-api-1234.herokuapp.com/
- 這個資訊根據你的 heroku app 名稱來決定,假設你的 Heroku app 名稱叫做
-
記得把
https://test-api-1234.herokuapp.com/callback加到 LINE chatbot web hook 才能正確地啟動聊天機器人。
範例應用場景
這個範例想要表的是一家電子商務公司有 三個使用者 (ID: 11, 22, 33) 也都有相關的身份資料在該電子商務網站。而這個聊天機器人可以展示如何透過 LINE account binding 來串連你的使用者與聊天機器人。
整個場景都流程分成以下幾個步驟:
- 使用者加入電子商務的官方帳號 。
- 在官方帳號選單的聊天機器人視窗中,選擇“帳號綁定” (link)。
- 連線到該電子商務網站,輸入原本已經有的帳號跟密碼。
- 確認帳號訊息無誤後,倒回聊天機器人並且進行帳號綁定。
實際跑一個範例
- 先 Deploy 該範例專案,或是直接加入測試機器人 @yzy8635g (也可以掃描以下 QR Code)

-
加入帳號後 ,輸入任何字串都是會顯示帳號尚未綁定。你可以連到該商業網站顯示帳號 (list) 或是直接開始綁定帳號 (account link)
-
按下 “list” 會傳回顯示所有使用者的網址.按下 “link” 則顯示登入頁面開始登入。
- 到了登入網頁,就輸入該商業網站的帳號跟密碼。 這個範例程式裡面是 11, pw11 (假定使用者叫做 Paul)
- 登入成功之後,就會收到 chatbot 回報帳號綁定成功。把綁定帳號網頁關閉即可。(要做得更好,可以透過 LIFF 來做 account binding 就可以自動關閉網頁)
- 回到聊天機器人,這時候帳號就顯示綁定完成。表示 chatbot 能夠將你與商業網站的使用者連接一起。 chatbot 也就已經將使用者 Paul 的帳號綁定。
流程圖與程式碼解釋
根據以上的流程圖,稍微說明一下每個角色代表的意義:
- User:
- 就是指的是 LINE 上面的用戶。
- Provider’s bot server:
- 這邊指的就是該商業服務的 LINE 官方帳號的聊天機器人伺服器。
- Provider’s web server:
- 這個就是該商業服務的網站伺服器,如果是購物網站就是該購物網站的後台伺服器。
- LINE Platform:
- 這個就是指 LINE 平台的資料處理系統。
了解每個角色代表的意義之後,我們開始解釋每個流程所代表的意思.通常在 Account Link 發生的時候,商業網站的官方帳號會發送一個「是否要連接你的 LINE 帳號與商業網站?」的請求.當使用者同意之後,才會啟動以下的相關步驟:
-
官方帳號的 LINE bot 會對 LINE 平台發送一個該使用者要求 account link 的 token 請求。
-
如果請求資料正確, LINE 平台就會回覆一個 token 。
res, err := bot.IssueLinkToken(userID).Do()這樣可以透過該使用者帳號直接 issue token -
官方帳號的 LINE bot 透過取得的 token 跟 LINE 平台請求將兩個資料做連接。
-
LINE 平台會傳回一個網址,讓使用者透過該網址來做資料的連接。
這邊就傳回 該網站的
/link以這個作為鏈結的網址。 -
使用者連線到該網址(這裡通常是透過 LINE bot 直接送出 URL scheme 讓使用者點選導向該網頁).請注意這個網址會是直接連接到商業網站之中。
-
顯示該商業網站的登入畫面,讓使用者登入該綱頁網站。
-
使用者在商業服務平台輸入了自己的登入資訊。
-
商業服務平台透過使用者的帳號資訊產生了一個隨機數 (nonce)。
雖然說 nonce 為隨機數,其實有產生的規則與限制
- 使用 secure random number generator
- 建議透過 base64 encode
-
商業服務平台將使用者導向到 LINE 平台的 account-linking 的進入點。
-
使用者讀取 account-linking 進去點,並且將商業服務平台的隨機數帶進去。
-
LINE 平台傳回同一組隨機數與使用者 ID (UID) 到商業服務平台的 webhook 用來作為綁定之用。
-
LINE bot 這時候收到該隨機數 (nonce) 的認證,透過這個隨機數 (nonce) 將使用者在 LINE 上面的身份與商業服務平台帳號取得綁定。
也就是最後要將這些資訊傳回給 Server ,作為綁定成功地確認
https://access.line.me/dialog/bot/accountLink?linkToken={link token}&nonce={nonce} -
這時候 chatbot 會收到
EventTypeAccountLink的 event 並且透過結果可以知道該使用者綁定成功。 nonce 也會提供給你作為帳號比對的資訊。
為何要使用 Account Link
透過 account link 可以讓 chatbot 裡面的使用者與原先商業網站的帳號相互的綁定。透過的機制就是一開始 issue link token 並且在登入成功後將 token 帶回到 chatbot 裡面,並且透過產生的 nonce 可以確保雙方資料的無誤與正確性。 整體來說,使用 account link 具有以下的優點:
- 步驟簡單:透過
IssueLinkToken與 API call 即可完成整個綁定流程。 - 安全:透過改使用者申請的 token 才能夠作為 accountLink 的回傳 token ,可以確保手續完整性。
什麼樣的情況會需要使用 Account Link
這個部分將會討論,什麼樣的情況下會需要使用 account link:
- 已經有大量的使用者族群在原有的商業網站上面
- chatbot 需要綁定原有的使用者資訊
總結
對於已經有相當量使用者的服務提供商而言,透過 account link 可以讓 chatbot 的使用者與原有服務的帳號資訊綁定,讓使用者有著一致的服務體驗。方法上也相當簡單,希望透過這個範例可以讓開發者更容易了解整個流程與概念。
參考
- https://developers.line.biz/en/docs/messaging-api/linking-accounts/
- https://github.com/kkdai/line-account-link