分享
钉钉 ChatOps demo
TedCat · · 1472 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
一直想搞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))
}
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信1472 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
一直想搞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))
}