[研討會心得][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場以上的活動。歡迎讀者們能夠持續回來察看最新的狀況。詳情請看:

[心得] Go Developer Survey 2019 (2: Developer Tools)

前提

Golang 協會日前公布了去年的開發者調查結果。

Go Developer Survey 2019 Results

tl;pr (Too Long, Please Read) 我知道這個調查很長,你一定不會讀。我來幫你每天挑一個重點給你喔。

“Developer tools”

今天來討(ㄧ ㄣ \/)論(ㄓ ㄢ \)關於開發者工具的部分。

“你都在哪裡開發 Go?”

第一名: VS Code (16% -> 41 %)

不得不說~現在的 VS Code 真的是相當好用的 IDE(之一),低資源需求加上許多好用的外掛。

第二名: GoLand (15% -> 34%)

近期發表許多好用的功能,完美的整合讓 Go 開發環境整個完美而容易使用。 JetBrains 的 GoLand 真的相當好用,有喜歡的記得授權買下去!

第三名: Vim (28% -> 14%)

身為最好用 IDE? 的 Vim (誰說是 IDE? 明明就是 OS?) 佔有率竟然慢慢的下滑。 可能因為其他工具的整合性越來越高,對於 console mode 的整合也變得很方便。 許多也都有提供 vim mode (咦?) 讓 vim 的佔有率慢慢減少。

你是用哪套 IDE 呢? 歡迎各位來討論喔!!

[分享][翻譯] LINE Flex Message Template

(翻譯文章) LINE Flex Message Template

前提

本篇文章為翻譯文章,原文為 LINE Flex Message Template from LINE 泰國的 LAE (LINE API Expert) PamornT.

本文

LINE LINE Bot 朋友您好,根據 LINE Chat Bot的個人經驗,發現有一項重要任務是設計對用戶消息和非常流行的消息的回答 - 那就是透過 Flex Message 來發送回覆。

當嘗試與同時創建 LINE Chat Bot 的朋友交談時,他們也必須使用相同的 Flex,我們認為應該共享不同類型的 Flex Message 的樣板作為資源,以節省開發 LINE Chat Bot 的時間,提供開發人員使用和使用。

如果有人想分享 Flex Message,請在下面的鏈接中分享。原作者在這裡收集。謝謝參加的每個人都可以提供幫助。非常感謝你。

https://www.facebook.com/groups/LINEDEVTH/permalink/497494880914423/

請選擇您喜歡的一個,複製圖片下方的鏈接要點,以一起使用 ^^

車牌(泰國格式)

CR。Pamorn Trivorrarat

https://gist.github.com/…/440fb7788e8c501ad7115b7d7ed14a3b


收據

CR。Pamorn Trivorrarat

https://gist.github.com/…/40d8044af1fff88aac97dc74f85f5a4b


登機證

CR.Siratee Kittiwitchaowakul

https://gist.github.com/…/e9b33491edf45416cd124b8234051379


油價

CR。Charoensin缺陷

https://gist.github.com/…/0689bc210a2a8f5ccb3a352e70f72583


餐廳排隊卡

CR.Siratee Kittiwitchaowakul

https://gist.github.com/sirateek/f7ad9562bbdc500d87cfa27768e83292


追踪包裹運送狀態

CR。Pamorn Trivorrarat

https://gist.github.com/PamornT/086a249fad9b99a6d49db4b1b57ee116


足球比分表

CR.Sitthi Thiammekha)

https://medium.com/linedevth/worldcup-flex-864fb27db1a2


圖表

CR。Pamorn Trivorrarat

https://gist.github.com/PamornT/7990f0d5431ac92a4b404323058bdc4e


附註:任何想要分享,添加,分享到此文章的人,非常感謝你。 https://www.facebook.com/groups/LINEDEVTH/permalink/497494880914423/

[心得] Go Developer Survey 2019 (1: Pain points)

前提

Golang 協會日前公布了去年的開發者調查結果。

Go Developer Survey 2019 Results

tl;pr (Too Long, Please Read) 我知道這個調查很長,你一定不會讀。我來幫你每天挑一個重點給你喔。

“Pain points”

