chatwoot/app/javascript/dashboard/components-next/message/bubbles
Muhsin Keloth 353089473e
feat(voice): Assignment aware visibility and join conflict for inbound calls (#14333)
### Description
Inbound voice calls now route ownership cleanly: the call widget is
hidden from agents who aren't the conversation assignee, the first agent
to pick up becomes the assignee, and any later join attempt by another
agent is rejected with a clear "<agent> is already handling the call."
alert.

Closes
https://linear.app/chatwoot/issue/PLA-98/inbound-voice-calls-assignment-aware-visibility-auto-assignment-on

### How to test

1. As Agent A and Agent B, open the dashboard for the same voice inbox
in two browsers.
2. Place an inbound call to the inbox with the conversation
**unassigned** — both agents should see the call widget.
3. Have Agent A click **Join**. Agent A's widget transitions to the
active call; Agent B's widget disappears (conversation is now assigned
to Agent A).
4. While the call is in progress, attempt to join from a third agent
(e.g., via the bubble in the conversation timeline) — the join is
rejected with the toast `Agent A is already handling the call.`
5. Resolve the conversation, then place a second call to a conversation
that is already manually assigned to Agent A — only Agent A sees the
widget; nobody else does.
6. Race test: trigger two near-simultaneous join attempts (two agents
click Join within a few hundred ms of each other) — exactly one wins;
the other gets the conflict alert.

---------

Co-authored-by: Muhsin <12408980+muhsin-k@users.noreply.github.com>
2026-04-30 18:38:10 +04:00
..
Email fix: Respect app direction for incoming email content (#14011) 2026-04-14 13:45:34 +05:30
Template chore: Update theme colors and add new Inter variable fonts (#13347) 2026-01-28 14:36:04 -08:00
Text chore: Improve translation service with HTML and plain text support (#11305) 2025-04-16 17:59:06 +05:30
Activity.vue chore: Update message bubble orientation (#11348) 2025-05-06 13:21:52 +05:30
Audio.vue fix: Fix the issue with context menu for right click on images and videos (#11114) 2025-03-19 20:09:44 -07:00
Base.vue fix: Formatting issue with reply preview content (#13399) 2026-01-30 16:35:32 +05:30
BaseAttachment.vue fix: Truncate name in attachment bubble (#11540) 2025-05-27 14:24:43 -06:00
Contact.vue feat: Show shared contact's name in Telegram channel (#10856) 2025-02-11 19:39:54 +05:30
CSAT.vue feat: Improve CSAT responses (#11485) 2025-05-16 14:18:52 +05:30
Dyte.vue chore: Remove older UI (#11720) 2025-07-01 09:43:44 +05:30
Embed.vue feat: TikTok channel (#12741) 2025-12-17 07:54:50 -08:00
File.vue feat: integrate new bubbles (#10550) 2024-12-19 18:41:55 +05:30
Form.vue feat: Add message support for input_select type in LINE (#11628) 2025-06-10 15:10:51 +05:30
Image.vue feat: add retry loadWithRetry composable (#12873) 2025-11-20 19:40:20 +05:30
InstagramStory.vue feat: Display story replies with attachment and context label (#13356) 2026-01-28 16:47:04 +04:00
Location.vue feat: integrate new bubbles (#10550) 2024-12-19 18:41:55 +05:30
Unsupported.vue chore: Add unsupported message for Tiktok (#13380) 2026-01-28 19:34:11 +04:00
Video.vue fix: Video bubble click and play issue (#12764) 2025-11-05 15:40:11 +05:30
VoiceCall.vue feat(voice): Assignment aware visibility and join conflict for inbound calls (#14333) 2026-04-30 18:38:10 +04:00