* chore: update scheduled messages author association to nullable and adjust related specs
* chore: update sender handling for WhatsApp messages and add external sender name
* fix(whatsapp): update message source ID handling and improve Redis key formatting
* fix(whatsapp): prevent updating contact_inbox on identifier conflict
* fix(whatsapp): refactor conversation routing tests to use shared examples for better clarity and maintainability
* fix: enhance filename extraction for document messages with captions
* test: add specs for filename extraction from document messages with and without captions
* fix: update media URL stubbing for multiple message types in filename extraction tests
* fix(baileys): update LID contact phone number if not present
* fix(baileys): move try_update_contact_avatar call to update_contact_information method
* refactor(baileys): consolidate contact update logic in update_contact_information method
* feat(whatsapp): add profile picture fetching for Baileys provider
- Add `get_profile_pic` method to `WhatsappBaileysService` for fetching contact avatars
- Include `avatar_url` in contact attributes during contact creation
- Update `MessagesUpsert` handler to fetch and set profile pictures
- Add proper error handling and graceful degradation when avatar fetching fails
* test(whatsapp): add test coverage for Baileys profile picture fetching
- Add test suite for `get_profile_pic` method
- Include test scenarios for successful responses, missing avatars, and error handling
- Add profile picture HTTP stubbing and avatar job expectations to message processing tests
* feat(whatsapp): optimize Baileys avatar fetching and update avatar for existing inboxes
Previously, the profile picture was fetched on every incoming message and avatar updates were only attempted for new inboxes.
This change optimizes the process by:
- Only fetching the WhatsApp profile picture if the contact does not already have an avatar.
- Attempting to update the avatar for both new and existing inboxes.
This logic is based on Telegram's version (app/services/telegram/incoming_message_service.rb).
* refactor(whatsapp): remove unnecessary safe navigation when accessing contact
This reverts an unnecessary change introduced in b918a92.
* refactor(whatsapp): manually rollback change introduced in b918a92
* refactor(whatsapp): rename endpoint to profile-picture-url
* refactor(whatsapp): simplify profile picture response handling
Replaced manual JSON parsing with HTTParty's parsed_response and removed redundant JSON parsing tests.
* test(whatsapp): separate avatar processing test from message creation test
* test(whatsapp): update profile picture test to match actual API behavior
Change test to expect a 404 response when no profile picture exists, instead of a 200 response with partial data.
* refactor: move new functions to helper module
* test: more specs
---------
Co-authored-by: gabrieljablonski <contact@gabrieljablonski.com>
* feat: add received messages handling in WhatsApp services
* feat: ensure received messages are processed in the conversation
* tests: add received messages specs
* tests: add spec for call provider received_messages after save incoming message
* test: add spec to prevent calling received_messages for outgoing messages
* feat: add received_messages to error handling methods
* test: add spec for sending received messages request in WhatsappBaileysService
* fix: update fromMe flag in WhatsappBaileysService
* test: add spec to verify received_messages is not called for protocol messages
* test: improve received_messages stub
---------
Co-authored-by: gabrieljablonski <contact@gabrieljablonski.com>
* fix: update contact creation in messages.update event spec and remove redundant content update test
* fix: enhance message type detection for document messages and improve content retrieval
* fix: add support for edited messages and improve document message handling
* chore: enhance message filtering logic to ignore specific message types
* test: add support for messages with captions in document messages
* test: add handling for edited messages to prevent contact and message creation
* fix: improve message handling by ignoring specific message types
* fix: add support to ignore context messages to prevent contact and message creation
* refactor: organize incoming baileys specs
* feat: implement connection update handling for Baileys
* feat: add message update handling for Baileys integration
* feat: implement message processing and handling for Baileys integration
* fix: clear message source ID from Redis when contact is not found
* fix: raise error when attachment file is not found during media handling
* refactor: reorganize includes in incoming_message_baileys_service
* feat: add helper methods for message handling in Baileys integration
* feat: include IncomingMessageServiceHelpers in MessagesUpdate module
* refactor: replace IncomingMessageServiceHelpers with BaileysHandlers::Helpers in connection_update, messages_update, and messages_upsert modules
* fix: mark message as unsupported when attachment file is not found
* refactor: remove unnecessary namespace for includes in IncomingMessageBaileysService
* refactor: add private visibility to methods in connection_update, helpers, messages_update, and messages_upsert modules
* refactor: preserve original message in handle_edited_content method
* fix: attachment error handling
* feat: implement conversation creation logic in set_conversation method
* refactor: remove unused error handling for attachment not found in messages update and upsert
* feat: update last seen timestamps in conversation on message status update
* feat: log warning for unsupported message update status in Baileys service
* chore: merge
---------
Co-authored-by: gabrieljablonski <contact@gabrieljablonski.com>