Каркас системы настроек (docs/features/settings) и фича TeleCart Pulse с heartbeat (docs/features/telecart-pulse); спека синхронизирована с opt-in. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
5.8 KiB
5.8 KiB
TeleCart Pulse
Назначение
Связка модуля с внешним SaaS pulse.telecart.pro. Включает две концептуально разные части:
- События кампаний (
WEBAPP_OPEN,ORDER_CREATED, …) — аналитика маркетинговых кампаний и Telegram-рассылок. Завязана на действия продавца: событие сохраняется и отправляется только если вstart_paramпришлиcampaign_idиtracking_id, и только при заданномpulse.api_key. - Heartbeat — раз в час отправляет технические сведения об установке (домен, имя бота,
версии PHP/модуля/OpenCart). Используется для статистики установок и техподдержки.
Управляется отдельным переключателем
pulse.heartbeat_enabled(по умолчанию выключен, opt-in), независимым отpulse.api_key.
В коде обе части живут в namespace Openguru\OpenCartFramework\TeleCartPulse.
Точки входа
| action | Метод | Где объявлен |
|---|---|---|
ingest |
TelemetryHandler::ingest |
src/routes.php |
heartbeat |
TelemetryHandler::heartbeat |
src/routes.php |
Триггерятся из SPA (frontend/spa/src/stores/Pulse.js, вызов при инициализации WebApp в
frontend/spa/src/main.js). Heartbeat кэшируется на 1 час (telecart_pulse_heartbeat).
Ключевые файлы по слоям
- Handler:
module/.../src/Handlers/TelemetryHandler.php—ingest()(события) иheartbeat()(телеметрия окружения); оба делегируют вTeleCartPulseService. - Сервис:
module/.../framework/TeleCartPulse/TeleCartPulseService.php—handleIngest()(валидация campaign/tracking, сохранение события в БД) иhandleHeartbeat()(сбор окружения, подпись, POST). В началеhandleHeartbeat()— гейтif (! $this->heartbeatEnabled) return;. - Отправка событий:
module/.../framework/TeleCartPulse/TeleCartPulseEventsSender.php— POST накопленных событий на/eventsсAuthorization: Bearer <api_key>. - Регистрация в DI:
module/.../framework/TeleCartPulse/TeleCartPulseServiceProvider.php— читаетpulse.api_key, секрет подписи (pulse.heartbeat_secret/ envPULSE_HEARTBEAT_SECRET) иpulse.heartbeat_enabled, инжектит в сервисы. - Модель/данные:
module/.../framework/TeleCartPulse/TeleCartEvent.php, таблицаtelecart_events(миграцияdatabase/migrations/20260101000010_create_telecart_events_table.php). - Расписание:
configs/schedule.php—TeleCartPulseSendEventsTaskкаждые 10 минут; CLI-аналог —console/Commands/PulseSendEventsCommand.php(pulse:send). - Конфиг/дефолты:
configs/app.php, секцияpulse(api_key,heartbeat_enabled,batch_size,max_attempts). - Фронтенд (админка):
frontend/admin/src/views/TeleCartPulseView.vue— поля настроек, включая переключатель heartbeat (ItemBool) с раскрытием состава отправляемых данных; дефолты вfrontend/admin/src/stores/settings.js(секцияpulse).
Поток данных
События: SPA ingest → handleIngest() → проверка api_key + наличия
campaign_id/tracking_id → запись в telecart_events (status pending) → каждые 10 мин
TeleCartPulseSendEventsTask → TeleCartPulseEventsSender::sendEvent() → POST /events.
Heartbeat: SPA heartbeat → handleHeartbeat() → гейт heartbeat_enabled → кэш-чек
(1 ч) → getMe() → payload окружения → подпись (если есть signer) → POST /heartbeat.
Связанные фичи
- settings — переключатель heartbeat и
api_keyпроходят через общий каркас настроек.
Нюансы и подводные камни
- PHP 7.4 в backend-коде.
- Heartbeat и Pulse — независимы.
pulse.heartbeat_enabledНЕ завязан наapi_key. Heartbeat реально уходит только приheartbeat_enabled = trueи наличии signer (секрет настроен). Выключенный тумблер → раннийreturn, даже кэш не ставится. - События гейтятся
api_key: при пустомpulse.api_keyhandleIngest()выходит сразу, ничего не сохраняется и не отправляется. - Прозрачность heartbeat — обязательна. Состав отправляемых данных раскрыт покупателю в
TeleCartPulseView.vue; при изменении полей payload вhandleHeartbeat()синхронизируй текст раскрытия. - Дефолт
heartbeat_enabled = false(opt-in): без явного включения покупателем heartbeat не отправляется; существующие установки без сохранённого значения тоже ничего не шлют. - Тест гейта:
tests/Unit/Framework/TeleCartPulse/TeleCartPulseServiceHeartbeatTest.php.