diff --git a/addons/activeblue_ai/data/ir_cron.xml b/addons/activeblue_ai/data/ir_cron.xml index 4c2bf16..fd9ca7e 100644 --- a/addons/activeblue_ai/data/ir_cron.xml +++ b/addons/activeblue_ai/data/ir_cron.xml @@ -6,8 +6,8 @@ code model.cron_ping_all() - 1 - minutes + 20 + seconds True diff --git a/addons/activeblue_ai/models/ab_ai_bot.py b/addons/activeblue_ai/models/ab_ai_bot.py index 8719695..6302ed0 100644 --- a/addons/activeblue_ai/models/ab_ai_bot.py +++ b/addons/activeblue_ai/models/ab_ai_bot.py @@ -1,5 +1,6 @@ from odoo import models, fields, api, _ from odoo.exceptions import UserError +from datetime import timedelta import requests import logging @@ -132,13 +133,25 @@ class AbAiBot(models.Model): return if 'bus.presence' not in self.env: return - Presence = self.env['bus.presence'] - status = 'online' if online else 'offline' - now = fields.Datetime.now() - rec = Presence.sudo().search([('user_id', '=', bot_user.id)], limit=1) - vals = {'status': status, 'last_poll': now, 'last_presence': now} - if rec: - rec.write(vals) - else: - vals['user_id'] = bot_user.id - Presence.sudo().create(vals) + try: + Presence = self.env['bus.presence'] + now = fields.Datetime.now() + # bus.presence.status is a computed field — write only last_poll/last_presence. + # When online: set last_poll 90s ahead so the bot stays "online" across the + # full 60s cron cycle (Odoo DISCONNECTION_TIMER is 30s). + # When offline: set last_poll an hour in the past to force "offline" state. + if online: + poll_time = now + timedelta(seconds=90) + presence_time = now + else: + poll_time = now - timedelta(hours=1) + presence_time = now - timedelta(hours=1) + vals = {'last_poll': poll_time, 'last_presence': presence_time} + rec = Presence.sudo().search([('user_id', '=', bot_user.id)], limit=1) + if rec: + rec.write(vals) + else: + vals['user_id'] = bot_user.id + Presence.sudo().create(vals) + except Exception as exc: + _logger.warning('Could not update bot user presence: %s', exc) diff --git a/docker-compose.odoo.yml b/docker-compose.odoo.yml index 32900a0..a0a5d13 100644 --- a/docker-compose.odoo.yml +++ b/docker-compose.odoo.yml @@ -13,7 +13,7 @@ services: volumes: - ./odoo-ai-data:/var/lib/odoo - ./odoo-ai-config:/etc/odoo - - ./odoo_module:/mnt/extra-addons + - ./addons:/mnt/extra-addons ports: [] restart: unless-stopped labels: @@ -25,6 +25,7 @@ services: networks: - traefik-public - odoo-ai-internal + - activeblue-net odoo-ai-db: image: postgres:15 @@ -48,6 +49,8 @@ networks: external: true odoo-ai-internal: driver: bridge + activeblue-net: + external: true volumes: odoo-ai-db-data: