Маркет

Чат-API и автоответы

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

Обновлено 5 июля 2026 г.

Messaging API позволяет автоматизировать общение в сделках Маркета: читать и отправлять сообщения из своего бота или скрипта, получать вебхук на каждое входящее сообщение и настраивать автоответы по ключевым словам. Отвечайте покупателям откуда угодно и как угодно.

База API: https://api.millida.net/v2/chat. Все сообщения проходят те же правила, что и в веб-чате (защита от увода сделки за пределы Millida, блокировки, статус сделки).

Получение ключа

Ключ выпускается в личном кабинете: Профиль → API и вебхуки → Создать ключ. При создании вы один раз получаете секрет вида mck_live_… — сохраните его, повторно он не показывается.

Ключ можно ограничить правами (scopes):

  • chat:read — читать диалоги и сообщения, получать вебхуки;
  • chat:write — отправлять сообщения;
  • autoreply:manage — управлять правилами автоответов.

Пустой набор прав = ключ ничего не может (в отличие от Merchant-ключа). Ключ привязан к вашему аккаунту и охватывает все ваши сделки как продавца и как покупателя. Отозвать или перевыпустить — там же в ЛК.

Аутентификация

Передавайте ключ в заголовке Authorization: Bearer или X-Api-Key:

Authorization: Bearer mck_live_xxxxxxxxxxxxxxxx

Лимит запросов — 120/мин на ключ (отправка сообщений — 60/мин).

Диалоги и сообщения

Список диалогов

GET /v2/chat/dialogs?role=seller&status=ESCROW

rolebuyer или seller (по умолчанию оба). status — необязательный фильтр по статусу сделки. Возвращает список сделок с участниками, товаром/услугой и последними сообщениями.

Сообщения диалога

GET /v2/chat/dialogs/{dealId}/messages?limit=50

Для подгрузки более старых сообщений передайте before — идентификатор самого раннего уже загруженного сообщения.

Отправить сообщение

POST /v2/chat/dialogs/{dealId}/messages
Content-Type: application/json

{ "text": "Здравствуйте! Приступаю к работе." }

Можно приложить картинку или файл: attachmentUrl, attachmentKind (image | file), attachmentName. Обязателен текст или вложение. Сообщение отправляется от вашего имени; роль (продавец/покупатель) определяется по сделке.

Отметить прочитанным

POST /v2/chat/dialogs/{dealId}/read

Вебхуки о новых сообщениях

Укажите webhookUrl у ключа — и на каждое входящее сообщение в ваших сделках прилетит уведомление. Вместе с URL выдаётся webhookSecret для проверки подписи.

Событие: message.new.

POST https://ваш-сайт/webhook
X-Millida-Event: message.new
X-Millida-Signature: sha256=…

{
  "event": "message.new",
  "data": {
    "dealId": "clx…",
    "dealStatus": "NEGOTIATION",
    "listingTitle": "Настройка плагинов",
    "from": "buyer",
    "counterparty": { "id": "usr_…", "nickname": "Steve", "displayName": "Steve" },
    "message": {
      "id": "msg_…",
      "text": "Здравствуйте, возьмётесь?",
      "attachmentUrl": null,
      "attachmentKind": null,
      "attachmentName": null,
      "createdAt": "2026-07-05T10:00:00.000Z"
    }
  }
}

Вебхук приходит на входящие сообщения (от собеседника), не на ваши собственные ответы.

Проверка подписи

Подпись — HMAC-SHA256 от «сырого» тела запроса с вашим webhookSecret. Сравнивайте безопасно (constant-time):

import { createHmac, timingSafeEqual } from 'crypto';

function verify(rawBody, header, secret) {
  const expected = 'sha256=' + createHmac('sha256', secret).update(rawBody).digest('hex');
  const a = Buffer.from(header);
  const b = Buffer.from(expected);
  return a.length === b.length && timingSafeEqual(a, b);
}

Пример: авто-ответ на своём боте

app.post('/webhook', (req, res) => {
  if (!verify(req.rawBody, req.headers['x-millida-signature'], SECRET)) {
    return res.sendStatus(401);
  }
  const { dealId, from, message } = req.body.data;
  if (from === 'buyer' && /цена|стоимость/i.test(message.text ?? '')) {
    fetch(`https://api.millida.net/v2/chat/dialogs/${dealId}/messages`, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${API_KEY}` },
      body: JSON.stringify({ text: 'Стоимость зависит от объёма — опишите задачу.' }),
    });
  }
  res.sendStatus(200);
});

Автоответы без своего бота

Если поднимать свой сервер не хочется, настройте автоответы прямо в ЛК: Профиль → API и вебхуки → Автоответы. Платформа сама ответит на входящее сообщение, если оно совпало с ключевым словом.

Параметры правила:

  • Ключевое слово — текст-триггер (регистр не важен);
  • Тип совпаденияcontains (содержит, по умолчанию), exact (точное совпадение), prefix (начинается с);
  • Ответ — что отправить;
  • Приоритет — правила проверяются от меньшего к большему, срабатывает первое совпавшее.

Автоответы работают и вместе с вебхуком, и без него.

Безопасность

  • Секрет ключа храните на сервере, не на фронтенде. Скомпрометированный ключ — отзовите и перевыпустите в ЛК.
  • Всегда проверяйте подпись вебхука.
  • Не дублируйте ответы: вебхук может прийти повторно — ориентируйтесь на message.id.
  • Общение и передачу файлов держите внутри сделки: попытки увести переписку за пределы Millida блокируются, как и в веб-чате.