Skip to content

Repository files navigation

Online Chat Chateedze (self-hosted)

Embeddable website chat widget + operator admin panel. Built for shared hosting with PHP + MySQL. No Node.js, no WebSocket — HTTP polling / long-polling only.

Support & community: https://t.me/chateedze


Features

Visitor widget

  • Live chat on your site via a single embed script (widget/loader.js)
  • Text messages and image uploads
  • Typing indicators, emoji picker, optional read receipts
  • Online / offline status and custom offline message
  • Working hours with after-hours auto-reply
  • Launcher position: bottom left / center / right (desktop and mobile separately)
  • Full theming: colors, gradients, bubbles, chat background, offer banner
  • Languages: Russian, English, or auto-detect from the browser
  • Pre-chat form, callback / contact form (phone, email, Telegram)
  • GDPR / privacy consent checkbox with policy link and version
  • Start buttons before the first message (with A/B labels)
  • Proactive invites (time on page, URL, exit-intent, return visit, scroll, idle)
  • Chat scenarios / bots (messages, buttons, consent steps)
  • Lead form after N visitor messages
  • CSAT rating after the chat
  • Page URL / title tracking, UTM capture, visitor fingerprint

Operator admin

  • Inbox — queued / active / closed dialogs; claim, close, reopen, delete, transfer
  • Reply tools: emoji, images, quick replies (!cmd / /cmd, variables {name}, {page}, {city})
  • Lead statuses, internal notes, lead reminders
  • Visitor card: geo, contacts, page history, SLA highlight, CSAT
  • Team chat — private staff messenger (clients never see it); images and emoji
  • Visitors — who is online now; start a chat; visitor 360° profile
  • Personal profile: avatar, password, work schedule, browser notification prefs

Admin-only tools

  • Operators management (roles, avatars, schedules, per-operator Telegram / ntfy)
  • Notifications: Telegram bot, ntfy, browser alerts (while the admin tab is open)
  • Notify modes: first message / every message / repeat with interval and max attempts
  • Reports: dialogs, first response time, CSAT, leads, SLA breaches, operator load, peak hours, invite & start-button A/B
  • Chat features: pre-chat, callback form, auto-assign, read receipts, overdue auto-replies, default scenario
  • Privacy & SLA: consent, retention, purge, visitor data deletion, first-response SLA alerts
  • Connection: polling vs long-polling, intervals, trusted proxy / X-Forwarded-For
  • Widget settings: colors, sounds, launcher, work hours, CORS origins, upload size limit
  • GeoLite2 IP geolocation (Country + City) with auto-check about every 3 hours
  • Settings export / import (JSON): site settings, buttons, replies, contacts, invites, scenarios
  • Install code page with cache-busting widget URL
  • Post-deploy upgrade helper (upgrade.php)

Security

  • Chat images are not public via /uploads/…
  • Files are served through media.php with access checks:
    • staff (logged into admin) — dialog and team images
    • visitor — only images from their conversations (visitor_key)
    • avatars — public (needed by the widget)
  • CSRF protection on mutating actions, password hashing, roles (admin / operator)
  • Rate limiting on the API, security headers, CORS allow-list

Requirements

  • PHP 7.4+ (8.x recommended)
  • Extensions: PDO, pdo_mysql, json (mbstring, curl recommended)
  • MySQL 5.7+ or MariaDB 10.3+ (utf8mb4)
  • Writable config/ and uploads/
  • Apache with mod_rewrite recommended (private media via .htaccess). On nginx, deny direct access to uploads/ in the server config.

Installation

  1. Upload the chat folder to your hosting
  2. Create a MySQL database
  3. Open https://your-domain.com/chat/ — the install wizard runs
  4. After success, the install/ folder is removed automatically
  5. Sign in to the admin panel and copy the widget code from Install code

Example embed:

<script src="https://your-domain.com/chat/widget/loader.js?v=..." async></script>

Use the URL from the admin panel — it already includes a cache-busting version parameter.


Updates

Do not overwrite on deploy:

Path Why
config/config.php DB credentials and base URL
uploads/ Chat files and avatars
ip/ GeoIP databases

After uploading a new version, open /chat/upgrade.php while logged in as admin.

Optional: export settings JSON from Settings before major upgrades.


Project structure

Path Purpose
admin/ Operator / admin panel
api/ HTTP API (polling)
widget/ Site widget
install/ Install wizard (deleted after install)
media.php Authorized image delivery
sql/schema.sql Database schema
uploads/ Private storage (not for direct public access)
ip/ GeoLite2 databases

Support

Questions, help, and product discussion:

Telegram: https://t.me/chateedze



Онлайн-чат для сайта Chateedze (self-hosted)

Виджет чата для сайта + админ-панель для операторов. Рассчитан на обычный shared-хостинг: PHP + MySQL. Без Node.js и WebSocket — только HTTP polling / long-polling.

Общение и поддержка по сервису: https://t.me/chateedze


Возможности

Виджет для посетителя

  • Живой чат на сайте одной строкой подключения (widget/loader.js)
  • Текст и отправка изображений
  • Индикатор набора, эмодзи, опциональные статусы прочтения
  • Онлайн / офлайн и свой текст офлайн-сообщения
  • Рабочие часы и автоответ вне часов
  • Позиция кнопки: снизу слева / по центру / справа (отдельно для ПК и мобильных)
  • Оформление: цвета, градиенты, пузыри, фон чата, баннер-оффер
  • Языки: русский, английский или авто по браузеру
  • Пре-чат форма, форма обратного звонка / контакта (телефон, email, Telegram)
  • GDPR / согласие на обработку данных со ссылкой на политику и версией
  • Кнопки старта до первого сообщения (с A/B-подписями)
  • Проактивные приглашения (время на странице, URL, уход со страницы, возврат, скролл, простой)
  • Сценарии / боты (сообщения, кнопки, шаг согласия)
  • Форма лида после N сообщений посетителя
  • Оценка CSAT после чата
  • Трекинг URL / title страницы, UTM, fingerprint посетителя

Админка оператора

  • Диалоги — очередь / активные / закрытые; взять, закрыть, переоткрыть, удалить, передать
  • Ответы: эмодзи, картинки, быстрые ответы (!cmd / /cmd, переменные {name}, {page}, {city})
  • Статусы лида, внутренние заметки, напоминания по лиду
  • Карточка посетителя: гео, контакты, история страниц, подсветка SLA, CSAT
  • Рабочий чат — переписка только для сотрудников (клиенты не видят); картинки и эмодзи
  • Посетители — кто сейчас на сайте; начать чат; профиль 360°
  • Профиль: аватар, пароль, график работы, настройки браузерных уведомлений

Только для администратора

  • Операторы (роли, аватары, графики, личный Telegram / ntfy)
  • Уведомления: Telegram-бот, ntfy, браузерные (пока открыта вкладка админки)
  • Режимы: первое сообщение / каждое / повтор с интервалом и лимитом попыток
  • Отчёты: диалоги, время первого ответа, CSAT, лиды, нарушения SLA, нагрузка, пиковые часы, A/B приглашений и кнопок старта
  • Функции чата: пре-чат, форма callback, автоназначение, read receipts, просроченные автоответы, сценарий по умолчанию
  • Приватность и SLA: согласие, срок хранения, очистка, удаление данных посетителя, SLA первого ответа с алертами
  • Соединение: polling / long-polling, интервалы, доверенный прокси / X-Forwarded-For
  • Настройки виджета: цвета, звуки, кнопка, часы работы, CORS, лимит размера файлов
  • GeoLite2 (геолокация IP, Country + City) с автопроверкой примерно раз в 3 часа
  • Экспорт / импорт настроек (JSON): сайт, кнопки, ответы, контакты, приглашения, сценарии
  • Страница кода установки с URL виджета и сбросом кэша
  • Помощник обновления после деплоя (upgrade.php)

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

  • Картинки чата не открываются напрямую по /uploads/…
  • Раздача через media.php с проверкой прав:
    • сотрудник (вход в админку) — файлы диалогов и рабочего чата
    • посетитель — только файлы своих диалогов (visitor_key)
    • аватары — публичные (нужны виджету)
  • CSRF на изменяющих действиях, хеширование паролей, роли (admin / operator)
  • Rate limit API, security-заголовки, список разрешённых CORS origins

Требования

  • PHP 7.4+ (рекомендуется 8.x)
  • Расширения: PDO, pdo_mysql, json (желательны mbstring, curl)
  • MySQL 5.7+ или MariaDB 10.3+ (utf8mb4)
  • Запись в config/ и uploads/
  • Для Apache желателен mod_rewrite (закрытие uploads/ через .htaccess). На nginx прямой доступ к uploads/ нужно запретить в конфиге сервера.

Установка

  1. Загрузите папку chat на хостинг
  2. Создайте базу MySQL
  3. Откройте https://ваш-домен.ru/chat/ — запустится мастер установки
  4. После успеха папка install/ удалится автоматически
  5. Войдите в админку и скопируйте код виджета из раздела Код установки

Пример вставки на сайт:

<script src="https://ваш-домен.ru/chat/widget/loader.js?v=..." async></script>

Берите URL из админки — там уже есть параметр версии для сброса кэша.


Обновление

Не перезаписывайте при деплое:

Путь Зачем
config/config.php Доступ к БД и базовый URL
uploads/ Файлы чата и аватары
ip/ Базы GeoIP

После заливки новой версии откройте /chat/upgrade.php под учёткой администратора.

Перед крупным обновлением можно скачать JSON настроек в разделе Настройки.


Структура проекта

Путь Назначение
admin/ Панель оператора / администратора
api/ HTTP API (polling)
widget/ Виджет на сайте
install/ Мастер установки (удаляется после установки)
media.php Выдача картинок с проверкой доступа
sql/schema.sql Схема БД
uploads/ Хранилище файлов (не для прямого публичного доступа)
ip/ Базы GeoLite2

Поддержка

Вопросы, помощь и обсуждение сервиса:

Telegram: https://t.me/chateedze

About

Free online chat Chateedze for your website with premium features

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Packages

Contributors

Languages