前言
事情是这样的,最近我有个想法,发一些通知或者任务给微信群,或者给人。主要是用来提醒和督促家里的孩子养成习惯,复习舞蹈动作等等,督促自己锻炼身体等等。说白了就是一些新闻提醒。然后每天都有一个总结,类似于打卡。当然,也有人说过,如果你设置一个闹钟,它就会解决。比如下午6点的闹钟提醒孩子该练习跳舞了。还有一系列功能非常完善的第三方应用。
以上方法我都试过了,都以失败告终。这些只是一个提醒,一个很轻的提醒,对于我的需要。闹钟太重,大多数情况下,没有必要指定时间点或完成。到了就可以提醒,提醒后偶尔可以看到。然后是三方应用或者系统应用提醒之类的应用,确实很完美,但是坚持使用新应用的成本还是很高的。持续两三天的情况很容易忍受,也有多人协作等各种问题。最后决定要驱动微信,把提醒任务一个一个地变成一个“人”,发到微信群或者个人的“微信消息”——程序员乐进
试一试文字:“微信机器人”
从副标题可以猜到我应该做了很多尝试。言归正传,我首先想到的是,前段时间,有很多人用自己的微信账号或者微信账号和群里的大家聊天互动,有问有答。每个人都可以和机器人一起玩,玩得开心。原理基本上就是破解网页版微信,网页版协议破解成本应该是最简单的。有一个比较流行的python开源库itchat,非常好用
自己动手吧,python环境我就不赘述了。 Python不是我的主要语言,但是这东西的语法太简单了,上手也很快。
详细步骤以代码为准(原文太拖入文章,单独拿出来): 程序员乐进:模拟登录网页版微信实现微信聊天机器人itchat-蟒蛇
我定义了4个私人定时任务,然后拉群把我老婆和自己的一个微信账号拉进群。 (为什么需要微信小号?上班的时候需要用微信账号登录电脑,这和机器人的需求冲突,机器人需要一直在网页上登录。电脑一登录,网页上的登录账号就会被挤掉。) 把调试好的代码放到云服务器上,用自己的微信账号临时运行一下,就完美运行了。很开心,老婆也很满意。该小工具大约需要一个下午 + 一个晚上。
那是时候目睹耳光了
在工作电脑上,关闭登录云服务器的个人微信,改账号登录云服务器。错误莫名其妙! !可以改号码吗?是什么原因?经过一番搜索和验证,我发现并不是所有的微信账号都可以登录网页版微信,而且微信的安全策略会屏蔽部分微信账号登录网页版微信。我的个人微信账号已经使用很久了,可以正常登录网页版微信。小号击中拦截策略。没办法,这毕竟是要破解的法律风险。落下! !
尝试2:微信机器人ipad协议
继续搜索发现,虽然web协议被限制了,但还是有“高手”破解了iPad上的微信协议(至少他们是这么说的)。他们都是提供服务的小公司,我想服务对象应该是灰色的。它们都是有偿服务。搜索并找出购买服务并自行开发的价格。一个微信账号每月对应200大洋代币。他当然有经验期和其他时间奖励。
没有必要为了解决我的需求而为这个服务花费200大洋,这个技术也是非法的。相信购买服务后使用起来会更方便,虽然不知道什么时候会被屏蔽或者作者进入。该计划已被放弃。
尝试3:借助企业微信群机器人
我工作的公司以前用钉钉,现在公司用企业微信交流(腾讯员工用企业微信工作不是废话吗)。对应的群有群机器人的概念,可以驱动机器人给群发消息,非常灵活。 (需要编码,成本低)
搜索相关知识,知道微信可以代他人接收企业微信消息。是不是突然有了想法?
已知:通过企业微信创建“公司”,0成本,合法。只需要一只手(你还需要一部手机和电脑)。
参考:程序员乐进:如何用企业微信创建企业号——做自己的“老板”
已知:微信可以代他人收集企业微信消息
参考:程序员乐进:如何通过微信接收企业微信消息
然后我们可以使用企业微信创建一个“公司”,让需要接收通知的微信账号加入公司(企业管理员邀请的微信账号无需下载企业微信即可完成加入公司)。然后企业微信管理员创建一个群,将需要接收通知的账号拉到群中。企业微信群发消息后,A员工的微信可以正常收到消息。
企业微信管理员加群机器人进群,获取webhook地址。 Python 可以定期请求 webhook 地址。核心代码如下:
import time
from apscheduler.schedulers.blocking import BlockingScheduler
from datetime import datetime
import requests
def sendToGroup():
url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx'
data = '''
{
"msgtype": "text",
"text": {
"content": "hello world"
}
}
'''
headers = {'content-type': 'application/json'}
r = requests.post(url, data=data, headers=headers)
print(r.json())
if __name__ == "__main__":
# BlockingScheduler
scheduler = BlockingScheduler()
scheduler.add_job(sendToGroup, 'interval', seconds=5)
# scheduler.add_job(sendToGroup, 'cron', day_of_week = '0-6',hour = 11,minute = 30 , second =0)
首先,每隔5秒执行一次sendToGroup(注意url换成自己的webhook url),企业微信群里的机器人正常发送hello world。完美,庆祝我有多聪明,哈哈。
那是时候目睹耳光了
等等,为什么微信无声? 不是,经过一番搜索验证,发现公司微信中机器人发送的内容在微信中收不到!
接下来我再次尝试使用群通知,但是微信中的消息不支持此类消息的显示。我该怎么办,真的没有办法吗?必须有方法,否则这里的文章就没有存在的意义。不穷了,终于可以见证奇迹了
借助企业微信应用消息成功满足需求的最终尝试
注意:此方案仅适用于向您的个人微信或家人朋友发送提醒,不适用于营销。您需要通过企业微信创建公司。详情请参考上面的尝试3:借助企业微信群机器人,如果需要让家人朋友也收到微信提醒,需要让家人朋友加入你新创建的公司。目前在企业微信上创建公司账号是免费的,即使您的公司目前正在使用企业微信办公。
浏览企业微信api时看到这样一种消息推送应用消息
API原始地址:work.weixin.qq.com/api/doc/90000/90135/90235
文中提到了一种消息:应用消息
通过这种类型的消息,服务器可以通过api调用向指定企业的用户发送短信、卡片等消息。企业内员工只能通过微信接收消息(“员工”号无需安装企业微信)。
别废话了:
第一步,企业管理员扫码登录,找到应用管理。如下图
快速导航地址:work.weixin.qq.com/wework_admin/frame#apps
上传logo,填写应用名称和介绍,创建应用
创建后
你会得到AgentId(这里不用输入,和app里的ID一样)
废话不多说,看文档&代码:
根据官网API:
接口定义
应用支持推送文本、图片、视频、文件、图形等类型。