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
|
||||
|
||||
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}"
|
||||
|
||||
# TODO: Implement actual message processing logic:
|
||||
# 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)
|
||||
Whatsapp::IncomingMessageWuzapiService.new(inbox: @inbox, params: params.to_unsafe_hash).perform
|
||||
|
||||
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
|
||||
|
||||
private
|
||||
@ -32,9 +27,9 @@ class Webhooks::WuzapiController < ActionController::Base
|
||||
secret = params[:secret]
|
||||
stored_secret = @inbox.channel.provider_config['webhook_secret']
|
||||
|
||||
if secret.blank? || secret != stored_secret
|
||||
Rails.logger.warn "Wuzapi Webhook: Invalid secret for Inbox #{@inbox.id}. Received: #{secret}"
|
||||
head :unauthorized
|
||||
end
|
||||
return unless secret.blank? || secret != stored_secret
|
||||
|
||||
Rails.logger.warn "Wuzapi Webhook: Invalid secret for Inbox #{@inbox.id}. Received: #{secret}"
|
||||
head :unauthorized
|
||||
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