
本文详解如何通过 Twilio PHP SDK 发起外呼,并利用 TwiML 的 动词将被叫方与第三方号码实时语音桥接,完成真正的“语音对语音”通话,而非仅播放提示音。
本文详解如何通过 twilio php sdk 发起外呼,并利用 twiml 的 `
在 Twilio 中实现真正的双向语音通话(即:你的 Twilio 号码外呼用户 A,接通后自动呼叫用户 B,并将 A 与 B 实时桥接通话),关键不在于初始 calls->create() 的参数,而在于应答请求(Answering Request)所返回的 TwiML 文档逻辑——也就是你示例中 gomi.xml 所指向的 URL 响应内容。
你当前的 gomi.xml 仅使用
✅ 正确实现步骤
保持原有 PHP 外呼逻辑不变(已正确):
使用 Twilio PHP SDK 创建呼叫,目标为你自己的 Twilio 号码(+81yyyyyyyyyy),url 指向你托管的 TwiML 端点(如 http://development.example.com/gomi.xml)。更新 TwiML 响应为
桥接逻辑 :
将 gomi.xml 内容替换为以下结构(支持国际号码,建议带 + 和完整 E.164 格式):
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Dial record="true" timeout="30" callerId="+81yyyyyyyyyy">
<Number>+81zzzzzzzzzzzz</Number>
</Dial>
</Response>- record="true":可选,启用通话录音;
- timeout="30":拨打第三方号码的最大等待时长(秒);
- callerId:指定主叫号码(建议设为你的 Twilio 号码,确保合规显示);
内填写你要连接的真实外部号码(E.164 格式,如 +819012345678)。
? 提示:Twilio 会自动处理呼叫建立、忙线/无应答等状态。若被叫未接听,
会自然结束,主叫方听到忙音或挂断。
-
进阶:动态 TwiML(推荐生产环境使用)
避免硬编码 XML 文件,建议用 PHP 脚本动态生成 TwiML(例如 /dial.php?to=+81zzzzzzzzzzzz):
<?php
header('Content-Type: text/xml');
$to = $_GET['to'] ?? '+810000000000';
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
?>
<Response>
<Dial callerId="+81yyyyyyyyyy" timeout="30" record="true">
<Number><?php echo htmlspecialchars($to); ?></Number>
</Dial>
</Response>然后将外呼中的 url 改为:http://development.example.com/dial.php?to=+81zzzzzzzzzzzz
立即学习“PHP免费学习笔记(深入)”;
⚠️ 注意事项
- 号码验证:测试阶段,Twilio 账户默认仅允许拨打已验证的号码(包括你自己的手机号)。如需拨打未验证号码,请升级账户并完成电话号码验证或购买付费号码。
- 区域合规性:日本(+81)、美国(+1)等地区对 callerId 有严格要求,务必使用你拥有的 Twilio 号码作为 callerId,否则呼叫可能被拦截或显示为“未知号码”。
- HTTPS 要求:生产环境中,Twilio 强制要求 url 使用 HTTPS;开发阶段 HTTP 可用,但请尽早适配。
- 错误处理:PHP 中应捕获 SDK 异常(如网络超时、认证失败),而非仅依赖 $call 布尔值判断。
✅ 总结
实现 Twilio PHP 外呼+转接的核心在于:外呼触发 TwiML 端点 → 端点返回



















