You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Twilio PHP REST API向IVR分阶段发送DTMF按键?

如何通过Twilio PHP API向IVR发送多段DTMF按键?

场景:我需要拨打一个设置了IVR的号码,该IVR提示按1选择英语、按2选择西班牙语,选定语言后要求输入6位数字。请问如何通过DTMF传递后续的6位数字?

我已查阅文档并搜索相关内容,但未找到有效解决方案。

我的尝试代码如下:

$twilio = new Client("AC8b2cc96be2a8dbc059f2908exxxxxxxx", "88db8eeb71124a3effd6c196xxxxxxxx");
$from = "+1289724xxxx";

$to = "+1289670xxxx";

$call = $twilio->calls
               ->create($to, // to
                        $from, // from
                        [
                            "method" => "GET",
                            "sendDigits" => "wwwwwwwwww1",
                            "sendDigits" => "wwwwwwwwwwwwwwwwww123456", // 去掉此行时可正常发送第一个按键
                            "url" => "http://demo.twilio.com/docs/voice.xml"
                        ]
               );

print($call->sid);

问题分析

你代码里的核心问题是PHP数组中重复的键会被后面的覆盖,所以第一个sendDigits设置的"wwwwwwwwww1"被第二个覆盖了,导致实际只发送了"wwwwwwwwwwwwwwwwww123456",这就是为什么去掉第二行后第一个按键能正常发送的原因。

另外,直接在呼叫发起时用sendDigits需要精准控制等待时间,确保IVR流程走到对应步骤再发送按键。

解决方案

方案1:合并sendDigits参数

把两段按键和对应的等待时间合并到同一个sendDigits值里,用w表示0.5秒的等待,根据IVR的实际响应速度调整等待时长:

$twilio = new Client("AC8b2cc96be2a8dbc059f2908exxxxxxxx", "88db8eeb71124a3effd6c196xxxxxxxx");
$from = "+1289724xxxx";
$to = "+1289670xxxx";

$call = $twilio->calls
               ->create($to, $from, [
                   "method" => "GET",
                   // 先等3秒(6个w)按1选语言,再等3秒输入6位数字
                   "sendDigits" => "wwwwww1wwwwww123456",
                   "url" => "http://demo.twilio.com/docs/voice.xml"
               ]);

print($call->sid);

方案2:使用自定义TwiML控制(更灵活)

如果IVR流程的延迟不稳定,建议用TwiML来分步发送按键,这样能更精准地控制等待时间:

  1. 创建一个返回TwiML的文件(比如voice_response.php):
<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <!-- 等待3秒,确保IVR语言选择提示加载完成 -->
    <Pause length="3"/>
    <!-- 发送1选择英语 -->
    <SendDigits>1</SendDigits>
    <!-- 等待3秒,确保IVR跳转到输入数字的步骤 -->
    <Pause length="3"/>
    <!-- 发送6位数字 -->
    <SendDigits>123456</SendDigits>
</Response>
  1. 修改呼叫代码,将url指向这个自定义TwiML文件:
$twilio = new Client("AC8b2cc96be2a8dbc059f2908exxxxxxxx", "88db8eeb71124a3effd6c196xxxxxxxx");
$from = "+1289724xxxx";
$to = "+1289670xxxx";

$call = $twilio->calls
               ->create($to, $from, [
                   "method" => "GET",
                   "url" => "https://你的域名/voice_response.php"
               ]);

print($call->sid);

说明

  • 方案1适合IVR流程固定、延迟可预估的场景,配置简单;
  • 方案2更灵活,能根据IVR的实际响应调整等待时长,避免按键发送过早导致无效操作。

内容的提问来源于stack exchange,提问作者NomanJaved

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 18:39:42