feat: implementa o processamento de webhooks Wuzapi, incluindo tratamento de erros e documentação da resolução.
This commit is contained in:
parent
70e8759b5a
commit
dbd66320e0
@ -4,20 +4,15 @@ class Webhooks::WuzapiController < ActionController::Base
|
|||||||
before_action :verify_secret
|
before_action :verify_secret
|
||||||
|
|
||||||
def process_payload
|
def process_payload
|
||||||
# Normalize payload keys if necessary based on Wuzapi behavior
|
|
||||||
# Assuming Wuzapi sends standard WA format or we adapt it here
|
|
||||||
# For now, just logging to verify reception
|
|
||||||
Rails.logger.info "Wuzapi Webhook Received for Inbox #{@inbox.id}: #{params.inspect}"
|
Rails.logger.info "Wuzapi Webhook Received for Inbox #{@inbox.id}: #{params.inspect}"
|
||||||
|
|
||||||
# TODO: Implement actual message processing logic:
|
Whatsapp::IncomingMessageWuzapiService.new(inbox: @inbox, params: params.to_unsafe_hash).perform
|
||||||
# 1. Parse payload to extract Phone, Body, Type (Text/Image)
|
|
||||||
# 2. Find or create Contact
|
|
||||||
# 3. Create Message in Conversation
|
|
||||||
|
|
||||||
# Example adapter call (to be implemented):
|
|
||||||
# Whatsapp::Providers::WuzapiAdapter.new(@inbox).process(params)
|
|
||||||
|
|
||||||
head :ok
|
head :ok
|
||||||
|
rescue StandardError => e
|
||||||
|
Rails.logger.error "Error processing Wuzapi webhook: #{e.message}"
|
||||||
|
Rails.logger.error e.backtrace.join("\n")
|
||||||
|
head :internal_server_error
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
@ -32,9 +27,9 @@ class Webhooks::WuzapiController < ActionController::Base
|
|||||||
secret = params[:secret]
|
secret = params[:secret]
|
||||||
stored_secret = @inbox.channel.provider_config['webhook_secret']
|
stored_secret = @inbox.channel.provider_config['webhook_secret']
|
||||||
|
|
||||||
if secret.blank? || secret != stored_secret
|
return unless secret.blank? || secret != stored_secret
|
||||||
Rails.logger.warn "Wuzapi Webhook: Invalid secret for Inbox #{@inbox.id}. Received: #{secret}"
|
|
||||||
head :unauthorized
|
Rails.logger.warn "Wuzapi Webhook: Invalid secret for Inbox #{@inbox.id}. Received: #{secret}"
|
||||||
end
|
head :unauthorized
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
40
progresso/resolucao-webhook-wuzapi.md
Normal file
40
progresso/resolucao-webhook-wuzapi.md
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
# Resolução: Falha no Recebimento de Webhooks Wuzapi
|
||||||
|
|
||||||
|
## Contexto
|
||||||
|
|
||||||
|
Mensagens enviadas para o número WhatsApp não estavam chegando na caixa de entrada do Chatwoot no ambiente local, apesar de mensagens de saída funcionarem.
|
||||||
|
|
||||||
|
## Diagnóstico
|
||||||
|
|
||||||
|
1. **Backend (Controller)**: O `Webhooks::WuzapiController` existia mas o método `process_payload` estava vazio. Ele recebia o webhook, retornava 200 OK, mas não fazia nada.
|
||||||
|
2. **Ambiente (Túnel)**: O comando `make run` inicia apenas o servidor Rails/Sidekiq, sem o túnel Ngrok necessário para expor o localhost para a internet (Wuzapi).
|
||||||
|
3. **Segurança**: O ID da Inbox usado nos testes iniciais (3) era diferente do ID do canal para o qual o webhook estava sendo enviado, causando confusão inicial.
|
||||||
|
|
||||||
|
## Solução Técnica
|
||||||
|
|
||||||
|
1. **Implementação do Controller**:
|
||||||
|
Conectamos o controller ao serviço existente:
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
# app/controllers/webhooks/wuzapi_controller.rb
|
||||||
|
def process_payload
|
||||||
|
Whatsapp::IncomingMessageWuzapiService.new(inbox: @inbox, params: params.to_unsafe_hash).perform
|
||||||
|
head :ok
|
||||||
|
rescue StandardError => e
|
||||||
|
Rails.logger.error e
|
||||||
|
head :internal_server_error
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Fluxo de Execução**:
|
||||||
|
Padronizado o uso de `make force_run_tunnel` para garantir que o Ngrok suba junto com a aplicação.
|
||||||
|
|
||||||
|
## Validação
|
||||||
|
|
||||||
|
- Teste simulado via `curl` confirmou criação de mensagem no banco.
|
||||||
|
- Teste real ("Teste 123") confirmado pelo usuário e validado nos logs com resposta automática do Agente ("Olá! Como posso ajudar...").
|
||||||
|
|
||||||
|
## Arquivos Alterados
|
||||||
|
|
||||||
|
- `app/controllers/webhooks/wuzapi_controller.rb`
|
||||||
|
- `task.md`, `walkthrough.md` (Documentação)
|
||||||
Loading…
Reference in New Issue
Block a user