Документация › Интеграции › МойСклад
МойСклад: наличие и цены в ответах бота
Обновлено 2 октября 2026 г.
Клиент спрашивает «есть ли такой товар и почём», бот в этот момент смотрит ваш МойСклад и отвечает настоящим остатком и настоящей ценой. Прайс в промпте держать не надо, дублировать товары никуда не надо.
⏱ 12 мин · 👤 для владельца магазина или сервиса · 🟢 live
За 30 секунд:
- Подключается функцией «Своя интеграция по API» в продвинутом режиме. Писать код не нужно, всё заполняется в полях.
- От вас нужен токен доступа из аккаунта МойСклад.
- Маппинг ответа обязателен: без него бот получит сотню полей на каждый товар и начнёт путаться.
- Цены в МойСкладе хранятся в копейках: 4 900 ₸ лежит как
490000. Не предупредить бота значит назвать клиенту сумму в сто раз больше.
Что получится в итоге
Клиент: Здравствуйте, есть шумоизоляция StP Аэро?
Бот: Да, есть. StP Аэро, 12 листов на складе, 4 900 ₸ за лист.
Возьмёте? Могу записать на установку.Бот не хранит ваш прайс у себя. Он спрашивает МойСклад в момент разговора, поэтому цена и остаток всегда те же, что у вас в учёте. Подняли цену в МойСкладе, бот называет новую с того же дня.
Шаг 1. Токен доступа
Токен это длинная строка, которая заменяет логин с паролем. Создаётся в веб-версии МойСклада: Настройки → Токены → «+ Токен», токен показывается в открывшемся окне, скопируйте его. Создавать токены может пользователь с правами администратора.
⚠️ Прочитайте до того, как нажмёте кнопку. По документации МойСклада новый токен, выпущенный запросом, отзывает прежние токены того же пользователя. Если этим пользователем уже работают ваш сайт, касса или 1С, они могут отвалиться.Заведите для бота отдельного пользователя с правами только на просмотр справочников и остатков и выпускайте токен ему. Менять документы и отгружать товар боту не нужно.
Если удобнее получить токен запросом: POST https://api.moysklad.ru/api/remap/1.2/security/token с обычной авторизацией логином и паролем, в ответ приходит токен.
Шаг 2. Создайте функцию «Своя интеграция по API»
Раздел Функции → Новая функция → «Своя интеграция по API». Понадобятся вкладки за разделителем «Продвинутое»: «Параметры URL» и «Что бот увидит в ответе». Без них здесь не обойтись.
Основное:
| Поле | Значение |
|---|---|
| Название | check_stock |
| Описание для бота | «Проверить наличие и цену товара на складе. Вызывай, когда клиент спрашивает про конкретный товар, его цену или наличие» |
| Метод | GET |
| URL | https://api.moysklad.ru/api/remap/1.2/entity/assortment |
Описание читает не человек, а бот. По нему он решает, звать функцию или нет, так что пишите словами клиента: «спрашивает про товар, цену, наличие».
Вкладка «Параметры URL»:
| Ключ | Значение |
|---|---|
search | {{товар}} |
limit | 5 |
{{товар}} это подстановка: бот сам положит туда название из вопроса клиента. limit держите небольшим: пяти позиций хватает, а сотня забьёт боту контекст.
Параметр функции (раздел «Параметры»):
| Имя | Тип | Описание для ИИ |
|---|---|---|
товар | строка | Название товара из вопроса клиента, как он его назвал |
Авторизация: тип Bearer, в значение ваш токен. Он хранится зашифрованным и вырезается из логов вместе с остальными заголовками авторизации. Адрес проверяется на безопасность, см. Своя интеграция по API.
Шаг 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 или поднимите максимальную длину ответа |
| Функция долго думает | МойСклад отвечает медленно | Поднимите таймаут функции, повторы при сбоях уже встроены, см. Своя интеграция по API |
Подробный разбор ошибок в статье Функция не вызывается или падает.
Простыми словами
У вас товары и цены живут в МойСкладе. Раньше, чтобы бот про них знал, пришлось бы переписывать весь прайс к нему в настройки и обновлять руками каждый раз.
Теперь бот спрашивает ваш МойСклад сам, посреди разговора с клиентом. Человек пишет «есть такое?», бот за секунду смотрит ваш учёт и отвечает честной цифрой: столько-то штук, столько-то тенге. Меняете цену у себя, бот говорит новую, ничего поддерживать не надо.
Чтобы это включить, нужен один ключ из вашего аккаунта МойСклад и минут двадцать настройки по шагам выше.
Три вещи, которые нельзя пропустить. Первая: новый ключ может отозвать прежний у того же пользователя, поэтому заводите для бота отдельного пользователя. Вторая: цены там лежат в копейках, и об этом боту надо сказать отдельной строчкой. Третья: в путях к полям нужна звёздочка, иначе бот получит пустоту.
Проверьте всё на одном знакомом товаре в тест-чате, прежде чем включать бота клиентам.
Дальше: → iiko для ресторанов
Связано: Функции · Своя интеграция по API · Тест-чат
Не получилось? → Функция не вызывается или падает