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
- Crie um novo módulo, ex.:
webhook_custom
. - 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!