При автоматизации сделок в Битрикс24 довольно часто возникает практическая задача: сформировать состав сделки автоматически, добавив в неё услуги или разовые позиции. Это может быть сопровождение, доставка, дополнительная работа или любой другой элемент, который нужен только в рамках конкретной сделки. Создавать такие позиции в каталоге товаров нецелесообразно — каталог быстро захламляется, а сами товары больше нигде не используются.
Именно для этого в REST предусмотрен метод crm.deal.productrows.set, который управляет товарными строками сделки напрямую и позволяет добавлять позиции без привязки к каталогу.

В чём возникла проблема
На практике пользователь корректно выбрал REST-метод, указал цену, количество и даже явно задал PRODUCT_ID = 0, чтобы товар не брался из каталога. Однако после выполнения робота в интерфейсе сделки товары не появлялись. При этом метод отрабатывал без явной ошибки, а лог приложения возвращал либо пустой результат, либо null.
Ситуация выглядела особенно запутанной, потому что логика казалась верной, а при повторных попытках поведение не менялось: сделка оставалась без товарных позиций.
Где кроется ограничение стандартного подхода
REST-роботы в Битрикс24 очень чувствительны к структуре параметров. Даже если JSON валиден с точки зрения синтаксиса, метод может просто «не увидеть» нужные данные, если они переданы под неверным ключом. В случае с crm.deal.productrows.set это особенно критично, потому что массив товарных строк должен называться строго определённым образом.
Частая ошибка — использовать интуитивные названия вроде productRows или другие варианты, ориентируясь на логику или примеры из кода. В результате метод выполняется, но фактически ничего не меняет в сделке.

Как была решена задача
В ходе разбора выяснилось, что ключевая ошибка заключалась именно в имени массива. REST-метод ожидает параметр rows, и только его. После того как структура запроса была приведена к ожидаемому формату, товары начали корректно появляться в сделке.
Важно понимать, что при PRODUCT_ID = 0 Битрикс24 воспринимает позицию как свободную товарную строку. В этом случае система ориентируется на PRODUCT_NAME, цену и количество, не создавая запись в каталоге. Такой подход полностью решает задачу разовых услуг и нестандартных позиций.
Для самопроверки удобно использовать связку из двух вызовов: сначала получать текущие товарные строки сделки, затем выполнять установку новых и повторно проверять результат. Это сразу показывает, применились ли изменения.
Логика передачи данных
Рабочая логика сводится к простой конструкции: передаётся идентификатор сделки и массив rows, внутри которого перечислены товарные строки. Каждая строка описывает одну позицию — с названием, ценой и количеством. Остальные поля подключаются только при необходимости и не являются обязательными.
Именно такую схему проще всего отлаживать и масштабировать, особенно если товаров несколько и они формируются динамически в процессе бизнес-процесса.
В подобных сценариях удобно использовать REST API — методы РЕСТ Битрикс24 и JSON в роботах и БП, так как приложение позволяет быстро проверить структуру запроса, увидеть фактический ответ метода и сразу понять, на каком этапе данные перестают обрабатываться.

Итоговый результат
После исправления структуры JSON товары стали стабильно добавляться в сделки. При этом каталог остался нетронутым — новые позиции в нём не появлялись. Роботы перестали возвращать null, а состав сделки стал формироваться предсказуемо и прозрачно.
Это позволило полностью автоматизировать сценарии с услугами, пакетами сопровождения и другими разовыми позициями без ручного вмешательства менеджеров.
Вывод
Если при работе с crm.deal.productrows.set товары не появляются в сделке, причина почти всегда кроется не в правах или методе, а в структуре параметров. Ключ rows — критичен, и любое отклонение от ожидаемого формата делает вызов бесполезным.
При настройке REST-роботов и сложных JSON-запросов REST API — методы РЕСТ Битрикс24 и JSON в роботах и БП помогает избежать таких ситуаций на раннем этапе и быстрее довести автоматизацию до рабочего состояния.

