摘要

  • RFC 3149 让远端 MGCP Call Agent 解释带编号的功能键、设置键位标签和灯、控制 hook 状态并驱动 XML 屏幕,但键事件不等于功能映射,更不等于呼叫状态已经改变。
  • 显示状态可能与电话信令异步,所以屏幕获得独立的 disp/ endpoint;按键先交给 XML 层,再由它消费或传给普通电话层。
  • 铃声音量、听筒与扬声器音量、免提/听筒即时切换,以及麦克风静音和灯仍留在本机,说明外部呼叫智能并没有抹去设备的物理控制面。

电话上报的是键号,不是业务含义

MGCP 的架构选择很鲜明:呼叫控制智能不在网关内部,而在 Media Gateway Controller,也就是 Call Agent。基础模拟线路已经可以处理普通音频连接和信令;商务电话却多出 Hold、Transfer、Redial、Conference、Messages、可编程键、LCD、软键、免提与静音。

RFC 3149 增加三组 package。Feature Key(KY)描述非 DTMF 功能键、状态灯与标签;Business Phone(BP)描述 Force Offhook、Force Onhook 与 Beep;Display XML(XML)在 Call Agent 与显示屏之间搬运界面请求和用户输入。

功能键事件故意保持低层。电话可以报告编号 1 被按下,远端映射才决定编号 1 表示保持、转接、线路还是其他功能。另一个机型可能把保持放在 23,或者根本不报告这个键。线缆上的同一个数字没有普遍业务含义。

所以合法 NTFY 只能证明 endpoint 在已请求事件集合下报告了某一键号。要写“用户按了保持”,必须有当时生效的映射;要写“呼叫已经保持”,还要有 Call Agent 决策、所发信号、信令转换与媒体结果。数据库若只保留 button=hold,就把推断伪装成原始事实。

标签和灯是输出,不是证明

Call Agent 可以要求 Key State 点亮或熄灭功能键灯,也可以在有相邻 LCD 的电话上设置自由文本标签。这样,一台通用 endpoint 能随应用变化,呈现为功能丰富的商务电话。

但显示与运行之间从此多了一道缝。映射已经改变,旧的“Hold”仍可能留在屏幕;信号已被接受,灯也亮了,实际业务却可能失败;键事件正确到达,用户看到的却可能是另一标签。渲染是独立动作,需要独立成功条件。

RFC 的目标是最小、低层、避免冗余的数据接口。Call Agent 若只关心一次按下,就不必同时收取 press 与 release。这个节制保持了窄协议面,却也提醒我们:协议日志不是完整的人机交互记录。物理位置、防抖、本地时序与用户所见仍需另行证明。

可审计收据应连接而不合并这些字段:机型、映射版本、键号、RQNT/NTFY 事务、标签、灯、控制器分支、信令结果、媒体结果和用户界面。

屏幕成为另一台 endpoint

显示屏不是电话信令状态机的一块静态装饰。RFC 3149 指出,显示状态可能与信令状态异步,因此相关屏幕应有不同的 MGCP endpoint 名称:在电话 endpoint 前加 disp/。

文档的例子是一通来电正在响铃,屏幕同时提供“立即转到语音信箱”的选项。用户选择后,XML post 发出,并可能取消响铃 timeout。这里至少有多只时钟:选项被显示、用户按键、事件抵达 Call Agent、timeout 取消、呼叫信令改变、远端得到转移。任何一张收据都不能替整条链作证。

XML package 让控制器指向 deck 与 card,提供变量替换,并接收输入或选择。card 可以包含文字、列表、输入框、计时器与导航。如果一个按键同时属于显示脚本和普通电话,按键要先交给 XML 层;显示层消费它,或把它传给电话层。

分发优先级不等于对现实的裁决权。脚本消费一个数字,只证明本地路由选择;不能证明目标 card 已正确显示、post 到了正确控制器或信令已随之改变。独立 endpoint 让异步状态可寻址,没有让异步自动消失。

