uni-app 云函数发送微信订阅消息推送问题:本地正常,上传到服务器经常延迟发送,或者根本不发送

uni-app 云函数发送微信订阅消息推送问题:本地正常,上传到服务器经常延迟发送,或者根本不发送

产品分类:uniCloud/App

示例代码:

for (let i in allUsers.data) {  
    const u = allUsers.data[i]  
    // H5 message  
    if (u.openid_h5) {  
         uniCloud.callFunction({  
            name: 'wechatApi',  
            data: {  
                method: 'sendH5Message',  
                touser: u.openid_h5,  
                template_id: "KYGcv2CretocZZilPFSkG6Rz9iUA72KLv-Y5ql7D3QU",  
                page: 'pages/manage/manageControl/appointByAdmin',  
                data: {  
                    thing3: {  
                        value: event.meetingName  
                    },  
                    time2: {  
                        value: event.datetime + ' ' + event.startTime  
                    },  
                    thing4: {  
                        value: event.appointer || ''  
                    },  
                    thing1: {  
                        value: event.title || ''  
                    }  
                }  
            }  
        })  
    }   
}

操作步骤:

  • 云函数本地运行-正常发送
  • 云函数上传到服务器-延迟发送或者不发送

预期结果:

  • 正常发送

实际结果:

  • 延迟发送或者不发送

bug描述:

云函数发送微信订阅消息推送,本地调试正常发送,云函数上传到云服务器经常延迟发送,或者根本不发送,请教官方大大!


更多关于uni-app 云函数发送微信订阅消息推送问题:本地正常,上传到服务器经常延迟发送,或者根本不发送的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

uniCloud.callFunction 的前面要加 await

更多关于uni-app 云函数发送微信订阅消息推送问题:本地正常,上传到服务器经常延迟发送,或者根本不发送的实战教程也可以访问 https://www.itying.com/category-93-b0.html


加了await还是一样,要么没有,要么延迟很多

回复 seeking: 在云函数里, 所有异步操作都要加await, 比如调用云函数, 查询数据库等等

回复 DCloud_uniCloud_VK: 好了,感谢

来大佬啊

在处理uni-app云函数发送微信订阅消息推送问题时,确实可能会遇到本地测试正常,但上传到服务器后出现延迟发送或根本不发送的情况。这通常与服务器环境配置、云函数执行效率以及微信服务器响应等因素有关。以下是一个简化的代码案例和可能的排查方向,帮助你更好地理解和解决问题。

代码案例

首先,确保你的uni-app项目中已经正确配置了云函数,并且已经在微信公众平台上获取了订阅消息的模板ID和用户订阅权限。

// 云函数入口文件 index.js
const cloud = require('wx-server-sdk');

cloud.init();
const db = cloud.database();
const _ = db.command;

exports.main = async (event, context) => {
  const { OPENID, TEMPLATE_ID, PAGE, DATA } = event;

  try {
    const result = await cloud.openapi.subscribeMessage.send({
      touser: OPENID,
      template_id: TEMPLATE_ID,
      page: PAGE,
      data: DATA,
    });

    return {
      success: true,
      result: result,
    };
  } catch (error) {
    console.error('Send subscribe message failed:', error);
    return {
      success: false,
      error: error.message,
    };
  }
};

排查方向

  1. 检查云函数日志

    • 登录到云开发控制台,查看云函数的执行日志,检查是否有错误信息或警告。
  2. 服务器网络状况

    • 确保服务器网络稳定,且与微信服务器之间的通信没有被防火墙或代理服务器阻断。
  3. 云函数配置

    • 检查云函数的内存和超时设置,确保它们足够处理发送订阅消息的任务。
  4. 微信API调用限制

    • 检查是否达到了微信API的调用频率限制,或者是否因为其他原因(如IP被封禁)导致API调用失败。
  5. 异步处理

    • 如果云函数处理其他任务的同时发送订阅消息,考虑使用异步处理或消息队列来优化性能。
  6. 重试机制

    • 实现重试机制,当发送失败时,根据错误码判断是否可以进行重试。

示例:重试机制

const MAX_RETRIES = 3;
let attempt = 0;

function sendMessageWithRetry(event) {
  return sendMessage(event).catch(error => {
    attempt++;
    if (attempt < MAX_RETRIES) {
      console.warn(`Retrying send message (${attempt}/${MAX_RETRIES})...`);
      return sendMessageWithRetry(event);
    } else {
      throw error;
    }
  });
}

// 在exports.main中调用sendMessageWithRetry(event)

通过上述代码和排查方向,你应该能够更准确地定位问题所在,并采取相应措施解决uni-app云函数发送微信订阅消息推送的问题。

回到顶部