一直想搞ChatOps,就是你at一下机器人,机器人会回复你对应内容那种,aws提供的方案对接的是slack,slack国内可能用的不多
公司用钉钉,自己每过一段时间就去搜一下,got luck today,钉钉好像刚开放了可以做应答的机器人
看了下钉钉的文档,开搞
- 准备一个https有效的域名接收钉钉推过来消息(试过https验证不过,钉钉那边调不了哈)
- 拜托了一下企业钉钉的管理员加个机器人
- 撸demo,最近在学golang,就用go写了
Here's the code
package main
import (
"net/http"
"bytes"
"log"
"encoding/json"
)
type dingRobotMsg struct {
Conversationid string `json:"conversationId"`
Atusers []struct {
Dingtalkid string `json:"dingtalkId"`
} `json:"atUsers"`
Chatbotuserid string `json:"chatbotUserId"`
Msgid string `json:"msgId"`
Sendernick string `json:"senderNick"`
Isadmin bool `json:"isAdmin"`
Sessionwebhookexpiredtime int64 `json:"sessionWebhookExpiredTime"`
Createat int64 `json:"createAt"`
Conversationtype string `json:"conversationType"`
Senderid string `json:"senderId"`
Conversationtitle string `json:"conversationTitle"`
Isinatlist bool `json:"isInAtList"`
Sessionwebhook string `json:"sessionWebhook"`
Text struct {
Content string `json:"content"`
} `json:"text"`
Msgtype string `json:"msgtype"`
}
type ResponseJson struct {
Msgtype string `json:"msgtype"`
Text struct {
Content string `json:"content"`
} `json:"text"`
}
func callBackDingTalk(robotMsg dingRobotMsg) {
//推过来的消息有个Sessionwebhook字段的url,拿来回调
callBackUrl := robotMsg.Sessionwebhook
var callBackJson ResponseJson
callBackJson.Msgtype="text"
//回复什么,自己发挥哈
callBackJson.Text.Content=robotMsg.Text.Content + " too"
callBackBody := new(bytes.Buffer)
json.NewEncoder(callBackBody).Encode(callBackJson)
req, _ := http.NewRequest("POST",callBackUrl,callBackBody)
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp ,_ := client.Do(req)
defer resp.Body.Close()
}
func myHandler(writer http.ResponseWriter, request *http.Request) {
//钉钉post过来一个json
decoder := json.NewDecoder(request.Body)
var msg dingRobotMsg
decoder.Decode(&msg)
callBackDingTalk(msg)
//fmt.Println("msg: ",robotMsg.Text.Content)
//fmt.Fprint(writer, response)
}
func main(){
http.HandleFunc("/", myHandler)
log.Fatal(http.ListenAndServe(":8080", nil))
}
有疑问加站长微信联系(非本文作者)