码老 2025-11-14 14:38 采纳率: 100%
浏览 8
已结题

微信小程序开发中一次性订阅消息使用的问题

背景:
我们开发了一个微信小程序,小程序主要是自建的一套websocket即时通讯,包含小程序端和平台客服端(此次的客服不是微信小程序客服,是自建平台的客服,会有多个客服接入进来)

用户角色:
平台客服、用户

应用流程说明:
用户是通过其他平台引流扫码进入小程序的;
进入小程序后选择对应客服开始聊天;

由于引流和对用户的强提醒需求,我们的客户要求在用户离开小程序后,能够以订阅消息的方式收到来自平台客服发送的消息通知(多次的)
但是这个小程序是个人认证,只能使用“一次性订阅”的订阅消息,微信官网对于“一次性订阅”消息的使用限制是:只有用户授权同意接收通知,平台才能给用户发送消息,且只有一次发送机会,
具体可参考链接地址:

https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/mp-message-management/subscribe-message/sendMessage.html

在官网看到一句描述:

注意事项
用户勾选 “总是保持以上选择,不再询问” 之后,下次订阅调用 wx.requestSubscribeMessage 不会弹窗,保持之前的选择,修改选择需要打开小程序设置进行修改。

该如何利用这个特性实现“一次性订阅”消息通知能多次使用呢?

  • 写回答

1条回答 默认 最新

  • 紫雾凌寒 新星创作者: 人工智能技术领域 2025-11-14 14:44
    关注

    让 “紫雾凌寒” 来帮你回答,本回答结合 DeepSeek

    如果还有问题,请评论或点击头像私信,如果有帮助到您, 请关注、采纳、点赞

    关键点分析

    1. 微信小程序一次性订阅消息的使用场景限制及规则。
    2. 如何在自建websocket即时通讯的小程序中合理应用一次性订阅消息,同时要考虑与自建平台客服系统的交互。

    解决方案

    1. 了解微信小程序一次性订阅消息规则
      - 首先,开发者需要在微信公众平台申请订阅消息模板。
      - 一次性订阅消息适用于用户主动发起的特定场景,如支付完成、提交表单等之后触发的消息推送。
      - 在小程序端代码中,使用wx.requestSubscribeMessage API来发起一次性订阅消息请求。例如:
      javascript wx.requestSubscribeMessage({ tmplIds: ['TEMPLATE_ID'], success (res) { if (res['TEMPLATE_ID'] === 'accept') { console.log('用户同意订阅消息'); } }, fail (err) { console.log('订阅消息失败', err); } })
      这里的TEMPLATE_ID需要替换为实际申请到的订阅消息模板ID。
    2. 结合自建websocket即时通讯
      - 当用户与自建平台客服进行某些关键交互时,比如客服发送了重要通知等情况,可以在websocket消息处理逻辑中判断是否需要触发一次性订阅消息。
      - 假设websocket接收到客服发送的通知消息,在小程序端处理如下:
      javascript wx.connectSocket({ url: 'ws://your - server - address', success(res) { wx.onSocketMessage(function (event) { const data = JSON.parse(event.data); if (data.type === 'importantNotice') { wx.requestSubscribeMessage({ tmplIds: ['TEMPLATE_ID'], success (res) { if (res['TEMPLATE_ID'] === 'accept') { console.log('用户同意订阅消息'); } }, fail (err) { console.log('订阅消息失败', err); } }) } }) } })
    3. 与自建平台客服系统交互
      - 自建平台客服系统需要记录用户是否订阅了一次性消息。当客服发送相关通知时,可以根据用户的订阅状态来决定是否触发订阅请求。
      - 例如,客服系统在发送通知前查询用户的订阅状态表:
      sql SELECT is_subscribed FROM user_subscription WHERE user_id =? AND template_id =?;
      如果查询结果为未订阅,则通知小程序端触发订阅请求。

    多种方案优缺点

    1. 直接在关键websocket交互处触发订阅
      - 优点:简单直接,能够及时响应关键交互,确保用户不会错过重要通知的订阅机会。
      - 缺点:如果频繁触发订阅,可能会引起用户反感。
    2. 在客服系统中汇总通知,定期批量触发订阅
      - 优点:减少对用户的打扰,提高用户体验。
      - 缺点:可能会导致用户错过一些即时性的重要通知订阅。

    总结

    在微信小程序开发中使用一次性订阅消息,关键在于了解规则并结合自建系统的业务逻辑。通过合理触发订阅请求,既能满足业务需求,又能尽量优化用户体验。同时,要注意与自建平台客服系统的协同工作,确保消息推送和订阅状态的准确记录与处理。

    希望以上解答对您有所帮助。如果您有任何疑问,欢迎在评论区提出。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月22日
  • 已采纳回答 11月14日
  • 创建了问题 11月14日