Skip to content

Record the call audio in the foreground pausing further SWML execution until recording ends. Use this, for example, to record voicemails. To record calls in the background in a non-blocking fashion, use the record_call

Properties

record

objectRequired

An object that accepts the following properties.

record.stereo

booleanDefaults to false

Whether to record in stereo mode

record.format

stringDefaults to wav

Format ("wav", "mp3", or "mp4")

record.direction

stringDefaults to speak

Direction of the audio to record: "speak" for what party says, "listen" for what party hears

record.terminators

stringDefaults to #

String of digits that will stop the recording when pressed

record.beep

booleanDefaults to false

Whether to play a beep before recording

record.input_sensitivity

numberDefaults to 44.0

How sensitive the recording voice activity detector is to background noise. A larger value is more sensitive. Allowed values from 0.0 to 100.0.

record.initial_timeout

numberDefaults to 4.0 seconds

How long, in seconds, to wait for speech to start?

record.end_silence_timeout

numberDefaults to 5.0 seconds

How much silence, in seconds, will end the recording?

record.max_length

number

Maximum length of the recording in seconds.

record.status_url

string

HTTP or HTTPS URL to deliver record status events. Learn more about status callbacks.

Variables

Set by the method:

  • record_url: (out) the URL of the newly created recording.
  • record_result: (out) success | failed.

StatusCallbacks

A POST request will be sent to status_url with a JSON payload like the following:

event_type

string

The type of event. Always calling.call.record for this method.

event_channel

string

The channel for the event, includes the SWML session ID.

timestamp

number

Unix timestamp (float) when the event was generated.

project_id

string

The project ID associated with the call.

space_id

string

The Space ID associated with the call.

params

object

An object containing recording-specific parameters.

params.call_id

string

The call ID.

params.node_id

string

The node handling the call.

params.control_id

string

The control ID for this record operation.

params.state

string

The current recording state. Valid values:recording, paused, finished, no_input, error.

params.url

string

URL to download the recording.

params.duration

number

Recording duration in seconds. Present when state is finished or no_input.

params.size

number

Recording file size in bytes. Present when state is finished or no_input.

params.recording_id

string

The unique identifier for the recording. Present when available.

params.start_time

number

Unix timestamp (seconds, float) when the recording started. Present when the recording has ended.

params.end_time

number

Unix timestamp (seconds, float) when the recording ended. Present when the recording has ended.

params.pause_behavior

string

How paused recording handles audio. Only present when state is paused. Valid values:silence, skip.

params.record

object

Recording configuration details.

record.audio.format

string

Recording format. Valid values:wav, mp3.

record.audio.direction

string

Direction of the audio recorded: speak or listen.

record.audio.stereo

boolean

Whether the recording was made in stereo mode.

Raw JSON example

{
  "event_type": "calling.call.record",
  "event_channel": "swml:xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "timestamp": 1640000000.123,
  "project_id": "xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "space_id": "xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "params": {
    "state": "finished",
    "control_id": "xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "call_id": "xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "node_id": "xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "url": "https://your-space.signalwire.com/api/v1/recordings/rec-uuid/download",
    "duration": 15,
    "size": 248320,
    "recording_id": "xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "start_time": 1640000000.123,
    "end_time": 1640000015.623,
    "record": {
      "audio": {
        "format": "wav",
        "direction": "speak",
        "stereo": false
      }
    }
  }
}

Examples

Record some audio and play it back

YAMLJSON

version: 1.0.0
sections:
  main:
    - play:
        url: 'say:Start speaking after the beep. Press hash to end recording.'
    - record:
        end_silence_timeout: 3
        beep: true
    - play:
        url: 'say:Recording ${record_result}. Playing back recording:'
    - play:
        url: '${record_url}'

SignalWire Developer Documentation