Когда счёт-фактура оформляется в одной системе, оплата — в другой, склад — в третьей, сотрудники переносят данные вручную. Интеграция превращает этот перенос в процесс. Каждое подключение оценивается отдельно: мы не обещаем, что «готовый коннектор есть».
У каждого направления своя страница. На ней описаны требования Узбекистана, что есть в стандарте Odoo и какая работа добавляется.
Электронный счёт-фактура и операторы, электронная цифровая подпись, код ИКПУ (МХИК), онлайн-касса, электронная накладная. Именно здесь больше всего местных требований. Подробнее →
Click, Payme и другие платёжные сервисы, банковская выписка, привязка платежа к счёту-фактуре, фискальный чек. Подробнее →
Telegram, WhatsApp, SMS, email и соцсети: уведомления клиентам, внутренние сообщения, обращения. Подробнее →
Местные маркетплейсы, синхронизация остатков и заказов, службы доставки и курьеры. Подробнее →
Обмен данными и перенос из amoCRM, MoySklad, 1C, Excel, кассовый аппарат, сканер, весы, биометрический учёт посещаемости. Подробнее →
Способ определяет, как быстро будет готово подключение, кто будет его сопровождать и на каком хостинге оно будет работать. Выбор мы делаем на диагностике, исходя из требований.
| Способ | Что он делает | Когда подходит | Ограничение |
|---|---|---|---|
| Файл: импорт и экспорт (CSV, XLSX) | Odoo загружает из файла записи любого бизнес-объекта. Если есть столбец «Внешний ID», повторная загрузка не создаёт дубликат, а обновляет существующую запись | Разовый перенос; пакетный обмен раз в день или раз в неделю | Не в реальном времени. Большой файл может упереться в лимит времени: документация рекомендует разбивать его на небольшие части |
| JSON-2 API | Внешняя программа вызывает метод модели Odoo: читает запись, создаёт её, подтверждает заказ | Внешняя система должна писать в Odoo или читать из него; режим, близкий к реальному времени | Начиная с Odoo 19. Зависит от типа подписки. Есть правила для ключей, прав и транзакций |
| Webhook: Odoo отправляет сообщение | Автоматизированное правило при событии отправляет POST-запрос с выбранными полями. Триггер типа «Внешний» принимает событие внешней системы | Внешней системе нужно сразу узнавать, что изменилось в Odoo | Подпись исходящего сообщения в документации не описана. Адрес входящего webhook секретный (меняется через Rotate Secret). Неверно настроенный webhook может навредить базе |
| Готовый модуль из Apps Store | Коннектор, написанный сторонним разработчиком | Модуль полностью соответствует вашему требованию, и автор его регулярно обновляет | На Odoo Online не устанавливается. Зависит от версии. Адаптация к новой версии может запаздывать |
| Пользовательский модуль, безопасный при обновлениях | Код, работающий внутри Odoo Enterprise: модель, метод, запланированное действие | Готового решения нет или оно не подходит; хостинг — Odoo.sh или собственный сервер | На Online не работает. Под каждую новую версию нужна адаптация |
| Промежуточный сервис (middleware) | Отдельная небольшая программа или платформа интеграции между Odoo и внешней системой: меняет формат, ведёт очередь, повторно отправляет при ошибке | Сложное подключение на Odoo Online без специального модуля; связь нескольких систем | Нужны отдельный сервер и мониторинг; кто-то обязательно должен его сопровождать. Это рекомендация BUline, а не документ Odoo |
Начиная с Odoo 19.0 это официальный способ для внешней программы. Далее — по документации Odoo 20. Подробнее: основы JSON-2.
| Элемент | Правило |
|---|---|
| Адрес | POST-запрос: /json/2/model/method. Model — техническое имя таблицы Odoo, method — действие (поиск, чтение, создание, подтверждение). Параметры передаются в теле JSON, только по имени |
| Ключ | Создаётся в настройках пользователя: запрашиваются описание и срок действия, ключ показывается на экране только один раз. Срок не превышает трёх месяцев; ключ, работающий длительное время, меняют не реже чем раз в три месяца |
| Права | Работает с правами владельца ключа. Для постоянного подключения документация рекомендует завести отдельного пользователя-«бота». Если оставить его пароль пустым, вход по логину и паролю отключается |
| База | Если на одном сервере несколько баз, в запрос добавляется заголовок X-Odoo-Database |
| Транзакция | Каждый вызов — отдельная транзакция: при успехе сохраняется, при ошибке отменяется. Несколько вызовов нельзя объединить в одну транзакцию, поэтому связанные действия собираются в один метод |
| Ответ и ошибка | При успехе — 200. При ошибке — 4xx или 5xx и объект ошибки: name, message, arguments, context, debug. Неверный ключ даёт 401 |
| Документ | Список моделей, полей и методов базы находится на странице /doc этой базы. В документации этот раздел пока помечен как «пишется» |
| Подписка | Согласно документации, внешний API доступен только на типе подписки «Custom», на более низких типах его нет. Точные условия — на odoo.com и в вашем договоре: проверяем в начале проекта |
| Частота вызовов | Политика допустимого использования Odoo считает приемлемым примерно один вызов в секунду для непостоянной нагрузки, без параллельных вызовов. Для больших объёмов на Odoo.sh указан отдельный режим |
В первую очередь мы выясняем, есть ли подключения старого типа. Часто их не видит никто на экране: например, ночной скрипт резервного копирования. Сроки — по документации Odoo 20. Порядок перехода →
| Услуга | Статус | Срок |
|---|---|---|
| Сервис базы данных (db) | Удалён | Odoo 20 (в документации: осень 2026 года) и Online 19.1 |
| Общий (common) и объектный (object) сервисы | Устарели, удаление запланировано | Odoo 22 (в документации: осень 2028 года) и Online 21.1 (в документации: зима 2027 года) |
| JSON-2 | Актуальный способ | С Odoo 19.0 |
Большая часть подключений «из коробки» не работает. Особенно это касается государственных систем Узбекистана и местных платёжных сервисов. Данные приведены по документации Odoo 20; если в вашей версии есть отличия, проверим их на диагностике.
| Задача | В стандартном Odoo | Дополнительная работа (BUline) |
|---|---|---|
| Импорт и экспорт из файла | Есть: CSV и XLSX; повторная загрузка с внешним ID обновляет запись | Карта столбцов, правила очистки, проверка повторяющихся записей |
| Внешний API | Есть: JSON-2 (с Odoo 19); правила для ключей, прав и транзакций. Зависит от типа подписки | Пользователь-бот, права, последовательность вызовов, обработка ошибок |
| Исходящее сообщение из Odoo (webhook) | Есть: действие «Send Webhook Notification» в автоматизированном правиле | Принимающая сторона, проверка подписи, защита от повторного сообщения: в документации не описаны |
| Государственный электронный счёт-фактура | Нет: в документации по узбекской локализации электронный счёт-фактура не упомянут; Узбекистана нет в списке страниц Odoo по электронным счетам-фактурам | Подключение к оператору — отдельный проект. Подробнее → |
| Местные платёжные сервисы | Нет: среди 21 платёжного провайдера в документации Odoo 20 нет ни Click, ни Payme | Протестировать готовый модуль или написать подключение по документации провайдера. Подробнее → |
| Прямая синхронизация с банком | Документация перечисляет провайдеров (Salt Edge: «весь мир»), банки Узбекистана не названы; проверяется на диагностике. Импорт из файла есть (CSV, XLSX, OFX, QIF, CAMT.053). Синхронизация требует подписки Enterprise | Приведение банковской выписки к формату Odoo, правила сверки |
| Повтор при ошибке | Частично: сервер Odoo сам повторяет транзакцию, которой помешал конфликт, всего до пяти попыток (в исходном коде) | Очередь, защита от повторов, журнал и оповещения при обмене с внешней системой строятся на стороне вашего подключения |
| Готовые коннекторы | Не в самой Odoo: модули из Apps Store, зависящие от автора | Выбор, проверка кода, тестирование, план обновления. Чек-лист проверки → |
Этот вопрос мы решаем в начале проекта, потому что смена хостинга позже может потребовать перестройки подключения. Типы хостинга →
Этапы соответствуют общему методу BUline. Срок письменно согласовывается после диагностики. Порядок внедрения →
Какая система, какие данные, в каком направлении и как быстро обмениваются. Открывается документация провайдера, проверяются сторона Odoo (стандарт, Studio или модуль) и тип хостинга. Результат: пункт об интеграции в карте бизнес-требований (BRD).
Таблица по полям: какое поле откуда приходит, в каком формате, какая система главная (master). Выбирается способ: файл, API, webhook, модуль или промежуточный сервис. Фиксируются пути ошибок, права и владелец ключа.
Подключение разрабатывается на копии Odoo. Тестовая база создаётся с отключёнными внешними действиями. Используется тестовый режим провайдера. Проверяются граничные случаи: повторное сообщение, обрыв связи, неверные данные.
Сначала на одном потоке или в одном филиале с реальными данными (пилот), затем на остальных. Ключи для рабочей базы выдаются отдельно. Приёмочные испытания проходят вместе с клиентом.
После запуска — 30 дней усиленной поддержки, затем согласованное постоянное сопровождение. Работают журнал, оповещения и календарь сроков действия ключей. При обновлении Odoo или провайдера подключение тестируется заново.
С ключом подключения нужно обращаться как с паролем: у кого он окажется, тот сможет работать от имени пользователя. Хранение ключей →
Отсутствие ответа не означает, что запрос не выполнен. Стандарт HTTP (RFC 9110) не рекомендует автоматически повторять неидемпотентный запрос, если неизвестна его идемпотентность или то, что исходный запрос не был применён. Вызов JSON-2 — это POST: перед повторной отправкой нужна проверка. Идемпотентность →
| Статус | Что это значит | Что делаем мы |
|---|---|---|
| 401: ключ недействителен | Ключ неверный или срок его действия истёк | Повторять не будем. Отправляем оповещение, ключ заменяется |
| Другие 4xx: объект ошибки | Ошибка данных или прав; повторная отправка результата не изменит | Поля name и message записываем в журнал, запись помещаем в список «с ошибкой», ответственный сотрудник её видит |
| 500, обрыв сети, нет ответа | Запрос мог быть выполнен, а мог и не быть выполнен | Сначала по внешнему ID проверяем, есть ли запись, затем повторно отправляем с нарастающей паузой |
| Два процесса изменили одну запись | Сервер Odoo сам повторяет действие, всего до пяти попыток (в исходном коде) | Интеграция тоже готова к такой ошибке: после короткой паузы повторяет попытку |
| Сообщение webhook не пришло или пришло дважды | Отправитель может отправить повторно или не отправить вовсе | Каждое сообщение обрабатывается только один раз по его идентификатору. Раз в сутки сверяем две системы через API |
| Внешний сервис временно не работал | Сервер провайдера не отвечает | Записи хранятся в очереди и отправляются по порядку после восстановления сервиса; по истечении заданного срока сигнал уходит человеку |
Самая опасная неисправность — тихая: подключение останавливается, никто не замечает, а через несколько дней расчёты не сходятся. Поэтому мониторинг мы строим вместе с подключением, а не оставляем на потом. В документации Odoo по обновлению тоже есть пункт о проверке подключений к внешним программам в тестовой базе.
Обещание по интеграции опирается на документацию провайдера, подписку Odoo и тип хостинга. Пока мы их не изучили, мы не говорим «подключится».
Этот список ускоряет диагностику. Начать можно и без полного комплекта.
Технически большинство можно подключить через JSON-2 или файл. Но возможность зависит от трёх вещей: есть ли у внешней системы открытый интерфейс, предоставляет ли ваша подписка Odoo внешний API и какой у вас тип хостинга. На диагностике каждое подключение оценивается отдельно.
Да, но без специального модуля внутри Odoo. Внешняя программа заходит через JSON-2 или Odoo отправляет webhook; в сложном случае строится промежуточный сервис. Специальные модули и модули из Apps Store с Online несовместимы. Odoo Online →
Сервис базы данных удалён в Odoo 20, а остальные два сервиса планируется удалить в Odoo 22 и Online 21.1. Мы составим их список и спланируем перевод на JSON-2 вместе с обновлением версии.
Пока специальные и сторонние модули не адаптированы к новой версии, база не обновляется. Если внешняя система заходит через JSON-2, зависимость меньше, но при каждом обновлении подключение обязательно нужно проверять в тестовой базе.
Если внешней системе нужно сразу узнавать об изменении в Odoo — webhook. Если внешней системе нужно читать из Odoo или писать в неё — API. Часто используются оба вместе: webhook подаёт сигнал, API проверяет состояние. Webhook →
Ключ создаётся от имени пользователя-бота в вашей базе Odoo и ограничивается по сроку. По окончании работ он заменяется. NDA подписывается по вашему запросу, охват и результаты фиксируются в письменном договоре.
Лицензия Odoo зависит от числа пользователей и приложений (условия на odoo.com); внешний API открыт только на некоторых типах подписки. Объём услуг BUline зависит от числа и сложности подключений, пользователей, филиалов, приложений, кастомизации, объёма данных и обучения. Точная стоимость и сроки сообщаются в письменном предложении после бесплатной диагностики.
На диагностике разберём ваши процессы и скажем, где достаточно стандартного Odoo, а где нужна настройка, — со списком приложений, версией и этапами.