diff --git a/enterprise/app/services/enterprise/whatsapp/providers/whatsapp_cloud_service.rb b/enterprise/app/services/enterprise/whatsapp/providers/whatsapp_cloud_service.rb index 2fcf4b5e7..894d14e42 100644 --- a/enterprise/app/services/enterprise/whatsapp/providers/whatsapp_cloud_service.rb +++ b/enterprise/app/services/enterprise/whatsapp/providers/whatsapp_cloud_service.rb @@ -51,9 +51,9 @@ module Enterprise::Whatsapp::Providers::WhatsappCloudService return true if response.success? parsed = response.parsed_response.is_a?(Hash) ? response.parsed_response : {} - message = parsed.dig('error', 'error_user_msg') || parsed.dig('error', 'message') || 'Failed to update calling status' + error = parsed['error'].is_a?(Hash) ? parsed['error'] : {} Rails.logger.error "[WHATSAPP CALL] update_calling_status failed: status=#{response.code} body=#{response.body}" - raise message + raise meta_error_message(error, 'Failed to update calling status') end private @@ -102,11 +102,18 @@ module Enterprise::Whatsapp::Providers::WhatsappCloudService Rails.logger.error "[WHATSAPP CALL] initiate_call failed: status=#{response.code} body=#{response.body}" parsed = response.parsed_response.is_a?(Hash) ? response.parsed_response : {} - error_code = parsed.dig('error', 'code') - error_msg = parsed.dig('error', 'error_user_msg') || 'Failed to initiate call' + error = parsed['error'].is_a?(Hash) ? parsed['error'] : {} + error_code = error['code'] + error_msg = meta_error_message(error, 'Failed to initiate call') raise Voice::CallErrors::NoCallPermission, error_msg if error_code == Voice::CallErrors::NO_CALL_PERMISSION_CODE raise Voice::CallErrors::CallFailed, error_msg end + + # Meta often returns a blank error_user_msg (e.g. code 131044 business-eligibility); + # an empty string is truthy, so `||` would surface it. Prefer the first non-blank field. + def meta_error_message(error, default) + error['error_user_msg'].presence || error['message'].presence || error['error_user_title'].presence || default + end end