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

使用Twilio C# SDK时,Enqueue前Say语音无法播放的问题咨询

问题原因与解决方案

问题根源

当TwiML中包含带workflowSid的<Enqueue>标签时,Twilio会立即将呼叫转交给TaskRouter工作流,不会等待前面的<Say>语音播放完成。这是TaskRouter集成的设计逻辑——优先快速接入路由分配流程,跳过了媒体播放的等待环节。

解决方法

方案一:拆分播放与入队操作(推荐)

将语音播放和入队分成两个独立的TwiML响应,确保语音播放完成后再触发入队:

  1. 第一步返回仅包含<Say>的TwiML,通过action属性指定一个后端接口地址,让Twilio在语音播放完毕后自动请求该接口:
twiml.Say("I am sorry, I am having trouble understanding you.", action: new Uri("https://你的后端域名/enqueue-after-say"));
  1. 在/enqueue-after-say接口中,返回包含<Enqueue>的TwiML:
var _errorPaying = JsonConvert.SerializeObject(new { ActionID = 6, Notes = "Error paying with credit card" });
var enqueue = new Enqueue(workflowSid: _configurationFacility.PaymentCallWorkFlow);
enqueue.Task(_errorPaying);
twiml.Append(enqueue);
return twiml;

方案二:固定延迟入队(不推荐)

如果不想拆分请求,可以在<Say>后添加<Pause>标签,设置与语音播放时长匹配的延迟,再执行<Enqueue>。但这种方式依赖固定时长,语音语速、语言包变化都会导致延迟不准确,仅作为临时替代方案:

twiml.Say("I am sorry, I am having trouble understanding you.")
     .Pause(5) // 假设语音播放需要5秒,根据实际情况调整
     .Append(enqueue);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:18:37