ZabbixWithWeChat.py 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #coding: utf-8
  2. import urllib2
  3. import json
  4. import sys
  5. '''
  6. 拥有企业号后,可以通过本脚本推送消息至关注本企业号的微信会员
  7. 这里用作zabbix告警的信息发送
  8. zabbix 传值需要三个参数
  9. 1 空
  10. 2 空
  11. 3 内容
  12. '''
  13. """
  14. touser 否 成员ID列表(消息接收者,多个接收者用‘|’分隔,最多支持1000个)。特殊情况:指定为@all,则向关注该企业应用的全部成员发送
  15. toparty 否 部门ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为@all时忽略本参数
  16. totag 否 标签ID列表,多个接收者用‘|’分隔。当touser为@all时忽略本参数
  17. msgtype 是 消息类型,此时固定为:text
  18. agentid 是 企业应用的id,整型。可在应用的设置页面查看
  19. content 是 消息内容
  20. safe 否 表示是否是保密消息,0表示否,1表示是,默认0
  21. """
  22. class WeChatMSG(object):
  23. def __init__(self,content):
  24. self.gettoken_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken'
  25. self.gettoken_content = {
  26. 'corpid' : 'aeef068',#企业号
  27. 'corpsecret' : 'T9Ac65Nltx7yDOe_ub0kbzqGI7oueedTAAfL01h5gX9Ffq2Ao2WjgIundR' , #管理组凭证密钥
  28. }
  29. self.main_content = {
  30. "toparty":"1",
  31. "agentid":"3",
  32. "msgtype": "text",
  33. "text":{
  34. "content":content,
  35. }
  36. }
  37. def get_access_token(self,string):
  38. token_result = json.loads(string.read())
  39. access_token= token_result['access_token']
  40. return access_token.encode('utf-8')
  41. def geturl(self,url,data):
  42. data = self.encodeurl(data)
  43. response = urllib2.urlopen('%s?%s' % (url,data))
  44. return response.read().decode('utf-8')
  45. def posturl(self,url,data,isjson = True):
  46. if isjson:
  47. data = json.dumps(data)
  48. response = urllib2.urlopen(url,data)
  49. return response.read().decode('utf-8')
  50. def encodeurl(self,dict):
  51. data = ''
  52. for k,v in dict.items():
  53. data += '%s=%s%s' % (k,v,'&')
  54. data = data[:-1]
  55. return data
  56. if __name__ == '__main__':
  57. if len(sys.argv) == 4:
  58. touser,notuse,content = sys.argv[1:]
  59. else:
  60. print 'error segments, now exit'
  61. sys.exit()
  62. msgsender = WeChatMSG(content)
  63. access_token_response = msgsender.geturl(msgsender.gettoken_url, msgsender.gettoken_content)
  64. access_token = json.loads(access_token_response)['access_token']
  65. sendmsg_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s' % access_token
  66. print msgsender.posturl(sendmsg_url,msgsender.main_content)