分享
  1. 首页
  2. 文章

钉钉 ChatOps demo

TedCat · · 1472 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

一直想搞ChatOps,就是你at一下机器人,机器人会回复你对应内容那种,aws提供的方案对接的是slack,slack国内可能用的不多

公司用钉钉,自己每过一段时间就去搜一下,got luck today,钉钉好像刚开放了可以做应答的机器人

看了下钉钉的文档,开搞

  1. 准备一个https有效的域名接收钉钉推过来消息(试过https验证不过,钉钉那边调不了哈)
  2. 拜托了一下企业钉钉的管理员加个机器人
  3. 撸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))
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:TedCat

查看原文:钉钉 ChatOps demo

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
1472 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