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

Twilio Dial超时处理与通话录音回调配置咨询

Handling Call Timeouts and Post-Completion Actions with TwiML

Alright, let's break down how to handle both your scenarios—timeout-driven voicemail and post-call method execution—while clarifying where to place those callback configurations.

Key Distinction: Number vs. Dial Callback

First, let's clear up the confusion between the number's statusCallback and the <Dial> verb's statusCallback:

  • Number-level statusCallback: Triggers for the entire lifecycle of the incoming call (e.g., when the call rings, is answered, or ends, regardless of whether a <Dial> was used).
  • <Dial> verb's statusCallback: Only triggers for events related to that specific Dial action (e.g., when the Dialed party answers, hangs up, or the call times out).

For your use case, we'll leverage both the <Dial> verb's action and statusCallback attributes to handle each scenario separately.


Step 1: Initial Incoming Call Response

Start with a TwiML response that initiates the Dial, sets a timeout, and defines where to route after the Dial completes:

<Response>
  <!-- Set timeout (e.g., 20 seconds) before considering the call unanswered -->
  <Dial 
    action="/handle-dial-outcome" 
    timeout="20" 
    statusCallback="/handle-dial-status"
    statusCallbackEvent="initiated,answered,completed"
  >
    <Number>+1234567890</Number> <!-- Replace with your target number -->
  </Dial>
</Response>
  • action="/handle-dial-outcome": This URL is hit after the Dial action finishes (whether it times out, connects, or fails). We'll use this to handle the voicemail flow.
  • statusCallback="/handle-dial-status": This URL receives updates about the Dial's state. We'll use the completed event to trigger your post-call method.
  • statusCallbackEvent: Explicitly list the events you care about to reduce unnecessary requests.

Step 2: Handle Dial Timeout (Voicemail Flow)

When the Dial times out, Twilio sends a request to your action URL with a DialCallStatus parameter set to no-answer. Use this to trigger the recording flow:

TwiML for /handle-dial-outcome

<Response>
  <!-- Check if the Dial timed out (parse the DialCallStatus parameter in your backend) -->
  <Say voice="alice">Sorry, no one is available to take your call. Please leave a message after the beep.</Say>
  <!-- Record the message and trigger the recording status callback -->
  <Record 
    recordingStatusCallback="/handle-recording-status"
    maxLength="300" <!-- Limit recording to 5 minutes -->
    finishOnKey="#" <!-- Let caller end recording with # -->
    playBeep="true"
  />
</Response>
  • recordingStatusCallback="/handle-recording-status": After the recording finishes (or fails), Twilio sends details like the recording URL and status to this endpoint for your processing.

Step 3: Trigger Post-Call Method on Successful Connection

When the Dialed party answers and the call later ends, Twilio sends a completed event to your <Dial>'s statusCallback URL. In your backend code for /handle-dial-status, check the CallStatus parameter:

  • If CallStatus equals completed, execute your specified method (e.g., log the call, send a notification, etc.).

This approach is more precise than using the number's statusCallback because it only triggers when the Dial action successfully connected and ended—ignoring cases where the caller hung up before the Dial even started.


Quick Recap

  1. Use <Dial action> to handle post-Dial outcomes (like timeout → voicemail).
  2. Use <Dial statusCallback> to trigger your method only when a successful call completes.
  3. Use <Record recordingStatusCallback> to handle post-recording logic.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:08:08