用机型代替穷举式发现

Call Agent 必须知道电话有哪些键与显示能力。RFC 认为穷举发现可以设计,但采用了更简单的实验参数 X-UA,请求一个能唯一识别厂商和型号的字符串,再由控制器选择能力 profile。

这是一张经济的元数据收据,不是硬件证明。X-UA 可能不受支持而被忽略,可能与固件能力不一致,也可能命中一份过期 profile。它不会证明实体键盘、屏幕尺寸、指示灯接线或音频硬件真的工作。

X- 前缀还定义兼容边界:不认识它的网关应忽略,而不是以 511 之类错误拒绝整次交互。没有回答意味着不确定,不能被解释成默认布局。控制器需要有边界的降级方案。

证据链应把返回字符串、固件、资产身份、profile 版本与实体界面观测并列。分类可以选择行为;运行中的硬件保留上诉权。

用户的手保留即时权力

第 4 节给出最清楚的边界。铃声、听筒与免提音量应在网关本地实现。免提启用后,用户应能拿起听筒切换,再切回扬声器,全程不与 Call Agent 交互。麦克风静音键和可选指示灯也应本地实现。

这并不否定外部智能,而是限定它。Call Agent 解释属于呼叫应用的业务语义;endpoint 保留需要用户即时、贴近设备控制的动作。架构把意义集中,把一部分执行留在边缘。

不能替 RFC 发明理由。低延迟、故障降级、隐私与安全都可能是合理收益,但文档没有给出量化测试或完整韧性理论。可以确认的是:这些功能被明确安排在本地,听筒与免提切换明确不得等待控制器。

本地也不是自动正确。按下静音键不等于状态已改变,灯亮不等于音频已经消失,本地切换音频路径也不证明远端听到正确来源。物理输入、本地状态、指示输出和媒体结果仍是四层事实。

远程命令仍会遇到本地反作用

BP package 可以远程 Force Offhook、Force Onhook 或播放 beep,用于应用集成,例如用户在电脑上选中号码后让电话摘机。但规范又说,用户挂断可以否定强制摘机。

这一细节阻止了“控制器说了就算”的叙事。远端请求只是开始;网关要解释信号,物理硬件要改变,用户还可以本地反向操作。线缆命令、网关接受、hook 状态、呼叫建立与用户动作,各自属于不同时间线。

安全措辞也必须克制。RFC 3149 只说没有引入超出基础 MGCP 的新安全事项,不是说远程 XML、键位映射或 hook 信号天然安全。认证、授权、完整性和机密性依赖基础协议与具体部署。password mode 只负责把字符遮住,不证明传输加密或 Call Agent 后续安全处理。

IESG Note 划定另一条边界:这是一份记录当时已有产品使用的非 IETF 协议的 Informational RFC,同一问题空间还有 Standards Track 的 Megaco/H.248。文档地位不能抹去运行设计,也不能证明所有产品后来完成迁移。

智能按后果被拆分

RFC 3149 的长久价值,不是证明本地总比中心好。它把不同权力放进不同地点。中心软件掌握可变的业务语义:哪个键对应哪项服务、标签写什么、屏幕渲染哪张 card、选择怎样进入呼叫逻辑。电话掌握即时音频硬件与静音。

这种拆分让新业务不用硬编码进每台设备,同时保留一块不必等待网络往返的物理控制面。依赖也随之出现:中心功能可能失效而本地静音仍工作;控制器升级可在硬件不变时改掉键意;显示 deck 可与信令发生漂移。

运行代码是最终申诉渠道。如果控制器说键 1 是保持,媒体却继续流动,功能没有产生所称结果;静音灯亮而麦克风音频仍发出,本地呈现与媒体现实冲突;disp/ 显示已转移而电话继续响铃,显示与信令正处在规范承认的异步裂缝里。

一枚物理按键因此成了一道小型宪制边界。中心智能可以命名和协调,却不会因为 endpoint 向它报告,就自然获得每个动作的保管权。

来源