Call Recording
Call recording is generally available in Rasa Pro 3.19.
Call recording captures the audio of a voice conversation between a caller and your Rasa assistant. Use it to review calls, debug voice behaviour, or keep an audio archive of production conversations.
This page describes how to enable recording, where files are stored, and how custom connectors can participate.
Supported channels
Call recording is available on all built-in voice stream channels:
- AudioCodes Voice Stream
- Jambonz Stream
- Twilio Media Streams
- CHIRP
- Genesys Cloud
- SignalWire
- Vonage
- Browser Audio (Voice Inspector)
It is not available on voice-ready connectors such as AudioCodes VoiceAI Connect, Jambonz, or Twilio Voice.
Custom voice stream connectors can record calls if they use RecordingSession
as described in Custom connectors.
Enable call recording
Add a recordings block to endpoints.yml. Recording is configured once for
the assistant and applies to every supported channel.
- Local disk
- Amazon S3
- Azure Blob Storage
recordings:
enabled: true
provider: local
local:
path: ./recordings
recordings:
enabled: true
provider: s3
s3:
bucket: your-bucket-name
region: eu-central-1
prefix: recordings/
recordings:
enabled: true
provider: azure
azure:
container: your-container-name
account_name: yourstorageaccount
prefix: recordings/
The recordings configuration accepts the following properties:
General settings
enabled(optional): Turn call recording on or off. Defaults tofalse.provider: Storage backend for saved recordings. One oflocal,s3, orazure.
Local storage
path: Directory on disk where recordings are written. Defaults to./recordings.
Amazon S3
bucket: Name of the S3 bucket where recordings are saved.region: AWS region of the bucket.prefix: Key prefix (folder) inside the bucket.
Authenticate with AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY, or with an
IAM role that can write to the bucket. See Amazon S3 Storage
for the same credential pattern used elsewhere in Rasa.
Azure Blob Storage
container: Name of the Azure container where recordings are saved.account_name: Storage account that owns the container.prefix: Blob prefix (folder) inside the container.
Authenticate with AZURE_ACCOUNT_KEY (or another credential supported by the
Azure SDK). See Azure Storage
for the same credential pattern used elsewhere in Rasa.
How recordings work
When recording is enabled, Rasa attaches a RecordingSession to each voice
call. User audio from the inbound stream and bot audio from text-to-speech are
written into that session until the call ends. The finished file is then
uploaded or written to the configured provider.
What is recorded
Rasa records both sides of the call:
- Caller audio as it arrives on the voice stream.
- Assistant audio as it is sent to the caller (TTS output).
Custom connectors must record bot audio explicitly; see Custom connectors. If they skip that step, the file contains only caller audio.
When recording starts and stops
Recording starts when the voice session is established and stops when the
call ends (hang-up, disconnect, or channel error). There is no separate
start or stop action: if recordings.enabled is true, every call on a
supported channel is recorded.
File format and naming
Recordings use the same audio format as the channel. See Audio format.
Files are stored under the configured path or prefix. Each call produces
one recording for that session.
Store and retrieve recordings
Rasa does not serve recordings over an HTTP endpoint. After the call ends, read the file from the storage you configured:
- Local: files in
path(default./recordings). Ensure the process can write there. With more than one replica, use a shared volume or a cloud provider; local disk is not shared across instances. - S3: objects in
s3://<bucket>/<prefix>. - Azure: blobs in the given container under
prefix.
Rasa does not delete recordings. Set retention on the bucket, container, or disk according to your policy.
Custom connectors
If you implement a custom voice output channel and override send_audio_bytes,
call record_bot_audio on RecordingSession before sending audio so bot turns
are included in the recording. See Call recording on streaming channels
in the custom connectors reference.
async def send_audio_bytes(self, recipient_id: str, audio_bytes: RasaAudioBytes) -> None:
if self.recording_session is not None:
self.recording_session.record_bot_audio(audio_bytes)
# send audio to the voice platform
User audio is recorded by the channel as frames arrive. You only need this hook when you replace the default bot-audio send path.
Limitations
- Built-in voice stream channels record automatically when
recordings.enabledistrue. Custom connectors must useRecordingSessionas described above. - Overriding
send_audio_byteswithout callingrecord_bot_audioomits assistant audio from the file. - Local storage is not suitable for horizontally scaled deployments unless every replica shares the same writable volume.
- Cloud providers require network access and credentials with write permission. Failed uploads are not retried as a user-facing download API.
- There is no built-in UI or webhook to play or list recordings.
Call recordings may contain personal data and payment or health information spoken on the call. Confirm that you have a lawful basis to record (including caller notice or consent where required), restrict who can read the files, and set retention to match your organization's policy and local regulations.