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

栏目: 服务器 · 发布时间: 6年前

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")

}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数据结构与算法

数据结构与算法

卓滋德克 / 陈曙晖 / 清华大学出版社 / 2003-4-1 / 69.00

本书是一本介绍数据结构与算法的优秀书籍。 本书系统介绍了C++面向对象程序设计、算法复杂度、链表、栈、队列、递归、树、图、排序和查找算法、散列技术、数据压缩算法、内存管理等内容;尤其对递归算法进行了深入剖析。在附录中详细介绍了大O符号与标准模板库:在大多数章中提供了相应的实例分析和程序设计作业。 本书适合作为计算机软件专业或其他相关专业的教科书。对于需要参加计算机考试,......一起来看看 《数据结构与算法》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

html转js在线工具
html转js在线工具

html转js在线工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具