Bots FAQ

Frequently asked questions about bots

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.

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

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. You can calculate the total time the bot recorded for by calculating the difference between timestamps of the joining_call 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 recording_config.transcript when Creating the Bot.

Is bot data encrypted?

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

Why do my bots show up later than the join_at time?

Since booting up and navigating to a specific meeting takes time, you may notice that your bots don't arrive exactly at the join_at time when scheduling bots. This is expected.

If your use case requires bots to show up exactly at a specific time (e.g. the top of the hour), then we recommend accounting for this by setting the join_at to be 10-15 seconds earlier.

How do I update a lot of bots at once?

Currently we don't have a batch update endpoint, so the recommended approach is to update each bot ID using the Update Scheduled Bot endpoint (or the Schedule Bot For Calendar Event endpoint if using the Calendar V2 integration). Note that you can only update scheduled bots (e.g. that haven't been deployed yet).

Keep in mind that these endpoints are rate limited to 600 requests/min.

How can I close a websocket connection with the bot?

There isn't a way to close a websocket with a bot. You should return success instead to avoid unnecessary reconnections

Do bots support aliased or redirect link to a valid meeting platform meeting url?

No, bots only support the real meeting urls generated by the meeting platform. Instead, you can extract the destination URL from the redirect and create/schedule the bot for the meeting using that link instead.

We recommend extracting the destination URL from redirect links created by (but not limited to) the following:

  • Microsoft Defender
  • Calendly
  • SafeLink
  • Mimecast
  • Proofpoint (urldefense)
  • Cal.com

Is there a list of static IPs/ranges for bots to allowlist?

We don't have a range of IP addresses you can allowlist ahead of time because each bot spins up on its own EC2 instance which has a dedicated IP

You can still secure their services through other means though, the most common being providing a short-lived token as a query parameter in the URL you provide to the bot to connect to. With this approach, you can validate the token on your end to secure access

How do I handle bot rescheduling close to the join_at time?

Since bots cannot be updated within 10 minutes of their join_at time, if you need to reschedule a bot close to the meeting start, we recommend:

  1. Try to update the join_at using the Update Scheduled Bot endpoint.
  2. If you receive a 400 with a code of update_bot_failed, then attempt to call the Delete Scheduled Bot endpoint. If this succeeds, simply recreate the bot for the new join_at time using Create Bot.
  3. If the bot has already started joining the call, you'll receive a 400 with a code of cannot_delete_bot. You can then call the Remove Bot From Call endpoint if you'd like to remove it, and schedule a new bot for the new join_at using Create Bot.

Why is the recording config data I passed to the Create Bot endpoint returning null?

We retain the recording config data (e.g. meeting URL, platform, transcription options, etc.) for 2 weeks from when the bot ended the call. After the 2 week period, the recording config data you pass the bot will return null. Note that metadata you set will be retained even after the recording config expires.

What are the different errors that can be returned from the API when updating a scheduled bot?

Error

Description

Only scheduled bots can be updated

This error occurs when:

  • You attempt to update an ad-hoc bot (bot was created without a join_at set) using the Update Scheduled Bot endpoint after 14 days since the bot's done event

Only non-dispatched bots can be updated

This error occurs when:

  • You then attempt to update the bot using the Update Scheduled Bot endpoint after it has been dispatched for the call (bot is current state is between joining_call and call_ended states)

Cannot update scheduled bot

This error occurs when:

  • You attempt to update a bot using the Update Scheduled Bot endpoint after 14 days since the bot's done event

Not enough time to launch new bot

This error occurs when:

  • You created a scheduled bot (bot created with join_at set more than 10 minutes in the future)
  • You attempt to update the bot with a join_at set to less than 10 minutes from the current time

Can I change the bot's profile picture?

You may want to change how a bot's profile picture / avatar appears in the participants list.

On all meeting platforms, participants can only have profile pictures if they are signed in to an account. By default, Recall bots join anonymously (i.e. without signing into an account), so you are unable to modify their profile pictures. However, if you implement signed-in bots, you can customize the profile picture of the account that the bot signs into.

How to delete bots and media from the dashboard?

In the bots dashboard, click the three dots next to the bot id. From here, you will be shown 3 options:

  • Delete - deletes a bot that is scheduled to join a call
  • Remove from call - removes a bot from a call live. bot data can't be deleted
  • Delete media - deletes all recording media associated with the bot

Recording Consent


How do I get explicit consent from participants?

For more information, check out this post.

Pre-join explicit recording consent

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.

On-join explicit recording consent

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.