chatwoot/app/javascript/dashboard/composables
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
..
captain feat: add captain editor events (#13524) 2026-02-17 13:26:56 +05:30
chatlist feat: Allow removing labels via conversation context menu (#13525) 2026-02-17 13:30:55 +05:30
commands feat: new Captain Editor (#13235) 2026-01-21 13:39:07 +05:30
spec feat: Add voice calling as a capability on Twilio SMS channel(Enterprise) (#13963) 2026-04-29 11:32:19 +04:00
utils feat: new Captain Editor (#13235) 2026-01-21 13:39:07 +05:30
emitter.js feat: Reconnect logic (#9453) 2024-06-03 15:54:19 +05:30
index.js chore: fix circleci on vite build (#10214) 2024-10-07 15:27:41 +05:30
loadWithRetry.js feat: add retry loadWithRetry composable (#12873) 2025-11-20 19:40:20 +05:30
store.js feat: Vite + vue 3 💚 (#10047) 2024-10-02 00:36:30 -07:00
useAccount.js feat: auto resolve label option and fixes (#11541) 2025-06-04 14:53:24 +05:30
useAdmin.js feat: Replace alertMixin usage with useAlert (#9793) 2024-07-23 16:41:11 +05:30
useAgentsList.js fix: Translate "None" option in agent assignment dropdown (#11060) 2025-03-11 14:49:27 -07:00
useAutomation.js chore: Remove vue-multiselect and migrate to next components (#13506) 2026-02-17 16:40:12 +05:30
useAutomationValues.js feat: Introduce last responding agent option to automation assign agent (#12326) 2026-04-16 18:54:35 +05:30
useCallSession.js feat(voice): Assignment aware visibility and join conflict for inbound calls (#14333) 2026-04-30 18:38:10 +04:00
useCaptain.js feat: add captain editor events (#13524) 2026-02-17 13:26:56 +05:30
useConfig.js feat: Rewrite configMixin to a composable (#9921) 2024-08-14 12:56:30 +05:30
useConversationLabels.js feat: Rewrite conversation/labelMixin to a composable (#9936) 2024-08-12 17:41:12 +05:30
useConversationRequiredAttributes.js feat: Conversation workflows(EE) (#13040) 2026-01-27 11:36:20 +04:00
useCopilotReply.js feat: add captain editor events (#13524) 2026-02-17 13:26:56 +05:30
useDetectKeyboardLayout.js feat: Rewrite keyboardEventListener mixin to a composable (#9831) 2024-08-05 18:59:47 +05:30
useDropdownPosition.js chore: update conversation sidebar interactions (#13988) 2026-04-20 13:08:19 +05:30
useEditableAutomation.js feat: add automation condition to filter private notes (#12102) 2026-04-13 10:40:46 +05:30
useFileUpload.js feat: allow configuring attachment upload limit (#12835) 2025-11-17 14:03:08 -08:00
useFontSize.js feat: Agent language settings (#11222) 2025-09-09 14:27:36 +05:30
useImageZoom.js chore: Improvements in image attachment viewer (#11040) 2025-03-18 14:01:18 +05:30
useImpersonation.js feat: Prevent saving preferences and status when impersonating (#11164) 2025-05-20 17:34:30 -07:00
useInbox.js feat: Add voice calling as a capability on Twilio SMS channel(Enterprise) (#13963) 2026-04-29 11:32:19 +04:00
useIntegrationHook.js chore: Repalce Hook Mixin with useHook composable [CW-3454] (#9994) 2024-08-22 16:48:02 +05:30
useKeyboardEvents.js refactor: useKeyboardEvents composable (#9959) 2024-08-22 16:40:55 +05:30
useKeyboardNavigableList.js feat: add slash command menu to article editor (#14035) 2026-04-16 11:27:59 +05:30
useLabelSuggestions.js feat: check if label suggestion is enabled in hooks (#13331) 2026-01-21 15:11:41 +05:30
useLiveRefresh.js feat: Allow users to see heatmap for last 30 days (#10848) 2025-02-19 14:54:15 -08:00
useMacros.js fix: add explicit remove assignment actions to macros and automations (#12172) 2026-04-16 15:57:41 +05:30
usePolicy.js feat: show articles in the list only if feature is enabled (#11607) 2025-05-29 14:19:35 +05:30
useReportMetrics.js fix: stale report value shown if summary fetch breaks (#11270) 2025-04-15 20:18:06 +05:30
useTransformKeys.js feat: integrate new bubbles (#10550) 2024-12-19 18:41:55 +05:30
useTranslations.js fix: Rendering of translations based on the user's locale (#13211) 2026-01-08 18:37:42 -08:00
useUISettings.js feat: allow quoted email thread in reply (#12545) 2025-09-30 17:47:09 +05:30