Daily's real-time transcription engine generates a live transcript (closed captions) during a meeting session. Additionally, the service gives you the ability to store the transcript to an S3 bucket in WebVTT format.
This guide will cover:
- Starting transcription and listening to events transcription generation
- Enabling domains & rooms for transcription storage (WebVTT)
- Enabling custom buckets to store transcriptions
There are 3 ways to start transcription:
- During a Daily Call you can use the daily-js method - startTranscription();
- Transcriptions can be invoked using our REST API.
- You can invoke live transcriptions by creating a meeting token containing the
auto_start_transcriptionproperty for any meeting owner. You can set the transcription configuration using the
Here is the list for the full set of transcription parameters.
transcriptId is returned in the
transcription-started event, which can be used with
/transcript REST APIs.
Generated transcriptions are broadcasted to the call via
In order to start transcribing a meeting using
startTranscription(), the user must have the permission of
canAdmin: 'transcription' set. Meeting owners always have this permission set; in fact, they have all admin privileges available. Non-owners can become transcription admins through two ways:
- The user joins with a meeting token, where the
permissionsproperty is configured to include
- A meeting owner grants the transcription permission by calling
updateParticipant()and setting the
For example, if you want to add closed captions to your meeting and you want any user to initiate the captioning, you can either:
- Configure the room to auto start the transcription. In this case, transcription will always be occurring.
- Set all users with the transcription admin privilege via a meeting token, so any user can initiate the transcription. In this case, you can call
startTranscription()so that transcription happens on demand.
Transcription messages are emitted through an event called
transcription-message. These events are emitted for all participants when a new transcription snippet is available.
Learn more about
An alternative approach to handling transcription messages:
- Transcription messages can also be received via the
transcription-messagewhich just contains the transcription text, the
datapayload specifying more about the transcription state.
- These transcription
"app-message"events will have a
- By listening to
"app-message"events emitted from the transcription service, text can be received and handled by your application.
- It's helpful to also listen for the
is_finalattribute to receive only completed sentences instead of sentence fragments.
- It's helpful to also listen for the
The properties that the data of a transcription
"app-message" contains are as follows:
|Whether the event contains a completed sentence or a sentence fragment
|The session ID of the participant being transcribed
|The contents of the transcription
|Timestamp of transcription generation
|The user ID of the participant being transcribed
Below is an example of listening and logging transcription messages in the browser console:
This is an optional step and only required if you want to save the live transcript from your session into a file.
The default for
enable_transcription_storage is false. Meaning, with
enable_transcription_storage: false, transcripts are generated and broadcasted but not saved.
To save the transcript, set the
enable_transcription_storage property to
"true" at the room level or at domain level.
Enabling for a specific room
Enabling at the domain level
By default, transcripts are stored in Daily's cloud storage. You can change where your transcripts are stored & managed through the
transcription_bucket domain property.
This is similar to setting up your own custom S3 storage for recordings. See the full guide here.
Enabling a custom bucket for transcription