问题模块 | 框架类型 | 问题类型 | 终端类型 | AppID | 基础库版本 |
---|---|---|---|---|---|
云开发 | 小程序 | Bug | 客户端 | 123123123 | 2.6.6 |
- 当前 Bug 的表现(可附上截图)
- 预期表现
能正常发布模版消息
- 描述
如果采用官方案例方式每个数据传入一个对象,提示第一个参数要是个可遍历对象,
传入数组则报图2
- 复现路径
本地调试调用
- 提供一个最简复现 Demo
/**
* @typedef { object } SendOptions
* @property { string } templateId 推送的模版id 【 必须 】
* @property { string[] } push_origin 要推送的收集来源 【 必须 】
* @property { Object } sendData 模板内容,不填则下发空模板。具体格式请参考示例。
* @property { string } emphasisKeyword 模板需要放大的关键词,不填则默认无放大
* @property { page } templateId 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。
*/
const cloud = require("wx-server-sdk");
cloud.init();
const db = cloud.database();
const _ = db.command;
/**
* 推送信息
* @param { SendOptions } options
*/
exports.main = async options => {
try {
const {
templateId,
page,
push_origin: PUSH_ORIGIN,
sendData,
emphasisKeyword
} = options;
if(!templateId || !PUSH_ORIGIN || !PUSH_ORIGIN.length ){
console.error('error data',options);
return;
}
const ONE_DAY_LENGTH = 24 * 60 * 60 * 1000;
const formIdListCollection = db.collection("formId_list");
const SEVEN_DAYS_AGO = Date.now() - 7 * ONE_DAY_LENGTH;
const sendOpenIdDoc = formIdListCollection
.where({
origin: _.in(PUSH_ORIGIN),
time: _.gt(SEVEN_DAYS_AGO)
});
const dataList = await sendOpenIdDoc.get();
// console.log('[ dataList ]',dataList.data);
// const tasks = Promise.all(
// dataList.data.map(data => {
// console.log({
// touser: data.openId,
// templateId,
// page,
// formId: data.formId,
// data: sendData,
// emphasisKeyword
// });
// return cloud.openapi.templateMessage
// .send({
// touser: data.openId,
// templateId,
// page,
// formId: data.formId,
// data: sendData,
// emphasisKeyword
// })
// .catch(e => {
// console.log(`[ ${data.openId} ]`, e);
// });
// })
// );
const sendArr = dataList.data.map(data=>({
touser: data.openId,
templateId,
page,
formId: data.formId,
data: sendData,
emphasisKeyword
}));
await cloud.openapi.templateMessage.send(sendArr);
// await Promise.all(tasks);
// 删除数据中已经使用过的内容
// await sendOpenIdDoc.remove();
await formIdListCollection.where({
time:_.lt(SEVEN_DAYS_AGO)
}).remove();
return {
code: 0,
msg: "success"
};
} catch (error) {
console.error(error);
}
};