iachat/app/javascript/dashboard/i18n/locale
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
..
am chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
ar chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
az chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
bg chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
bn chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
ca chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
cs chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
da chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
de chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
el chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
en feat(whatsapp): show contact typing and recording indicators via baileys presence (#264) 2026-04-13 11:38:11 -03:00
es chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
et chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
fa chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
fi chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
fr chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
he chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
hi chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
hr chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
hu chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
hy chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
id chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
is chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
it chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
ja chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
ka chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
ko chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
lt chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
lv chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
ml chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
ms chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
ne chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
nl chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
no chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
pl chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
pt chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
pt_BR feat(whatsapp): show contact typing and recording indicators via baileys presence (#264) 2026-04-13 11:38:11 -03:00
ro chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
ru chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
sh chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
sk chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
sl chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
sq chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
sr chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
sv chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
ta chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
th chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
tl chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
tr chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
uk chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
ur chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
ur_IN chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
vi chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
zh chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
zh_CN chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00
zh_TW chore: Update translations (#13832) 2026-03-17 16:02:40 -07:00