首页 > 其他分享 >Go实现Zabbix企业微信应用通知告警

Go实现Zabbix企业微信应用通知告警

时间:2023-11-11 19:44:44浏览次数:33  
标签:string err 微信 req json Zabbix Go agentid

企业微信
https://work.weixin.qq.com/
企业微信->应用管理->创建应用

个人微信也能接收企业微信信息
我的企业 -> 微信插件 -> 扫码关注

特殊说明
之前企业微信只需要调用接口就能实现微信应用通知,最近改版,变得比较复杂
1:需要配置可信IP才能发
2: 配置可信IP前需要先设置可信域名或者设置接收url

上go代码sjgzbx_wechart.go

package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io/ioutil"
    "net/http"
    "os"
    "path/filepath"

    "gopkg.in/ini.v1"
)

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

type WECHARTMESSAGES struct {
    Touser  string `json:"touser"`
    Msgtype string `json:"msgtype"`
    Agentid string `json:"agentid"`
    Text    struct {
        Content string `json:"content"`
    } `json:"text"`
}

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

func send_wechart(corpid, corpsecret, agentid, touser, content string) string {
    access_token := get_accesstoken(corpid, corpsecret)
    send_url := "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + access_token
    client := &http.Client{}
    msg := WECHARTMESSAGES{
        Touser:  touser,
        Msgtype: "text",
        Agentid: agentid,
        Text: struct {
            Content string `json:"content"`
        }{Content: content},
    }
    sed_msg, _ := json.Marshal(msg)
    req, _ := http.NewRequest("POST", send_url, bytes.NewBuffer([]byte(sed_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()
    body, _ := ioutil.ReadAll(resp.Body)
    fmt.Printf("\n%q", string(body))
    return string(body)
}

func main() {
    args := os.Args
    if len(args) != 3 {
        panic("args len is error")
    }
    ex, err := os.Executable()
    exPath := filepath.Dir(ex)
    cfg, err := ini.Load(exPath + "/wechart.ini")
    if err != nil {
        fmt.Println(err)
    }
    corid := cfg.Section("").Key("corid").String()
    corsecret := cfg.Section("").Key("corsecret").String()
    agentid := cfg.Section("").Key("agentid").String()
    send_wechart(corid, corsecret, agentid, args[1], args[2])
}

配置示例

corid=xxx
corsecret=xxx
agentid=xxx

zabbix传两个参数即可

{ALERT.SENDTO}
{ALERT.SUBJECT} 或者 {ALERT.SUBJECT} {ALERT.MESSAGE}

操作视频地址
https://www.bilibili.com/video/BV1GH4y1z7YB/

标签:string,err,微信,req,json,Zabbix,Go,agentid
From: https://www.cnblogs.com/sjgops/p/17825898.html

相关文章

  • wechaty撸一个属于自己的微信机器人(Python版接入文心一言)
    前言说明:机器人的框架找了很久,由于很多框架都不能使用了或者封号率极高,最后选择了wewechaty,wechaty是可以使用ipad协议,主要是以node写的,因为打算机器人接入爬虫项目,所以特意用了python版本,对于python版网上教程太少且模糊且时间过于久远,所做以此文为采坑记录。前期准备:tok......
  • Fight Hard for Ecological Protection and Governance of the Yellow River to Addre
    1.Effectivemeasureaimedataddressingthewatercontamination:Wewill fight hard for ecological protection and governance of the Yellow River. We will fully implement the requirements of determining the city, the land, the people,......
  • 想入坑golang web,向大佬们请教些问题?
    当你准备入坑Go语言的Web开发时,以下是一些常见的问题,你可以向大佬们请教:如何设置和启动一个GoWeb服务器?Go语言有哪些常用的Web开发框架?它们之间有什么区别和优劣势?Go语言中的路由是如何实现的?如何处理不同的HTTP请求方法和URL参数?Go语言如何处理请求和响应,以及如何......
  • 怎么样能拿到微信小程序每次进入页面的渲染时长?
    要获取微信小程序每次进入页面的渲染时长,可以通过以下几个步骤实现:在页面的onLoad函数中记录开始时间戳:在页面的onLoad函数中,使用Date.now()记录当前时间戳。这将作为页面渲染开始的时间。在页面的onReady函数中记录结束时间戳:在页面的onReady函数中,再次使用Date.now()......
  • golang json 序列化、反序列化 字符串反序列化
    golangjson序列化、反序列化字符串反序列化在使用Golang进行开发时,经常会遇到需要将一段JSON字符串进行序列化和反序列化的情况。JSON是一种轻量级数据交换格式,常用于前后端数据传输、存储等场景。Golang提供了内置的encoding/json包来处理JSON的序列化和反序列化。JSON的序列化......
  • 微信开发者工具 打断点
    开始学习微信小程序开发文档,下载微信开发者工具,进行开发了。开发过程中需要调试,开始只是打日志或者断言,觉得很不方便,希望跟IDEA一样的调试器,于是摸索如下:第一步:打断点,我们必须在我们想要它停下来的地方打上调试断点,点击微信开发者工具的左侧的“调试”tab,然后选择中间窗......
  • 传奇GOM引擎微端连接不上如何解决
    Gom传奇引擎的微端连不上的原因可能有很多,比如网络问题、服务器配置问题、版本兼容性问题等。1.检查网络连接:首先要确保你的网络连接稳定。如果遇到网络问题,比如网络延迟过高,可能会导致你无法连接到服务器。建议使用稳定的网络连接,并尝试重启电脑或路由器。2.检查服务器配置:如果服......
  • 基于微信小程序的校园餐饮配送系统
    (文章目录)前言:heartpulse:博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌:heartpulse:......
  • 机智云Gokit Cooperation with WRTnode
    机智云Gokit和WRTnode的合作是一种强强联合,旨在为物联网(IoT)开发人员提供更高效、更便捷的解决方案。机智云Gokit是一个基于云的物联网开发平台,它提供了一系列工具和API,帮助开发者快速构建物联网应用程序。Gokit的特点包括设备管理、数据采集、远程控制、可视化展示和安全性保障。WR......
  • 基于Golang协程实现流量统计系统项目开发
    基于Golang协程实现流量统计系统项目开发上一节课我们已经架设好了一个网站。,但是因为我们的网站没有流量。也生成不了大量的日志,靠我们自己点击生成那点日志也不够测试的。所以这次我们就用GO语言批量生成我们想要的日志。好了。我们开始写代码我用的IDE工具是GOLAND,没有为......