1+ # encoding: utf-8
2+ import urllib ,urllib2
3+ import json
4+ import sys
5+ import datetime
6+ from elastalert .alerts import Alerter , BasicMatchString
7+
8+ from elastalert .util import elastalert_logger
9+
10+ '''
11+ ##########################################################
12+ # 微信企业号推送消息 #
13+ # #
14+ 15+ # 作者博客: https://anjia.ml/ #
16+ # Github: https://github.com/anjia0532/weixin-qiye-alert #
17+ # #
18+ ##########################################################
19+ '''
20+ class WeChatAlerter (Alerter ):
21+
22+ #企业号id,secret,应用id必填
23+
24+ required_options = frozenset (['corp_id' ,'secret' ,'agent_id' ])
25+
26+ def __init__ (self , * args ):
27+ super (WeChatAlerter , self ).__init__ (* args )
28+ self .corp_id = self .rule .get ('corp_id' , '' ) #企业号id
29+ self .secret = self .rule .get ('secret' , '' ) #secret
30+ self .agent_id = self .rule .get ('agent_id' , '' ) #应用id
31+ self .party_id = self .rule .get ('party_id' ) #部门id
32+ self .user_d = self .rule .get ('user_d' , '' ) #用户id,多人用 | 分割,全部用 @all
33+ self .tag_id = self .rule .get ('tag_id' , '' ) #标签id
34+ self .access_token = '' #微信身份令牌
35+ #self.expires_in=datetime.datetime.now() - datetime.timedelta(seconds=60)
36+
37+ def create_default_title (self , matches ):
38+ subject = 'ElastAlert: %s' % (self .rule ['name' ])
39+ return subject
40+
41+ def alert (self , matches ):
42+ # https://github.com/Yelp/elastalert/blob/master/elastalert/alerts.py#L236-L243
43+ body = self .create_alert_body (matches )
44+
45+ # http://qydev.weixin.qq.com/wiki/index.php?title=AccessToken
46+ self .get_token ()
47+
48+ print self .access_token
49+ #print self.expires_in
50+
51+ self .senddata (body )
52+ elastalert_logger .info ("发送消息给 %s" % (self .corp_id ))
53+
54+ def get_token (self ):
55+
56+ #if self.expires_in >= datetime.datetime.now() and not self.access_token:
57+ # return self.access_token
58+
59+ #构建获取token的url
60+ get_token_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + self .corp_id + '&corpsecret=' + self .secret
61+
62+ try :
63+ token_file = urllib2 .urlopen (get_token_url )
64+ except urllib2 .HTTPError as e :
65+ print e .code
66+ print e .read ().decode ("utf8" )
67+ sys .exit ()
68+
69+ token_data = token_file .read ().decode ('utf-8' )
70+ token_json = json .loads (token_data )
71+ token_json .keys ()
72+
73+ #获取access_token和expires_in
74+ self .access_token = token_json ['access_token' ]
75+ #self.expires_in = datetime.datetime.now() + datetime.timedelta(seconds=token_json['expires_in'])
76+
77+ return self .access_token
78+
79+ def senddata (self , content ):
80+ send_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + self .access_token
81+ send_values = {
82+ "totag" :self .tag_id ,
83+ "touser" :self .user_d ,
84+ "toparty" : self .party_id ,
85+ "msgtype" :"text" ,
86+ "agentid" :self .agent_id ,
87+ "text" :{
88+ "content" :content
89+ },
90+ "safe" :"0"
91+ }
92+
93+ send_data = json .dumps (send_values , ensure_ascii = False )
94+
95+ send_request = urllib2 .Request (send_url , send_data )
96+
97+ response = json .loads (urllib2 .urlopen (send_request ).read ())
98+
99+ print str (response )
100+
101+ def get_info (self ):
102+ return {'type' : 'WeChatAlerter' }
0 commit comments