天天看點

go-go-micro機器人bot

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,觸發指定的接口功能。

go-go-micro機器人bot

是用很簡單. Slack 為例

  1. 獲得 Slack 的 token. 如:

    xoxb-123-123-asdasd

  2. 啟動 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
               
  3. 在 Slack 就可以輸入指令與機器人互動
    go-go-micro機器人bot

Slack

  • 使用Go開發一個 Slack 運維機器人 - https://colobu.com/2015/11/04/create-a-slack-bot-with-golang/

建立流程

  1. 你首先建立一個Team,并且加入到這個Team中。這是使用Slack的第一步。以後你可以直接通路 http://.slack.com 登入到你的team中。
  2. 建立一個 bot user integration。你需要為你的機器人起一個名字. 這裡我起了 xiaoyang.

    可以為它指定頭像,slack會為它生成一個 API Token。 這個API Token很重要, 以後通路slack API需要傳入這個token。如:

    xoxb-123-123-asdasd

    你也可以為你的普通登入使用者生成full-access token,網址是: https://api.slack.com/web。
  3. 将你建立的 bot 加入到一個 Apps 中.
    go-go-micro機器人bot
  4. 在 Slack 就可以輸入指令與機器人互動
    go-go-micro機器人bot

增加指令

方式一: 啟動一個指令服務 (推薦)

  • Commands as Services - https://micro.mu/docs/bot.html#commands-as-services

參考官方 examples

  1. 啟動服務
    f:\a_link_workspace\go\GoWinEnv_MicroExamples\src\github.com\micro\examples\command (master -> origin)
    $ go run main.go
               
  2. 重新整理一下 slack, 輸入 help 指令可以看到新加的指令 command.
    go-go-micro機器人bot
添加多個指令服務

官方的說明一個 指令服務職能執行一個指令. 多個指令的話需要多個 指令服務.

  • How does it work? - https://micro.mu/docs/bot.html#how-does-it-work

go.micro.bot

這個命名空間下的都可以添加到可執行的 指令清單.

實踐測試: test_cmd_service

  1. 添加兩個指令
    // 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"),
               
  2. 分别啟動兩個指令
    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
               
  3. 重新整理一下 slack, 輸入 help 指令可以看到新加的指令 command.
    go-go-micro機器人bot

方式二: 重新編譯 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

使用流程

  1. 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()
    }
               
  2. 加入 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
               
  3. 啟動機器人
    $ 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
               
  4. 通路 https://app.slack.com/client, 輸入 help 指令與 yang 指令可以看到增加的指令
    go-go-micro機器人bot

自定義機器人互動插件

  • 增加新的輸入源 - 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