怎么通过微信企业号 实时定位发送实时报警信息

【全网首发】zabbix如何实现微信报警
时间: 00:44:53
&&&& 阅读:23197
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&& & & 现实生产环境中,我们通常使用邮件和短信接受zabbix报警信息,但是邮件经常被工作人员搁置在角落中甚至被设置为垃圾邮件被过滤掉。公司的短信接口又太贵,复杂环境中使用短息报警会使运维成本增加很多。微信提供了很好的第三方接口,我们可以利用微信报警以求降低运维成本。& & & &微信的第三方接口要求我们先申请一个企业号——传送门:如何操作企业号?& & & &&1.通讯录添加企业成员& & & & & &我们要提前把成员信息添加进组织部门,必填项+手机号或者微信号,这样别人扫描二维码的时候才能成功关注企业号。& & & & & &注意:这里有两个我们要用到信息,一个组织部门的ID,一个部门成员的账号(账号是自己手动指定的,不同于微信号,最好是字母加数字)2.应用中心创建应用& & & & & &我们要在这里创建应用,因为要通过应用发送消息给部门成员& & & & & &注意:这里要记住一个值,应用ID3.给部门设置管理员& & & & & 设置---&功能设置----&权限管理----&新建管理组& & & & & 管理员必须事先已经关注了企业号,并且已经设置好邮箱地址& & & & &确定管理员可以读取通讯录,可以使用应用发消息。& & & & &注意:我们需要管理员的CorpID和Secret我们要准备这些东西:& & 一个微信企业号& & 企业号已经被部门成员关注& & 企业号里有一个可以发消息的应用& & 一个授权管理员,可以使用该应用给成员发消息我们要取到这些信息:& & 成员账号& & 组织部门ID& & 应用ID& & CropID& & Secret如何调用微信接口?& & & &调用微信接口需要一个调用接口的凭证:access_token& & & &通过 :CropID 、Secret&&才能获取到access_token,但是获取到的token有效期为两分钟& & & & 微信企业号接口调试工具传送门: Shell脚本原理& & & & 使用:& & & & curl -s -G &url & & & & & 获取 AccessToken& & & & 使用:& & & & curl --data &url & & 传送凭证调用企业号接口& & & & zabbix会传递三个参数给脚本,$1是消息接收账号,$2报警标题,$3报警内容#!/bin/bash
###SCRIPT_NAME:weixin.sh###
###send&message&from&weixin&for&zabbix&monitor###
###wuhf###
CropID=‘xxxxxx‘
Secret=‘xxxxxx‘
GURL="https://qyapi./cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"&
Gtoken=$(/usr/bin/curl&-s&-G&$GURL&|&awk&-F\"&‘{print&$4}‘)
PURL="https://qyapi./cgi-bin/message/send?access_token=$Gtoken"
function&body()&{
&&&&&&&&local&int&AppID=3&&&&&&&&&&&&&&&&&&&&&&&&企业号中的应用id
&&&&&&&&local&UserID=$1&&&&&&&&&&&&&&&&&&&&&&&&&&部门成员id,zabbix中定义的微信接收者
&&&&&&&&local&PartyID=1&&&&&&&&&&&&&&&&&&&&&&&&&&部门id,定义了范围,组内成员都可接收到消息
&&&&&&&&local&Msg=$(echo&"$@"&|&cut&-d"&"&-f3-)&&过滤出zabbix中传递的第三个参数
&&&&&&&&printf&‘{\n‘
&&&&&&&&printf&‘\t"touser":&"‘"$User"\"",\n"
&&&&&&&&printf&‘\t"toparty":&"‘"$PartyID"\"",\n"
&&&&&&&&printf&‘\t"msgtype":&"text",\n‘
&&&&&&&&printf&‘\t"agentid":&"‘"&$AppID&"\"",\n"
&&&&&&&&printf&‘\t"text":&{\n‘
&&&&&&&&printf&‘\t\t"content":&"‘"$Msg"\""\n"
&&&&&&&&printf&‘\t},\n‘
&&&&&&&&printf&‘\t"safe":"0"\n‘
&&&&&&&&printf&‘}\n‘
/usr/bin/curl&--data-ascii&"$(body&$1&$2&$3)"&$PURL为什么要这样写脚本?& & & 因为微信企业号开放的端口有固定的格式限制& & & 企业号支持的格式: 将脚本放入zabbix默认执行路径下mv&weixin.sh&/usr/local/zabbix/share/zabbix/alertscripts
chown&zabbix.zabbix&/usr/local/zabbix/share/zabbix/alertscripts/weixin.sh
chmod&+x&/usr/local/zabbix/share/zabbix/alertscripts/weixin.sh& & & & 服务器端& & & &1.创建媒介& & & & 2.创建用户& & & & 3.创建触发器动作发送内容& & & & 4.设置触发器动作发送方式收到的微信消息:& & & & 稍后附上python脚本。&本文出自 “” 博客,请务必保留此出处标签:&&&&&&&&&&&&
&&国之画&&&& &&&&chrome插件
版权所有 京ICP备号-2
迷上了代码!如何用手机管理微信公众号,查看并回复公众号用户发来的信息? - 知乎96被浏览51594分享邀请回答02 条评论分享收藏感谢收起/?p=16,请勿擅自转载。大家都知道微信公众平台目前只能够在web页面上管理,微信公众号运营人员要查看留言每次必须登录微信公众平台,很不便捷。微信官方有个“公众号安全助手”只能起到保障公众号安全的作用,除此之外不提供任何辅助功能。现在就手把手教你开发一个微信公众号助手,实现在微信中查看公众号粉丝留言的功能。先上截图:先简单讲解一下实现方法:将粉丝留言、留言者的openid以及留言时间存入数据库。在微信中回复后台设置的关键字,如”check”从数据库中查询留言并回复展示。回复”clear”设置为已读,再查询时将不再显示,但仍然存储在数据库中。下面开始介绍开发教程:如果你还没有成为微信开发者,先参考,开启开发者模式假如你已经是微信开发者,请继续阅读教程:1.首先点击下载代码包:解压后有三个文件:wx_interface.php,func_comment.php和wx_tpl.php2.用wx_interface.php中的代码替换掉你服务器微信接口文件中的代码段。如果微信接口文件中已经实现其它功能,为不影响这部分功能的使用,务必先将原有的微信接口文件备份。待微信公众号助手调试完毕后再添加回来。将func_comment.php和wx_tpl.php两个文件上传至服务器根目录下3.在微信公众号中发送openid,系统回复的字符串就是你的微信号和此公众号间唯一的openid4.创建数据库如果你使用新浪SAE,登陆进入应用管理界面后按照下图操作进入MySQL管理进入数据库管理页面后点击SQL标签,复制下面的sql语句将中文部分换为你的数据库名。点击执行后如创建comment表成功就大功告成了!CREATE TABLE `这里换成你的数据库名称`.`comment` (
`openid` CHAR( 50 ) NOT NULL ,
`text` VARCHAR( 255 ) NOT NULL ,
`dateTime` INT NOT NULL ,
`sign` BOOLEAN NOT NULL
) ENGINE = MYISAM ;
comment的表结构:comment的表结构:183 条评论分享收藏感谢收起更多2 个回答被折叠()最近放假闲着无聊,研究了一下微信企业号, 打算通过企业号做一个运维报警信息发送的功能,记录自己的操作 &
注册企业号,网上一搜一大把的教程,这里略过 &微信企业号登录地址 &https://qy./
第二步 &登录后 点左侧 应用中心 -新建应用 &
第三步 &在第二步第一图中的自建应用下面找到刚刚新建的应用 拉到最下面有一个模式选择,点击回调模式 会看到下图界面
Token 和EncodingAESKey 点击随机获取即可,上面的url需要你有自己的服务地址 &你的服务接口需要跟据微信规则对请求信息加解密,然后返回一个明文字符串,后面会上代码 & url先留空,等下服务弄好再回来填写 & &,此时微信端就设置完成 &页面不要关闭 &
第四步 &先上验证url代码 &python版本实现 &本人是java程序员,用python来搞这个也是一时兴趣,用起来到是比java方便些
# -*- coding:utf-8 -*-
from SimpleHTTPServer
import SimpleHTTPRequestHandler
import httpserver
from SocketServer
import ThreadingMixIn
from SocketServer
import ThreadingTCPServer
import SocketServer
from SocketServer
import BaseRequestHandler
import urlparse
from WXBizMsgCrypt import WXBizMsgCrypt
import xml.etree.cElementTree as ET
hostIP = ''
portNum = 8080
serverMessage = "msg_signature"
sToken = "第三步中的token"
sEncodingAESKey = "第三步中的EncodingAESKey"
sCorpID = "这个是你的企业id 在企业号主页面设置中账号信息里有"
class mySoapServer(SimpleHTTPRequestHandler ):
def do_head(self):
def do_GET(self):
if self.path.find(serverMessage) == -1:
self.send_error(404, message=None)
# 解析请求
result = urlparse.urlparse(self.path)
params = urlparse.parse_qs(result.query,True)
print params
sVerifyMsgSig = params['msg_signature'][0]
sVerifyTimeStamp =params['timestamp'][0]
sVerifyNonce =params['nonce'][0]
sVerifyEchoStr =
params['echostr'][0]
wxcpt = WXBizMsgCrypt(sToken, sEncodingAESKey, sCorpID)
ret, sEchoStr = wxcpt.VerifyURL(sVerifyMsgSig, sVerifyTimeStamp, sVerifyNonce, sVerifyEchoStr)
print "ret=",ret
self.send_response(200, message=None)
self.send_header('Content-type', 'text/html')
self.end_headers()
if ret == 0:
res = sEchoStr.decode("utf8")
res = "%s" % ret
self.wfile.write(res.encode(encoding='utf_8', errors='strict'))
except IOError:
self.send_error(404, message=None)
def GetQuery(str):
params = str[str.index("?") + 1:]
parsed_result = {}
list = [param for param in params.split('&')]
for item in list:
if item.find("=") & -1:
name = item[:item.index("=")]
value = urlparse.urlparse(item[item.index("=") + 1:])
name = item
value = ""
if name in parsed_result:
parsed_result[name].append(value)
parsed_result[name] = [value]
return parsed_result
class ThreadingHttpServer(ThreadingMixIn, ThreadingTCPServer):
myServer = ThreadingHttpServer((hostIP, portNum), mySoapServer)
print("Server Started ....")
myServer.serve_forever()
myServer.server_close()
把上面代码保存为server.py & & 把代码中的&sToken ,sEncodingAESKey&sCorpID 换成你自己的,其它不用动 &
在服务器上运行
python server.py
& 建议使用python2.6.*版本 &其它版本未测试 不保证运行正常 &
其中 WXBizMsgCrypt包为微信提供 下载地址 http://qydev./download/python.zip此包依赖 pycrypto第三方库 请自行google安装
&第五步 & 返回第三步中填写url & & & http://你的ip:8080 &点击验证 &不出意外验证通过
当然,本人python小白到是出了很多意外,坑还比较多, 不过做的过程没有记录问题,只记下了最终正确的过程
&第六步 &上面过程验证通过后创建一个管理组,这里貌似至少有两个人关注公众号,因为管理组要求至少有一个非企业号创建人
添加好后应该就会拿到CorpID 和 Secret &这两个记录下来,之后发消息需要
第七步 发送消息 &上代码
#!/usr/bin/python
# encoding: utf-8
# -*- coding: utf8 -*-
import urllib
import urllib2
import json
import datetime
class WeiXinSendMsgClass(object):
def __init__(self):
self.access_token = get_token()
self.to_user = ""
self.to_party = ""
self.to_tag = "<span style="color: #"
self.msg_type = "text"
self.agent_id = 1
self.content = ""
self.safe = 0
self.data = {
"touser": self.to_user,
"toparty": self.to_party,
"totag": self.to_tag,
"msgtype": self.msg_type,
"agentid": self.agent_id,
"content": self.content
"safe": self.safe
def send(self, to_user, content):
if to_user is not None and content is not None:
self.data['touser'] = to_user
self.data['text']['content'] = content
raise RuntimeError
import requests
import json
url = "https://qyapi./cgi-bin/message/send"
querystring = {"access_token": self.access_token}
payload = json.dumps(self.data, encoding='utf-8', ensure_ascii=False)
headers = {
'content-type': "application/json",
'cache-control': "no-cache",
response = requests.request("POST", url, verify=False,data=payload, headers=headers, params=querystring)
return_content = json.loads(response.content)
if return_content["errcode"] == 0 and return_content["errmsg"] == "ok":
print "Send successfully! %s " % return_content
print "Send failed! %s " % return_content
def get_token():
parameters = {
"corpid": "上一步中记录的CorpID",
"corpsecret": "上一步记录的Secret"
url_parameters = urllib.urlencode(parameters)
token_url = "https://qyapi./cgi-bin/gettoken?"
url = token_url + url_parameters
response = urllib2.urlopen(url)
result = response.read()
token_json = json.loads(result)
token_json = token_json['access_token']
token_json
上面代码只需要把&corpid 和&corpsecret 换成自己的就可以了 & 保存为wx_sendMessage.py &
然后就可以在你需要发送消息的地方调用 啦 &&
# -*- coding:utf-8 -*-
import wx_sendMessage
msg = wx_sendMessage.WeiXinSendMsgClass()
msg.send("目标用户账号", "这里是发送的消息")
大功告成,到此为止已经可以完成对某一个关注企业号的用户发送消息啦,可是还不够,群发是必须滴
群组发送的话就再扩展一下send方法 &再加一个参数totag &就是标签id
可以在通讯录新建标签,然后把相应的人员加进去 & &见下图 & 右侧标签id就是需要传的参数值
修改如下,前后代码省略
def send(self, to_user, totag,content):
if to_user is not None and content is not None:
self.data['touser'] = to_user
self.data['totag'] = totag
self.data['text']['content'] = content
raise RuntimeError
好啦,这篇文章到这里就结束 了,如果有同学们正好也在做着跟我同样的事情并且看到我这篇文章的话,有不明白的话可以在文章下面留言,本人看到的话会及时回复的!!!
阅读(...) 评论()问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
最近,我的微信公众接口偶尔发出超时报警。
内容:微信服务器连接公众号开发者服务器时发生超时,超时时间为5秒。
次数:5分钟42次。
猜测主要原因是受一个菜单功能影响。该菜单的功能是:获取一张即使生成的图片。
这个功能的实现过程是:把一个动态web页绘制成一张图片,生成保存,然后上传到微信服务器,再返回给用户,其中绘制图片的过程比较消耗性能,在多个用户频繁使用该功能的时候,可能会导致超时...
请问从程序开发的方面出发,我应该如何着手优化系统,解决这个问题? 谢谢各位提供些建议~
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
失败后微信服务器会再重复请求2次,你可以通过msgid返回相应的内容。不一定要第一次就返回,
若是认证服务号,可以用高级接口主动发送消息给用户。
若你都觉得麻烦,可以返回URL给用户让其点击查看。
同步到新浪微博
分享到微博?
Hi,欢迎来到 SegmentFault 技术社区!⊙▽⊙ 在这里,你可以提出编程相关的疑惑,关注感兴趣的问题,对认可的回答投赞同票;大家会帮你解决编程的问题,和你探讨技术更新,为你的回答投上赞同票。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
扫扫下载 App

我要回帖

更多关于 微信企业号 发送信息 的文章

 

随机推荐