diff --git a/app/models/attachment.rb b/app/models/attachment.rb
index 1dbc2a3f9..d292519c6 100644
--- a/app/models/attachment.rb
+++ b/app/models/attachment.rb
@@ -53,7 +53,8 @@ class Attachment < ApplicationRecord
return '' unless file.attached?
if Rails.env.development?
- rails_storage_proxy_url(file, **dev_url_options)
+ # Use relative path so browser loads directly from local server (avoids ngrok interstitial)
+ rails_storage_proxy_path(file)
else
url_for(file)
end
@@ -74,7 +75,7 @@ class Attachment < ApplicationRecord
begin
representation = file.representation(resize_to_fill: [250, nil])
if Rails.env.development?
- rails_storage_proxy_url(representation, **dev_url_options)
+ rails_storage_proxy_path(representation)
else
url_for(representation)
end
diff --git a/progresso/2026-02-28_fix_media_audio_imagem_whatsapp.md b/progresso/2026-02-28_fix_media_audio_imagem_whatsapp.md
index 11a66c710..459dd0ee9 100644
--- a/progresso/2026-02-28_fix_media_audio_imagem_whatsapp.md
+++ b/progresso/2026-02-28_fix_media_audio_imagem_whatsapp.md
@@ -11,43 +11,59 @@
- Áudio exibe `00:00 / 00:00` e não toca
- Imagem exibe "Esta imagem não está mais disponível"
- Mensagens de texto chegam normalmente
+- Transcrição do áudio aparece corretamente, mas o áudio não toca
+
+---
+
+## ⚡ Diagnóstico Rápido (comece aqui)
+
+Antes de ler tudo, rode esses comandos na ordem. O primeiro que falhar identifica o bug.
+
+```bash
+# 1. Arquivo chegou? Descriptografia OK?
+grep -E "WuzAPI Decrypt|SUCCESS|invalid format" log/development.log | tail -5
+
+# 2. Arquivo está no disco?
+bin/rails runner "a = Attachment.last; puts a.file.blob.byte_size; puts File.binread(ActiveStorage::Blob.service.path_for(a.file.blob.key), 4).bytes.map{|b| '%02X'%b}.join(' ')"
+
+# 3. URL que o browser recebe é relativa ou absoluta?
+grep "data_url" log/development.log | tail -3
+```
+
+**Interpretação:**
+| Resultado | Bug |
+|-----------|-----|
+| Sem `WuzAPI Decrypt:` nos logs | Bug 5 (PayloadParser sem `attachment_params`) |
+| `WuzAPI Decrypt Error: NoMethodError` | Bug 3 (`update!` em vez de `update`) |
+| Bytes: `31 88 d2` ou similares (não FF D8, 4F 67, 89 50) | Bug 2 (arquivo encriptado) |
+| URL absoluta `https://ngrok-url/...` | Bug 4 (ngrok interstitial — ver abaixo) |
+| URL relativa `/rails/active_storage/...` e bytes válidos | Bug de infra (Sidekiq parado, ngrok caído) |
---
## Diagnóstico — Root Causes
-Havia **três bugs independentes**, todos precisavam ser corrigidos.
+Havia **seis bugs independentes** documentados ao longo do tempo. Os primeiros três são históricos. Os outros três surgiram com refatorações.
---
-### Bug 1 — URL de mídia apontando para `localhost` (invisível via ngrok)
+### Bug 1 — URL de mídia apontando para `localhost` hardcoded *(histórico)*
**Arquivo:** `app/models/attachment.rb`
**Problema:**
-`file_url` e `thumb_url` geravam URLs hardcoded com `localhost:3000`. O browser acessando via ngrok não consegue resolver `localhost:3000` diretamente, então `
` e `