title: go-go-micro機器人bot
categories: Go
tags: [go, 微服務, bot, 機器人, slack]
date: 2019-10-10 19:30:53
comments: false
go-go-micro機器人bot
前篇
- micro bot - https://www.bookstack.cn/read/go-micro/72414279e3575e70.md
- https://medium.com/microhq/the-micro-bot-chatops-for-microservices-546ecc1a9ed8
micro bot 是一隻藏在微服務中的小馬蠅,有了它,我們可以在 Slack、HipChat、XMPP 等等聊天程序中與它對話,通過它來操控服務。
我們把消息發送給它,它基於這些消息模仿執行CLI,觸發指定的接口功能。
是用很簡單. Slack 爲例
-
獲得 Slack 的 token. 如:
xoxb-123-123-asdasd
-
啓動 bot
$ micro bot --inputs=slack --slack_token=xoxb-123-123-asdasd 2019/10/10 19:25:06 [bot] starting 2019/10/10 19:25:06 [bot] starting input slack 2019/10/10 19:25:07 [bot][loop] starting slack 2019/10/10 19:25:07 [bot][loop] connecting to slack 2019/10/10 19:25:07 Transport [http] Listening on [::]:64084 2019/10/10 19:25:07 Broker [http] Connected to [::]:64085 2019/10/10 19:25:07 Registry [mdns] Registering node: go.micro.bot-538d4b38-d9a4-4acd-8210-6a46bf400f6e
-
在 Slack 就可以輸入命令與機器人交互
Slack
- 使用Go開發一個 Slack 運維機器人 - https://colobu.com/2015/11/04/create-a-slack-bot-with-golang/
創建流程
-
你首先創建一個Team,並且加入到這個Team中。這是使用Slack的第一步。以後你可以直接訪問 http://.slack.com 登錄到你的team中。
-
新建一個 bot user integration。你需要爲你的機器人起一個名字. 這裏我起了 xiaoyang.
可以爲它指定頭像,slack會爲它生成一個 API Token。 這個API Token很重要, 以後訪問slack API需要傳入這個token。如:
xoxb-123-123-asdasd
你也可以爲你的普通登錄用戶生成full-access token,網址是: https://api.slack.com/web。
-
將你創建的 bot 加入到一個 Apps 中.
-
在 Slack 就可以輸入命令與機器人交互
增加命令
方式一: 啓動一個命令服務 (推薦)
- Commands as Services - https://micro.mu/docs/bot.html#commands-as-services
參考官方 examples
-
啓動服務
f:\a_link_workspace\go\GoWinEnv_MicroExamples\src\github.com\micro\examples\command (master -> origin) $ go run main.go
-
刷新一下 slack, 輸入 help 指令可以看到新加的指令 command.
添加多個命令服務
官方的說明一個 命令服務職能執行一個命令. 多個命令的話需要多個 命令服務.
- How does it work? - https://micro.mu/docs/bot.html#how-does-it-work
在 go.micro.bot
這個命名空間下的都可以添加到可執行的 命令列表.
實踐測試: test_cmd_service
-
添加兩個命令
// cmd1 rsp.Usage = "wilker" rsp.Description = "This is an example bot command as a micro service wilker" micro.Name("go.micro.bot.wilker"), // rsp.Usage 與 go.micro.bot. 後綴一致 // cmd2 rsp.Usage = "yun" rsp.Description = "This is an example bot command as a micro service yun" micro.Name("go.micro.bot.yun"),
-
分別啓動兩個命令
f:\a_link_workspace\go\GoWinEnv_new\src\GoMicro\test_cmd\test_cmd_service\cmd1 (master -> origin) $ go run main.go 2019/10/11 11:37:37 Registry [mdns] Registering node: go.micro.bot.wilker-fd7da5e9-5339-402c-9dc0-b7cecb2d93e2 f:\a_link_workspace\go\GoWinEnv_new\src\GoMicro\test_cmd\test_cmd_service\cmd2 (master -> origin) $ go run main.go 2019/10/11 11:37:59 Registry [mdns] Registering node: go.micro.bot.yun-6a8f9cee-5815-48aa-939e-6763022e97f6
-
刷新一下 slack, 輸入 help 指令可以看到新加的指令 command.
方式二: 重新編譯 micro
參考: test_cmd_compile
- 增加命令 - https://www.bookstack.cn/read/go-micro/72414279e3575e70.md#%E5%A2%9E%E5%8A%A0%E5%91%BD%E4%BB%A4
使用流程
-
cd 到 src/github.com/micro/micro 目錄下, 新增一個自定義命令文件 my-cmd.go
增加一個 yang 的指令
package main import ( "github.com/micro/go-micro/agent/command" ) func Ping() command.Command { usage := "yang" description := "hello wilker!!" return command.NewCommand("ping", usage, description, func(args ...string) ([]byte, error) { return []byte("Returns xuan 666"), nil }) } func init() { command.Commands["^yang$"] = Ping() }
-
加入 my-cmd.go 重新編譯 micro 生成可執行文件 myMicro.exe
F:\a_link_workspace\go\GoWinEnv_Test01 $ cd src\github.com\micro\micro F:\a_link_workspace\go\GoWinEnv_Test01\src\github.com\micro\micro (master -> origin) $ go build -o myMicro.exe main.go my-cmd.go
-
啓動機器人
$ myMicro.exe bot --inputs=slack --slack_token=xoxb-123-123-asdasd 2019/10/10 20:17:56 [bot] starting 2019/10/10 20:17:56 [bot] starting input slack 2019/10/10 20:17:57 [bot][loop] starting slack 2019/10/10 20:17:57 [bot][loop] connecting to slack
-
訪問 https://app.slack.com/client, 輸入 help 指令與 yang 指令可以看到增加的命令
自定義機器人交互插件
- 增加新的輸入源 - https://www.bookstack.cn/read/go-micro/72414279e3575e70.md#%E5%A2%9E%E5%8A%A0%E6%96%B0%E7%9A%84%E8%BE%93%E5%85%A5%E6%BA%90