Bots FAQ

Frequently asked questions about bots

What is the partial_results parameter in Create Bot.real_time_transcription?

Partial results are low-confidence intermediate results transcription providers output that are significantly lower latency. They often contain just a fragment of a sentence, and previous partial results can be overriden by future results as the transcription model receives more data.

For example if I am saying "Hello, welcome to the meeting":

  • The partial results could be a sequence of the following:
    • "Hello"
    • "Hello, well"
    • "Hello, welcome too"
    • "Hello, welcome tooth"
    • "Hello, welcome to the"
    • "Hello, welcome to the me"
    • "Hello, welcome to the meeting"
  • While the final result would just be the entire phrase "Hello, welcome to the meeting"

With partial_results set to false, you will not receive results marked as "partial" from the transcription provider.

What is enhanced_diarization in Get Bot Transcript?

The speaker diarization in the transcript is obtained from speaker events that we get directly from the platforms themselves (there is no AI involved). Sometimes the timing of these speaker events aren’t 100% accurate, which results in the last few words of a sentence getting grouped into the next speaker.

enhanced_diarization applies heuristics on the transcript and speaker timeline that makes sure speaker changes don’t happen in the middle of a sentence, so any straggling words in the next speaker get grouped back into the previous speaker.

For example, without enhanced_diarization it might look like:

  • Amanda: Hello, how was your
  • David: day? It was good.

With enhanced_diarization it becomes:

  • Amanda: Hello, how was your day?
  • David: It was good.

What do negative speaker timeline timestamps mean?

The timestamp is second offsets to the bot in_call_recording event. Negative timestamps mean the active speaker change was received before the bot started recording. The bot joins the call first and records after a brief delay, as it takes a moment for the audio and video streams to connect.

What does the sub code timeout_exceeded_only_bots_in_call mean ?

Some meeting platforms (e.g Google Meet/Teams) do not/partially support ending the meeting for all participants in the call. In such cases, if there are multiple bots in the call (Recall and/or other services), the Recall bots will not shutdown automatically solely based off the automatic_leave.everyone_left_timeout value. This is because the timeout value is considered if a Recall bot is the only remaining participant in the call.

In order to mitigate such scenarios, Recall bots will periodically(every 1m) check the call for existence of only bot participants and automatically shut down if the call has only bot participants in it, thus emitting the timeout_exceeded_only_bots_in_call call ended code.

How is a participant categorised as bot ?

Currently we use the voice activity based heuristic and if a participant has not produced any voice activity for the entire duration of the call (i.e no active speaker events) they are categorised as a bot participant.

Additionally there is a buffer period of 10m at the beginning of the call during which bot detection is turned off. This is present to avoid any false positives and bot's shutting down earlier than expected. (For e.g participant's joining in late, meeting starting late).

We are exploring alternative heuristics for bot detection to improve this further.

How should I keep track of bot-hours used by my customers?

If you're implementing a pricing model where your customers have a fixed number of recording hours, you'll want to keep track of how many hours each customer is using. There are a few steps to this:

  1. When calling Create Bot, keep track of which user the returned bot ID belongs to
  2. When the bot completes, you'll get a done bot status webhook, containing the bot ID
  3. You can then call Retrieve Bot with that bot ID, and inspect the status_changes field
  4. If the bot joined the call, and recorded, there will be an in_call_recording status change
  5. You can calculate the total time the bot recorded for by calculating the difference between timestamps of the in_call_recording event and the done event.

Why am I not getting transcription?

The bot does not do transcription by default -- you must enable real-time transcription when you create the bot, or you must request async transcription once the bot has completed recording.

If you want real-time transcription, you must specify transcription_options.provider when Creating the Bot. Specifying this parameter will cause transcription to be done, which can be retrieved through the Get Bot Transcript endpoint.

If you want to get the transcript pushed to your server, you can also specify the real_time_transcription.webhook_url parameter, which will cause the transcription to be sent as a webhook to the specified URL.

If you want transcription only after the call is done, and you're OK with waiting for a few minutes, you can request async transcription with the Analyze Bot Media endpoint. This will trigger an async transcription job, and you will receive an analysis_done webhook once the job is completed. You will then be able to retrieve the transcription using the Get Bot Transcript endpoint.

Is bot data encrypted?

Bot data is encrypted at rest in our database for additional security.


How do I get explicit consent from participants?

One common way to get explicit consent from participants is to send emails to participants prior to the meeting, notifying them that the meeting will be recorded. Here you can provide a link that participants can click to provide their consent or non-consent, which you can keep track of for GDPR.

Another way is to have a custom meeting link where it redirects participants to a landing page where it tells the participants they will be recorded, and to only enter if they consent to be recorded. It should also include instructions for the user to withdraw their consent.

For more information, check out #4 and #5 on this post.