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

使用Twilio C# API发起通话后自动挂断,如何保持在线?

解决Twilio通话自动挂断问题

Twilio执行完所有TWIML指令后会自动挂断通话,要保持通话在线,你需要让TWIML逻辑持续运行,不让流程走到终点。以下是几种可行方案:

方案1:长暂停+循环重定向

创建一个公开可访问的TWIML端点(比如ASP.NET Core的API接口),返回包含长暂停和重定向的TWIML:

<Response>
  <Say>Ahoy there!</Say>
  <!-- 暂停1小时,可根据需求调整时长 -->
  <Pause length="3600"/>
  <!-- 重定向回当前端点,形成循环 -->
  <Redirect>https://your-public-server.com/api/twiml/keep-alive</Redirect>
</Response>

然后修改C#代码,调用这个端点而非内嵌TWIML:

string accountSid = Environment.GetEnvironmentVariable("TWILIO_ACCOUNT_SID");
string authToken = Environment.GetEnvironmentVariable("TWILIO_AUTH_TOKEN");

TwilioClient.Init(accountSid, authToken);

var call = CallResource.Create(
  url: new Uri("https://your-public-server.com/api/twiml/keep-alive"),
  to: new Twilio.Types.PhoneNumber("+15558675310"),
  from: new Twilio.Types.PhoneNumber("+15552223214")
);

Console.WriteLine(call.Sid);

方案2:用Gather等待用户输入

通过<Gather>设置超长超时,让通话持续等待用户操作,超时后重定向回自身:

<Response>
  <Say>Ahoy there! Stay on the line, or press any key to continue.</Say>
  <!-- 超时设为1小时,finishOnKey设为#(用户按#可触发action) -->
  <Gather timeout="3600" finishOnKey="#" action="/api/twiml/keep-alive">
    <Say>Waiting for your input...</Say>
  </Gather>
  <!-- 超时后重定向,继续保持通话 -->
  <Redirect>/api/twiml/keep-alive</Redirect>
</Response>

方案3:WebSocket流连接(进阶)

使用Twilio的<Stream>动词建立WebSocket连接,只要WebSocket连接保持活跃,通话就不会断开。这种方式需要后端维护WebSocket连接,适合需要实时交互的场景:

<Response>
  <Say>Ahoy there! Starting stream...</Say>
  <Stream url="wss://your-websocket-server.com/stream"/>
</Response>

注意事项

  • 长时间通话会产生相应的Twilio费用,需根据业务需求控制时长。
  • 所有TWIML端点必须是公开可访问的HTTPS地址,Twilio无法调用本地未暴露的服务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 21:57:24