iachat/app/javascript/dashboard/api
Gabriel Jablonski 11e9932e9b
feat(whatsapp): show contact typing and recording indicators via baileys presence (#264)
* feat(whatsapp): show contact typing and recording indicators via baileys presence

Subscribe to WhatsApp presence updates via the baileys-api provider to
display real-time typing and recording indicators in the dashboard.

- Handle presence.update webhook events (composing, recording, paused,
  available) and broadcast via ActionCable
- Add conversation.recording event to ActionCable, webhook, and channel
  listeners for parity with typing_on/typing_off
- Show "typing..." / "recording..." in green text on the chat list,
  replacing the message preview
- Show "X is typing" / "X is recording audio" in the conversation view
- Add presence_subscribe provider config option (default off) to gate
  all subscription calls to the baileys-api
- Subscribe to presence on conversation open and periodically (1 min)
  for the top 10 chat list conversations
- Consolidate contact LID from presence.update jidAlt payload
- Prevent echo-back of contact typing events to the channel

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: address review feedback

- Filter chat list typing indicator to contact-only events
- Add dedupe to presence subscribe bulk calls
- Use strong parameters for conversation_ids
- Remove redundant YAML quotes in swagger webhook enum

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: address review feedback

- Extract phone from data[:id] when JID is @s.whatsapp.net (fallback
  when jidAlt is absent)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: address review feedback

- Filter recording users in getTypingUsersText to show correct names
- Add 10s timeout to presence_subscribe HTTP request

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: scope typing timer per user instead of per conversation

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: make presence subscribe best-effort with rescue per channel

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: address review feedback

- Add messagePreviewClass to typing preview for consistent padding
- Fix specs to use WebMock assertions instead of instance spying

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 11:38:11 -03:00
..
captain feat: new Captain Editor (#13235) 2026-01-21 13:39:07 +05:30
channel feat: Voice Channel (#11602) 2025-12-19 12:41:33 -08:00
enterprise perf: update the logic to purchase credits (#12998) 2025-12-08 10:52:17 +05:30
helpCenter feat(help-center): enable drag-and-drop category reordering (#13706) 2026-03-05 12:53:38 +05:30
inbox feat(whatsapp): show contact typing and recording indicators via baileys presence (#264) 2026-04-13 11:38:11 -03:00
integrations feat: new Captain Editor (#13235) 2026-01-21 13:39:07 +05:30
specs Merge branch 'chatwoot/develop' into chore/merge-upstream-4.12.0 2026-03-20 00:27:45 -03:00
account.js feat: Reconnect logic (#9453) 2024-06-03 15:54:19 +05:30
accountActions.js feat: Create modal to merge two contacts (#2457) 2021-10-13 18:35:13 +05:30
agentBots.js feat: Ability to reset api_access_token (#11565) 2025-05-29 14:42:13 +05:30
agentCapacityPolicies.js feat: Agent capacity policy index page with CRUD actions (#12409) 2025-09-12 16:22:42 +05:30
agents.js feat: Adds bulk_invite api for onboarding view (#8931) 2024-02-16 17:01:27 +05:30
ApiClient.js feat: update tool-chain to latest (#7975) 2023-09-27 14:02:34 +05:30
assignableAgents.js chore: Add Assignable Agents API (#4722) 2022-05-23 19:24:07 +05:30
assignmentPolicies.js feat: Agent assignment policy index page with CRUD actions (#12373) 2025-09-10 12:07:21 +05:30
attributes.js feat: Render contact custom attributes in contact/conversation sidebar (#3310) 2021-11-11 15:23:33 +05:30
auditLogs.js feat: audit logs UI (#6803) 2023-04-17 19:11:05 +05:30
auth.js fix: Prevent display_name reset when updating password (#10374) 2025-06-11 19:05:30 -04:00
automation.js feat: add a common upload endpoint (#7806) 2023-08-31 10:36:02 +07:00
bulkActions.js feat: Add Bulk actions to conversations (#4647) 2022-06-03 11:12:22 +05:30
CacheEnabledApiClient.js fix: idb is not available in firefox private mode [CW-2217] (#7524) 2023-07-14 13:35:30 +05:30
campaigns.js feat: Add campaign (#2177) 2021-05-04 15:08:41 +05:30
cannedResponse.js Chore: Scope URLs with account_id (#601) 2020-03-09 23:27:10 +05:30
changelog.js Chore/merge upstream 4.8.0 (#150) 2025-11-19 16:25:58 -03:00
channels.js Chore: Add Facebook app set up documentation (#647) 2020-03-28 11:43:02 +05:30
companies.js Chore/merge upstream 4.8.0 (#150) 2025-11-19 16:25:58 -03:00
contactNotes.js feat: Add notes for Contacts (#3273) 2021-10-25 18:35:58 +05:30
contacts.js feat: compose form improvements (#13668) 2026-03-02 18:27:51 +05:30
conversations.js Chore: Scope URLs with account_id (#601) 2020-03-09 23:27:10 +05:30
csatReports.js fix: CSAT filter metrics rendering & conversation reports not working [CW-1840, CW-1818] (#7170) 2023-05-23 16:47:04 +05:30
customRole.js chore: Custom Roles to manage permissions [ UI ] (#9865) 2024-09-17 11:40:11 -07:00
customViews.js feat: Adds the ability to delete a segment (#3836) 2022-01-24 17:37:43 +05:30
dashboardApps.js feat: Allow users to create dashboard apps to give agents more context (#4761) 2022-06-01 11:13:10 +05:30
endPoints.js fix: Prevent display_name reset when updating password (#10374) 2025-06-11 19:05:30 -04:00
groupMembers.js feat: group conversations (#228) 2026-03-19 21:56:58 -03:00
inboxes.js Merge branch 'main' into chore/merge-upstream-4.12.0 2026-03-19 23:24:55 -03:00
inboxHealth.js feat(whatsapp): add webhook registration and status endpoints (#13551) 2026-03-16 12:48:16 +05:30
inboxMembers.js Chore: Inbox Members API improvements (#3008) 2021-09-14 11:55:02 +05:30
inboxSignatures.js feat: add per-inbox signature management (#226) 2026-02-26 19:53:03 -03:00
integrations.js feat(apps): Shopify Integration (#11101) 2025-03-19 15:37:55 -07:00
internalChatChannels.js feat(internal-chat): implement internal chat system for agents (#247) 2026-04-11 13:50:15 -03:00
internalChatDrafts.js feat(internal-chat): implement internal chat system for agents (#247) 2026-04-11 13:50:15 -03:00
internalChatMessages.js feat(internal-chat): implement internal chat system for agents (#247) 2026-04-11 13:50:15 -03:00
internalChatPolls.js feat(internal-chat): implement internal chat system for agents (#247) 2026-04-11 13:50:15 -03:00
labels.js feat: IndexedDB based caching for labels, inboxes and teams [CW-50] (#6710) 2023-03-27 12:16:25 +05:30
liveReports.js feat: Add live report for teams (#10849) 2025-03-12 16:03:09 -07:00
macros.js feat: Add API module and Vuex store for Macros (#5603) 2022-10-11 22:54:17 -07:00
mfa.js feat: Add the frontend support for MFA (#12372) 2025-09-18 21:16:06 +05:30
notifications.js fix: Inbox view Read/Snoozed display filters (#8907) 2024-02-17 13:59:25 +05:30
notificationSubscription.js Feature: Add web push notification permission in frontend (#766) 2020-05-06 00:10:56 +05:30
notion_auth.js feat: notion OAuth setup (#11765) 2025-06-26 19:16:06 +05:30
recurringScheduledMessages.js feat: schedule messages recurrence (#240) 2026-03-19 22:51:14 -03:00
reports.js feat: Add conversations summary CSV export (#13110) 2026-01-13 12:30:26 +04:00
samlSettings.js feat: SAML UI [CW-2958] (#12345) 2025-09-15 19:33:54 +05:30
scheduledMessages.js fix(schedule): enhance attachment handling in scheduled message modal (#239) 2026-03-19 22:45:21 -03:00
search.js feat: Advanced Search Backend (#12917) 2026-01-07 15:30:49 +05:30
sla.js feat(ee): Add SLA management UI (#8777) 2024-02-20 23:03:22 -08:00
slaReports.js fix: Add more filters for SLA download reports (#9231) 2024-04-16 09:00:52 +05:30
summaryReports.js feat: label reports overview (#11194) 2025-06-11 14:35:46 +05:30
teams.js feat: IndexedDB based caching for labels, inboxes and teams [CW-50] (#6710) 2023-03-27 12:16:25 +05:30
userNotificationSettings.js Chore: Scope URLs with account_id (#601) 2020-03-09 23:27:10 +05:30
webhooks.js Chore: Scope URLs with account_id (#601) 2020-03-09 23:27:10 +05:30
yearInReview.js feat(ce): Add Year in review feature (#13078) 2025-12-15 17:24:45 -08:00