DOS_AI/ Документация
ОтзывыДля когоАгентствамВозможностиЦенаFAQОбучениеДокиВойтиСтарт
← Руководство
Старт
  • Что такое DOS AI
  • Как бот думает
  • Быстрый старт: первый бот за 30 минут
  • Карта кабинета (навигация)
  • Глоссарий
Проект и бот
  • Создание проекта
  • Системный промпт (характер бота)
  • JSON-ответ бота (статусы, стадии, флаги)
  • Выбор AI-модели
  • Тестовый чат
  • Продвинутые настройки бота
  • Загрузить знания о бизнесе в бота (что куда)
Каналы
  • Обзор каналов
  • Подключить WhatsApp (по QR)
  • Подключить Telegram-бота
  • Гигиена и антибан (WhatsApp)
Инструменты бота
  • Функции (инструменты бота)
  • База знаний (RAG)
  • Медиа-библиотека
  • Дожимы (follow-up)
  • Теги и сегментация
  • Уведомления владельцу (Telegram и почта)
  • Запись на время (Calendar и движок окошек)
  • Бот выставляет счёт (Kaspi)
  • Письмо клиенту
  • Рассылки по базе контактов
Работа с клиентами
  • Диалоги, лента, перехват, «AI на паузе»
  • Лиды и их статусы
  • Стадии диалога (воронка)
  • Аналитика
  • Логи событий
  • Авто-отчёты владельцу (Telegram и почта)
Интеграции
  • Обзор интеграций + сервисный аккаунт Google
  • Google Sheets
  • Google Calendar
  • Gmail
  • CRM, Bitrix24 / amoCRM / AlphaCRM
  • Вебхуки и безопасность (SSRF)
  • МойСклад: наличие и цены в ответах бота
Деньги
  • Биллинг проекта: токены, подписка, пополнение
  • Сколько стоит сообщение
  • Приём оплат от клиентов (Kaspi)
  • Промокоды и партнёрская программа
Команда и аккаунт
  • Роли и права (viewer / tester / editor / admin / owner)
  • Участники и приглашения
  • Профиль, пароль, безопасность
  • Уведомления и личные настройки
  • Удаление, передача, дублирование проекта
Для разработчиков
  • Публичный API и ключи dos_sk_live_…
  • Кастомные вебхуки (продвинутый режим)
  • Язык выражений (expressions)
  • Формат данных и интеграция фронта
  • Подключить ИИ-агента: Claude Code, Codex, Cursor (MCP)
Решение проблем
  • Бот не отвечает, диагностика
  • Функция не вызывается / падает
  • Канал отвалился / WhatsApp забанили
  • Платёж не прошёл
  • Частые вопросы (FAQ)
  • Лиды из рекламы приходят с задержкой
Справочники
  • Каталог встроенных функций
  • Справочник настроек (agent_config)
  • Коды ошибок и состояния
  • Стадии, статусы лида, типы клиента
  • Лимиты и квоты
  • Переменные и хелперы выражений
  • Типы уведомлений

Документация › Интеграции › МойСклад

МойСклад: наличие и цены в ответах бота

Клиент спрашивает «есть ли такой товар и почём», бот в этот момент смотрит ваш МойСклад и отвечает настоящим остатком и настоящей ценой. Прайс в промпте держать не надо, дублировать товары никуда не надо.

⏱ 12 мин · 👤 для владельца магазина или сервиса · 🟢 live

За 30 секунд:
  • Подключается функцией «Своя интеграция по API» в продвинутом режиме. Писать код не нужно, всё заполняется в полях.
  • От вас нужен токен доступа из аккаунта МойСклад.
  • Маппинг ответа обязателен: без него бот получит сотню полей на каждый товар и начнёт путаться.
  • Цены в МойСкладе хранятся в копейках: 4 900 ₸ лежит как 490000. Не предупредить бота значит назвать клиенту сумму в сто раз больше.

Что получится в итоге

Клиент:  Здравствуйте, есть шумоизоляция StP Аэро?
Бот:     Да, есть. StP Аэро, 12 листов на складе, 4 900 ₸ за лист.
         Возьмёте? Могу записать на установку.

Бот не хранит ваш прайс у себя. Он спрашивает МойСклад в момент разговора, поэтому цена и остаток всегда те же, что у вас в учёте. Подняли цену в МойСкладе, бот называет новую с того же дня.


