前篇:《製作哈哈姆特不 EY 的聊天機器人!架設原理概述》
上面這篇是三年前寫的哈哈姆特機器人運作原理跟簡單的訊息收發範例。過往只是大致描述了巴哈姆特提供了什麼樣的 API(以及怎麼用)而已,實際上要傳送 HTTP request、解析 response 內容這些事情還是得自己來。如果要認真開發一個哈哈姆特機器人的話,把這些東西從頭寫起來還是蠻麻煩的。
這幾年斷斷續續摸熟了 Golang 這門語言的基礎,找了機會回頭來做了專門處理哈哈姆特機器人訊息的套件,也算是終於把這個坑給填完了。
► 簡介
Repo:https://github.com/upk1997/go-hahamut-bot
說明文件(英文):https://github.com/upk1997/go-hahamut-bot/blob/master/README.md
說明文件(繁中):https://github.com/upk1997/go-hahamut-bot/blob/master/README_zh-tw.md
支援以下功能:
* 透過本機檔案路徑或圖片連結的上傳圖片功能
* 傳送文字訊息、貼圖訊息、圖片訊息、啟動事件訊息、更新事件訊息
* 專門用來解析 webhook 事件的 parser
* 承上,parser 自帶強制檢查簽章的功能
► 使用方法
當你想用 Golang 來開發一個哈哈姆特機器人的時候,只要用 go get 指令把套件載下來:
上面這篇是三年前寫的哈哈姆特機器人運作原理跟簡單的訊息收發範例。過往只是大致描述了巴哈姆特提供了什麼樣的 API(以及怎麼用)而已,實際上要傳送 HTTP request、解析 response 內容這些事情還是得自己來。如果要認真開發一個哈哈姆特機器人的話,把這些東西從頭寫起來還是蠻麻煩的。
這幾年斷斷續續摸熟了 Golang 這門語言的基礎,找了機會回頭來做了專門處理哈哈姆特機器人訊息的套件,也算是終於把這個坑給填完了。
► 簡介
Repo:https://github.com/upk1997/go-hahamut-bot
說明文件(英文):https://github.com/upk1997/go-hahamut-bot/blob/master/README.md
說明文件(繁中):https://github.com/upk1997/go-hahamut-bot/blob/master/README_zh-tw.md
支援以下功能:
* 透過本機檔案路徑或圖片連結的上傳圖片功能
* 傳送文字訊息、貼圖訊息、圖片訊息、啟動事件訊息、更新事件訊息
* 專門用來解析 webhook 事件的 parser
* 承上,parser 自帶強制檢查簽章的功能
► 使用方法
當你想用 Golang 來開發一個哈哈姆特機器人的時候,只要用 go get 指令把套件載下來:
go get -u "github.com/upk1997/go-hahamut-bot" |
然後在 code 裡面把這個 package 引到你的 Golang 專案:
myBot := hahamut.NewBot(botID, botAccessToken, botSecretKey) |
接著就可以直接用短短的幾行 code 來收發訊息:
myBot.SendText("johnny860726", "Hello") myBot.SendSticker("johnny860726", "1", "08") image, _ := myBot.UploadImageFromURL("https://i.imgur.com/9tzLAzZ.jpg") myBot.SendImage("johnny860726", image) |
剩下的細節(包含完整的範例),你可以直接在上面提供的說明文件看到。
► Bot on Heroku
為了安全考量,巴哈姆特限制必須在 HTTPS 上面收發訊息,也因此如果你是在自己的本機環境上面執行、使用這個套件的話,最多就只能做到發送訊息、貼圖、圖片而已。想要「接收來自使用者的訊息」的話,你就必須架設一個 HTTP 伺服器(見說明文件裡的 HTTP Server & Webhook Example 一段),並且有域名(domain name)可以跑 HTTPS 才行。
當然我這個人是沒有這麼勤奮,也懶得花什麼錢去租主機,所以一般我會建議用 Heroku 之類的環境,光是網站給的免費額度就很夠用了,還自帶 HTTPS,根本不用煩惱這些有的沒的。
要注意的是我們把哈哈姆特機器人套件引到專案裡面之後,必須執行:
go mod vendor |
把引用的套件複製一份到你的專案目錄下,你的專案內容才會完整,也才能推到 Heroku 上面的 repo,避免 Heroku 的主機發生抓不到套件的問題。
另外一方面,如果你直接把 secretKey、token 這些比較敏感的資訊寫在 code 裡面的話,要注意別把你的這些 code 推到公開的 GitHub repository 上面,不然你的 key 就會被看光光了,對你的機器人來說會很危險。我會建議先確定好你的機器人 repo 是 private 的,到 Heroku 上面連動 GitHub 帳號,然後才把推到 GitHub 上面的程式碼 deploy 到伺服器上面去:
如果你對 Golang 跟哈哈姆特不 EY 的機器人很有興趣,希望這篇對你來說會有幫助。
測試下來應該是不會有什麼 bug 才對,如果有什麼想要修改的就歡迎大家再把這個套件 fork 到自己的 repo 裡面改,送 pull request 過來的話我也不見得都會按接受就是,因為我就是個懶人嘛 _(:з」∠)_
文章縮圖:哈哈姆特不 EY 官方機器人桃子 BOT 大圖