Fixes https://github.com/chatwoot/chatwoot/issues/13317 Fixes an issue where WhatsApp attachment messages (images, audio, video, documents) were failing to download. Messages were being created but without attachments. The `phone_number_id` parameter was being passed to the `GET /<MEDIA_ID>` endpoint when downloading incoming media. According to Meta's documentation: > "Note that `phone_number_id` is optional. If included, the request will only be processed if the business phone number ID included in the query matches the ID of the business phone number **that the media was uploaded on**." For incoming messages, media is uploaded by the customer, not by the business phone number. Passing the business's `phone_number_id` causes validation to fail with error: `Param phone_number_id is not a valid whatsapp business phone number id ID` This PR removes the `phone_number_id` parameter from the media URL request for incoming messages.
21 lines
811 B
Ruby
21 lines
811 B
Ruby
# https://docs.360dialog.com/whatsapp-api/whatsapp-api/media
|
|
# https://developers.facebook.com/docs/whatsapp/api/media/
|
|
|
|
class Whatsapp::IncomingMessageWhatsappCloudService < Whatsapp::IncomingMessageBaseService
|
|
private
|
|
|
|
def processed_params
|
|
@processed_params ||= params[:entry].try(:first).try(:[], 'changes').try(:first).try(:[], 'value')
|
|
end
|
|
|
|
def download_attachment_file(attachment_payload)
|
|
url_response = HTTParty.get(
|
|
inbox.channel.media_url(attachment_payload[:id]),
|
|
headers: inbox.channel.api_headers
|
|
)
|
|
# This url response will be failure if the access token has expired.
|
|
inbox.channel.authorization_error! if url_response.unauthorized?
|
|
Down.download(url_response.parsed_response['url'], headers: inbox.channel.api_headers) if url_response.success?
|
|
end
|
|
end
|