本站文章一览:

python 微信公众号自定义菜单 python 微信公众号文章_python


本文主要讨论下我在公众号开发过程中遇到的问题,给大家避个坑。


文章目录

  • 0. 背景
  • 1. 避坑
  • 1.1 限制
  • 1.2 我的问题
  • 1.3 网上的解决方案
  • 1.3.1 将超时时间增加到15s
  • 1.3.2 处理完后主动给用户发信息
  • 2. 结论


0. 背景

前一段时间,我折腾过 微信公众号 的开发,成功将 ChatGPT 接入了微信公众号。但那只是实现了与 ChatGPT 的简单对话,并没有实际用途。


而随着这段时间学习AI大模型应用开发,萌生了在微信上搞点真正有用的东西给大家参考的想法。于是今天想重启下微信公众号开发。

不幸的是,遇到了无法解决的问题,在本文中写出来,供大家避坑。

当然,我的微信公众号是 个人订阅号,如果是企业订阅号或服务号需要大家自行甄别。

1. 避坑

1.1 限制

  1. 个人订阅号, 接口权限不足,无法主动给用户发消息(客服接口),只能被动回复用户的消息。也就是说,用户在公众号界面给你发了一条消息,你才能给一条回复。

python 微信公众号自定义菜单 python 微信公众号文章_微信_02

  1. 而且,对于自建的服务来说,你只有5s的时间去回复消息。超过5s,微信服务器会重新发起请求,重试2次,一共是3次请求。如果每次请求5s内都没有给回复,那就算应答失败,服务即使在第6s给了回复,用户不会收到任何回复。

python 微信公众号自定义菜单 python 微信公众号文章_经验分享_03

1.2 我的问题

我想在微信公众号自建服务上接通 ChatGPT(已完成),但是想在此基础上,做些其它功能,例如总结一段文字内容,很容易超出5s需要回复的限制。

1.3 网上的解决方案

搜了网上的解决方案,大体都差不多,总结下来,有以下几种。

1.3.1 将超时时间增加到15s

这种方式不用额外的接口调用。

实现思路是:因为微信服务会发3次请求,每5s一次,那就在第一次请求时记录请求ID(这个ID在重试时是不变的),然后将请求转到另外的线程去处理。

如果在5s内该消息处理完了,直接返回。如果处理不完,5s超时,微信服务会来第二次重试请求,或者第三次重试请求。在每一次重试时查看这个消息ID是否处理完成,处理完成就直接返回。

这样,我们就将5s超时增加到了15s才超时。

但是这种方法还是有弊端的,也无法完全保证用户的请求能在15s内处理完,尤其是在AI应用中。

1.3.2 处理完后主动给用户发信息

这种方式的处理思路是:接收到请求后,将请求转到其它线程去处理,然后本次请求直接返回 sucess。这样,微信服务不会重试请求。

当其它线程处理完消息后,主动调用接口给用户发消息。

这种方式没有超时的限制,但是需要有接口权限。很遗憾,个人订阅号没有此权限。


2. 结论

最终结论就是,个人订阅号开发限制太多,权限太低,自己玩玩儿可以,但想实现一些有用的功能,还是比较困难。