這邊調查,為什麼你不使用 Go 在你的專案裡面的原因。 這邊列出前三名,別且列一下 2016 調查報告跟 2019 的數字比對。 本來會以為是第一名的 Generic 結果並不是喔!!

  • 第一名: 目前專案是其他程式語言( 58% -> 56%) 蠻合理的~ 換一個語言改寫整個上線的產品或是專案。不是你走~就是老闆叫你走。 XD

  • 第二名: 我的團隊(老闆)(專案)喜歡其他程式語言 ( 45% -> 37%) 這個蠻有趣的,其實社群內經常聽到「老闆叫我不要用 Go 」「老闆喜歡其他語言」 這些都需要持續的導入。 wwww 不過數字變低是好事。

  • 第三名: Go 缺少一些我需要的語言特性 ( 16% -> 25%) 終於到了大家比較有爭議的點,也就是是否 Go Generic 讓大家在開發上覺得困擾。 不過比例有增高,可能是開發了一段時間後真的有相關的需求。

歡迎各位來討論喔….

[研討會心得] 2020/04/21 Chatbots 18 @online

前言

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

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

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

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

投影片

在此幫大家更新一下,從三月到四月中的相關 LINE 平台技術更新。也希望透過這樣得更新與相關的範例整理能讓更多的開發者知道該如何應用這些新的 API 。

03/19 Domain name change of certain endpoint

即將在 2020/04/30 即將停用的 API Endpoint api.line.me ,並且之後會換到 ` api-data.line.me` 。主要影響到的功能如下:

相關的 SDK 其實在 2019 的 11 月已經更新完畢,請各位開發者務必要更新你們的 SDK 到最新的版本。

相關訊息:

03/25 line:// is deprecated

LINE URL Scheme 是一個可以透過 URL 點擊去呼叫某些功能,比如說:

還有相當多功能歡迎參考。

由於安全考量, line:// 的 URL scheme 已經全部修改為 https:// 。請相關開發人員都要在原始碼修改好。

目前(2020 April) 尚未將 line:// 全面關閉,但是之後會有一天關閉相關的使用方式。

相關訊息:

04/03 New LIFF API: liff.isApiAvailable()

這邊可以參考另外一篇文章的說明: 使用 liff.isApiAvailable() 來讓舊的版本 LINE App 可以跑新的 LIFF 功能

04/06 Channel access token 2.1

原先在 Channel Access Token 的功能上,如果要透過 Issue Channel Token (2.0) 是需要 channel secret 的。

也就是說 Channel 的管理員,在這個時候需要將 channel secret 交給開發者去申請一個 Channel Access Token 。 在以往的實作上往往有隱藏著 Channel Serect 外露的危險。

這一次透過 Issue Channel Token (2.1) 功能更新,只需要將 Assertion Signing Key 的公開金鑰給開發者即可。對於 Channel 帳號權限的控管也變得更加的安全。

相關資訊:

在 04/14 的時候,一口氣有四項主要的 Messaging API 平台的更新要給各位。

1. LINE emoji 在文字訊息中變得更容易發送

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

2. 取得使用者的語言設定

許多開發者在開發多國語系聊天機器人的時候,最常詢問的問題就是,有沒有辦法取得使用者的使用語言呢?

現在透過 Get Profile (Messaging API) 你就可以取得使用者的語言設定。

3. Multicast 相關 rate limite 變得更大

單次 Multicast API 呼叫可以發送的受眾從 150 增大到 500 。

每分鐘可以發送的受眾上限也取消了。

相關資訊:

04/21 Notice about the return value of liff.shareTargetPicker()

LIFF 之前公布的新功能 ShareTargetPicker 是一個相當強大的需求,可以讓使用者分享給其他好友(聊天室)。

可以透過 Flex Message 與其他特製的訊息來讓 LIFF 開發商有更大的曝光度。

之前收到大家許多回饋,希望能知道是否有成功的分享給好友。

今天的新聞公布的相關的訊息,即將上架的新功能可以讓開發者知道使用者有沒有成功的分享了。

相關資訊:

離開還是留下?免費比較好? / 澄信農智股份有限公司技術長 - 周駿憲

影片

投影片

LINE 2.0 發送訊息收費後,該如離開還是留下來? 如果選擇留下來,該如何讓每一分錢都花在刀口上。 講者從行銷的角度帶給開發者許多不同的思維。

用 Azure 快速部署與開發LINE bot / 柯克

第三位講者由柯克分享在 Azure 上快速部署 LINE Bot 的經驗。透過一年有 10 個的免費伺服器額度 (App Services),手把手帶著部署一個 LIFF 網頁的 Hello World 的範例給大家。

並且透過好用的 Azure 圖床可以存放許多 LINE Bot 上面 ImageMap的圖片。 最後介紹 LUIS (微軟的語言理解套件)可以透過這個來打造一個具有文字溝通的聊天機器人。

活動小結

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

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

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

關於「LINE開發社群計畫」

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

