[研討會心得] 2020/06/12 LINE Developer Meetup 12

前提

大家好,我是 LINE Taiwan DevRel 團隊的 Evan Lin。很開心在這裡跟各位分享本年度的第二場開發者小聚。 由於新冠肺炎疫情影響,此次的活動改為線上活動並且透過 LINE OA Live 的方式播放給所有的參與者了解,也在後續會官方粉絲專頁與官方的開發者 Youtube 頻道開放完整的影片給想要參與的開發者共襄盛舉。

KKTIX 活動網頁: 活動網址

本次 LINE Developer Meetup 開發者小聚,有邀請到兩位講者來分享關於 LINE 平台的開發經驗。首先由 LINE TAXI CTO Hayden Huang 來跟大家分享 LINE TAXI 的開發經驗 「LINE TAXI from 0 to 1」。

第二位邀請到 DeepQ Technology Corp. Tony Huang 黃振綸 來跟大家介紹什麼是「疫止神通」。

LINE TECH FRESH (LINE 技術新星人才計劃) 學生實習計畫宣傳 / 資深開發技術推廣工程師 - Evan Lin

首先上場的就是筆者,並且來分享 LINE TECH FRESH 計畫給莘莘學子瞭解。 LINE 台灣工程團隊每年透過 LINE TECH FRESH – 技術新星人才計劃,招募資訊科技相關科系,或對此領域有所涉略的大學生 / 研究生加入 LINE 團隊進行長期實習 (一年期),讓同學們能在國際級科技公司中觀摩學習。

更多內容,可以參考這篇文章: LINE TECH FRESH – 技術新星人才計劃,實習經驗大公開

LINE TAXI from 0 to 1 / LINE TAXI - CTO Hayden Huang

緊接的第二位講者就是 LINE TAXI 技術漲 Hayden 所帶來的 “LINE TAXI from 0 to 1” 的技術分享。

LINE TAXI 簡介

