钉钉 ChatOps demo


本文摘自网络,作者,侵删。

一直想搞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

相关阅读 >>

钉钉 chatops demo

简介

Go语言proto使用入门

Golang中的联合体

Golang中的切片与gc

简介

Golang与python有哪些不同?

如何编写Go中间件

带你理解Golang mysql数据库连接池

手撸Golang 基本数据结构与算法 网页排名/pagerank,随机游走

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...