feat: Handle Line send message/attachments errors (#8200)

This commit is contained in:
Muhsin Keloth
2023-10-31 07:42:30 +05:30
committed by GitHub
parent 653e0335c0
commit 11b27f9805
3 changed files with 117 additions and 7 deletions

View File

@@ -205,6 +205,11 @@ export default {
) {
return this.sourceId && this.isSent;
}
// There is no source id for the line channel
if (this.isALineChannel) {
return true;
}
return false;
},
showDeliveredIndicator() {
@@ -223,6 +228,9 @@ export default {
if (this.isAWebWidgetInbox || this.isAPIInbox) {
return this.isSent;
}
if (this.isALineChannel) {
return this.isDelivered;
}
return false;
},

View File

@@ -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