'use strict'; const uniPush = uniCloud.getPushManager({ appId: "__UNI__95F809F" }); const db = uniCloud.database(); const pushLogCollection = db.collection('push_logs'); // 假设存在 push_logs 集合用于记录推送日志 // 验证设备 ID 是否有效 const isValidDeviceId = (deviceId) => { return typeof deviceId ==='string' && deviceId.trim()!== ''; }; exports.main = async (event) => { try { let obj = JSON.parse(event.body); // 检查发送者和接收者信息 if (!obj.senderId ||!obj.receiverId) { const errorMsg = '缺少发送者或接收者信息'; // 记录错误日志 await pushLogCollection.add({ senderId: obj.senderId, receiverId: obj.receiverId, title: obj.title, content: obj.content, status: 'failed', errorCode: 400, errorMsg: errorMsg, timestamp: new Date(), requestBody: obj }); return { code: 400, msg: errorMsg }; } // 如果 category 不是对象,将其移除 if (typeof obj.category!== 'object') { delete obj.category; } // 从数据库中获取接收者的设备标识 if (typeof obj.receiverId!== 'string' || obj.receiverId.trim() === '') { const errorMsg = '接收者 ID 无效'; // 记录错误日志 await pushLogCollection.add({ senderId: obj.senderId, receiverId: obj.receiverId, title: obj.title, content: obj.content, status: 'failed', errorCode: 400, errorMsg: errorMsg, timestamp: new Date(), requestBody: obj }); return { code: 400, msg: errorMsg }; } const receiverDevices = await db.collection('opendb-device') .where({ userId: obj.receiverId }) .get(); console.log('接收者 ID:', obj.receiverId); console.log('查询到的设备信息原始数据:', receiverDevices.data); // 打印原始数据 if (receiverDevices.data.length === 0) { const errorMsg = `未找到接收者(ID: ${obj.receiverId})的设备信息`; // 记录错误日志 await pushLogCollection.add({ senderId: obj.senderId, receiverId: obj.receiverId, title: obj.title, content: obj.content, status: 'failed', errorCode: 404, errorMsg: errorMsg, timestamp: new Date(), requestBody: obj }); return { code: 404, msg: errorMsg }; } const pushClientIds = "设备id"; // console.log(pushClientIds); const validDeviceIds = ["设备id"]; validDeviceIds.push(); const invalidDeviceIds = []; if (validDeviceIds.length === 0) { const errorMsg = `接收者(ID: ${obj.receiverId})的所有设备 ID 均无效,无效的 ID 包括: ${invalidDeviceIds.join(', ')}`; // 记录错误日志 await pushLogCollection.add({ senderId: obj.senderId, receiverId: obj.receiverId, title: obj.title, content: obj.content, status: 'failed', errorCode: 400, errorMsg: errorMsg, timestamp: new Date(), requestBody: obj }); return { code: 400, msg: errorMsg }; } const res = await uniPush.sendMessage({ "push_clientid": validDeviceIds, "title": obj.title, "content": obj.content, "payload": obj.payload, "force_notification": true, "request_id": obj.request_id, "options": obj.options }); // 记录成功日志 await pushLogCollection.add({ senderId: obj.senderId, receiverId: obj.receiverId, title: obj.title, content: obj.content, status:'success', pushResult: res, timestamp: new Date(), requestBody: obj }); return { code: 200, msg: '消息推送成功', data: res }; } catch (error) { console.error('消息推送出错:', error); // 记录异常错误日志 await pushLogCollection.add({ senderId: event.senderId, receiverId: event.receiverId, title: event.title, content: event.content, status: 'failed', errorCode: 500, errorMsg: '消息推送失败', errorDetail: error.message, timestamp: new Date(), requestBody: event.body }); return { code: 500, msg: '消息推送失败', error: error.message }; } };