Restructure omni services and add Chatwoot research snapshot

This commit is contained in:
Ruslan Bakiev
2026-02-21 11:11:27 +07:00
parent edea7a0034
commit b73babbbf6
7732 changed files with 978203 additions and 32 deletions

View File

@@ -0,0 +1,52 @@
class Sms::DeliveryStatusService
pattr_initialize [:inbox!, :params!]
def perform
return unless supported_status?
process_status if message.present?
end
private
def process_status
@message.status = status
@message.external_error = external_error if error_occurred?
@message.save!
end
def supported_status?
%w[message-delivered message-failed].include?(params[:type])
end
# Relevant documentation:
# https://dev.bandwidth.com/docs/mfa/webhooks/international/message-delivered
# https://dev.bandwidth.com/docs/mfa/webhooks/international/message-failed
def status
type_mapping = {
'message-delivered' => 'delivered',
'message-failed' => 'failed'
}
type_mapping[params[:type]]
end
def external_error
return nil unless error_occurred?
error_message = params[:description]
error_code = params[:errorCode]
"#{error_code} - #{error_message}"
end
def error_occurred?
params[:errorCode] && params[:type] == 'message-failed'
end
def message
return unless params[:message][:id]
@message ||= inbox.messages.find_by(source_id: params[:message][:id])
end
end