Для настройки интеграции в нашем случае реализован способ "RK XML Interface"
Содержание:
Настройка подключения в системе R-Keeper:
В свойствах кассового сервера, к которому планируется обращаться по XML API укажите порт HTTP в разделе "HTTP Сервер"
Добавьте права доступа для HTTР в свойствах кассового сервера в разделе "HTTP ограничения";
Укажите в программе:
Аналогично укажите порт и права доступа для HTTP соединения для сервера справочников
Для сервера кассы и для сервера справочников порты должны отличаться
Логин и пароль обязательно укажите латинскими буквами, другие не будут работать
Поставьте галочки на правилах которые Вы настраивали в пункте 1.
Запомните информацию которую Вы указывали в программе, она потребуется для подключения интеграции в личном кабинете FoodSoul.
В личном кабинете FoodSoul откройте раздел Интеграции -> Автоматизация
Выберите интеграцию R-Keeper и укажите необходимые данные
Подробнее с порядком настройки можно ознакомиться в официальном руководстве программы
Подключение интеграции в личном кабинете FoodSoul
Далее пройдёмся по всем полям настроек которые необходимо заполнить:
Логин
Логин администратора которого Вы создавали ранее в программе
Пароль
Пароль администратора которого Вы создавали ранее в программе
Адрес сервера
IP или URL адрес кассового сервера R-Keeper, с которым планируется настроить соединение
укажите ссылку вместе с протоколом если Ваш сервер требует HTTPS. ( "https://123.123.123.123" ), по умолчанию используется http
Порт кассы
Порт HTTP из свойств кассового сервера, указанный при настройке выше
Код официанта
Пользователь-официант R-Keeper от имени которого будут поступать заказы.
Код стола
Дежурный столик на который будет поступать заказ, учтите что для поступления заказа смена на кассе и на столике должна быть открыта.
Название типа цены
Цена товара которая будет выгружена в личный кабинет как основная: "Себестоимость", "Основная" и др.
Убедитесь, что у выбранного типа цены заданы цены на все выгружаемые блюда: позиции без цены в этом прайс-листе приедут в личный кабинет с ценой 0. Если название не совпадёт ни с одним типом цены из справочника, будет использован первый активный тип цены.
По умолчанию после настройки Вам будут доступны:
Важно: при отсутствии лицензии заказы передаются пустыми, без указания содержащихся в них позиций.
Чтобы расширить доступные Вам функции R-Keeper необходимо дополнительно передавать информацию о лицензии.
Читайте подробнее по ссылке.
Пример запроса без лицензии:
<?xml version="1.0" encoding="utf-8"?>
<RK7Query>
<RK7Command CMD="CreateOrder">
<Order persistentComment="Как можно скорее; +7 (999) 999-99-99; ТЕСТТТ; Это самовывоз">
<Waiter code="99" />
<Table code="999" />
<Station code="1" />
<DeliveryBlock startTime="2025-12-17T10:27:35" deliveryTime="2025-12-17T14:27:35" />
<ExternalProps>
<Prop name="{A999A9AA-A999-999A-9A99-A9A999999AAA}" value="89999999999" />
<Prop name="{9A9AA999-999A-99A9-A99A-9999AAA9A999}" value="0" />
</ExternalProps>
</Order>
</RK7Command>
</RK7Query>
Пример заказа с лицензией:
<?xml version="1.0" encoding="utf-8"?>
<RK7Query>
<RK7Command CMD="SaveOrder" deferred="false">
<Order guid="{999A999A-999A-9999-9999-AAA99A9A9AAA}" />
<LicenseInfo anchor="9:9999a9a9-9999-9999-9a9a-99a99aa99a99#999999999/99" licenseToken="999a9aa9-9a9a-9a99-a999-9999a9999999">
<LicenseInstance guid="aa99aaa9-a9a9-a999-99a9-999aaa999aaa" seqNumber="3" />
</LicenseInfo>
<Session>
<Station code="1" />
<Dish id="1111111" quantity="1000" price="62000" />
<Dish id="1111111" quantity="1000" price="57000" />
</Session>
</RK7Command>
</RK7Query>
Лицензия заводится и генерируется на сервере R-Keeper, специалисты технической поддержки должны будут предоставить Вам следующую информацию:
Логин интегратора
электронная почта, используемая как логин для входа в систему лицензирования l.ucs.ru созданного пользователя
Пароль интегратора
пароль для входа в систему лицензирования l.ucs.ru созданного пользователя
GUID продукта
идентификатор модуля R-Keeper, подключаемого в Вашей системе
Код ресторана
Код основного заведения из свойств программы
Укажите полученные от технической поддержки данные в соответствующих полях настроек интеграции в личном кабинете FoodSoul
После заполнения полей для получения ключа лицензии Вы сможете указать способы оплаты заказа.
Откройте раздел "Справочник Валют" в R-Keeper V7.
В списке выберите нужный способ оплаты
Скопируйте значения поля "Код" из свойств способа оплаты:
Заполните поля в личном кабинете FoodSoul:
Код оплаты наличными
Код оплаты онлайн
Код оплаты картой курьеру
Поле соответствует способу оплаты, который пользователь выбирает на сайте или в приложении при оформлении заказа.
Код для применения скидок
Укажите код способа оплаты для передачи суммы скидки в рублях. Считаем что скидка это оплаченная часть от полной стоимости.
Фильтр по названию категории
Из категории с указанным названием Будут выгружены только её подкатегории и товары, т. е. эта категория будет считаться корневой категорией меню.
Код кассы:
Код кассы для поступления заказа, укажите чтобы заказ отобразился на конкретном кассовом терминале.
Фильтр по коду торговой группы
Будут импортированы товары и категории только из указанной группы.
Перенести товары только для доставки
Будут импортированы товары, имеющие статус Доставка. Для работы настройки необходимо завести в R-Keeper кастомное поле genDeliverySoul и проставить его у нужных блюд — см. раздел Кастомные поля R-Keeper. Настройка нужна потому, что кассовый справочник содержит всё подряд — тару, полуфабрикаты, упаковку, — а в приложение должна уходить лишь часть меню.
Если настройка включена, а поле
genDeliverySoulне заведено или не заполнено ни у одного блюда, меню не выгрузится вообще.
Код товара для платной доставки
Для передачи платной доставки необходимо добавить товар в Rkeeper и указать код товара в данном поле.
Отключить автоматическую выгрузку товаров
Для меню с большим количеством номенклатуры действуют ограничения на импорт товаров. В этом случае необходимо изменить настройки, сохранив текущие параметры:
Отключается только автоматический импорт товаров.
Время ожидания запроса (timeout) увеличивается до 3 минут.
Импорт товаров производится только вручную путем нажатия кнопки принудительный запуск импорта данных.
Неподтвержденный заказ
Отправка заказа проходит в режиме Черновика. Для превращения в обычный заказ потребуется пересохранить заказ с кассы.
Важно: для минимизирования конфликтов данных необходимо хранить данные номенклатуры на стороне системы интеграции.
При активации автоматической выгрузки из системы автоматизации не нужно вносить никаких изменений в меню. Это приведет к ошибкам при создании заказов.
Часть возможностей выгрузки меню опирается на кастомные поля — пользовательские свойства справочников R-Keeper. Штатных полей карточки блюда для них недостаточно, поэтому такие признаки заводятся вручную на стороне R-Keeper.
<Item> с префиксом gen: свойство DeliverySoul → атрибут genDeliverySoul.LongComment → genLongComment0419 (0419 — код ru-RU).Пример элемента выгрузки блюда с кастомными полями:
<Item ItemIdent="1000015" Name="Беляш с мясом" Status="rsActive" MainParentIdent="1000010"
PortionWeight="0.12" genDeliverySoul="true" genLongComment0419="Сочный беляш из говядины" />
| Поле | Справочник | Значение | Для чего | Флаг в личном кабинете | Если не заполнено |
|---|---|---|---|---|---|
genDeliverySoul |
Меню (блюда) | признак-флаг, любое непустое значение | отбор блюд, которые продаются в доставке | Перенести товары только для доставки | при включённом флаге блюдо не выгружается |
genCategDelivery |
Категории меню | текст, значимое значение Size |
категория становится группой размеров одного товара | не требуется | категория выгружается как обычная |
genDeliverySize |
Меню (блюда) | текст: 0,5 л, 30 см, 250 г |
подпись варианта внутри категории-размера | не требуется | подписью варианта станет название блюда |
genLongComment0419 |
Меню (блюда) | текст | описание товара в приложении и на сайте | не требуется | берётся штатное поле «Комментарий», а если оно пустое — товар без описания |
genProtein |
Меню (блюда) | число: 12, 12,5 |
белки, гр. — в описании товара | не требуется | блок пищевой ценности не выводится |
genFats |
Меню (блюда) | число: 8, 8,25 |
жиры, гр. — в описании товара | не требуется | блок пищевой ценности не выводится |
genCarbohydrates |
Меню (блюда) | число: 30 |
углеводы, гр. — в описании товара | не требуется | блок пищевой ценности не выводится |
genCalories |
Меню (блюда) | число: 250 |
энергетическая ценность, ккал. — в описании товара | не требуется | блок пищевой ценности не выводится |
genDeliverySoul — признак «продаётся в доставке». Единственное кастомное поле, работающее в паре с настройкой в личном кабинете: оно читается только при включённом флаге Перенести товары только для доставки. Если флаг выключен, поле игнорируется и выгружается весь справочник целиком.
genCategDelivery — со значением Size помечает категорию как группу размеров/вариантов. Такая категория не появляется в меню как категория: она превращается в один товар, а вложенные в неё блюда становятся его вариантами. Пример: категория «Пицца Маргарита» со значением Size, внутри блюда «25 см», «30 см», «35 см» — в приложении это одна карточка с выбором размера. Категорией товара становится родительская категория группы размеров.
genDeliverySize — подпись варианта для блюда внутри категории-размера. Значение переносится в описание варианта как есть, поэтому заполняйте его в том виде, в котором подпись должна отображаться пользователю. Осмысленно только вместе с genCategDelivery=Size.
genLongComment0419 — описание блюда на русском языке. Приоритетнее штатного поля «Комментарий»: если заполнены оба, в приложение уйдёт значение кастомного поля.
Нативных полей пищевой ценности в справочнике меню R-Keeper нет, поэтому КБЖУ передаётся кастомными полями: genProtein, genFats, genCarbohydrates, genCalories. Заводятся они так же, как остальные кастомные поля, и привязываются к справочнику Меню.
Значения выгружаются в описание товара: если заполнены все четыре показателя, к описанию добавляется отдельный абзац с пищевой ценностью.
Сочный беляш из говядины
Пищевая ценность продукта на 100 гр.:
Белки: 12 гр.
Жиры: 8 гр.
Углеводы: 30 гр.
Энергетическая ценность: 250 ккал.
Как заполнять:
12.5 и 12,5 считаются одинаково), в тексте они округляются до одного знака после запятой;Для товаров с вариантами (категория с genCategDelivery=Size) блок пищевой ценности не выводится: у каждого варианта в R-Keeper своё КБЖУ, и в общем описании товара значения вводили бы в заблуждение.
genNutritionalValue — это поле выгрузка не использует. Общую пищевую ценность текстом при необходимости добавляйте в genLongComment0419.
Картинки товаров и описания при повторной выгрузке меню не перезаписываются данными R-Keeper — их можно заполнить в личном кабинете FoodSoul вручную.
Эти фильтры работают со штатными справочниками R-Keeper, заводить пользовательские свойства для них не требуется:
Названия сравниваются без учёта регистра и лишних пробелов, но должны совпадать целиком.
genDeliverySoul не заведён или не проставлен ни у одного блюда.genLongComment0419 / «Комментарий», а путь к изображению в карточке блюда пуст.genDeliverySoul либо Фильтр по коду торговой группы.genProtein, genFats, genCarbohydrates, genCalories (регистр важен), привязаны к справочнику Меню, содержат числа, а не текст, и заполнены все четыре. Значение 0 считается незаполненным, а у товаров с вариантами блок не выводится.При передаче заказа кастомные свойства адресуются не по имени, а по GUID — это видно в примерах запросов выше, в блоке <ExternalProps>. FoodSoul передаёт телефон гостя, его email (если указан) и служебное свойство доставки. GUID-ы свойств выдаёт техническая поддержка R-Keeper при настройке модуля доставки.