[好書分享] Uber與Airbnb憑什麼翻轉世界

The Upstarts : How Uber, Airbnb, and the Killer Companies of the New Silicon Valley Are Changing the World
原文作者: Brad Stone  
譯者: 李芳齡  出版社:天下文化 
出版日期:2017/06/29 

買書推薦網址:http://moo.im/a/gmnpuA

前言:

記得上一次我也看過一本跟 Uber 有關的書籍,叫做「橫衝直撞: Uber刷新市值、3年成長20倍,卻成為全球麻煩製造機背後的教訓(Wild Ride)」。裡面對於創辦人 - 卡蘭尼克有了許多的著墨,但是對於 Uber 在城市間如何快速發展的主因,還有如何在法律與計程車司機抗議浪潮中生存的方式有太多的敘述。

於是我選了這一本來看,除了想要了解 Uber 更多的細節外。希望也能了解 Airbnb 得成名過程。

內容簡介:

Uber與Airbnb,為何帶來創新,又製造不安?

兩個工餘計畫,是怎麼變成價值千億美元的戰略?

名下沒有一輛車、一間房,如何穩居市場第一?

 

全球首部Uber、Airbnb授權專訪傳記,給你最深入的第一手訪談與觀察。

法規跟不上時代,但你不能跟不上時代,

讀完這本書,你將以全新眼光檢視你的公司與工作

簡介來自讀墨:http://moo.im/a/gmnpuA

(上面來自於天下文化對於這一本書的介紹影片)

由於兩間公司雖然先後成立,但是當初成立的過程與面對的挑戰都相當的類似,所以作者很有趣的利用的三個階段來敘述了這兩間公司。

第一部 工餘計畫

Uber 創始人之一 - 卡蘭尼克是創業家,有過一次成功的創業經驗。但是在 Uber 成立之初他其實還有不少個新創的投資機會在手上。

Airbnb 只是三個創始人因為想要參加研討會而找房子,發現了這樣的商機而成立了這樣的公司。

一開始兩間公司創始人都是因為閒暇之餘的工餘計畫 (side project) 而起頭的。

第二部 建立王國

第二階段就是兩家公司重要的時候,就是因為時勢的原因。造就兩家公司的快速發展,並且透過這樣的契機而建立自己相關王國的過程。

Airbnb 遇到了總統大選,於是有了更多的短期租屋的需求。Airbnb 也在這個時候逐漸茁壯,力霸一方。但是也在這時候忽然被人發現, Airbnb 總市值已經超過了喜來登,凱悅等等知名的旅館企業,但是 Airbnb 並沒有自己的旅館,並沒有自己相關安全措施,於是受到很大的挑戰。

叫車軟體 Uber 在美國各地的發展也相當迅速,原因之一也是美國對於計程車牌照的發放太過嚴格並且需要許多的申請費用。 迅速的發展也讓 Uber 受到計程車業的抗議,美國各地都受到強大的反彈。

第三部 新創家的考驗

第三部份提到更有趣的部分,兩家新創公司用了哪一些方式來讓自己具有領先地位與競爭優勢呢?

Uber 運用了天眼系統,也就是會持續追蹤每一個司機的走向。透過這些方式來更有效的安排車輛,但是也受到了個人隱私的質疑與抗議。 而 Uber 公司比較積極而狂妄的競爭手法也有人說對於辦公室文化其實一些性別歧視的爭議。

而 Airbnb 也在創業過程中經常使用共享經濟,甚至是每一個房屋的分租人都是樂於分享的美好想法來包裝。但是對於真正發生租屋問題的時候,卻經常沒有幫那些分租人出來解決問題。

這些處理方式都相當有趣,很推薦好好看看。

心得:

這一本對於兩個打破人類思考的新創企業 - 「共享經濟」,也是對於法律的新挑戰。 Airbnb 代表的是共享房屋,但是卻帶來短期租屋與旅館業者的抗議。 Uber 代表的是共享車輛,但是也遇到各國計程車業者的抗議與質疑。

兩家公司受到各種法律的質疑,但是兩間公司因為創始人的個姓大不相同,回應方式也不同。

Airbnb 執行長 - 切斯基 生性浪漫,透過共享經濟的烏托邦夢想打造了一個社群。Uber 創始人之 - 卡蘭尼克 生性好鬥又聰明,透過了 Uber 的司機幫他們來在政治上面施壓。

兩家公司處理方式很不相同,但是都相當值得學習跟了解。

書的內容不少,敘事也都很細膩可以了解許多事情的來龍去脈,很值得推薦。