user-push-voice-app-integration.md 3.9 KB

用户 App 推送语音:前端接入说明

日期: 2026-10-09 一句话: 用户订单推送的 payload 里新增了 eventScene 字段,App 在前台收到通知时按这个字段播一句短语音。


1. 从哪里读

通道 读哪里
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 判断场景(历史含义不统一)。

2. eventScene 对应表

按 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 ยกเลิกออเดอร์ของคุณแล้ว

3. 播放逻辑(示例)

// 收到通知回调里(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();
}

多笔订单连续通知时用一个播放器排队串行播,不要叠音。

4. 规则(就这几条)

  1. 只在前台播;后台/锁屏走系统通知原样,不播语音。
  2. 没有 eventScene 不播(旧通知都这样),JSON 解析失败也不播、不崩溃。
  3. 只播一次:点击通知、打开消息列表、恢复 App 都不补播。
  4. 音频只用 App 内本地文件,不播订单号等额外信息;播放失败就只留文字。

5. 点击跳转

pushType 跳转
1 外卖订单详情
2 充值/钱包页
3 闪送订单详情(闪送单号别调外卖查询接口)

联调备注: 后端字段已实现但未部署;uniPush 通道如果真机上收不到 eventScene,反馈后端排查,不要自行改云函数。详细规则见 specs/035-user-notification-voice/frontend-integration.md。