# 区域访问限制 (/zh-CN/ai/build/harden-and-optimize/regional-restrictions)

> For AI agents: see the complete documentation index at [llms.txt](/llms.txt).

为适应不同国家或地区的法律法规，声网对话式 AI 引擎支持区域访问限制功能。

开启区域访问限制后，不论用户在哪个区域使用你的 App，对话式 AI 引擎都只会访问指定区域的声网服务器。

例如你指定了北美为访问区域，假设有两位用户分别从北美和新加坡发起通话：

| 指定访问区域 | 用户所在区域 | 实际访问区域 | 连接后的用户体验 |
| --- | --- | --- | --- |
| 北美 | 北美 | 北美 | 正常 |
| 北美 | 新加坡 | 北美 | [geofencing-markdown-1-2-3 details](#table-slot-geofencing-markdown-1-2-3) |

<a id="table-slot-geofencing-markdown-1-2-3"></a>

**geofencing-markdown-1-2-3 details**

可能受到较大影响。由于指定区域与 App 用户所在区域之间存在跨区域公共互联网，公共互联网网络质量较差会导致音视频体验受到影响。如果指定区域的服务器都不可用，服务会直接报错。

## 默认行为 [#默认行为]

在未开启区域访问限制或使用 `GLOBAL` 区域访问限制时，对话式 AI 引擎会根据 LLM URL 的 IP 地址自动选择最近的服务器启动对话式 AI 引擎服务，并支持故障转移 (failover):

1. **智能部署**: 系统会根据你配置的 LLM URL 对应的 IP 地址，自动在相应区域启动对话式 AI 引擎服务。
2. **就近选择**: 如果对应区域没有可用服务器，系统会自动选择最近的可用区域。
3. **故障转移**: 当某个区域的服务不可用时，系统会自动切换到其他可用区域。

:::warning[注意]
开启区域访问限制后，上述默认行为将不再适用。系统会严格限制在指定区域内访问，不会进行跨区域的故障转移。
:::

## 实现方法 [#实现方法]

### 配置对话式 AI 引擎区域访问限制 [#配置对话式-ai-引擎区域访问限制]

在调用[创建对话式智能体 API](/zh-CN/api-reference/api-ref/conversational-ai/join) 时，通过 `properties.geofence` 字段配置区域访问限制。

#### 参数说明 [#参数说明]

下表说明 `properties.geofence` 中各字段的含义。

| 字段 | 类型 | 必填 | 描述 |
| --- | --- | --- | --- |
| `area` | String | 是 | [geofencing-html-0-1-3 details](#table-slot-geofencing-html-0-1-3) |
| `exclude_area` | String | 否 | [geofencing-html-0-2-3 details](#table-slot-geofencing-html-0-2-3) |

<a id="table-slot-geofencing-html-0-1-3"></a>

**geofencing-html-0-1-3 details**

允许访问的区域。可选以下值：

- `GLOBAL`：全球
- `NORTH_AMERICA`：北美
- `EUROPE`：欧洲
- `ASIA`：亚洲
- `INDIA`：印度
- `JAPAN`：日本

<a id="table-slot-geofencing-html-0-2-3"></a>

**geofencing-html-0-2-3 details**

排除的区域。仅当 `area` 为 `GLOBAL` 时可用。可选以下值：

- `NORTH_AMERICA`：北美
- `EUROPE`：欧洲
- `ASIA`：亚洲
- `INDIA`：印度
- `JAPAN`：日本

#### 配置示例 [#配置示例]

**示例 1: 限制仅访问北美区域**

```json
{
  "name": "customer_service",
  "properties": {
    "channel": "test_channel",
    "token": "your_rtc_token",
    "agent_rtc_uid": "123",
    "remote_rtc_uids": ["456"],
    "geofence": {
      "area": "NORTH_AMERICA"
    },
    "llm": {
      // ... LLM 配置
    },
    "tts": {
      // ... TTS 配置
    }
  }
}
```

**示例 2: 全球访问但排除印度**

```json
{
  "name": "customer_service",
  "properties": {
    "channel": "test_channel",
    "token": "your_rtc_token",
    "agent_rtc_uid": "123",
    "remote_rtc_uids": ["456"],
    "geofence": {
      "area": "GLOBAL",
      "exclude_area": "INDIA"
    },
    "llm": {
      // ... LLM 配置
    },
    "tts": {
      // ... TTS 配置
    }
  }
}
```

### 配置 RTC 区域访问限制 [#配置-rtc-区域访问限制]

声网对话式 AI 引擎服务和声网 RTC 服务的区域访问限制配置是**相互独立**的。如果你需要实现完整的端到端区域访问限制，确保和智能体互动的整个音视频通话链路都限定在指定区域内，你还需要参考 [RTC 区域访问限制](/zh-CN/realtime-media/rtc-server-sdk/build/set-region)进行配置。

## 数据驻留 (Data Residency) [#数据驻留-data-residency]

除了配置对话式 AI 引擎的区域访问限制外，部分 LLM、TTS、ASR 供应商也提供了不同区域的数据驻留服务。你可以通过配置 LLM、TTS、ASR 模块使用的 URL 来确保数据不会跨区域传输。

例如，ElevenLabs 支持通过不同的 URL 端点选择数据处理区域，详见 [ElevenLabs 文档](https://elevenlabs.io/docs/overview/administration/data-residency)。

以下示例代码展示了如何配置 ElevenLabs 的 TTS 服务，使用欧洲区域的 URL 端点：

```json
{
  "properties": {
    "tts": {
      "vendor": {
        "name": "elevenlabs"
      },
      "url": "wss://api.eu.elevenlabs.io/v1/text-to-speech/{voice_id}/stream-input"
    }
  }
}
```

### 最佳实践建议 [#最佳实践建议]

为了确保数据完全驻留在指定区域，建议采取以下措施:

1. **配置对话式 AI 引擎区域限制**: 使用 `geofence` 参数限制对话式 AI 引擎服务器的访问区域。

2. **配置 RTC 区域限制**: 在 RTC SDK 中配置相应的区域访问限制。

3. **选择区域化的 AI 服务**: 在配置 LLM、TTS、ASR 时，选择支持区域数据驻留的供应商，并使用对应区域的 URL 端点。

4. **验证配置**: 在生产环境部署前，充分测试区域访问限制是否生效，确保数据不会意外跨区域传输。

## 注意事项 [#注意事项]

1. **性能影响**: 区域访问限制可能会影响用户体验。如果用户所在区域与指定区域相距较远，可能会出现较高的网络延迟。

2. **服务可用性**: 开启区域访问限制后，如果指定区域的服务器不可用或资源不足，服务将直接报错，不会自动切换到其他区域。

3. **配置一致性**: 确保对话式 AI 引擎、RTC SDK 和 LLM、TTS、ASR 供应商的区域配置保持一致，避免数据跨区域传输。

4. **合规要求**: 在配置区域访问限制前，请充分了解目标区域的法律法规要求，确保配置符合当地的数据保护和隐私法规。