Шаг 1. Токен доступа

Токен это длинная строка, которая заменяет логин с паролем. Создаётся в настройках вашего аккаунта МойСклад, в разделе про доступ к API.

⚠️ Прочитайте до того, как нажмёте кнопку. В МойСкладе на одного пользователя живёт ровно один токен. Выпустили новый, старый умер в ту же секунду. Если этим токеном уже пользуется ваш сайт, касса или 1С, они отвалятся.

Заведите для бота отдельного пользователя с правами только на просмотр справочников и остатков и выпускайте токен ему. Менять документы и отгружать товар боту не нужно.

Если удобнее получить токен запросом: POST https://api.moysklad.ru/api/remap/1.2/security/token с обычной авторизацией логином и паролем, в ответ приходит токен.


Шаг 2. Создайте функцию в продвинутом режиме

Раздел Функции → создать → «Своя интеграция по API» → включить продвинутый режим. Обычный режим не даёт ни параметров запроса, ни маппинга ответа, а без них здесь не обойтись.

Основное:

ПолеЗначение
Названиеcheck_stock
Описание для бота«Проверить наличие и цену товара на складе. Вызывай, когда клиент спрашивает про конкретный товар, его цену или наличие»
МетодGET
URLhttps://api.moysklad.ru/api/remap/1.2/entity/assortment

Описание читает не человек, а бот. По нему он решает, звать функцию или нет, так что пишите словами клиента: «спрашивает про товар, цену, наличие».

Параметры запроса:

КлючЗначение
search{{товар}}
limit5

{{товар}} это подстановка: бот сам положит туда название из вопроса клиента. limit держите небольшим: пяти позиций хватает, а сотня забьёт боту контекст.

Параметр функции (раздел «Параметры»):

ИмяТипОписание для ИИ
товарстрокаНазвание товара из вопроса клиента, как он его назвал

Авторизация: тип Bearer, в значение ваш токен. Он хранится зашифрованным и вырезается из логов вместе с остальными заголовками авторизации. Адрес проверяется на безопасность, см. Вебхуки и безопасность.


Шаг 3. Маппинг ответа. Без него не заработает как надо

МойСклад отдаёт на каждый товар под сотню полей: ссылки, идентификаторы, штрихкоды, налоги, даты правок, атрибуты. Бот всё это видит, платит за это токенами и хуже соображает.

В настройках функции откройте «Маппинг ответа» и включите «Включить маппинг ответа», а следом тумблер «Поиск по запросу клиента».

Дальше три поля:

Поле в интерфейсеЧто вписатьЧто это значит
1. Где в ответе лежит список товаровrowsМойСклад кладёт товары в массив rows
2. По какому полю искатьnameискать по названию товара
3. Откуда AI возьмёт запрос клиентатовартот самый параметр из шага 2

Какие поля передавать AI:

ПутьКороткое имя
rows[*].nameназвание
rows[*].salePrices[0].valueцена
rows[*].stockостаток
⚠️ Звёздочка обязательна. rows[*].name означает «имя у каждого товара в списке». Если написать rows.name без [*], поле окажется пустым, потому что rows это список, а не один товар. На этом спотыкаются чаще всего.

salePrices[0] это первая цена продажи. Если у вас несколько типов цен (розница, опт, для своих), нужный индекс подберите опытным путём, начните с нуля.

Короткие имена справа необязательны, но с ними бот тратит меньше токенов и реже путается.

Что бот получит на выходе:

{
  "matches": [
    { "название": "StP Аэро", "цена": 490000, "остаток": 12 }
  ],
  "count": 1
}

Аккуратный список вместо простыни. Если совпадений окажется слишком много, ответ обрежется по границе товара и бот получит подсказку попросить клиента уточнить запрос. Максимальную длину ответа можно поднять там же, по умолчанию 8000 символов.

Про остаток. Рядом с stock МойСклад отдаёт reserve (зарезервировано), inTransit (в пути) и quantity (доступно с учётом резерва). Если у вас часто бронируют товар, берите rows[*].quantity, оно честнее. Если складов несколько и нужен конкретный, добавьте в параметры запроса stockStore со ссылкой на нужный склад.


