---
title: "连接 VoIP 提供商"
description: "连接您已在使用的提供商（通过 API 密钥连接 Twilio 或 Telnyx；通过 SIP 连接 SignalWire、Vonage、Plivo 或任何 SIP 中继），或通过引导式设置开通新的 Telnyx 账户。"
---

生产流量应通过您自有的号码和您自己的
VoIP 提供商运行。控制台的 **连接 → VoIP** 页面
（`/dashboard/voip-connections`）可连接您的提供商账户；连接后，
您可以导入支持呼入**和呼出**通话的号码。

点击**新建连接**，然后选择以下两种方式之一：**连接您已在使用的提供商**，或**设置新的 Telnyx 账户**。

## 连接您已在使用的服务商

选择您的号码所属的服务商：

| 服务商 | 连接方式 |
|----------|-----------------|
| Twilio | API 密钥：粘贴您的 Account SID 和 Auth Token |
| Telnyx | API 密钥：粘贴您的 v2 API 密钥 |
| SignalWire | SIP 设置 |
| Vonage | SIP 设置 |
| Plivo | SIP 设置 |
| 其他服务商 | 使用 ThunderPhone 的设置向导进行 SIP 设置，适用于任何其他运营商或您运行的 PBX |

对于 Twilio 和 Telnyx，粘贴凭据并点击 **连接并
测试**。ThunderPhone 会验证凭据，并为您配置服务商一侧。
对于 Telnyx，ThunderPhone 会在您的 Telnyx 账户中添加一个自己的 SIP 连接（名为 `thunderphone-production-<org>-outbound-<id>`），并通过该连接发起外呼，因此 Telnyx 会向您收取这些通话的费用。它使用您的号码所在 Telnyx 连接的外呼语音配置文件，因此该配置文件允许的国家/地区和消费限额将会生效。如果该连接没有外呼语音配置文件，而您的账户恰好有一个已启用的配置文件，ThunderPhone 会使用该配置文件。要使用其他配置文件，请在 Telnyx 门户中将其分配给该连接，然后再次保存 ThunderPhone 连接。如果账户没有已启用的配置文件，或有多个已启用的配置文件，请在 Telnyx 门户中为该连接分配一个配置文件，然后再次保存 ThunderPhone 连接。在此之前，外呼会因 `outbound_trunk_unavailable` 而失败；呼入将继续正常工作。

当 Telnyx 拒绝外呼时（例如 SIP 403 Forbidden），该拒绝来自您自己的 Telnyx 账户。常见原因包括没有可用余额、主叫号码不在该 Telnyx 账户中，或者外呼语音配置文件不允许目标国家/地区。

### SignalWire、Vonage 和 Plivo 的 SIP 设置

