Best Practices
Building a production-ready meeting bot integration requires more than just calling an API. This guide covers the architectural and operational patterns used by the world's leading meeting intelligence platforms.
1. Handling "Ghost" Bots
A common issue is the "Ghost Bot," a bot that stays in a meeting long after everyone else has left, wasting credits and recording silence.
Automatic Stop Options
Skribby provides default stop_options that ensure your bot leaves gracefully. You only need to adjust these if you want to customize the behavior:
last_person_detection(Default:2mins): The bot will leave if it's the only participant left.silence_detection(Default:15mins): Essential if you expect other bots to be in the call. The bot will leave if no one is speaking for the configured duration.time_limit(Default:720mins): A hard ceiling (12 hours) to prevent run-away sessions.waiting_room_timeout(Default:10mins): How long the bot waits for admission before giving up.
2. Webhook Reliability
Your server will eventually miss a webhook due to network blips or deployments.
- Idempotency: Process webhooks based on
bot_idandtypeto ensure you don't double-count events. - Fallback Polling: If you haven't received a
status_updatetofinishedwithin 30 minutes of the expected meeting end, use theGET /bot/{id}endpoint to check the current state. - Security: Always verify webhook signatures to prevent spoofing.
3. Concurrency & Scalability
Skribby scales automatically, but your account is subject to concurrency limits based on your plan (Free: 3, PAYG: 25, Enterprise: Custom).
If you attempt to create a bot that exceeds your concurrency limit, the API will return a 403 Forbidden error with the message:
{"message":"You have reached the limit of concurrent meeting bots for your plan."}
Always monitor your active bot count if you are on a limited plan. You can view your current active bots directly in the dashboard.
4. User Experience (UX)
The "Admit" button is the #1 point of failure for meeting bots.
- Show Status: In your UI, show the bot's status (e.g.,
booting,joining,recording). - Help the User: If the status is
joining, show a message: "The bot is waiting to be admitted. Please check your meeting window." - Custom Metadata: Use the
custom_metadatafield to store your internalmeeting_idoruser_id. This makes it trivial to route webhook events back to the right part of your application.
5. Privacy & Compliance
- Transparency: Use the
initial_chat_messageto announce the bot's presence and purpose (e.g., "Hi! I'm the [App] bot here to take notes. Recording is in progress.") - Data Retention: By default, Skribby stores recordings for 7 days. If your app requires longer storage, enable the
store_recording_for_1_yearaddon. - Custom Retention: You can manage your own data retention by using the Delete Bot endpoint. Once you have downloaded the recording and transcript to your own storage, call the delete endpoint to permanently remove the data from Skribby's servers.