Webhooks Personalizados no Odoo: Integrações em Tempo Rea...

July 25, 2025 by
Webhooks Personalizados no Odoo: Integrações em Tempo Rea...
OdooBot

Webhooks Personalizados no Odoo: Integrações em Tempo Real e Automação

O mundo empresarial exige cada vez mais integrações instantâneas e fluxos de trabalho automatizados. Utilizar Webhooks no Odoo permite disparar eventos para sistemas externos em tempo real, sem grandes complexidades. Neste artigo, vamos explorar como criar um módulo que envia Webhooks personalizados sempre que um registo é criado ou atualizado, somando valores no payload e garantindo logging robusto.


1. O que são Webhooks no Odoo?

Webhooks são chamadas HTTP (POST) que o Odoo executa automaticamente ao ocorrerem determinados eventos (por exemplo, criação de faturas, alterações em stocks, etc.). Em vez de recorrer a polling, o Webhook notifica o sistema receptor imediatamente, reduzindo latência e consumo de recursos.

Principais vantagens
- Integração em tempo real
- Menor carga de processamento
- Arquitectura desacoplada
- Rastreabilidade com logging detalhado


2. Passo a Passo: Criar um Webhook Personalizado

2.1 Definir o Modelo e os Eventos

  1. Crie um novo módulo, ex.: webhook_custom.
  2. No ficheiro models/webhook_event.py, declare o modelo responsável por armazenar endpoints e configurações.

```python from odoo import models, fields, api

class WebhookEndpoint(models.Model): _name = 'webhook.endpoint' _description = 'Webhook Endpoint Config'

name = fields.Char(string='Nome')
url = fields.Char(string='URL do Webhook', required=True)
active = fields.Boolean(default=True)
model_id = fields.Reference(selection=[('sale.order','Encomenda'), ('account.move','Fatura')], string='Modelo')

```

2.2 Criar o Controller HTTP

No ficheiro controllers/main.py, implemente um endpoint interno para gestão de testes.

```python from odoo import http from odoo.http import request

class WebhookController(http.Controller):

@http.route('/webhook_custom/health', type='json', auth='public')
def health_check(self):
    return {'status': 'OK', 'module': 'webhook_custom'}

```

2.3 Configurar a Lógica de Envio

Adicione um override ao método create e write do modelo alvo (ex.: account.move) para disparar o Webhook.

```python import requests import json from odoo import models

class AccountMove(models.Model): _inherit = 'account.move'

def _trigger_webhook(self, record, endpoint):
    payload = {
        'id': record.id,
        'name': record.name,
        'amount_total': record.amount_total,
        # Exemplo de soma de valores adicionais:
        'sum_lines': sum(line.price_subtotal for line in record.invoice_line_ids),
    }
    try:
        response = requests.post(endpoint.url, json=payload, timeout=5)
        endpoint.write({'last_response': response.text, 'last_status': response.status_code})
    except Exception as e:
        endpoint.message_post(body=f'Erro ao enviar Webhook: {e}')

def write(self, vals):
    res = super().write(vals)
    endpoints = self.env['webhook.endpoint'].search([
        ('model_id', '=', 'account.move'), ('active', '=', True)
    ])
    for rec in self:
        for ep in endpoints:
            rec._trigger_webhook(rec, ep)
    return res

def create(self, vals):
    record = super().create(vals)
    endpoints = self.env['webhook.endpoint'].search([
        ('model_id', '=', 'account.move'), ('active', '=', True)
    ])
    for ep in endpoints:
        record._trigger_webhook(record, ep)
    return record

```

2.4 Processar a Resposta e Registar Logs

  • Utilize o modelo mail.message para guardar as respostas, facilitando auditoria.
  • Configure um cron job para reprocessar Webhooks falhados.

3. Exemplo Completo de Estrutura de Ficheiros

webhook_custom/ ├── __init__.py ├── __manifest__.py ├── controllers/ │ └── main.py ├── models/ │ ├── __init__.py │ └── webhook_event.py │ └── account_move_webhook.py └── data/ └── webhook_endpoint_demo.xml

No __manifest__.py inclua dependências: python { 'name': 'Webhooks Custom', 'version': '1.0', 'depends': ['base', 'sale', 'account'], 'data': ['data/webhook_endpoint_demo.xml'], }


4. Boas Práticas e Performance

  • Timeouts e Retentativas: Configure limites de tempo e número de retentativas para evitar bloqueios.
  • Batching: Se o volume for alto, agrupe eventos para reduzir chamadas HTTP.
  • Segurança: Utilize tokens ou autenticação básica no endpoint.
  • Monitorização: Ative o Debug Mode e use o menu Técnico → Logs para analisar falhas.

5. Conclusão e Próximos Passos

Criar Webhooks personalizados no Odoo é uma forma poderosa de automatizar processos e garantir integração em tempo real. Ao combinar triggers em modelos, controllers HTTP e lógica de somatórios, elevamos a eficiência do nosso ERP.

Precisa de suporte técnico ou de uma solução à medida? A equipa da OpenCloud está certificada pelo Odoo e pronta para ajudar:
- Visite o nosso website em www.opencloud.pro
- Conheça-nos como parceiro Odoo: https://www.odoo.com/partners/opencloud-unipessoal-lda-12774

Potencie o seu negócio com integrações inteligentes e acelere a transformação digital!