Skip to main content

<Record>

The <Record> verb creates an audio file with the caller's voice and returns the URL to you. Text transcriptions of these recorded calls can also be produced.

Recordings remain stored indefinitely. To delete a recording, use the appropriate API call from the Compatibility API.

Any instructions placed after the <Record> verb will not be executed. To ensure additional instructions are processed, use the action attribute to specify a URL that SignalWire will request once the recording is complete.

Verb Attributes

Attribute
action optionalThe action attribute takes in an absolute or relative URL. SignalWire will make a GET or POST request to this URL when recording is completed. The current document's URL will be requested if no action is provided which can lead to unwanted looping behavior if you're not careful. See below for specified request parameters.
method optionalThe method attribute specifies whether the request to action is a GET or a POST. Valid values are GET or POST. Default value is POST.
timeout optionalThe timeout attribute specifies the number of seconds of silence that ends a recording.
finishOnKey optionalThe set of digits, (0-9, *, #), that can end a recording.
maxLength optionalThe maximum length, in seconds, of the recording. Particularly, a value of zero means 3600 seconds.
playBeep optionalWhether or not a sound is played before the start of a recording. Default is true.
trim optionalWhether or not silence in the beginning and end of recordings are removed. Allowed values are trim-silence and do-not-trim. Default value is trim-silence.
recordingStatusCallback optionalThe recordingStatusCallback attribute takes in an absolute or relative URL. SignalWire will make a GET or POST request to this URL when recording is accessible. See below for specified request parameters.
recordingStatusCallbackEvent optionalThe different recording statuses. Possible values are completed, in-progress, and absent. To specify multiple events, separate with a space. Defaults to completed.
recordingStatusCallbackMethod optionalThe type of HTTP request to use when requesting a recordingStatusCallback. Default is POST.
storageUrl optionalThe storageUrl attribute accepts an absolute URL as the destination to send a recording to, if you prefer to host your own recordings and bypass SignalWire storage.
storageUrlMethod optionalSpecifies which HTTP verb to use when sending the recording to the storageUrl. Available values are: POST and PUT. Defaults to POST.
transcribe optionalThe transcribe attribute identifies whether to produce a text transcription of the recording. There is an additional charge for this service, so is turned off by default.
transcribeCallback optionalThe ability to define a URL to which SignalWire will make a POST request to once the transcription is complete. See below for specified request parameters.
the sound of silence

If no audio data is received, including when a caller is silent and trim-silence is enabled, SignalWire will not save a recording. If you wish to save silence, be sure to set trim="do-not-trim".

Note also that SignalWire will trim leading and trailing silence from your audio files, causing the duration of calls to be less than the time spent recording.

avoid looping

When recording finishes, including when no audio data is received, <Record> will always request its action URL and process the cXML instructions that are returned. If no action URL is set, SignalWire will re-request the current cXML document's URL by default. This can lead to unwanted looping behavior, so make sure to end the call using action as seen in the Recording a Voicemail example.

Request parameters for action URL

The action request contains the Standard Request Parameters as well as:

Parameter
RecordingUrl stringThe URL of the recorded audio file.
RecordingDuration integerThe duration, in seconds, of the audio recording.
Digits stringThe buttons pressed to end a recording.

Request parameters for recordingStatusCallback

The recordingStatusCallback request contains the following parameters:

Parameter
AccountSid stringThe unique ID of the Account this call is associated with.
CallSid stringA unique identifier for the call. May be used to later retrieve this message from the REST API.
RecordingSid stringThe unique identifier for the recording.
RecordingUrl stringThe URL for the audio recording.
RecordingStatus stringThe status of the recording.
RecordingDuration integerThe duration, in seconds, of the recording.
RecordingChannels integerThe number of channels in the recording.
RecordingSource stringThe type of call that initiated the recording.

Request parameters for transcribeCallback

The transcribeCallback request contains the Standard Request Parameters as well as:

Parameter
TranscriptionSid stringThe unique, 34 character ID of the transcription.
TranscriptionText stringThe text of the transcription.
TranscriptionStatus stringThe status of the transcription (completed or failed).
TranscriptionUrl stringThe URL for the transcription's REST API resource.
RecordingSid stringThe unique, 34 character identifier for the recording from which the transcription was generated from.
RecordingUrl stringThe URL for the audio recording from which the transcription was generated from.

Nesting

No other verbs can be nested within <Record> and you cannot nest <Record> within any other verbs.

Examples

Recording a Voicemail

<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Say>
Please leave a message at the beep.
Press the pound key when finished.
</Say>
<Record
action="http://your-application.com/handleRecording.php"
method="GET"
maxLength="15"
finishOnKey="#"
/>
</Response>

This prompt will play before the 'beep', asking the caller to leave a message. The caller can only leave a message that is 15s long.

Transcribing a Recording

<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Record
transcribe="true"
transcribeCallback="http://your-application.com/handle_transcribe.php" />
</Response>

SignalWire will record the caller and transcribe the recording once it is complete. Then, SignalWire will make a POST request to the transcribeCallback URL with the transcription as a parameter.