Answer incoming calls in the browser with ring groups
Your team can now answer incoming calls in the browser 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 and add members by user ID, then set a number's or the workspace's route type to ring_group (see update a number and 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 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 with422(E04099). See personalizing with variables and create an email message. - Broadcast templates can loop again. A broadcast template can now use
{% for %}over a local list built withsplit, 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 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
Continue with the documentation, guides and examples for this topic.