zabbix报警推送至企业微信脚本
#!/usr/bin/python2.7 #_*_coding:utf-8 _*_ import requests,sys,json,logging,time # 导入requests模块用于发送HTTP请求,sys模块用于获取命令行参数,json模块用于处理JSON格式数据 日志模块时间模块 import urllib3 # 导入urllib3模块用于禁用SSL证书验证 urllib3.disable_warnings() # 禁用SSL证书验证,避免HTTPS请求出现证书验证错误 reload(sys) # 重新加载sys模块,解决默认编码问题 sys.setdefaultencoding('utf-8') # 设置默认编码为UTF-8,避免中文字符编码错误 ####这个位置配置测试增加log日志信息和日期 logfile = 'log.txt' def write_log(log): timestamp = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) log_with_time = { 'timestamp': timestamp, 'log': log } with open(logfile, 'a') as f: f.write(json.dumps(log_with_time) + '\n') ############################## 这个测试配置只增加log #def write_log(log): # with open('/tmp/zabbix_wechat.log', 'a') as f: # f.write(json.dumps(log) + '\n') # 构造获取访问令牌的函数,输入企业号标识Corpid和管理组凭证密钥Secret,返回访问令牌Token def GetTokenFromServer(Corpid,Secret): Url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken" # 构造获取访问令牌的API请求URL Data = { # 构造API请求参数 "corpid":Corpid, "corpsecret":Secret } r = requests.get(url=Url,params=Data,verify=False) # 发送HTTP GET请求 write_log(r.json()) # 输出API响应结果 if r.json()['errcode'] != 0: # 判断获取令牌是否成功 return False # 如果获取失败则返回False else: Token = r.json()['access_token'] # 提取访问令牌 file = open('/tmp/zabbix_wechat_config.json', 'w') # 创建/tmp/zabbix_wechat_config.json文件 file.write(r.text) # 将API响应写入文件 file.close() # 关闭文件 return Token # 返回访问令牌 # 构造发送消息的函数,输入接收人User、应用ID Agentid、消息主题Subject和消息内容Content,返回发送状态 def SendMessage(User,Agentid,Subject,Content): try: file = open('/tmp/zabbix_wechat_config.json', 'r') # 以只读方式打开/tmp/zabbix_wechat_config.json文件 Token = json.load(file)['access_token'] # 从文件中读取访问令牌 file.close() # 关闭文件 except: Token = GetTokenFromServer(Corpid, Secret) # 如果文件读取失败则重新获取访问令牌 n = 0 # 计数器n用于判断重发次数 # 构造发送消息API的请求URL和请求数据 Url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % Token Data = { "touser": "******", # 企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。 #"totag": Tagid, # 企业号中的标签id,群发使用(推荐) "toparty": 2, # 企业号中的部门id,群发时使用。 "msgtype": "text", # 消息类型。 "agentid": 1000003, # 企业号中的应用id。 "text": { "content": Subject + '\n' + Content # 消息内容,由主题和内容拼接构成 }, "safe": "0" } r = requests.post(url=Url,data=json.dumps(Data, ensure_ascii=False),verify=False) # 发送HTTP POST请求 write_log(r.json()) while r.json()['errcode'] != 0 and n < 4: # 如果发送失败,则尝试重新获取访问令牌并重发消息,最多尝试3次 n+=1 Token = GetTokenFromServer(Corpid, Secret) if Token: Url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % Token r = requests.post(url=Url,data=json.dumps(Data, ensure_ascii=False),verify=False) write_log(r.json()) return r.json() # 返回发送状态 # 如果该脚本为主体程序,则执行以下语句 if __name__ == '__main__': User = sys.argv[1] # zabbix传过来的第一个参数 Subject = str(sys.argv[2]) # zabbix传过来的第二个参数 Content = str(sys.argv[3]) # zabbix传过来的第三个参数 write_log('User: %s, Subject: %s, Content: %s' % (User, Subject, Content)) Corpid = "****************" # CorpID是企业号的标识 Secret = "****************************" # Secret是管理组凭证密钥 #Tagid = "*" # 通讯录标签ID Agentid = "*******" # 应用ID Partyid = "*" # 部门ID Status = SendMessage(User,Agentid,Subject,Content) # 调用发送消息函数,获取发送状态 write_log(str(Status)) # 输出发送状态
发现微信官方有自带的机器人,可以解决企业微信无法直接配置可信ip的问题
操作步骤
1. 登录微信对话开放平台,注册一个机器人
2. 点击发布管理-应用绑定-企业微信,会获得三个参数,复制下来
3. 登录企业微信管理后台,点击接收消息-设置API接收,将三个参数对应的填进去,然后点击保存,提示保存成功后就可以配置可信ip啦
如果只需要配置可信ip,到这里就可以了,以下步骤配置如何使用这个机器人进行聊天
4. 点击对话配置-预置技能,启用想要的技能
5. 点击发布管理-上线发布,发布一个版本
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)