Go调用企业微信API发送zabbix告警信息脚本

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

package main

import (
    "bytes"
    "encoding/json"
    "io/ioutil"
    "net/http"
    "os"
)

type JSON struct {
    Access_token string `json:"access_token"`
}

type MESSAGES struct {
    Touser string `json:"touser"`
    Toparty string `json:"toparty"`
    Msgtype string `json:"msgtype"`
    Agentid int `json:"agentid"`
    Text struct {
        //Subject string `json:"subject"`
        Content string `json:"content"`
    } `json:"text"`
    Safe int `json:"safe"`
}

func Get_AccessToken(corpid,corpsecret string) string {
    gettoken_url := "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + corpid + "&corpsecret=" + corpsecret
    //print(gettoken_url)
    client := &http.Client{}
    req, _ := client.Get(gettoken_url)
    defer req.Body.Close()
    body, _ := ioutil.ReadAll(req.Body)
    //fmt.Printf("\n%q",string(body))
    var json_str JSON
    json.Unmarshal([]byte(body), &json_str)
    //fmt.Printf("\n%q",json_str.Access_token)
    return json_str.Access_token
}

func Send_Message(access_token,msg string) {
    send_url := "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + access_token
    //print(send_url)
    client := &http.Client{}
    req, _ := http.NewRequest("POST", send_url, bytes.NewBuffer([]byte(msg)))
    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("charset","UTF-8")
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()
    //fmt.Println("response Status:", resp.Status)
    //body, _ := ioutil.ReadAll(resp.Body)
    //fmt.Println("response Body:", string(body))
}

func messages(touser string,toparty string,agentid int,content string) string{
    msg := MESSAGES{
        Touser: touser,
        Toparty: toparty,
        Msgtype: "text",
        Agentid: agentid,
        Safe: 0,
        Text: struct {
            //Subject string `json:"subject"`
            Content string `json:"content"`
        }{Content: content},
    }
    sed_msg, _ := json.Marshal(msg)
    //fmt.Printf("%s",string(sed_msg))
    return string(sed_msg)
}

func main(){
    touser := "BigBoss"  //企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。
    toparty := "2"       //企业号中的部门id。
    agentid:= 1000002    //企业号中的应用id。
    corpid := "xxxxxxxxxxxxxxxxx"  //企业号的标识
    corpsecret := "exxxxxxxxxxxxxxxxxxxxxxxxxxxxx"  ///企业号中的应用的Secret
    access_token := Get_AccessToken(corpid,corpsecret)

    subject := os.Args[2] //获取zabbix传进来的第一个参数
    content := subject  + "\n" + os.Args[3]  //获取zabbix传进来的第二个参数

    msg := messages(touser,toparty,agentid,content)
    //fmt.Println(msg)
    Send_Message(access_token,msg)
    //fmt.Println("\n")

}

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

本文来自:51CTO博客

感谢作者:三和梁朝伟

查看原文:Go调用企业微信API发送zabbix告警信息脚本

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

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