「LINE TAXI叫車平台」與台灣新創團隊TaxiGo合作,將原有「TaxiGo叫車平台」改版升級後,於今天正式更名為「LINE TAXI叫車平台」。而TaxiGo於線下經營的實體車隊,則持續由TaxiGo團隊運營。 TaxiGo是原生台灣的新創團隊,主打以LINE聊天機器人叫車,提供準確即時、安全舒適的叫車服務,在2017年創立,並即加入「LINE新星計畫」(網址 https://protostar.line.me/zh-tw/ )接受育成輔導。 除了線上叫車平台,TaxiGo也同時建立了實體車隊,在LINE正致力推動線下服務與線上平台的板塊整合之際, TaxiGo團隊的命題,與LINE的企業發展策略極為契合,在雙方團隊的努力下,LINE正式邀請TaxiGo加入LINE的生態系,也使TaxiGo成為LINE新星計畫中,從育成輔導到與LINE正式合作的首例! (相關新聞,歡迎參考: 攜手TaxiGo LINE TAXI叫車平台正式上線 連結車隊與用戶的開放平台 同步招募台灣在地車隊加入)

使用 LINE 作為客戶端軟體的契機

當初開發的時候,原本就有開發好兩個平台的應用:司機端的 App 應用, 與客戶端的應用。 因為希望能給客戶最新的功能,能夠快速的讓產品迭代。所以在 2017 上市的時候就跟上了 LINE chatbot 的熱潮,透過 LINE 官方帳號,使用者再也不需要另外下載 App 。也可以很快速很方便地在 LINE 上面就可以使用到叫車的服務。 而司機端依舊使用 iOS 與 Android 的 App 來開發,因為這樣才能全程的紀錄車輛的狀況,讓車輛的派遣能夠更加的精準。

清楚明瞭的叫車流程與跟司機的互動

透過 Flex Message 來顯示叫車結果, 司機的相關資料可以一目瞭然。清楚的可以知道上車地點,司機名稱,車號,車款與預計到達的時間。 並且可以透過地圖顯示來即時查看車輛與乘客的相對位置。 透過 Flex Message 也可以一鍵分享行程給你的親朋好友。 並且這也有一個相當有用的功能叫做「聯絡司機」,透過 API Server 所搭建成的虛擬線路。司機與乘客不需要互為好友,但是也可以傳遞訊息,或是通電話。 這樣的互傳狀況將會維持兩個小時,為的就是避免乘客有物品遺失需要司機的協助狀況。 並且透過 LINE Pay 也可以快速付款,並且迅速地取得乘客的評分。

Chatbot 與 App 的比較圖

這一張圖很清楚的羅列了, Chatbot 與 App 的開發比較圖。 可以看出來:

Chatbot 具有以下的優點:

  • 導入用戶較快
  • 回應更快速與直覺

透過以上的優點,很適合作為客戶端的軟體使用。

而 App 的開發優點如下:

  • 豐富的 UI
  • 使用者比較習慣

對於司機大哥而言,這些優點又是相當重要的。

開發 LINE chatbot 兩個小技巧分享

Hayden 這次的也分享了兩個開發上的小技巧:

追蹤好友如何加入

在創業初期的時候,每一個新增的用戶都很重要,每一筆廣告經費更是重要。 所以要如何把錢花在刀口上,讓每一分錢能確認最容易找到客戶,就是 LINE TAXI 初期很重要的事情。透過在 Flex Message 中塞入一個小的圖片。由於圖片在讀取的時候帶著參數就不同,比如說不同的廣告來源,讓進來的圖片參數就不同。 如此一來在客戶點擊 Flex Message 上面的按鈕的時候,就可以將相關的參數帶到 API Server 上,透過這樣的方式來瞭解客戶是透過哪些廣告渠道而加入的。每一分錢也就能花得更值得。

如何做到好友推薦

好友推薦 (Member gain member) 對於客群的擴展相當的重要,但是如何正確地記錄到讓哪一位使用者推薦的是相當困難的。 透過了 LIFF 的推薦與分享按鈕,可以重送不同的鏈結並且在後端帶著不同的參數。 這樣一來就可以正確地記錄使用者 A 推薦了使用者 B 並且正確加入好友的完整流程。 而且透過 LINE 來分享好康訊息給好友也更加的直接與有效。

如何達到有效的派遣

計程車畢竟還是一個人的產業,不論是乘客還是司機都是需要被照顧到。 透過有效的派遣系統,可以讓客戶在合理的時間搭乘到車子,也能讓每一位司機都能夠再到客戶達成互惠的狀態。 一開始的時候,派遣僅針對最近的車輛來派車,這樣一來往往在熱門區域將會很快的滿檔, 造成後面叫車的乘客必須要等待非常的久。

經過有效的分配,並不是透過最近的司機馬上分配乘客。透過有效的計算與分配,讓司機都可以儘量的載到客戶,也讓乘客可以合理的狀況下都能夠搭到車子。

Q&A

問: 如何處理車輛派遣上大數據?

這部分就將數據分成兩大塊,即時資料與分析型資料。將即時資料做即時性的處理,而分析型資料則透過事後的批次處理來節省計算資源。 如此一來就可以更有效地讓讓資料可以有效地被處理到,也讓需要分析型的資料放在資料庫中,做為事後的處理與再利用。

問:如何處理因為程式錯誤而造成的客訴問題?

有時候因為地區偏遠的因素,造成即將下車的客戶往往因為網路因素而無法順利完成結帳。 造成許多困擾,為了讓乘客與司機的體驗更加的提升,近期也有推出「自動結帳」功能。 透過設定好綁定的信用卡或是 LINE Pay 帳戶就可以在下車的時候直接結帳。不必擔心下車的時候手忙腳亂了。

問:為何不直接派遣給最近的司機而是要多派給幾位而等待他們接單呢?

因為計程車業畢竟是一個人的產業,司機都是有牌照的小黃計程車司機。有些時候,可能他們所在的路段就可以在路邊招到客人,這時候就不適合直接分發給他們乘客。 不像是「多元計程車」只能接受網路上的網路預約而無法在路邊攬客。希望每一位 LINE TAXI 的乘客能夠了解?

疫止神通 / DeepQ Technology Corp. Tony Huang 黃振綸

第二段則是邀請到了「疫止神通 」的開發團隊 Tony 來為大家分享開發疫止神通的經過。

由於新冠病毒的影響,許多入境的旅客都需要隔離。以往的方式都是透過里長或是里幹事來追蹤隔離的民眾。但是許多民眾有很多問題與相關的詢問需要被解答,這時候透過 LINE Bot 是一個有效且相當安全的方式,這也是「疫止神通 」的初衷。

「疫止神通 」相關功能:

  • 確認入境資料。
  • 每天自動提醒自我檢測的狀況。
  • 提供疫情相關的資訊與注意事項給予隔離的民眾。

而 LIFF 與 Flex Message 更是在開發中給予相當的幫助,讓 LINE Chatbot 與用戶的溝通變得更多元。 歡迎大家觀看影片來了解更多開發的秘辛與團隊的相關經歷。

參與人員的詢問總結

在這裡整理所有參與人員的詢問,希望可以幫助大家。保護提問者就不公布詢問人員的姓名與資料。

(內容尚在整理中)

活動小結

立即加入「LINE開發者官方社群」官方帳號,就能收到第一手Meetup活動,或與開發者計畫有關的最新消息的推播通知。▼

「LINE開發者官方社群」官方帳號ID:@line_tw_dev

關於「LINE開發社群計畫」

LINE今年年初在台灣啟動「LINE開發社群計畫」,將長期投入人力與資源在台灣舉辦對內對外、線上線下的開發者社群聚會、徵才日、開發者大會等,已經舉辦30場以上的活動。歡迎讀者們能夠持續回來察看最新的狀況。詳情請看:

[TIL]關於 VIM 的錯誤訊息: Exception not caught: [vim-hug-neovim-rpc] requires `:pythonx import neovim` command to work

問題

 Exception not caught: [vim-hug-neovim-rpc] requires `:pythonx import [pynvim | neovim]` command to work

每次只要透過 brew upgrade 來更新 vim ,就很容易發生以下的問題。(應該是跟更新了 python 有關)。

不論跑 :pythonx import pynvim 或是 :pythonx import neovim 都是一樣的。

找了很久才找到解答:

解答:

參考 Error Every time I load in vim8 (not neovim) 可以看到以下解法:

也可以透過:

echo 'export PATH="/usr/local/opt/[email protected]/bin:$PATH"' >> ~/.zshrc

來解決。

相關鏈結:

Error Every time I load in vim8 (not neovim)

[研討會心得] 2020/05/26 Golang#49 @online

前言

大家好,我是 LINE Taiwan 的 Tech Evangelist - Evan Lin。這次很開心受到 Golang 社群的邀請,參加了 “Golang Taipei Gathering #49 Webinar” 的聚會活動,並且分享 Golang 開發的一些技巧與個人開發的心得。在此也跟各位分享本次參與的心得,並且也希望透過社群分享的力量能夠讓 Golang 更受到人了解。

由於防疫的要求,這次是在線上參與這次的聚會活動。很感謝每一位參與的朋友帶來的問題,希望透過線上以及錄影的方式可以讓更多的朋友可以了解。

LeetCode 挑戰 / 阿物股份有限公司 - 船長

影片:

投影片: https://eehsiao.github.io/LeetCode20200526-gtg49.pdf

船長分享如何透過寫 LeetCode 來 「舒壓」,並且可已透過寫 LeetCode 來對於許多演算法的學習更加深入。

Q&A:

記錄一些當天有人詢問有趣的問題:

  • Q: 有推薦的哪些常用 function 或是工具可以加速解題嗎?
    • A: 沒有常用的工具,但是有準備一些 tree 跟 graph 作為加速解決問題的方法。
  • Q: LeetCode 是否能幫助平日的開發工作?
    • A: 可以,幫助相關思考。
  • Q: LeetCode 真的需要花時間刷嗎?如果已經有其他經驗了
    • A: 許多大型跨國公司依舊需要透過 LeetCode 刷題。

如何使用 Golang從 Youtube 抓下影片 / 資深開發技術推廣工程師 Evan Lin

影片:

投影片:

這次主要是分享如何透過 Golang 來抓取 YouTube 影片的經驗分享與相關方法介紹:

專案: github.com/kkdai/youtube

Github: https://github.com/kkdai/youtube

直接下載使用:
- go install github.com/kkdai/youtube/youtubedr

用法1: (另存檔名為 Campaign Diary.mp4)
youtubedr -o "Campaign Diary".mp4 https://www.youtube.com/watch\?v\=XbNghLqsVwU

用法2: (不指定檔名,而使用影片標題)
youtubedr https://www.youtube.com/watch\?v\=XbNghLqsVwU

更多資訊歡迎參考這篇文章: [TIL][Golang] 如何抓取 Youtube 影片的相關資訊,與使用 Go 下載 Youtube 影片

Q&A:

記錄一些當天有人詢問有趣的問題:

  • Q: 未來會提供直接下載 youtube list 的功能嗎?
    • A: Playlist 尚不支援,基本上 Playlist 可能需要用到 YouTube API。
  • Q: 會想要支援其他平台,像是 facebook 或是 instagram 嗎?
    • A: Instagram 之前有寫過,不過後來都強制需要開發者帳戶。而且有所次數。 https://github.com/kkdai/goInstagramDownloader 。 臉書的部分也需要透過開發者帳戶,並且需要使用 FB Graph API 。
  • Q: 請問可以用用爬蟲的方式把資料爬出來嗎?
    • A: 這個方式就是爬蟲的方式,只是因為原本就需要透過 js 來 decipher 。
  • Q: Youtube 上頭有很多種影片格式,甚至是影音分開,都會透過這個API提供URL嗎?
    • A: 這個方式可以找到所有支援格式(與解析度)
  • Q: 可以直接執行那一個 JS 檔案嗎?
    • A: 透過寫前端的方式,可以直接執行。這邊是展示透過後端模擬前端。

活動小結

立即加入「LINE開發者官方社群」官方帳號,就能收到第一手Meetup活動,或與開發者計畫有關的最新消息的推播通知。▼

「LINE開發者官方社群」官方帳號ID:@line_tw_dev

關於「LINE開發社群計畫」

LINE今年年初在台灣啟動「LINE開發社群計畫」,將長期投入人力與資源在台灣舉辦對內對外、線上線下的開發者社群聚會、徵才日、開發者大會等,已經舉辦30場以上的活動。歡迎讀者們能夠持續回來察看最新的狀況。詳情請看:

[研討會心得] 2020/05/27 Chatbots 19 @online 與 2020 May LINE 平台更新整理報告

前言

大家好,我是 LINE Taiwan 的 Tech Evangelist - Evan Lin。這次很開心受到 chatbot 社群的邀請,參加了 “Chatbot meetup 聊天機器人小小聚 19 @Online” 的聚會活動,並且分享 LINE API 更新與個人開發的心得。在此也跟各位分享本次參與的心得,並且也希望透過社群分享的力量能夠讓聊天機器人的開發動能更加的盛大。

由於 Chatbots Meetup 本身屬於社群自主性的活動,裡面也有許多社群朋友所贊助的閃電秀。裡面的所有內容也是相當的難得與有趣。也希望能夠透過本篇文章讓大家稍微了解 Chatbots Meetup 社群閃電秀的魅力。

由於防疫的要求,這次是在線上參與這次的聚會活動。很感謝每一位參與的朋友帶來的問題,希望透過線上以及錄影的方式可以讓更多的朋友可以了解。

LINE Platform Update 202005 / 資深開發技術推廣工程師 Evan Lin

投影片

04/30: liff.getLineVersion() and liff.id added to LIFF v2

雖然之前 LIFF 有提供了 liff.isApiAvailable() 的功能來檢查該 API 是否能夠支援。 但是許多時候,開發者是需要取得使用者的 LINE App 版本來對於問題的復現與除錯之用。 這時候可以透過 LIFF 的 liff.getLineVersion() 可以取得目前執行這個 LIFF 的 LINE App 版本號碼。 當然如果使用者是使用 External Browser 來開啟 LIFF 的話這個就會回傳 null

05/08: LIFF Versioning policy and life cycle have been released

接下來這個部分是討論 LIFF 的 Versioning policy 之後將採取 Semantic Versioning 也就是針對版本號碼的管理,將依照以下原則: MAJOR.MINOR.PATCH 。至於 MAJORMINORPATCH 分別代表什麼意義,歡迎查看相關資料。

此外,這一次的公告也提出了。將版本停止支援( End-of-life) 之後,相關的 SDK 也會從 CDN 移除,也就不會有任何 API 可以使用。

最後,也是最重要的就是開發者們關心的 LIFF 支援的週期: LIFF v1 將支援到 2021 的九月

希望所有開發者能夠記住這個時間,儘早準備 migrate LIFF App 到 LIFF v2 。

05/12: Messaging API update for May 2020

Message character limit and media file usage conditions have been changed

又到了每個月的平台更新相關解說,五月份的平台更新。第一個部分的更新,是關於 Messaging API 有一些訊息的額度要增加了。 依序有相關的 Image Message, Video Message 跟 Text Message 的上限增加。 需要的人可以查看這個部分

Getting LINE emoji information from the text object of a webhook event

第二個部分的更新是新增了 LINE Emoji webhook 的支援,讓開發者可以收到使用者傳來的 LINE Emoji 訊息資料。 詳細的部分歡迎查看: 關於 LINE Emoji 的一些細節(以 Golang 為例)

Safely retrying a failed API request

許多開發者在發送 Broadcast 或是 Multicast 訊息的時候,可能因為訊息量過大沒有收到平台這邊回覆正確。 也有可能因為某些意外狀況平台回覆並非正常的狀況,造成開發者們無法確認使用者有沒有收到正確的訊息。 以往的狀況是透過重複發送的方式來確保使用者能夠收到訊息,但是如此一來有不少重複的使用者可能會收到重複的訊息,進而造成費用的重複計算。

這一次五月的更新,提供了 “Safely retrying” 機制。 可以讓開發者測試一下上次的訊息是否有正確的發送成功,並且也可以確保有無任何的使用者被漏發了。 相關的使用情境如下:

  • 上次不知道有無法送完成,呼叫 “Safely retrying” 可以重複發送同一則訊息。 有收過得不會收到重複訊息,沒收到的可以確保收到。
  • 上次發送發生了平台無法完成指令的意外,透過 “Safely retrying” 可以跟平台確認上次的狀況。 如果上次有完整發送完畢,也不會有重複計費的疑慮。

05/19 OGP tags are now available in the LIFF app

OGP (Open Graph Protocol) 原本就是一個給 SNS 或是瀏覽器作為擷取縮圖與相關資訊的協定。 但是之前透過 http://liff.line.me 的轉址原因,無法正確讓 LIFF 上面的 OGP 成功運作。 現在也已經正常的支援,不論是哪一種 LIFF 資訊都可以透過填寫正確的 OGP 資訊在其他 SNS (或是 LINE App) 上取得正確的資訊與縮圖。

之前透過 LIFF 進去某個頁面後,無法正確的取得某個子頁面的網址作為傳遞與分享。 現在可以透過 liff.permanentLink.createUrl() 的新支援的 API 來分享 LIFF 頁面給其他使用者。 也可以透過 liff.permanentLink.setExtraQueryParams() 來幫忙將使用者目前的環境參數用來組合相關的資訊,成為一整個可以分享的網址。

LINE Beacon 的介紹:

最後也跟開發者們分享,目前的 LINE Beacon 也已經正式開始營運。有任何開發上需求的開發者(或是業者),歡迎透過 LINE for Business 與經銷業務接洽。 主要的差別,除了可以使用 Beacon Banner 之外,也可以大量的部署與推廣。更有相關的平台可以讓你設定許多有用的訊息推廣。

使用 lotify + Swagger 建置可共用的 LINE Notify bot / LINE API Expert - NiJia

影片

投影片

第二位是 LINE API Expert 的 NiJia 帶來的 LINE Notify 套件 (lotify) 的說明。lotify (https://github.com/louis70109/lotify) 是一個 Python 開發的 LINE Notify SDK ,可以幫助開發者快速上手並且讓開發者除了發送之外,還可以產生網址跟換 Token 的功能都有支援。 並且還有以下的特點:

  • 快速部署 Heroku
  • Client library
  • Swagger 文件
  • Openapi generator
  • JS 使用範例

github: https://github.com/louis70109/lotify

如何在 LIFF 傳送隱藏資料給機器人 / 微程式股份有限公司 - 均民

影片

投影片

講者透過分享了透過 liff.sendMessage() 來發送一個 2x1 的透明圖片的方式來夾帶不同的資訊給 LINE Bot 的 Webhook 端。 透過這樣可以將資訊從 LIFF 前端帶給 LINE Bot 並且因為是發送訊息的方式,就可以有 replyToken 可以回覆給使用者。

相關的部落格文章: https://taichunmin.idv.tw/blog/2020-04-07-line-liff-send-hidden-data.html

閃電秀 - LINEBOT 學習地圖】 - #Jeffrey

影片

投影片

講者 Jeffrey 近期在社群分享了一系列的 LINE Bot 學習地圖的影片,透過手繪圖的分享方式來談談 LINE Bot 在分析了 LINE Bot 互動行為的種類,也分享了設計上應該要如何能夠解決使用者的需求。

很推薦任何人都可以聽,從 UX 與設計方面來對於 LINE Bot 有了更多更廣的了解。

活動小結

社群分享永遠是讓創意激盪的最佳方式,而 Chatbots Meetup 是一個很熱情與充滿創造力的社群組織。也希望有更多有創意的開發者願意加入 LINE Chatbot 的開發行列,更希望能熱情的參與社群的活動與一起來分享。

立即加入「LINE開發者官方社群」官方帳號,就能收到第一手Meetup活動,或與開發者計畫有關的最新消息的推播通知。▼

「LINE開發者官方社群」官方帳號ID:@line_tw_dev

關於「LINE開發社群計畫」

LINE今年年初在台灣啟動「LINE開發社群計畫」,將長期投入人力與資源在台灣舉辦對內對外、線上線下的開發者社群聚會、徵才日、開發者大會等,已經舉辦30場以上的活動。歡迎讀者們能夠持續回來察看最新的狀況。詳情請看:

[LINE][教學] 如何使用新 API 來有效地發送與接收 LINE Emoji

前言

LINE Emoji 是指在 LINE App 中可以使用的 LINE 表情集,其中有分為通用的(免費)與付費的表情集。 使用 LINE Emoji 在訊息當中可以讓使用者閱讀的時候更有感覺。 但是身為開發者該如何正確地發送與接受處理這些 LINE Emoji 呢?

這一篇文章將透過 Golang 的範例程式碼,指引該如何正確地發送與接受 LINE 表情集 (LINE Emoji) 。

投影片:

範例程式碼

https://github.com/kkdai/linebot-emoji

實際跑一個範例 (demo)

  • 加入這個官方帳號:

img

  • 隨便傳送一個表情符號,會看到聊天機器人用三種方式回覆你。 分別是:
    • 舊的 Emoji 傳遞方式來發送
    • 新的 Emoji 傳遞方式來發送
    • 加上使用者的 Emoji 並且透過新的 Emoji 來發送

新的 API 說明:

Use LINE emoji in messages (2020/April)

現在開始要在文字訊息裡面發送 LINE emoji 不需要自行做 unicode 轉換。可以直接在 API 中加上相關的 LINE emoji 編號就可以達成了,開發上變得更方便,也更有彈性。

可以參考新的 API : Text message 或是參考新的公告:[Updated] Messaging API update for April 2020

Getting LINE emoji information from the text object of a webhook event (2020/May)

在四月提供了新的發送 API 之後,五月的 Webhook 也提供了新的 Webhook 資訊可以讓聊天機器人有效的處理 LINE Emoji 。 透過 emojis 可以取得所有訊息中出現的 LINE Emoji 詳細資訊如下:

可以參考新的 API : Text message webhook 或是參考新的公告:Messaging API update for May 2020

使用 Golang 開發一個 LINE Emoji Echo Bot:

接下來的會使用 Golang ,根據 https://github.com/line/line-bot-sdk-go 提供的功能來開發 Echo Bot 。也就是一個會依照使用者講的文字來回覆的聊天機器人。 但是不同於一般 Echo Chatbot ,這個 Echo Bot 將會回傳使用者傳過來的 LINE Emoji ,所以需要具有以下幾個功能:

  • 擷取 Webhook text Message 中的 emojis 資訊 。
  • 將原先文字中的 (xxx) (作為表示表情符號的意思,舉例來說 (heart) 是愛心),替換成 $
  • 組合需要回覆使用者的文字與表情,需要注意的事情有兩件:
    • 將使用者回覆的文字加上 emoji 資訊,裡面需要注意,相關的 index 資訊需要調整。
    • 傳送 emoji 前要注意,是否是存在於可發送的表情清單(sendable LINE Emoji list)。 由於某一些表情包是需要付費的,只有免費且是 LINE 官方提供使用的可以透過聊天機器人來傳送。 詳情請看: LINE Sendable LINE Emoji List

接下來將透過原始碼的說明來解釋相關的流程:

擷取 Webhook text Message 中的 emojis 資訊 :

收到 text message 的 webhook 之後,會多了一個資料可以讀取 msg.Emojis 的 array structure 。 每一格資料可能是類似一下的資料格式:

根據以上收到的資料可以發現以下資訊:

  • text: 為 Hello, world! (love),其中 Emoji 也會轉成文字在原先的 text 之中為 (love)
  • emojis: 為出現的所有 Emoji ,並且提供起始的 indexlength 。其中 index 為 zero-based , length 包括了 ()

根據以上的資訊,如果你需要將表情符號去掉來做 Language Understanding (語意分析)的話。需要透過以下步驟:

  • Hello, world! (love) 參考 Emojis 資料將 (love)去除,並且重新組合為 Hello, world!

透過新的 LINE Emoji API 來發送表情符號:

根據以上的範例程式碼,可以知道要發送的資料格式如下:

  • text: "$%s 你好 \n , 這是新的傳送 Emoji 的方式。" 其中 $ 為你要傳 LINE Emoji 的位子,而 %s 是要跟使用者傳來的訊息組合成的訊息。
  • AddEmoji: 就是你要傳遞的 LINE Emoji ,其中有 ProductIDEmojiID 需要去 LINE Sendable LINE Emoji List 查詢。 本段範例為 熊大的範例 (ProdctID=5ac1bfd5040ab15980c9b435, EmojiID=086)

根據這樣的方式所完成的 Echo Bot 只能夠完整的傳遞使用者的文字,但是使用者傳送的 LINE Emoji 無法正確被顯示。 (會顯示為 (love) 或是 (heart) )。

完整回傳使用者傳來的 LINE Emoji 訊息

那麼要如何完整的回傳呢? 需要透過以下三個大步驟:

  • 讀取原先使用者傳來問自訊息,並且開始解析 LINE Emoji
  • 將原先有 (brown) 的訊息,替換成 $ 。作為之後需要傳送的時候使用。
  • 將原先使用者傳送的文字,夾帶成聊天機器人要傳送的文字之中。並且將 Emojis ˋ中所有的 index 做位置上的修改( index的位置因為機器人一些其他文字而改變)。

接下來,會稍微分享一下相關的轉換方式:

這部分主要功用是將使用者傳來具有 LINE Emoji 的訊息,轉換為 $ 。 (e.g. Hello, world! (love) –> Hello, world! $) 。 裡面主要用到字串的拆解方式,也就是 string(msgArray[:index]), "$", string(msgArray[index+v.Length:] 來拆解文字並且重新組合。

撰寫相關文字轉換的測試案例:

因為可能會遇到的種類相當的多(e.g. hi, _(brown)_, yo (love) (love) ),所以為了怕可能遇到的問題。我們也準備好相當多的測試程式碼。在此先附上部分的,完整的測試範例建議到 https://github.com/kkdai/LineBot-emoji/blob/master/tool_test.go 查看。

本段測試程式碼,僅僅對於整段文字裡面出現一個或是沒有的測試案例。 透過撰寫足夠完善的測試案例,可以讓整個 chatbot 的穩定度更好,也不需要透過部署就能夠把一些預先可見的錯誤找出來。

檢查是否是“可傳送的表情服務”:

由於某一些表情包是需要付費的,只有免費且是 LINE 官方提供使用的可以透過聊天機器人來傳送。 詳情請看: LINE Sendable LINE Emoji List

如果傳送非免費的 LINE Emoji 資料給伺服器,則會收到錯誤訊息。所以這段是透過整理出來的資料來做檢查。

完整的轉換與檢查流程:

快速講解一下,相關應用程式碼:

  • (5) workMsg := ReplaceEmoji(msg.Text, msg.Emojis): 將收到的使用者文字取代為 $
  • (17)lastLength = lastLength + v.Length: 這邊值得分享的是計算轉換後的 $ 位址,需要透過原本 Emoji 的長度來計算出來。 這樣才能算出每一個表情符號取代文字 $ 應該出現的 index

總結與展望未來 (Summary and Future Work)

透過 LINE Emoji 的 API ,讓開發者在傳送表情符號的處理上變得更加的直覺與簡單。也讓聊天機器人跟使用者之之間的互動變得更沒有距離。 不過如果需要將使用者傳過來的文字(加上表情符號)回傳回去的話,就需要有許多額外的處理。

之後可能針對這些部分可以有以下的相關處理:

  • 自然語言前處理: 如果想要針對使用者回覆的文字來做語意分析(Language Understanding) 那麼勢必要定義對於 LINE Emoji 的處理方式。開發者可以選擇全部忽略,或是將其放入分析器中。
  • 針對表情符號來互動: 使用者會使用表情符號,都會是有相對意義的。某些狀況下,可以透過表情符號(emoji) 來判斷使用者的情緒。 這也是一門相當大的學問才是。

參考

[研討會心得][DSC] 20200507 使用 Go 來打造 LINE 聊天機器人

前言

大家好,我是 LINE Taiwan 的 Technology Evangelist - Evan Lin。 感謝 DSC (Google Developer Student Clubs) 的邀請,在 2020/05/07 線上給予同學們基本的課程。 內容將有 Golang 的基本介紹,並且透過打造一個簡單的 LINE Bot 來跟各位展示 Golang 的一些優點。

這次有來自於四間大學(中興大學,台北大學,臺北科技大學以及銘傳大學)的 DSC 社團同學 ,全程也開放網路直播,希望可以讓更多對於 LINE Bot 有興趣的初學者一個良好的教材。

Build LINE Bot with Go / 資深開發技術推廣工程師 Evan Lin

投影片

這一次分享的投影片,主軸分成三個:

為什麼我會學習 Golang ? 什麼是 Golang?

經過了十年在多媒體外商軟體公司的工作之後,為了學習新的 Web 程式語言進而嘗試了不少的程式語言之後,最後選擇了 Golang 來鑽研。並且為了深入的學習 Golang ,而啟動了 Project 52 來作為學習 Golang 的方式,也因此學習了不少的演算法與進階的資料格式的應用方式。

這裡也介紹了一些 Golang 的基本優點:

  • Gofmt / goimport: 幫助你可以讓你的程式碼風格一致並且避免遺漏某一些需要使用的套件。
  • Go test: 幫助你快速準備好測試的方式,撰寫測試程式碼再也不困難。並且可以相當快速的做好效能調校的工作。
  • GoDoc:做文件一直是讓開發人員很困擾的事情,不是因為開發人員不願意寫。往往是輸出到文件需要有一些相關的轉換,或是需要許多額外的資料在程式碼之中。 使用 GoDoc 只要開發者的程式碼已經寫好了,就可以直接在網路上找到(舉例: https://pkg.go.dev/github.com/line/line-bot-sdk-go/linebot 就是直接將 https://github.com/line/line-bot-sdk-go/linebot 轉換成文件的網站。
  • GoRoutine:做 multiple routine programming 在許多語言其實都有一些困難跟繁瑣。除了多線程模型本身就需要有相當多需要注意的東西之外,要建置這樣的所需的程式碼其實也很複雜。使用 goroutine 相當的輕量,並且相當的容易。開發者可以把心力全部放在如何處理多線程的相關控制上。

如何學習 Golang :

由於這次主要的聽眾都還是大學的學生(部分還是大一的學生),所以許多的操作範例都是直接在 Golang Playground 來進行操作。可以省去許多程式初學者經常遇到的環境設置的問題。

同時也建議初學者可以把出現問題的程式碼透過 Golang Playground 來,分享出來在各種社群媒體來詢問。這樣一來也容易察覺問題與解決問題。

同時也建議同學們可以透過 Golang Tour 來一步一步的學習相關的知識,每一頁都有程式碼可以使用,可以線上編輯與執行。也可以透過邊練習,邊了解的方式更快速能夠加深印象。

什麼是 LINE Bot ? 如何透過 Golang 快速打造出一個 LINE Bot ?

學習一個語言最好的方式就是馬上透過它來打造一個東西,不論是一個產品,一個服務甚至是一個小工具。 在這裡相當建議各位透過打造 LINE Bot 來作為學習 Golang 的方式。主要的理由如下:

  • 打造 LINE Bot 不需要高深的美術觀念,對於一些 UI 美感有困難的人。學習 LINE Bot 不僅僅可以更快入手,並且可以讓開發者更專注在程式本身的功能上。
  • 使用正確的平台與訊息發送方式, LINE Bot 的開發是不需要任何費用。 在影片中的範例,展示透過 Heroku 作為伺服器的平台。打造出來的 LINE Bot 因為僅僅是回覆使用者的問題,也不需要任何額外的費用產生。
  • LINE 是一個相當好的工具(或是服務)的發佈平台,如果開發者們開發出相當有用的工具,透過 LINE 可以快速的推薦給親朋好友。而且不需要類似上架 App 的繁瑣的審核過程,發布的流程也是相當的快速。

接下來開始講解如何快速打造一個 LINE Bot:

範例程式碼: https://github.com/kkdai/LineBotTemplate

1. 先去 LINE 官方網站申請機器人帳號 (LINE Bot )

img

  • 請先確認有在 LINE Developer Console 開啟帳號
  • 然後建立一個 Messaging API Channel
  • 在 “Basic Setting” 頁面,取得 Channel Secret
  • 在 “Messaging API” 頁面,去申請 Channel Access Token
  • 在 “Basic Setting” 頁面,將 LINE 官方帳號管理介面打開
  • 到回覆設定的選項中,選擇啟動 “webhook”

2. Deploy LINE Bot template

記得到 https://github.com/kkdai/LineBotTemplate 然後點選下方的 Deploy 按鈕,將基本的程式碼 Deploy 到你的 heroku 之中.

Deploy]

  • 輸入剛剛取得的 Channel Access TokenChannel Secret
  • 請記住你設定的 Heroku App ID ,稍後會使用到。

3. 回到 LINE Bot Dashboard 設定基本資料

到你的 “Basic account information” 來設定,以下一些資料需要填好:

  • Callback URL: https://{YOUR_HEROKU_SERVER_ID}.herokuapp.com/callback

好了… 加入你的機器人.開始跟他講話吧.

這份程式碼是最簡單的範例,設定好之後他只會重複你打的文字.更多的功能會放在另外一份.

影片教學

可以根據以下影片的教學來看如何在五分鐘之內部署自己的 LINE Bot

想要修改代碼嗎?參考以下的影片教學吧

還有問題嗎? 歡迎在 github 上面開啟 issue 詢問。

如何成為 Golang 的專家?

最後因為分享 Golang 與 Project 52 的原因,因為參與了不少的社群活動與研討會,變成了 Golang Taipei 的主辦人之一,透過持續的分享與社群的經營,我才有幸能夠到 LINE 從事 Developer Relations 的工作並且變成了 Go GDE 。 在此也跟大家分享快速地學習 Golang 的小秘訣。

培養技術寫作的習慣:

由於主要旁聽的聽眾都是學生,在此也相當鼓勵學生們在學習一門新的技術,或是程式語言,透過寫作可以快速讓你不斷的反思學習到知識,並且會想要更深入的去了解。 比如說,學習到一個新的語言功能,試著把它寫成一個 TIL (Today I Learn) 透過這個方式,不僅僅可以讓你加深印象,事後透過網路搜尋可以幫助到許多有著相同問題的人(甚至就是你自己)。

使用 Golang 打造任何東西

學習(程式)語言最好的方式,就是去使用它。所以在這裡也相當建議同學們能夠實際上手去打造任何的小工具。不論是一個 LINE Bot 還是一些日常的小工具。 透過動手去打造他,才能了解每個語言之間的奧妙,才能知道某一些需要注意的地方。

分享!分享!記得要分享!!!

經常有人問我,為何能夠經常在各種場合去分享。 我也誠實的告知,其實分享的途中我學習到的更多:

  • 因為需要分享,我會將我了解的事物變成投影片,變成講稿。
  • 因為需要分享,我需要重新思考要如何讓不懂的人能夠了解我的問題與解決方式。
  • 因為需要分享,在口語之間我發現我了解得更深入,並且更容易記住。

所以也建議每位同學,一定要抓住機會去分享。

相關鏈結:

活動小結

很開心跟學生們分享 Golang 與 LINE Bot 的結合,記得上一次講到相關的介紹內容的時候,已經是四年前的事情了。 所以許多的素材與原始碼都需要翻新。 並且也準備好一些新的影片教學,也真的希望想要學習打造 LINE Bot 的朋友們,可以更快速的入手,也希望有任何問題可以到 LINE 的官方討論區或是「LINE開發者官方社群」官方帳號來詢問。

立即加入「LINE開發者官方社群」官方帳號,就能收到第一手Meetup活動,或與開發者計畫有關的最新消息的推播通知。▼

「LINE開發者官方社群」官方帳號ID:@line_tw_dev

關於「LINE開發社群計畫」

LINE今年年初在台灣啟動「LINE開發社群計畫」,將長期投入人力與資源在台灣舉辦對內對外、線上線下的開發者社群聚會、徵才日、開發者大會等,已經舉辦30場以上的活動。歡迎讀者們能夠持續回來察看最新的狀況。詳情請看: