API ЭТОЧАТБОТ

Чат на сайте: посетители и кто онлайн

Методы, которых нет у мессенджеров: кто на сайте прямо сейчас, все посетители включая молчунов, карточка человека с историей страниц — и как ему написать.

У мессенджеров человек появляется в тот момент, когда написал. До этого его для нас не существует: ни имени, ни адреса доставки. Чат на сайте устроен иначе — посетитель открыл страницу, и он уже виден: что читает, откуда пришёл, сколько раз возвращался. Написать он может и не написать никогда.

Из-за этой разницы у чата на сайте есть методы, которых нет ни у одного мессенджера. Они отвечают на три вопроса: кто сейчас на сайте, кто был раньше и что мы знаем про конкретного человека.

Чем это отличается от списка диалогов

GET /{channel}/chats возвращает тех, кто писал. Посетитель, который третий день читает тарифы и молчит, туда не попадёт никогда — диалога у него нет.

GET /webchat/visitors возвращает всех, включая молчунов. Именно они обычно и интересны: человек, который за десять минут трижды открыл страницу оплаты, — это событие, а не строка в логе.

Методы работают только у канала «Чат на сайте». Тот же запрос с ключом Telegram-бота вернёт 422 channel_unsupported_operation — не пустой список, который вы бы прочитали как «никого нет». У мессенджера нет страниц, по которым можно ходить, и притворяться, что есть, мы не будем.

Кто на сайте прямо сейчас

GET https://etochat.bot/api/v2/webchat/visitors/online
{
  "online": 5,
  "window_seconds": 45,
  "data": [
    {
      "visitor_id": "v_8f31c0a2",
      "chat_id": "5827431900215634771",
      "name": "Ирина",
      "email": "irina@example.com",
      "online": true,
      "idle_seconds": 4,
      "page_views": 12,
      "current_url": "https://example.com/pricing",
      "current_title": "Тарифы",
      "has_dialog": true,
      "first_seen": "2026-08-02 11:20:41",
      "last_seen": "2026-08-17 16:58:03"
    }
  ]
}

Счётчик online всегда полный, даже если вы ограничили выдачу параметром limit.

Что такое «онлайн». Человек считается онлайн, пока его вкладка отмечалась в последние window_seconds секунд. Это договорённость, а не физический факт: закрыть вкладку молча можно, и узнаём мы об этом только по молчанию. Значение приходит в каждом ответе — берите его оттуда, а не зашивайте в код: изменим окно, и ваши цифры разойдутся с теми, что видит оператор в кабинете.

Все посетители

GET https://etochat.bot/api/v2/webchat/visitors?online=1&query=ирина&sort=views&limit=50&offset=0
ПараметрЧто делает
onlineТолько те, кто на сайте сейчас. По умолчанию — все.
queryПоиск по имени, почте, адресу и заголовку текущей страницы.
sortactive — по последней активности (по умолчанию), views — по числу просмотров, email — сначала с почтой.
limitОт 1 до 100, по умолчанию 50.
offsetСколько записей пропустить.

Кроме data в ответе приходят total, with_email, with_dialog — по ним удобно строить свою сводку, не выкачивая весь список.

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

Карточка одного человека

GET https://etochat.bot/api/v2/webchat/visitors/v_8f31c0a2

К полям из списка добавляются referrer, geo, user_agent и последние 50 открытых страниц — самая свежая первой:

{
  "visitor": {
    "visitor_id": "v_8f31c0a2",
    "referrer": "https://yandex.ru/",
    "geo": "Москва, RU",
    "pages": [
      { "url": "https://example.com/pricing", "title": "Тарифы",  "seen_at": "2026-08-17 16:57:12" },
      { "url": "https://example.com/",        "title": "Главная", "seen_at": "2026-08-17 16:55:48" }
    ]
  }
}

По этой истории видно намерение. Три захода на страницу тарифов за десять минут говорят больше, чем любая формула скоринга.

IP-адреса в ответе нет. На вопрос «кто сейчас на сайте» он не отвечает, а хранить и передавать его — отдельная ответственность, в том числе юридическая. Если он вам действительно нужен для конкретной задачи — напишите нам, обсудим.

Как написать посетителю

Отдельного метода для чата на сайте нет и не нужно: подойдёт обычная отправка. Возьмите chat_id из карточки и вызовите тот же эндпоинт, что и для мессенджеров:

POST https://etochat.bot/api/v2/webchat/messages
{ "chat_id": "5827431900215634771", "text": "Подсказать по тарифам?" }

Посетитель увидит сообщение сразу, если он на сайте, и когда вернётся — если ушёл.

Писать можно не каждому. Пока у человека has_dialog = false, отправлять некуда: контакта не существует, ровно как в мессенджере до первого сообщения. Проверяйте это поле перед отправкой — так вы отличите «не дошло» от «отправлять было некуда».

chat_id — всегда строка

Он длиной до 19 цифр. В JavaScript число такой длины теряет младшие разряды молча:

Number("5827431900215634771");   // 5827431900215634800  ← последние цифры потеряны

Ошибки не будет — будет «почти тот» идентификатор и сообщение не тому человеку. Держите chat_id строкой на всём пути: в JSON, в базе, в шаблонах.

Что из этого обычно собирают

  • Свой виджет «кто онлайн» во внутренней панели — опрос visitors/online раз в 15–30 секунд.
  • Оповещение менеджеру, когда на страницу оплаты зашёл человек с известной почтой: список с online=1, сверка email со своей базой.
  • Обогащение CRM: раз в час забираем visitors, сопоставляем по почте, дописываем в карточку клиента, что он смотрел на сайте.
  • Проактивное сообщение тем, кто долго висит на одной странице: idle_seconds и current_url дают повод, chat_id — адрес.

Частота запросов общая для всего API — смотрите статью «Ошибки, ограничения и частые вопросы». Опрашивать visitors/online чаще раза в 15 секунд смысла нет: окно присутствия всё равно 45 секунд.