Some checks failed
Lock Threads / action (push) Has been cancelled
Mark stale issues and pull requests / stale (push) Has been cancelled
Publish Chatwoot EE docker images / build (linux/amd64, ubuntu-latest) (push) Has been cancelled
Publish Chatwoot EE docker images / build (linux/arm64, ubuntu-22.04-arm) (push) Has been cancelled
Publish Chatwoot EE docker images / merge (push) Has been cancelled
Publish Chatwoot CE docker images / build (linux/amd64, ubuntu-latest) (push) Has been cancelled
Publish Chatwoot CE docker images / build (linux/arm64, ubuntu-22.04-arm) (push) Has been cancelled
Publish Chatwoot CE docker images / merge (push) Has been cancelled
Run Chatwoot CE spec / lint-backend (push) Has been cancelled
Run Chatwoot CE spec / lint-frontend (push) Has been cancelled
Run Chatwoot CE spec / frontend-tests (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (0, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (1, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (10, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (11, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (12, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (13, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (14, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (15, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (2, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (3, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (4, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (5, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (6, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (7, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (8, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (9, 16) (push) Has been cancelled
Run Linux nightly installer / nightly (push) Has been cancelled
- Add Logistics component with progress tracking - Add OrderDetail component for order information - Support data-driven steps and actions - Add blue color scale to widget SCSS - Fix node overflow and progress bar rendering issues - Add English translations for dashboard components Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
56 lines
1.7 KiB
Ruby
56 lines
1.7 KiB
Ruby
#######################################
|
|
# To create an external channel reply service
|
|
# - Inherit this as the base class.
|
|
# - Implement `channel_class` method in your child class.
|
|
# - Implement `perform_reply` method in your child class.
|
|
# - Implement additional custom logic for your `perform_reply` method.
|
|
# - When required override the validation_methods.
|
|
# - Use Childclass.new.perform.
|
|
######################################
|
|
class Base::SendOnChannelService
|
|
pattr_initialize [:message!]
|
|
|
|
def perform
|
|
validate_target_channel
|
|
return unless outgoing_message?
|
|
return if invalid_message?
|
|
|
|
perform_reply
|
|
end
|
|
|
|
private
|
|
|
|
delegate :conversation, to: :message
|
|
delegate :contact, :contact_inbox, :inbox, to: :conversation
|
|
delegate :channel, to: :inbox
|
|
|
|
def channel_class
|
|
raise 'Overwrite this method in child class'
|
|
end
|
|
|
|
def perform_reply
|
|
raise 'Overwrite this method in child class'
|
|
end
|
|
|
|
def outgoing_message_originated_from_channel?
|
|
# TODO: we need to refactor this logic as more integrations comes by
|
|
# chatwoot messages won't have source id at the moment
|
|
# TODO: migrate source_ids to external_source_ids and check the source id relevant to specific channel
|
|
message.source_id.present?
|
|
end
|
|
|
|
def outgoing_message?
|
|
message.outgoing? || message.template?
|
|
end
|
|
|
|
def invalid_message?
|
|
# private notes aren't send to the channels
|
|
# we should also avoid the case of message loops, when outgoing messages are created from channel
|
|
message.private? || outgoing_message_originated_from_channel?
|
|
end
|
|
|
|
def validate_target_channel
|
|
raise 'Invalid channel service was called' if inbox.channel.class != channel_class
|
|
end
|
|
end
|