Перейти до вмісту

← Документація

Скринька і Supporter

Листування з клієнтами з Telegram, Instagram, Viber та інших месенджерів у CRM: як підключити Supporter і як виглядає обмін в обидва боки.

Що це

Скринька — спільна для команди стрічка розмов із клієнтами з месенджерів і соцмереж. Самі підключення до Telegram, Instagram, Viber, WhatsApp і Facebook тримає Supporter — окремий сервіс, який пересилає повідомлення клієнтів у Systemer і забирає відповіді агентів назад. Systemer із месенджерами напряму не говорить.

Кожна розмова — бесіда в «Клієнти → Скринька»: видно канал, імʼя співрозмовника, хто з команди відповідає і чи чекає клієнт на відповідь. Бесіду можна звʼязати з лідом або контрагентом — і листування стає частиною історії клієнта, а не лишається в чиємусь телефоні.

Скринька спільна: її бачить кожен, хто має дозвіл «Доступ до скриньки», без запрошення в конкретну бесіду. Призначення агента — лише спосіб домовитись, хто відповідає, а не межа доступу. Це навмисно інакше, ніж у внутрішніх чатах, де бесіду бачать лише учасники.

Підключення

  • Налаштування → Скринька → «Підключити Supporter». Створюється конектор і два секрети: ключ, яким Supporter надсилає події нам, і секрет, яким ми підписуємо відповіді. Обидва показуються один раз.
  • Адресу для Supporter (POST /api/webhooks/supporter/<id>) і ключ вставте в налаштування Supporter.
  • Адресу Supporter для відповідей і секрет підпису задайте в конекторі. Поки адреси немає, повідомлення клієнтів приймаються, а відповіді агентів чекають у черзі.
  • Оберіть, кому призначати нові бесіди: ця людина отримує сповіщення про кожне повідомлення клієнта, доки бесіду не передали іншому.

Supporter → Systemer

Supporter надсилає POST на адресу конектора з ключем у заголовку Systemer-Key. Заголовок Systemer-Idempotency-Key необовʼязковий: без нього ключем повтору стає хеш тіла. Тіло — одна з чотирьох подій, поле type каже яка.

message.received — повідомлення від клієнта

POST /api/webhooks/supporter/<connector_id>
Systemer-Key: inbk_…
Content-Type: application/json

{
  "type": "message.received",
  "conversation": {
    "ref": "tg:123456789",
    "channel": "telegram",
    "peer": { "ref": "tg-user:987", "name": "Олена Петренко", "handle": "@olena" }
  },
  "message": {
    "ref": "tg-msg:42",
    "text": "Добрий день! Хочу дізнатись про вартість аудиту.",
    "sent_at": "2026-10-04T09:15:00+03:00",
    "attachments": [{ "url": "https://…/photo.jpg", "filename": "photo.jpg", "mime_type": "image/jpeg" }]
  }
}

Агент відповідає або в Systemer, або в самому Supporter — і розмова має виглядати однаково в обох випадках. Тому подій про повідомлення дві: message.received несе слова клієнта, message.sent — відповідь, набрану в Supporter. Надсилати друге під виглядом першого не можна: у Скриньці відповідь менеджера стала б словами клієнта, під його імʼям, а бесіда позначилась би як така, що чекає на відповідь, хоча її вже дали.

message.sent — агент відповів у Supporter

{
  "type": "message.sent",
  "conversation": {
    "ref": "telegram:conv:8c7d6e5f-…",
    "channel": "telegram",
    "peer": { "ref": "telegram:user:0f1a…", "name": "Олена Петренко" }
  },
  "message": {
    "ref": "telegram:msg:aaaaaaaa-…",
    "text": "Дякуємо! Надішлю розрахунок сьогодні до вечора.",
    "sent_at": "2026-10-04T09:20:00+03:00",
    "reply_to_ref": "telegram:msg:bbbbbbbb-…",
    "attachments": []
  },
  "sender": { "name": "Анна Ковальчук" }
}
  • conversation.ref — ідентифікатор треду в Supporter. Повторне повідомлення з тим самим ref лягає в наявну бесіду. channel — один із: telegram, instagram, facebook, viber, whatsapp, email, web, other.
  • message.ref — ідентифікатор повідомлення в Supporter. Повтор із тим самим ref не створює дубля. Текст або вкладення — принаймні щось одне; вкладення лишаються за посиланням у Supporter.
  • message.sent — відповідь агента, набрана в Supporter. Лягає на бік менеджера, поруч із відповідями з CRM, і знімає з бесіди позначку «чекає на відповідь». sender.name показується як автор; без нього автор підписується «Інтеграція».
  • Стан такої відповіді за замовчуванням — «Надіслано», а не «Доставлено»: «пішло клієнту» і «месенджер підтвердив» — різні факти. Знаєте більше — передайте "status": "delivered"; дізнаєтесь пізніше — надішліть message.status.
  • message.status — стан доставки нашої відповіді: { "type": "message.status", "message_id": "<id з конверта message.send>", "status": "delivered" }. Стани: sent, delivered, read, failed (з полем error).
  • conversation.updated — змінились імʼя, нік або аватар співрозмовника; тіло — те саме поле conversation.
  • Відповідь 201 із conversation_id і message_id; повтор — 200 з duplicate: true і тим самим результатом; помилка в тілі — 422 з поясненням.
  • Увага на одну літеру: message.send — це тип НАШОГО конверта до Supporter, message.sent — подія Supporter до нас. Напрямки протилежні.

Systemer → Supporter

Відповідь агента їде POST-ом на адресу конектора одразу після надсилання; те, що не доїхало, добирає повторна доставка за розкладом 10 с, 30 с, 2 хв, 10 хв, 1 год, 6 год. Підпис — той самий, що у вихідних вебхуків: заголовок Systemer-Signature з t=<unix> і v1=<HMAC-SHA256 від "<t>.<тіло>">, секрет — із конектора.

message.send — відповідь агента

POST <адреса Supporter>
Systemer-Signature: t=1791234567,v1=5257a869…
Systemer-Event-Type: message.send
Content-Type: application/json

{
  "id": "0f1a…",
  "type": "message.send",
  "created_at": "2026-10-04T09:20:00.000Z",
  "conversation": { "id": "…", "ref": "tg:123456789", "channel": "telegram", "peer_ref": "tg-user:987" },
  "message": { "id": "0f1a…", "text": "Дякуємо! Надішлю розрахунок сьогодні.", "sent_at": "…", "reply_to_ref": null, "attachments": [] },
  "sender": { "name": "Анна Ковальчук" }
}
  • Supporter відповідає 2xx, коли прийняв повідомлення в роботу. У тілі може повернути ref (ідентифікатор у месенджері) і status (sent, delivered або read), якщо знає його одразу.
  • Далі про стан доставки Supporter повідомляє подією message.status за message.id з конверта. Агент бачить стан під своїм повідомленням: у черзі, надіслано, доставлено, прочитано, не доставлено.
  • Вкладення у відповідях агентів поки не надсилаються — композер скриньки приймає лише текст.

Дізнайтесь свою справжню
маржу вже сьогодні.

Один вечір на налаштування — і замість зведення таблиць ви бачите маржу кожного проєкту з накладними й прогноз касового розриву. Без картки, тариф Free назавжди.