验证状态:存在关键缺口,不可作为完整契约发布。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 正本)——该因果链未联调证实 |
talkGroupId 须满足 ^[A-Za-z0-9_-]{1,32}$、roomPin 须满足 ^[A-Za-z0-9_-]{4,32}$、deviceNo 不得含 MQTT 通配符(/ + #)或 NUL、clientId 非空;校验失败抛固定文案错误(不回显 PIN)。Talkgroup join/kick request is unavailable.;本地校验失败 → ... is invalid.;发布失败 → ... publish failed.(固定文案防 PIN 泄漏到 UI)。canSpeak 恒为 "0" 是格式占位:设备真实讲话权限以中心配置投递(pushPttConfig 正本 链的 groups[].canSpeak)为准;两处语义不能混用。{sub,...} vs {id,status,data})——设备侧分派逻辑缺证。contractLocated=false)。params.name/samplingRate/codec 的设备侧用途、canSpeak:"0" 占位的设备侧解释缺证。