- Added an api endpoint for update message status ( available only for api inboxes ) - Moved message status management to a service. - Handles case where read status arrive before delivered fixes: #10314 , #9962
41 lines
824 B
Ruby
41 lines
824 B
Ruby
class Twilio::SendOnTwilioService < Base::SendOnChannelService
|
|
private
|
|
|
|
def channel_class
|
|
Channel::TwilioSms
|
|
end
|
|
|
|
def perform_reply
|
|
begin
|
|
twilio_message = channel.send_message(**message_params)
|
|
rescue Twilio::REST::TwilioError, Twilio::REST::RestError => e
|
|
Messages::StatusUpdateService.new(message, 'failed', e.message).perform
|
|
end
|
|
message.update!(source_id: twilio_message.sid) if twilio_message
|
|
end
|
|
|
|
def message_params
|
|
{
|
|
body: message.content,
|
|
to: contact_inbox.source_id,
|
|
media_url: attachments
|
|
}
|
|
end
|
|
|
|
def attachments
|
|
message.attachments.map(&:download_url)
|
|
end
|
|
|
|
def inbox
|
|
@inbox ||= message.inbox
|
|
end
|
|
|
|
def channel
|
|
@channel ||= inbox.channel
|
|
end
|
|
|
|
def outgoing_message?
|
|
message.outgoing? || message.template?
|
|
end
|
|
end
|