Шаг 4. Скажите боту про копейки

Это единственное место, где ошибаются все.

В МойСкладе все суммы хранятся в копейках. Цена 4 900 ₸ лежит в базе как 490000. Не сказать об этом значит услышать от бота «четыреста девяносто тысяч тенге», и клиент уйдёт молча, даже не написав в ответ.

Допишите в системный промпт:

Цены из функции check_stock приходят в копейках.
Перед тем как назвать цену клиенту, раздели на 100.

Шаг 5. Что говорить, когда товара нет

Ответ «нет в наличии» заканчивает разговор. Дайте боту продолжение, отдельной строкой в промпте:

Если товара нет в наличии, не заканчивай на этом.
Предложи похожий товар из того же ответа функции
или спроси, записать ли клиента, когда товар придёт.

Так вопрос про отсутствующую позицию превращается в заявку.


Шаг 6. Проверьте до того, как включите бота клиентам

Откройте тест-чат и спросите про товар, цену которого знаете наизусть.

Что смотреть:

  • цена совпадает с той, что у вас в МойСкладе (если больше в сто раз, вернитесь к шагу 4);
  • остаток совпадает с реальным;
  • бот нашёл товар, когда вы назвали его так, как называют клиенты, а не так, как он записан в учёте.

Третье проверьте отдельно. В учёте товар может лежать как «Шумоизоляция StP Aero 8мм», а клиент напишет «стп аэро». Поиск нечувствителен к регистру и ищет вхождение, но если расхождение сильное, добавьте в описание параметра примеры народных названий.


Что ещё можно, кроме остатков

Тем же способом бот дотягивается до любой части вашего МойСклада, меняется только адрес запроса:

ЗадачаЧто дёргать
Наличие и ценысправочник ассортимента
Остатки по конкретному складуотчёт по остаткам
Проверить, есть ли такой покупательсправочник контрагентов
Создать заказ прямо из перепискисоздание заказа покупателя, метод POST

Заказы из переписки настраиваются так же, только методом POST и с телом запроса. Тогда пользователю, под которым выпущен токен, нужны права на создание документов.


Если не работает

СимптомПричинаЧто делать
Все поля пустыеВ путях забыта звёздочкаrows[*].name, а не rows.name. Шаг 3
Цена в сто раз большеКопейкиШаг 4
Бот говорит, что не смог проверитьТокен просрочен или перевыпущен под другую программуВыпустите новый и вставьте в функцию. Помните: старый при этом умрёт
Бот находит не тот товарКлиент называет товар иначе, чем он записан в учётеДобавьте в описание параметра примеры народных названий
Ответ обрезается, бот просит уточнитьСлишком много совпаденийУменьшите limit или поднимите максимальную длину ответа
Функция долго думаетМойСклад отвечает медленноПоднимите таймаут функции, повторы при сбоях уже встроены, см. Кастомные вебхуки
Полей маппинга нет на экранеФункция в обычном режимеВключите продвинутый режим, шаг 2

Подробный разбор ошибок в статье Функция не вызывается или падает.


Простыми словами

У вас товары и цены живут в МойСкладе. Раньше, чтобы бот про них знал, пришлось бы переписывать весь прайс к нему в настройки и обновлять руками каждый раз.

Теперь бот спрашивает ваш МойСклад сам, посреди разговора с клиентом. Человек пишет «есть такое?», бот за секунду смотрит ваш учёт и отвечает честной цифрой: столько-то штук, столько-то тенге. Меняете цену у себя, бот говорит новую, ничего поддерживать не надо.

Чтобы это включить, нужен один ключ из вашего аккаунта МойСклад и минут двадцать настройки по шагам выше.

Три вещи, которые нельзя пропустить. Первая: ключ в МойСкладе выдаётся один на человека, и новый убивает старый, поэтому заводите для бота отдельного пользователя. Вторая: цены там лежат в копейках, и об этом боту надо сказать отдельной строчкой. Третья: в путях к полям нужна звёздочка, иначе бот получит пустоту.

Проверьте всё на одном знакомом товаре в тест-чате, прежде чем включать бота клиентам.


Дальше: → Вебхуки и безопасность
Связано: Функции · Кастомные вебхуки · Тест-чат
Не получилось? → Функция не вызывается / падает