通知设备加入/退出对讲房间(ptt deliver join/kick)

验证状态:存在关键缺口,不可作为完整契约发布。Web 发布链已源码核验;设备是最终消费者,其固件源码不在本工作区,join/kick 的接收与执行语义缺证。 适用基线:源码归纳 @ 2026-09-14

用途与场景

把"加入某对讲房间(join)"或"退出某对讲房间(kick)"的一次性命令经 MQTT 直接投递到指定记录仪。本页是 mqtt-usetalkgroupdevicedelivercommand-device-var-ptt-deliver-v1-d56b704a 的唯一操作正本,覆盖 device/{deviceNo}/ptt/deliver/v1 上 Web 发出的 join/kick 形态。同一 topic 还承载中心配置投递(pushPttConfig 正本 的内部链,{id,status,replyNumber,data} 应答信封),两者形态不同、互为独立操作。

使用位置

页面/功能 角色或空间分支
对讲房间页的设备 join/kick 命令挂载点 登录用户;需 MQTT 已连接
成员列表/临时设备选择器消费该命令 同上

端点

MQTT 发布 device/{deviceNo}/ptt/deliver/v1(Web → Broker → 设备直发,中心网关不消费;QoS/retain 等 wire 细节见业务页)— 把一次性 join/kick 命令直接投递到指定记录仪。

ptt 通道的机器全量清单(静态 topic 与谓词族)见 MQTT 主题清单;本 topic 属中心不消费的接入面的 Web 直发形状,不在中心消费/发布点清单内(网关默认订阅清单无 device/+/ptt/#,见服务端订阅面)。join/kick 载荷形态与字段约束见基础数据业务 · talk-group 对讲组的 ptt-deliver-payload 小节。

动线与完成判据

层级 判据
发布完成 publishAsync Promise 成功;失败抛固定文案 Talkgroup join/kick request publish failed.
设备接收/执行 不可观测:无应答机制、无重试;是否入房/退房只能经房间成员列表或设备行为间接判断
业务效果 join 后设备应作为参与者出现在房间(events 正本 / listparticipants 正本)——该因果链未联调证实

错误与边界

  • 发送前 Web 本地校验(wire 约束):talkGroupId 须满足 ^[A-Za-z0-9_-]{1,32}$roomPin 须满足 ^[A-Za-z0-9_-]{4,32}$deviceNo 不得含 MQTT 通配符(/ + #)或 NUL、clientId 非空;校验失败抛固定文案错误(不回显 PIN)。
  • MQTT 未连接 → 同步抛 Talkgroup join/kick request is unavailable.;本地校验失败 → ... is invalid.;发布失败 → ... publish failed.(固定文案防 PIN 泄漏到 UI)。
  • 无重试、无去重:Broker 重传可能造成设备重复收到同一命令(幂等性由设备端决定,缺证)。
  • canSpeak 恒为 "0" 是格式占位:设备真实讲话权限以中心配置投递(pushPttConfig 正本 链的 groups[].canSpeak)为准;两处语义不能混用。

调用关系与资源清理

  • 触发时机:房间页对成员执行"通知入会"或"请其退出"操作;页面卸载无清理需求(无订阅)。
  • 与中心配置投递共用设备 topic:设备端按 payload 形态区分({sub,...} vs {id,status,data})——设备侧分派逻辑缺证。

已知缺口

  1. 设备固件(最终消费者)源码不在本工作区:设备是否订阅该 topic、join/kick 的执行、错误应答与完成语义均缺证(inventory contractLocated=false)。
  2. params.name/samplingRate/codec 的设备侧用途、canSpeak:"0" 占位的设备侧解释缺证。
  3. Broker ACL 与部署环境订阅清单一致性待部署核验。
  4. 未执行真实联调。