“代码写完了,测试号码也买了,但一通电话都打不通。”——这是许多开发者用 AI 语音代理接入印度市场时遇到的真实困境。问题的根源不在于技术实现,而在于一个被严重低估的监管要求:**媒体锚定(Media Anchoring)**。
TRAI(印度电信管理局)规定,涉及印度 PSTN 网络的通话,**SIP 信令和 RTP 媒体流都必须全程保留在印度境内**。如果你的 AI 语音代理平台部署在印度境外,运营商会**直接挂断电话**,返回挂断代码 **4590**(India media anchoring violation: the platform endpoint is not in India)。
这不是一个“可以绕过去”的技术问题,而是一个**物理位置决定合规资格**的硬性门槛。
以下是 Plivo 官方文档中明确列出的平台支持情况:
| 平台 | 印度支持 | 需要做什么 |
|---|---|---|
| LiveKit | ✅ 支持 | 启用区域固定(Region Pinning),将媒体锚定在印度区域 |
| ElevenLabs | ✅ 支持 | 联系销售开通印度部署,使用印度 SIP URI:sip.rtc.in.residency.elevenlabs.io:5060;transport=tcp |
| Vapi | ❌ 不支持 | 印度号码与 Vapi 不兼容,因其未在印度提供 SIP 终止 |
| 其他海外部署平台 | ❌ | 未在印度部署基础设施的平台,无法合法承载印度通话 |
Vapi 的案例最具警示意义。Vapi 官方文档明确说明:**“印度电话号码不能与 Vapi 配合使用,因为 TRAI 规定要求 SIP 终止必须通过印度服务器进行,而 Vapi 目前不支持这一要求。”**
这不是 Vapi 的技术能力问题,而是**基础设施位置问题**。在媒体锚定规则下,这是“一票否决”的合规硬伤,没有技术方案可以弥补。Plivo 的集成指南也明确标注:**“India not supported”**。
**LiveKit** 通过**区域固定(Region Pinning)** 功能满足媒体锚定要求。你需要将 SIP 中继指向印度区域的端点(如 `{sip_subdomain}.india.sip.livekit.cloud`),并在出站中继配置中设置 `destination_country` 为 `in`。LiveKit 文档也确认了这一方案,并指出区域固定功能仅在 **Scale 及以上套餐**中提供。
**ElevenLabs** 则通过**印度部署**来满足要求。你需要联系 ElevenLabs 销售团队开通印度部署,然后使用专用的印度 SIP URI。
即使你的平台支持印度,以下合规要求也必须满足:
| 合规要求 | 具体内容 |
|---|---|
| 印度实体 | 只有印度注册的企业才能租用印度号码、使用本地路线拨打电话 |
| KYC 验证 | 租用印度号码前必须完成 KYC 验证,文件要求取决于企业所在地 |
| Plivo 数据区域 | 在 Plivo 创建账户时,数据区域必须选择印度(孟买),且创建后无法更改 |
| 号码系列 | 140 系列仅用于促销,160 系列(BFSI)仅用于服务和交易类通话,用错系列本身即违规 |
如果你的 AI 语音代理打不通印度电话,按以下顺序排查:
1. **检查平台是否在印度有部署**:LiveKit(区域固定)、ElevenLabs(印度部署)支持;Vapi 不支持
2. **检查 Plivo 账户数据区域**:必须是印度区域,其他区域无法使用印度号码
3. **检查是否触发了挂断代码 4590**:在调试日志中搜索 `4590` 或 `media anchoring`
4. **确认企业是否在印度注册**:非印度实体无法使用本地路线
5. **确认号码系列是否正确**:促销用 140,服务和交易用 160(仅 BFSI)
**印度 AI 语音代理打不通的核心原因是“媒体锚定”规则——SIP 信令和 RTP 媒体流必须全程保留在印度境内。**
平台支持情况可以简单记忆:**LiveKit 和 ElevenLabs 支持印度,Vapi 不支持**。如果你的平台不在支持列表中,唯一的合规路径是**在印度部署基础设施**(印度实体 + 印度本地服务器或印度云区域)。
**平台不在印度,在技术上有无数种“绕过去”的方案;但在监管上,没有任何一种“绕过去”的方案。** 挂断代码 4590 就是这一规则最直接的执行结果。