Як інтегрувати ConnectiveOne з Odoo CRM
Важливо: інтеграцію з Odoo CRM (модуль, iframe, webhooks) розробляє IT-команда клієнта. ConnectiveOne надає публічні інструкції та стандартні механізми (autologin,
event_webhook_url); не входить в імплементаційну оцінку ConnectiveOne.
Цей документ описує типові способи інтеграції ConnectiveOne з Odoo CRM: вбудовування операторської панелі, webhook-події, синхронізація контактів і лідів. Підходить для команди, яка розробляє Odoo-модуль на боці клієнта.
Що можна інтегрувати
| Можливість | Напрям | Документація |
|---|---|---|
| Операторська панель у картці контакта / ліда | Odoo → ConnectiveOne (iframe + autologin) | Віджет ОП в Odoo |
| Події чату (створення, підключення оператора, закриття) | ConnectiveOne → Odoo (webhook) | Webhook панелі оператора |
| Створення / оновлення ліда з бота | ConnectiveOne → Odoo (XML-RPC / JSON-RPC) | Цей документ, § «Ліди та контакти» |
| Передача custom fields у CRM | Двостороння через сценарій + API Odoo | § «Custom fields» |
| Повідомлення в Discuss | Зазвичай не дублюють — рекомендовано embed ОП | Пояснення |
Архітектура (рекомендована)
Принцип: діалоги та маршрутизація залишаються в ConnectiveOne; Odoo — CRM-картка, activity та довідники менеджерів.
Крок 1. Вбудовування операторської панелі
Детальна інструкція: Як інтегрувати операторську панель як віджет у Odoo CRM.
Коротко:
- Збіг email менеджера в Odoo та ConnectiveOne.
login_keyдля autologin — у secure storage Odoo.- Вкладка з iframe у
res.partner/crm.lead. - URL формується на сервері Odoo з телефоном клієнта.
Крок 2. Webhook подій операторської панелі в Odoo
Налаштування в ConnectiveOne
У action operator_panel__connect_to_operator_with_msg вкажіть URL контролера Odoo:
{
"auto_connect_operator": true,
"subject_alias": "support",
"event_webhook_url": "https://your-odoo.example.com/connectiveone/events"
}
Повний перелік подій і формат тіла — у налаштуванні webhook.
Приклад контролера Odoo (Python)
# controllers/connectiveone_webhook.py
from odoo import http
from odoo.http import request
import json
import logging
_logger = logging.getLogger(__name__)
class ConnectiveOneWebhook(http.Controller):
@http.route("/connectiveone/events", type="json", auth="public", methods=["POST"], csrf=False)
def receive_event(self, **kwargs):
# Рекомендується: перевірка підпису / IP allowlist
data = request.jsonrequest
event_name = data.get("event_name")
client = data.get("client") or {}
phone = client.get("phone")
partner = False
if phone:
partner = request.env["res.partner"].sudo().search([
"|", ("phone", "ilike", phone[-9:]),
("mobile", "ilike", phone[-9:]),
], limit=1)
if event_name == "chat_created" and partner:
partner.activity_schedule(
"mail.mail_activity_data_todo",
summary="Новий чат ConnectiveOne",
note=data.get("text", ""),
)
elif event_name == "chat_closed_by_operator" and partner:
partner.message_post(body="Чат ConnectiveOne закрито оператором")
return {"status": "ok"}
Для production додайте автентифікацію (shared secret у header, VPN або mTLS).
Типові події для CRM
| Подія | Рекомендована дія в Odoo |
|---|---|
chat_created | Activity на partner / lead |
operator_connected | Повідомлення в chatter |
chat_closed_by_operator | Закрити activity, оновити стадію |
chat_transferred_to_operator | Перепризначити responsible (опційно) |
Крок 3. Ліди та контакти з бота
Створення ліда через Odoo External API
З Action Jail або сценарію ConnectiveOne викличте Odoo External API:
// Приклад у custom action (псевдокод)
const xmlrpc = require("xmlrpc");
// authenticate → execute_kw('crm.lead', 'create', [{ name, phone, description }])
Рекомендовані поля ліда:
| Поле Odoo | Джерело в боті |
|---|---|
name | Ім'я клієнта або тема звернення |
phone / mobile | Константа сценарію |
description | Текст звернення / продукт |
user_id | Відповідальний менеджер (якщо відомий) |
tag_ids | Джерело каналу (Telegram, Viber) |
Пошук менеджера за клієнтом
Перед підключенням оператора можна в Odoo знайти res.partner за телефоном і прочитати user_id (відповідальний) — передати в custom fields ConnectiveOne для assign.
Крок 4. Custom fields і ідентифікатори
Зберігайте зв'язок між системами в custom fields:
| ConnectiveOne (клієнт OP) | Odoo |
|---|---|
external_id / phone | res.partner.id |
Custom field odoo_partner_id | ID партнера |
chat_room_id | Поле на partner (опційно) |
Це дозволяє відкривати правильний діалог з iframe та оновлювати ту саму картку з webhook.
Крок 5. Налаштування System Parameters в Odoo
| Ключ | Приклад | Опис |
|---|---|---|
connectiveone.instance_url | https://company.connectiveone.io | Базовий URL |
connectiveone.login_key | (secret) | Autologin |
connectiveone.default_bot_id | 12 | Бот для init_dialog |
connectiveone.default_channel | telegram | Канал за замовчуванням |
connectiveone.webhook_secret | (secret) | Перевірка webhook |
Чому embed, а не Discuss
Дублювання переписки в Odoo Discuss потребує повної синхронізації повідомлень, вкладень і маршрутизації. Це дорожче в підтримці та гірше збігається з skill groups ConnectiveOne.
Рекомендація: iframe операторської панелі + webhook для статусів і activity.
Чекліст впровадження
Користувачі Odoo = оператори ConnectiveOne (email) Autologin URL тестується на staging iframe відображається в form view partner / lead Webhook endpoint приймає chat_createdі створює activity(Опційно) Action Jail створює crm.leadпри зверненні з ботаCSP / cookies перевірені в production браузерах Секрети не в репозиторії Odoo-модуля
Обмеження
- Odoo Online може обмежувати custom controllers — перевірте план хостингу
- Autologin потребує актуального
login_key - Webhook URL має бути доступний з серверів ConnectiveOne
- Двостороння синхронізація всіх повідомлень — окремий великий scope