Changes in the Programmable Voice TwiML functionality will be documented here for your reference.
Additional changes to Voice TwiML processors have been made.
<Gather>
on your Twilio account.speechModel
attribute for <Gather>
now allows for specifying a provider_model
value—specifically that of Deepgram, a newly supported speech recognition provider. See the <Gather>
page for more details including supported providers, speech models, and updates to existing attributes.Additional changes to Voice TwiML processors have been made.
transcribeCallback
attribute, then your application also needs to specify transcribe=true
in order for Twilio to generate the transcription and send the callback to your application; it is no longer implicit.Additional changes to Voice TwiML processors have been made.
in-progress
state now result in the no-answer
final call state. Previously these calls resulted in the canceled
final call state.Additional changes to Voice TwiML processors have been made.
anonymous
or Anonymous
for caller ID-withheld calls. Your application will need to gracefully handle changes in string case.text/plain
but returns valid TwiML, Twilio will parse this appropriately. Previously, we would read the contents of the response as a <Say> before ending the call. Note that this behavior remains unchanged if the contents in the response are not valid TwiML.Additional changes to Voice TwiML processors have been made.
Digits
parameter. Previously, the Digits
parameter was not being resent to the redirected URL.Additional changes to Voice TwiML processors have been made.
POST
as its default HTTP method when the verb is returned from <Conference> waitUrls and <Enqueue> waitUrls with no method
attribute. Previously, the default HTTP method was GET
.Called
and Caller
parameters can now be overridden by the Voice SDK . Previously, only To
and From
parameters could be overridden when creating a device connection: JavaScript / iOS / Android / React Native.Additional changes to Voice TwiML processors have been made.
Additional changes to Voice TwiML processors have been made.
<Dial><Client>
, POST
to /Calls, and POST
to /Participants has been increased to 256 characters<Enqueue>
waitUrl webhook will now be ringing
; previously the sent status was in-progress
<Say>
verb will have the same behavior as the <Pause>
verb, and the call status sent to any following TwiML documents will be ringing
and not in-progress
; the overall call status will be determined by the subsequent TwiML verb<Play>
media fetch requestsAdditional changes to Voice TwiML processors have been made.
<Gather>
. This change brings this behavior into alignment with the behavior for <Enqueue>
waitUrl.Additional changes to Voice TwiML processors have been made.
From
numbers will no longer contain only digits: For example, an incoming caller ID could be anonymous
, unknown
, etc.<Play>
media fetches now use the same redirect behavior as status callbacks and other webhooks. This means that query parameters received at the initial URL will now be persisted to the redirected URL.We are beginning to roll out updates to our Voice TwiML processor. Some changes that may impact your call flows are:
<Hangup>
or <Reject>
will now be marked as no-answer or busy as determined by the verb<Play>
responses, but will not be collected for <Play>
verbs nested inside <Gather>
<Pause>
verb; previously no RTP was sent from Twilio while the <Pause>
verb executes<Record>
verb; previously no RTP was sent from Twilio while the <Record>
verb executesTo or From
parametersAnswering machine detection (AMD) can now be enabled when creating child calls using <Dial><Number>
and <Dial><Sip>
, or when creating a new conference participant via POST
to the /Participants API.
AMD will run in the background while the call connects and will return the results of our detection to inform your application when a human or machine answered, or when the voicemail message beep has been detected.
We are changing the behavior of <Dial>
. This could represent a breaking change for some call flows. The changes are:
<Dial>
action URL is specified, Twilio will make a request to the provided action callback when the parent call is transferred to a new TwiML via call modification<Dial>
action URL is specified, the parent call will continue to the next verb in the current TwiML document when the parent call is modified to use new TwiML. Note: in most cases the verb after the <Dial>
will not be executed since the call has been modified, but if the next verb is <Redirect>
Twilio will make a request to the provided URL.This change brings Enhanced Programmable SIP Feature enabled accounts behavior in alignment with the behavior of TwiML for non-enabled accounts.
The following functional improvements to <Dial>
TwiML verb are available:
<Dial>
now allows simultaneous or sequential dialing to up to ten <Number>
, <Client>
or <Sip>
endpoints in a single <Dial>
command
<Dial>
now supports Global Low Latency (GLL) when using <Dial hangupOnStar=”true”>
.
A new action callback parameter DialBridged
is added with value returned as true
only if the call was bridged with the parent. This is to distinguish the cases where the child call was hung up during screening vs bridged with the parent.
<Sip>
noun now supports the ringTone
parameter.To
and From
phone numbers of the dialed leg. Previously, the geographic data for the To
and From
numbers of the parent leg was used in the status callbacks for the dialed leg as well.Early audio will always be generated for the following scenarios
url
attribute is presentsendDigits
attribute is present<Dial>
verb will never be allowed in the TwiML returned by the screening
URL.<Hangup>
or <Reject>
in screening URL, DialCallStatus
will be set to completed
, previously it was set to no-answer
.
<Dial answerOnBridge="true">
, parent call status will be ringing
until the screening URL is complete. Previously it was set to in-progress
immediately.ringing
until answered and in-progress
when screening. Previously it was set to queued
until answered.<Dial answerOnBridge="true">
, the parent call will report a status of no-answer
until and unless it is bridged to the child call.DialCallStatus
will be set to completed
. Previously DialCallStatus
was set to no-answer
.