这三个服务商都会打开[手动 SIP 表单](#manual-sip-configuration)，其中顶部提供该服务商的操作步骤、指向服务商自有设置指南的链接，以及示例 SIP 域名：

- **SignalWire**：为外呼创建 SIP 凭据，输入 SIP 域名、用户名和密码，并为每个号码配置一个 SWML 脚本，将呼入连接至 ThunderPhone SIP 端点。
- **Vonage**：在 SIP Trunking 控制台中，创建具有外呼凭据的中继，输入其域名（例如 `your-trunk.sip-us.vonage.com`）和凭据，将 ThunderPhone SIP 端点添加为该中继的呼入 SIP URI，然后将您的号码关联到该中继。
- **Plivo**：创建具有凭据的外呼中继，并输入其 Termination SIP Domain（`<trunk-id>.zt.plivo.com`）、用户名和密码；创建一个呼入中继，其 Primary URI 为 ThunderPhone SIP 端点，后接 `;transport=tcp`；然后将每个号码的 Application Type 设置为该中继。

结果是一个手动 SIP 连接（API 中的 `provider: "manual"`），其测试和验证方式与手动输入的连接完全相同。连接卡片会显示服务商名称，例如 **SignalWire · SIP**。

## 设置新的 Telnyx 账户

还没有服务提供商？引导流程将带您创建 Telnyx
账户并完成连接：

<Steps>
  <Step title="创建账户">
    点击 **打开 Telnyx 注册页面**，创建您的账户，然后勾选
    “我已创建账户”。
  </Step>
  <Step title="获取 API 密钥">
    点击 **打开 API 密钥页面**，生成密钥并将其粘贴到
    **API 密钥（v2）**。您也可以为连接命名。
  </Step>
  <Step title="连接并测试">
    点击 **连接并测试** —— ThunderPhone 会验证凭据，
    并在保存前于 Telnyx 端配置所需资源。
  </Step>
</Steps>

### ThunderPhone 在 Telnyx 中设置的内容

除非您输入自己的 Connection ID，否则两种 Telnyx 路径（引导式
设置和粘贴 API 密钥）都会在您的 Telnyx
账户中创建相同的内容：一个名为
`thunderphone-<your organization id>` 的 SIP 连接。它是一个 **FQDN 连接**，
其 FQDN 记录指向 ThunderPhone 的 SIP 端点，您导入的每个
号码都会分配给它。Telnyx 会通过 SIP 将这些号码的呼叫直接发送到 ThunderPhone。

- 其 webhook 字段特意留空。不会涉及 webhook、Call Control
  应用、TeXML 应用或已注册的 SIP 电话。
- 请勿将导入的号码移至其他连接或应用，也不要在其上注册设备。
- 如果您在连接时输入了自己的 Connection ID，ThunderPhone
  将改用该连接且绝不会更改它；它必须是指向 ThunderPhone SIP 端点的 FQDN
  连接。

在 2026 年 8 月 30 日之前，ThunderPhone 创建的 `thunderphone-…`
连接是 **凭据连接**，无法接听呼叫。
如果您的连接仍显示为凭据连接，请联系支持团队，我们会将其转换。

## 手动 SIP 配置

SignalWire、Vonage 和 Plivo 磁贴会打开此表单，**其他提供商**下的
**我将自行输入所有设置**也会打开此表单。任何 SIP 中继均可使用，包括 DIDWW 或您自行运行的 PBX。输入连接名称、**SIP 域名 / URI**、
可选的用户名和密码、端口及传输协议；**高级设置**
可添加媒体加密（SRTP）。表单还会显示您的中继必须将入站呼叫发送至的 SIP
地址：`sip.thunderphone.com`，UDP 或 TCP 使用端口 5060，TLS 使用端口 5061。通过 TLS，SIP
信令会一直保持加密，直至 ThunderPhone 在 LiveKit Cloud 中处理呼叫；音频绝不会经过
`sip.thunderphone.com`，因此 SRTP 仍可照常使用。将每通呼叫定址到采用 E.164 格式的已拨号码，
并在请求行和 `To` 标头中使用相同的号码，包括
`+`：例如
`sip:+14155550142@sip.thunderphone.com`。`+` 可让
ThunderPhone 在正确的区域处理呼叫（请参阅
[IP 允许列表](#ip-allowlisting-and-trunk-authentication)下的说明）。
先前使用 `<your-project>.sip.livekit.cloud`
地址设置的中继会在**允许的源 IP 地址**为空时继续正常工作；您无需更改它们。ThunderPhone
会将这些设置转换为 LiveKit Cloud 上的一对专用 SIP 中继：使用连接号码发起的出站呼叫
会通过您的凭据转接至您的 SIP 域名；除非您填写可选的**允许的源 IP 地址**字段，否则对这些号码的入站呼叫
可从任何地址接入。
仅当您的运营商公布固定信令 IP 时才填写此字段：错误或不完整的列表会导致 ThunderPhone 拒绝您运营商的入站
呼叫。两个按钮可完成主要操作：

- **生成 AI 设置指南**——为您所需的中继端配置生成特定于服务商的说明。
- **测试并保存连接**——检查 SIP 端点是否解析为公网地址；对于 TCP/TLS，还会检查所选端口是否接受连接（UDP 主机仅进行 DNS 检查），然后保存。由于连接尚未配置号码，因此暂时无法拨打电话；实际验证将在导入时进行（见下文）。

之后编辑连接时，会先针对您更改后的
设置重新运行相同的检查，确认无误后再保存，随后重建中继，并在后台通过简短的测试呼叫重新验证连接中的每个号码——在测试
呼叫成功前，这些号码会显示为*配置中*。仅更改处于*已连接*
状态的连接中的**允许的源 IP 地址**则有所不同：这绝不会影响出站呼叫，因此
ThunderPhone 会立即更新入站中继上的列表，号码仍保持*活跃*。其入站呼叫测试会重置为*未测试*；
请再次运行测试，或通过您的运营商发起真实呼叫，以确认新列表允许呼叫接入。若测试呼叫会根据该列表被拒绝，测试将失败。已存储的密码绝不会再次显示；如需保留密码，请将密码字段留空；对于基于 IP 身份验证的中继，请勾选“删除已存储的密码”。

### IP 允许列表和中继认证

某些运营商（DIDWW、Telnyx IP 身份验证连接，以及大多数位于防火墙后的 PBX）仅接受来自您已加入允许列表的地址的 SIP 流量，或通过源 IP 对外呼叫进行身份验证。ThunderPhone 使用两组地址。

**SIP 边缘节点。** 您发送至 `sip.thunderphone.com` 的入站通话会经过 ThunderPhone 的 SIP 边缘节点，该节点仅承载 SIP 信令。第一个 INVITE 会发送至 `sip.thunderphone.com`；其余通话信令（ACK、挂断、转接）则在您的运营商与接听该通话的边缘服务器 `sip-1` 或 `sip-2` 之间传输。如果您的防火墙会筛选 SIP 信令，请在 UDP 和 TCP 的 5060 端口以及 TLS 的 5061 端口允许这三个地址：

| 主机 | IP 地址 |
|------|------------|
| `sip.thunderphone.com` | `172.170.39.202` |
| `sip-1.thunderphone.com` | `13.86.104.121` |
| `sip-2.thunderphone.com` | `20.80.98.90` |

**LiveKit Cloud。** 每个通话的音频（RTP）以及外呼的 SIP 信令均在您的运营商与 LiveKit Cloud 之间传输，绝不经过 SIP 边缘节点。请对 SIP 信令和媒体均允许以下**所有**范围：

{/* generated:livekit-static-ips:start */}
{/*
  GENERATED BLOCK — do not edit by hand.
  Source: scripts/docs-freshness/data/livekit-static-ips.json
  Regenerate: python3 scripts/docs-freshness/generate_livekit_static_ips.py
  CI regenerates this block and fails on drift
  (scripts/docs-freshness/generators.d/30-livekit-static-ips.sh).
*/}

| IP 范围 |
|----------|
| `143.223.88.0/21` |
| `161.115.160.0/19` |
| `153.57.128.0/18` |

LiveKit 将这些范围应用于实时通信、SIP 信令和媒体以及 Webhook，并覆盖其加拿大、欧盟、印度、日本和美国区域处理的呼叫。固定端点的区域名称：`canada`、`eu`、`india`、`japan`、`us`。
{/* generated:livekit-static-ips:end */}

<Note>
  发送至 `sip.thunderphone.com` 的通话会在覆盖区域中处理。`To` 标头中带有前导 `+`，且使用日本、印度、欧盟/欧洲经济区、英国或瑞士国家代码的号码会路由至对应区域。其他所有通话会在距离 ThunderPhone SIP 边缘节点最近的 LiveKit 区域中处理，目前为美国。仍指向 `<your-project>.sip.livekit.cloud`
  地址的中继会通过距离来电者最近的 LiveKit 区域进行路由；如果您的运营商位于覆盖区域之外，该区域可能也不在覆盖区域内。请将其迁移至
  `sip.thunderphone.com`，或通过在 `.sip.livekit.cloud` 前插入区域名称来固定区域：例如
  `<your-project>.japan.sip.livekit.cloud`。入站号码匹配不受影响。
</Note>

以下是中继本身的一些经验规则：

- **ThunderPhone 不进行注册。** 它绝不会向您的运营商发送 SIP `REGISTER`，因此请将中继配置为基于 IP 和/或凭据（用户名 + 密码）的身份验证，而非注册。
- **外呼应使用凭据。** 请在运营商侧启用用户名/密码身份验证，并在手动 SIP 表单中输入相同的值。请将 IP 允许列表视为第二层防护，而非唯一防护措施——发往覆盖区域之外目的地的外呼可能来自其他地址。
- **入站方向相反。** 表单中的可选 **允许的源
  IP 地址** 字段用于输入*您的运营商*的信令地址，以便 ThunderPhone 仅接受来自这些地址的通话。请输入 IP 地址或 CIDR 范围；主机名永远不会匹配。除非您的运营商发布了固定列表，否则请将其留空。ThunderPhone 会在每次入站通话时，根据其 SIP 边缘节点看到的地址检查该列表，因此设置列表后，请将通话发送至 `sip.thunderphone.com`。来自不在列表中的地址的通话，或直接发送至 `<your-project>.sip.livekit.cloud` 地址的通话，都会被拒绝：它会失败，或在接通后立即结束。

这些范围由 LiveKit 发布在
[区域、区域端点和静态 IP](https://docs.livekit.io/deploy/admin/regions/endpoints/)；
ThunderPhone 每周检查该页面，并在内容变更时更新本指南。

## 连接后

从 **电话号码 → 添加号码 → 连接 VoIP
提供商**（或直接从连接页面）导入号码。每个导入的号码都会在启用前完成验证。对于手动 SIP 连接，
该验证会发起一次简短（几秒钟）的测试呼叫，**从您的号码出发，经由您的 SIP 中继，呼叫 ThunderPhone 号码**——因此会实际验证用户名、密码、传输协议以及您运营商的出站路由。
您的运营商会像对待其他呼叫一样对此呼叫收费。
如果运营商拒绝该呼叫，号码将保持在 *正在配置* 状态，
电话号码页面会显示运营商的回复（例如“拒绝了 ThunderPhone 的凭据（SIP 401）”）；请修复连接后再次验证。
如果您的运营商接受中继，但其路由计划不覆盖 ThunderPhone 的测试号码（DIDWW 回复“路由计划已将目标号码列入黑名单”），该号码将显示为 *已验证 · 运营商已接受*：它可以使用，但未测试对其他目的地的呼叫。
该呼叫证明您的中继可以*以该号码身份发起*呼叫；它不能证明您拥有该号码，也不会测试*呼叫至*该号码；下方的可选入站测试会进行此项测试。
已验证的号码支持入站和出站——这会解锁
[出站营销活动](/zh/guides/outbound-campaigns)和以编程方式发起的
[出站呼叫](/zh/guides/place-outbound-calls)。

### 来电测试

**验证号码**会打开一个对话框，您也可以在其中测试来电。该测试会呼叫您的号码，检查通话是否到达 ThunderPhone，然后在不启动您的智能体的情况下挂断：

- **拥有自身出站 SIP 中继的号码**（手动 SIP 号码，以及 ThunderPhone 在您的 Twilio 账户中设置出站呼叫后使用的 Twilio 号码）会先呼叫自身：ThunderPhone 通过该中继，使用该号码呼叫该号码。对话框会在发起呼叫前告知您。通话会通过您的运营商呼出；如果您的入站路由配置正确，则会直接返回 ThunderPhone。当通话以该号码自身的主叫号码返回时，这一次呼叫即可证明您的运营商接受 ThunderPhone 以该号码发起的呼叫，也证明对该号码的呼叫能在任何国家到达 ThunderPhone。部分运营商会拒绝或无法接通号码呼叫自身的通话；这与您的路由无关，因此 ThunderPhone 会改用其自身的某个号码发起呼叫。如果您的号码转接到其他地方，该电话可能会响两次：第一次显示该号码自身的主叫号码，第二次显示 ThunderPhone 的测试号码。
- **其他号码**（以及上述备用方式）会由 ThunderPhone 自身的某个号码呼叫。ThunderPhone 目前只能向美国和加拿大号码发起这些呼叫；对于其他号码，测试会报告无法运行，并在自呼叫被拒绝时显示您的运营商的回复。

如果您的运营商在传输过程中更改主叫号码，ThunderPhone 将无法识别该通话，因此您的智能体可能会短暂接听。来电测试是可选的。您可以跳过它，号码仍可正常使用；电话号码页面随后会显示 *来电未测试*，您可以稍后通过 **测试** 或该号码的 **测试来电** 菜单项运行测试。导入后，电话号码页面也会要求您测试新号码的来电。在您于对话框中确认之前，不会发起任何呼叫。

如果您的提供商将号码转接到其他位置，该号码所指向的目标每次呼叫可能会响铃最长 8 秒，然后 ThunderPhone 才会挂断。如果有其他服务先接听（例如先接听再转接的 Twilio 应用或电话菜单），测试会等待转接后的通话到达 ThunderPhone：自呼叫最长等待 8 秒，从 ThunderPhone 号码发起的呼叫最长等待 15 秒。结果会保留在该号码上（*来电*通过或失败），直到您更改连接或重新导入号码，此时状态将重置为 *未测试*。更改连接会在后台重新验证出站呼叫，但绝不会在未经您同意的情况下呼叫您的号码。

## 排查呼入通话问题

连接的 **测试** 按钮会检查凭据，而验证会检查呼出拨号。要检查呼入，请运行上方的来电测试，或使用电话拨打该号码，然后在 **通话记录** 中查找该通话。
浏览器 **通话** 测试和智能体到智能体模拟不会经过您的运营商，因此无法显示呼入是否正常。以该电话号码为目标的模拟（SIP 回环）会通过您的运营商拨打该号码，因此接听后可验证呼入路由。

- **您听到自己移动运营商的提示音**（例如“欢迎使用 Verizon”或“您所拨打的号码未开通服务”）：通话在到达 ThunderPhone 前失败。请检查该号码是否已在您的服务商账户中启用，并已分配给 ThunderPhone 连接或中继。
- **忙音或通话响铃后无人接听**：服务商已接受该通话，但无法将其送达。对于 Telnyx，请在 Telnyx 控制台中检查该号码的 **连接**：它应为上文所述的 `thunderphone-…` FQDN 连接，或指向 ThunderPhone SIP 端点的您自己的 FQDN 连接。对于 Twilio，该号码应附加到 ThunderPhone SIP 中继，而非 Voice webhook 或 TwiML 应用。
- **您的运营商日志显示 `404 No trunk found`**（手动 SIP）：通话已到达 ThunderPhone，但未匹配任何中继。请检查该号码是否已导入此连接，以及中继是否指向 `sip.thunderphone.com`。如果它指向 `<your-project>.sip.livekit.cloud` 地址，**允许的源 IP 地址** 必须为空：设置列表后，仅接受发送到 `sip.thunderphone.com` 的通话。
- **来自 `sip.thunderphone.com` 的 `404 Not Found`**（手动 SIP）：通话未指定给电话号码，或者请求行和 `To` 标头指定了不同的号码。如上所述，请在两者中都发送所拨号码。
- **来自 `sip.thunderphone.com` 的 `403 Forbidden`**：请求行指定了其他主机。请将通话指定到 `sip.thunderphone.com`，例如 `sip:+14155550142@sip.thunderphone.com`。
- **通话到达 ThunderPhone，但由错误的智能体接听，或无人接听**：请在 **电话号码** 中检查该号码的呼入智能体。

应用内智能副驾可以为您检查号码：请询问它为何拨打该号码的通话失败。对于 Telnyx 连接，它还可以为组织管理员以只读方式查找 Telnyx 将该号码分配到哪个连接。

---

## 后续步骤

<CardGroup cols={2}>
  <Card title="获取电话号码" icon="phone" href="/zh/guides/get-a-phone-number">
    完整的添加号码流程、ThunderPhone 号码和 VoIP。
  </Card>
  <Card title="自带号码（API）" icon="code" href="/zh/guides/bring-your-own-numbers">
    通过 REST 完成相同的连接、导入和验证流程。
  </Card>
  <Card title="运行外呼活动" icon="megaphone" href="/zh/guides/outbound-campaigns">
    CSV 列表、呼叫时间窗口和重试策略。
  </Card>
  <Card title="VoIP 连接参考" icon="phone-volume" href="/api-reference/voip-connections">
    连接、验证依据和导入中的每个字段。
  </Card>
</CardGroup>
