---
title: "Answer incoming calls in the browser with ring groups"
description: "Route a number or your default route to a ring group, and incoming calls ring its online members in the dashboard phone until one answers."
canonical: "https://bird.com/changelog/docs-update-2026-11-02-ec4e2cc"
---

Your team can now answer incoming calls in the [browser phone](/docs/guides/voice/phone). Choose **Online** in the dashboard phone, and a call for one of your **ring groups** rings with the ringtone you picked and shows a system notification with the caller's number and contact name. The first member to select **Accept** takes the call, and it stops ringing for everyone else. Choose **Busy** to keep placing calls without being rung.

Every workspace starts with a **Default** group that rings everyone online. Add your own, such as support or sales, and point a number or your workspace's default inbound route at the group that should answer it. Members are rung five at a time until one of them answers, and after three missed calls in a row the phone stops ringing that member until they choose **Back online**.

Manage groups from **Voice → Ring groups** in the dashboard, or through the API, SDKs, CLI (`bird voice ring-groups`), and MCP: [create a group](/docs/api/reference/create-voice-ring-group) and [add members](/docs/api/reference/create-voice-ring-group-member) by user ID, then set a number's or the workspace's route `type` to `ring_group` (see [update a number](/docs/api/reference/update-voice-number) and [update voice settings](/docs/api/reference/update-voice-settings)). A workspace can have up to 50 groups beyond the default, each with up to 200 members. See the [ring groups guide](/docs/guides/voice/ring-groups) for the full walkthrough.

Also in this release:

- **Email template personalization isn't just for broadcasts anymore.** An individual, batch, or scheduled send can now use `{{ bird.contact.* }}` placeholders: Bird looks up each To address's contact in your workspace, and Cc/Bcc recipients receive a personalized copy for every To. A To with no matching contact rejects the send with `422` (`E04099`). See [personalizing with variables](/docs/guides/email/templates#personalizing-with-variables) and [create an email message](/docs/api/reference/create-email-message).
- **Broadcast templates can loop again.** A broadcast template can now use `{% for %}` over a local list built with `split`, and, when it takes no caller parameters, literal ranges and `{% tablerow %}` too. Broadcast parameters stay scalar-only; arrays and objects still aren't supported.
- **Large files can upload to the media library in the background.** New [asset upload session](/docs/api/reference/create-asset-upload-session) endpoints let a client transfer bytes directly to temporary storage and complete the upload asynchronously, instead of a single multipart request, with sessions capped per workspace and organization.
- **SMS and WhatsApp message history masks sensitive template values instead of fully redacting them.** A one-time code sent through a system template now reads with one asterisk per digit in its surrounding text; only authentication messages without declared sensitive variables still read `**REDACTED**`.

## Related resources

- [Voice](/voice-api) (product)
- [Voice overview](/docs/guides/voice/overview) (docs)
- [What is a voice API?](/explained/voice/what-is-a-voice-api) (answer)

[Get an implementation brief](/learn/workspace?topic=voice)
