背景介绍:小程序已经上线三个月了,发送订阅消息的云函数是在其它云函数内采用cloud.callFunction调用功能来触发的。
有90%以上的用户接收不到订阅消息。
我同事们的手机,经过我确认,已经授权,并且多次授权。有的可以接收到,有的接收不到。
请问这种BUG怎么排查?
另外,发送订阅消息的云函数报以下错误,看不出来所以然:
[这里是正常的日志...]
{"traceId":"86ea4f96fca24a63a90d506bcc25396c","functionName":"sendMsg","childOf":"","errorMessage":"","errorCode":"","source":"server-sdk","invoker":"administrator","ua":"tcb-node-sdk/2.4.7","invokerIp":"9.193.48.125","spanId":"b917805c66db2ee3","service":"function","startTime":"1642144193175","endTime":"1642144196783","event":"InvokeFunction","timeCost":"3608","seqId":"1642144197878_0.5277659077549728_16841746-17e576bda87_4"}
REPORT RequestId:f890700e-7508-11ec-abeb-52540048fc82 Duration:2911ms Memory:256MB MemUsage:104.827232MB
END
以上
----------------------------------------分隔线----------------------------------------
经过郑旭东提醒,改成延时调用发送订阅消息的云函数,上面的红色字体报错消息没有了。
不过,多次授权的还是会接收不到消息,报43101错误,不知道问题出在哪里...
把代码付上:
const tasks = []
for (saler of salerList) {
const promise = new Promise((resolve,reject)=>{
const _saler = {
salerID: saler._id,
nickName: saler.nickName,
_openid: saler._openid
}
cloud.openapi.subscribeMessage.send({
"touser": _saler._openid,
"page": '...',
"lang": 'zh_CN',
"templateId": '...',
"miniprogramState": 'formal',
"data": {
...
}
}).then(res=>{
resolve(Object.assign({},res,_saler))
}).catch(err=>{
resolve(Object.assign({},err,_saler))
})
})
tasks.push(promise)
}
// 等待所有任务执行完成
await Promise.all(tasks).then(async(res) => {
console.log("发送完成", res.length)
const successList = res.map((saler)=>saler.errCode === 0 ? saler.salerID : null).filter((salerID)=> salerID !== null)
const refuseList = res.map((saler)=>saler.errCode === 43101 ? saler.salerID : null).filter((salerID)=> salerID !== null)
console.log("发送成功:", successList.length)
console.log("发送失败[拒绝接收]:", refuseList.length)
//提取发送成功的saler._id用于数据库更新
await db.collection('saler').where({
_id: _.in(successList)
}).update({
data: {
"accecpNoticeNum": _.inc(-1)
}
})
}).catch(function(err) {
console.log("Promise.all err", err)
})
以上
谁能帮帮我!!!
cloud.callFunction前面写await了吗?
cloud.openapi.subscribeMessage.send函数是使用await调用的
不过,多次授权的还是会接收不到消息,报43101错误,不知道问题出在哪里...