日期: 2026-10-09
一句话: 用户订单推送的 payload 里新增了 eventScene 字段,App 在前台收到通知时按这个字段播一句短语音。
| 通道 | 读哪里 |
|---|---|
| uniPush(当前在用) | 消息的 payload,可能是 JSON 字符串或对象 |
| FCM | data.payload(JSON 字符串) |
| APNs | userInfo.payload(JSON 字符串) |
payload 长这样:
{
"ddId": "DD1700000001",
"state": "1",
"type": -1,
"pushType": 1,
"eventScene": "RIDER_ACCEPTED"
}
| 字段 | 用途 |
|---|---|
ddId |
订单号 |
pushType |
点击跳转用:1 外卖、2 充值、3 闪送 |
eventScene |
本次新增,播语音只看它;没有这个字段就不播 |
不要用 state、type 判断场景(历史含义不统一)。
按 App 自己的语言设置选音频(payload 里没有语言字段)。音频自己录制,打进 App 包,每个场景一句短话。
| eventScene | 含义 | 简体中文 | 繁體中文 | English | ไทย |
|---|---|---|---|---|---|
RIDER_ACCEPTED |
骑手接单 | 骑手已接单 | 騎手已接單 | Rider accepted your order | ไรเดอร์รับออเดอร์แล้ว |
ORDER_DELIVERING |
开始配送 | 您的订单已派送 | 您的訂單已派送 | Your order is on the way | ออเดอร์ของคุณกำลังจัดส่ง |
ORDER_DELIVERED |
已送达 | 您的订单已送达 | 您的訂單已送達 | Your order has been delivered | จัดส่งออเดอร์ของคุณแล้ว |
MERCHANT_ACCEPTED |
商家接单 | 商家已接单 | 商家已接單 | The merchant accepted your order | ร้านค้ารับออเดอร์แล้ว |
MERCHANT_READY |
商家出餐 | 商家已出餐 | 商家已出餐 | Your order is ready | ร้านค้าเตรียมอาหารเสร็จแล้ว |
PAYMENT_SUCCEEDED |
支付成功 | 您的订单已支付 | 您的訂單已支付 | Payment successful | ชำระเงินสำเร็จ |
ORDER_CANCELLED |
订单取消 | 您的订单已取消 | 您的訂單已取消 | Your order has been cancelled | ยกเลิกออเดอร์ของคุณแล้ว |
// 收到通知回调里(uniPush 2.0 示例)
uni.onPushMessage((res) => {
if (res.type !== 'receive') return; // 点击通知不播
let p = res.data && res.data.payload;
if (typeof p === 'string') {
try { p = JSON.parse(p); } catch (e) { return; }
}
playVoice(p && p.eventScene);
});
function playVoice(scene) {
if (!scene || !isForeground() || !isLogin()) return; // 只在前台且已登录时播
const audio = uni.createInnerAudioContext();
audio.src = `/static/voice/${scene}_${uni.getLocale()}.mp3`; // 如 rider_accepted_zh-CN.mp3
audio.play();
}
多笔订单连续通知时用一个播放器排队串行播,不要叠音。
eventScene 不播(旧通知都这样),JSON 解析失败也不播、不崩溃。| pushType | 跳转 |
|---|---|
| 1 | 外卖订单详情 |
| 2 | 充值/钱包页 |
| 3 | 闪送订单详情(闪送单号别调外卖查询接口) |
联调备注: 后端字段已实现但未部署;uniPush 通道如果真机上收不到 eventScene,反馈后端排查,不要自行改云函数。详细规则见 specs/035-user-notification-voice/frontend-integration.md。