Skip to content

feat: group conversations#228

Merged
gabrieljablonski merged 216 commits intomainfrom
ralph/group-conversations-full-feature
Mar 20, 2026
Merged

feat: group conversations#228
gabrieljablonski merged 216 commits intomainfrom
ralph/group-conversations-full-feature

Conversation

@gabrieljablonski
Copy link
Member

@gabrieljablonski gabrieljablonski commented Feb 27, 2026

Pull Request Template

Description

Please include a summary of the change and issue(s) fixed. Also, mention relevant motivation, context, and any dependencies that this change requires.
Fixes # (issue)

Type of change

Please delete options that are not relevant.

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality not to work as expected)
  • This change requires a documentation update

How Has This Been Tested?

Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration.

Checklist:

  • My code follows the style guidelines of this project
  • I have performed a self-review of my code
  • I have commented on my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective or that my feature works
  • New and existing unit tests pass locally with my changes
  • Any dependent changes have been merged and published in downstream modules

This change is Reviewable

Summary by CodeRabbit

Release Notes

New Features

  • Group Conversations Management: Create, manage, and sync WhatsApp groups with full member control (add, remove, promote/demote roles).
  • Group Metadata Editing: Inline editing for group name, description, and avatar with automatic synchronization.
  • Invite & Join Requests: Generate invite links, revoke access, and approve/reject pending join requests.
  • Advanced Filtering: Filter conversations by group type (individual or group).
  • Group Messaging Enhancements: Display sender names and avatars in group messages; mention group members using @.
  • Real-time Group Sync: Automatic synchronization of group data and member updates.

CayoPOliveira and others added 30 commits February 5, 2026 16:03
… and implement conversation group membership model
…eation logic for baileys single contact conversation
@gabrieljablonski gabrieljablonski changed the title Ralph/group conversations full feature feat: group conversations full feature Mar 12, 2026
@gabrieljablonski gabrieljablonski changed the title feat: group conversations full feature feat: group conversations Mar 12, 2026
gabrieljablonski and others added 11 commits March 12, 2026 15:15
Groups start in a soft-disabled state by default when using Baileys.
Chatwoot still creates group conversations but does not process every
incoming message. Instead, Baileys accumulates group messages and sends
periodic groups.activity webhook events to update last_activity_at.

Backend:
- Add WHATSAPP_GROUPS_ENABLED env var and groups_enabled? class method
- Send groupsEnabled in Baileys connection setup
- Create groups.activity handler to update conversation last_activity_at
- Gate group message processing behind groups_enabled? check
- Expose groups_enabled via inbox API

Frontend:
- Add warning banner with CTA to app.fazer.ai on disabled group conversations
- Disable reply editor for non-private-note mode when groups disabled
- Add i18n strings for en and pt_BR

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…pe issue

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
update_columns bypasses ActiveRecord callbacks, so the ActionCable
broadcast was never triggered when last_activity_at changed. Dispatch
a CONVERSATION_UPDATED event explicitly so the sidebar updates in
real-time.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…vity

Since soft-disabled groups don't create messages, unread_count is
always 0 and the standard badge won't show. Detect unread state by
comparing last_activity_at > agent_last_seen_at for these groups
and display a teal dot indicator instead of a count badge.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The update_last_seen endpoint skipped updating agent_last_seen_at when
there were no unread messages (the throttle path). For soft-disabled
groups that never create messages, this meant the dot indicator could
never be cleared. Add an unseen_activity? check that bypasses the
throttle when last_activity_at > agent_last_seen_at.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Route avatar upload through GroupMetadataController to push to WhatsApp
  provider before saving locally
- Add update_group_picture to baileys service and base service
- Fix buildContactFormData crash when social_profiles is undefined
- Make try_update_group_avatar public so GROUP_CHANGE_ICON stub handler
  can call it from outside the service class

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add groupsEnabled param to setup_channel_provider and handle_channel_error WebMock stubs
- Add group-request-participants-list stub for sync_group tests
- Add group_type to push_event_data expected hash
- Set last_activity_at in throttle tests to prevent unseen_activity? bypass
- Update sync_group delegation expectation to include soft: false
- Stub groups_enabled? in group message handling tests
- Update WhatsApp source_id regex expectation for group contact IDs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…consistency

- Remove planejamento-chat-interno.md (unrelated planning document)
- Fix CreateGroupMembers migration API version from 7.0 to 7.1
- Fix swagger.json: normalize group endpoint paths from {contact_id} to {id}
  to match YAML sources and existing contact sub-resource conventions

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@gabrieljablonski gabrieljablonski linked an issue Mar 20, 2026 that may be closed by this pull request
@gabrieljablonski gabrieljablonski merged commit a996b92 into main Mar 20, 2026
20 of 21 checks passed
@gabrieljablonski gabrieljablonski deleted the ralph/group-conversations-full-feature branch March 20, 2026 00:57
@gabrieljablonski gabrieljablonski restored the ralph/group-conversations-full-feature branch March 20, 2026 01:23
@gabrieljablonski gabrieljablonski deleted the ralph/group-conversations-full-feature branch March 20, 2026 01:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Envio de mensagens para grupos do WhatsApp, via Baileys

2 participants