feat: Handle Line send message/attachments errors (#8200)
This commit is contained in:
@@ -6,6 +6,30 @@ class Line::SendOnLineService < Base::SendOnChannelService
|
||||
end
|
||||
|
||||
def perform_reply
|
||||
channel.client.push_message(message.conversation.contact_inbox.source_id, [{ type: 'text', text: message.content }])
|
||||
response = channel.client.push_message(message.conversation.contact_inbox.source_id, [{ type: 'text', text: message.content }])
|
||||
return if response.blank?
|
||||
|
||||
parsed_json = JSON.parse(response.body)
|
||||
|
||||
if response.code == '200'
|
||||
# If the request is successful, update the message status to delivered
|
||||
message.update!(status: :delivered)
|
||||
else
|
||||
# If the request is not successful, update the message status to failed and save the external error
|
||||
message.update!(status: :failed, external_error: external_error(parsed_json))
|
||||
end
|
||||
end
|
||||
|
||||
# https://developers.line.biz/en/reference/messaging-api/#error-responses
|
||||
def external_error(error)
|
||||
# Message containing information about the error. See https://developers.line.biz/en/reference/messaging-api/#error-messages
|
||||
message = error['message']
|
||||
# An array of error details. If the array is empty, this property will not be included in the response.
|
||||
details = error['details']
|
||||
|
||||
return message if details.blank?
|
||||
|
||||
detail_messages = details.map { |detail| "#{detail['property']}: #{detail['message']}" }
|
||||
[message, detail_messages].join(', ')
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user