iachat/app/services
Gabriel Jablonski 521ce90e79
fix(whatsapp): consolidate fragmented phone/LID contacts to prevent lost messages (#241)
* fix(whatsapp): consolidate fragmented phone/LID contacts to prevent lost messages

When a WhatsApp user had two separate contacts (one by phone, one by LID)
with different contact_ids, the consolidation service did nothing. This caused
update_contact_info to crash with a phone_number uniqueness violation, silently
dropping incoming messages.

Now properly merges the two contacts by treating the phone contact as canonical,
moving conversations from the LID contact, and cleaning up duplicates.

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

* fix(whatsapp): address CodeRabbit review feedback

- Destroy orphaned LID contact when it has no remaining contact_inboxes
- Clarify spec comment to past-tense (no longer an active bug)

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

* fix(whatsapp): route legacy-source contact_inbox into merge path

When a phone contact_inbox has a non-standard source_id (legacy format)
and a separate LID contact_inbox exists for a different contact,
the consolidation now merges them instead of early-returning.

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

* test: assert orphaned LID contact is destroyed in legacy-source spec

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-03-19 19:20:11 -03:00
..
account fix: account email validation during signup (#11307) 2025-05-20 20:45:39 -07:00
audio feat: add audio transcoding support for WhatsApp Cloud API (#220) 2026-02-22 16:21:50 -03:00
auto_assignment Merge branch 'main' into chore/merge-upstream-4.11.0 2026-02-17 23:05:26 -03:00
automation_rules Merge branch 'main' into chore/merge-upstream-4.11.0 2026-02-17 23:05:26 -03:00
base chore: Add cache to improve widget performance (#11163) 2025-03-24 16:04:49 -07:00
contacts feat: outbound voice call essentials (#12782) 2025-11-24 17:47:00 -08:00
conversations Merge branch 'main' into chore/merge-upstream-4.11.0 2026-02-17 23:05:26 -03:00
crm Revert "chore: Upgrade Rails to 7.2.2 and update Gemfile dependencies (#11037)" 2026-02-03 21:09:42 -08:00
data_import chore: apply Rails/SaveBang cop (#15) 2025-04-03 23:29:24 -03:00
email fix: email delivery in Email::SendOnEmailService (#217) 2026-02-18 16:23:13 -03:00
email_templates chore: Fix emails being sent with the wrong translations (#2236) 2021-06-08 22:45:01 +05:30
facebook feat: hide CSAT survey URLs from agents in dashboard (#11622) 2025-06-11 23:39:47 +05:30
geocoder fix: ip-lookup database lazy loading for all environments (#8052) 2024-10-22 23:18:30 -07:00
google feat: add Google Email fetch and OAuth token refresh service (#9603) 2024-06-11 14:22:03 +05:30
imap feat: add Google Email fetch and OAuth token refresh service (#9603) 2024-06-11 14:22:03 +05:30
instagram fix: Handle Instagram API error codes properly in message processing (#13002) 2025-12-04 18:53:50 +05:30
internal feat: add cron job to remove orphan conversations (#13335) 2026-01-28 19:25:20 +05:30
labels fix: Update associations when a label is updated (#3046) 2021-09-21 10:16:32 +05:30
line fix: Ensure messages go to correct conversation when receive multi user in 1 LINE webhook (#12322) 2025-09-22 17:05:25 +05:30
linear feat: Add activity messages for linear actions (#11654) 2025-06-13 11:57:11 +05:30
liquid feat: Add liquid processing for SMS campaigns (#10981) 2025-06-11 13:16:44 -04:00
llm_formatter feat: new Captain Editor (#13235) 2026-01-21 13:39:07 +05:30
macros feat: Add webhook event support for macros (#11235) 2025-04-02 20:26:55 -07:00
mailbox Chore/merge upstream 4.8.0 (#150) 2025-11-19 16:25:58 -03:00
message_templates fix: Captain not responding to campaign conversations (#13489) 2026-02-12 10:07:56 +05:30
messages feat: add per-account daily rate limit for outbound emails (#13411) 2026-02-03 02:06:51 +05:30
mfa feat: MFA (#12290) 2025-09-18 20:19:24 +05:30
microsoft feat: add Google Email fetch and OAuth token refresh service (#9603) 2024-06-11 14:22:03 +05:30
notification feat: add per-account daily rate limit for outbound emails (#13411) 2026-02-03 02:06:51 +05:30
sms fix: Error shouldn't halt the campaign for entire audience (#11980) 2025-08-11 12:03:48 +05:30
telegram fix: Use Faraday for Telegram document uploads to fix large file failures (#13397) 2026-02-10 14:25:25 -08:00
tiktok feat: Handle external echo messages from native apps (#13371) 2026-02-02 15:52:53 +05:30
twilio Merge branch 'main' into chore/merge-upstream-4.11.0 2026-02-17 23:05:26 -03:00
twitter feat: hide CSAT survey URLs from agents in dashboard (#11622) 2025-06-11 23:39:47 +05:30
whatsapp fix(whatsapp): consolidate fragmented phone/LID contacts to prevent lost messages (#241) 2026-03-19 19:20:11 -03:00
widget feat: MFA (#12290) 2025-09-18 20:19:24 +05:30
account_deletion_service.rb fix(account-deletion): normalize deleted email suffix and handle collisions safely (#13472) 2026-02-07 17:29:27 -08:00
action_service.rb Merge branch 'main' into chore/merge-upstream-4.11.0 2026-02-17 23:05:26 -03:00
base_refresh_oauth_token_service.rb feat: add Google Email fetch and OAuth token refresh service (#9603) 2024-06-11 14:22:03 +05:30
base_token_service.rb feat: MFA (#12290) 2025-09-18 20:19:24 +05:30
csat_survey_service.rb feat: Implement existing template linking for CSAT surveys (#218) 2026-02-18 18:00:29 -03:00
csat_template_management_service.rb feat: Implement existing template linking for CSAT surveys (#218) 2026-02-18 18:00:29 -03:00
csat_template_name_service.rb feat: Add support for sending CSAT surveys via templates (Whatsapp Twilio) (#13143) 2026-01-13 16:32:02 +04:00
filter_service.rb chore: Ability to filter conversations with priority (#10967) 2025-03-03 16:38:22 +05:30
ip_lookup_service.rb feat(poc): Disable widget based on country (#6658) 2023-03-14 09:09:57 -07:00
search_service.rb feat: Advanced Search Backend (#12917) 2026-01-07 15:30:49 +05:30