Implement comprehensive event tracking system for TeleCart Pulse that ensures
all user interactions and order events are reliably captured and delivered to
the analytics platform, even in case of network failures or service outages.
Business Value:
- Guaranteed event delivery: All events are stored in database before sending,
ensuring no data loss even if SaaS service is temporarily unavailable
- Automatic retry mechanism: Failed events are automatically retried with
configurable attempts, reducing manual intervention
- Real-time monitoring: Admin dashboard displays event statistics (pending,
sent, failed) to track system health and delivery status
- Data integrity: Idempotency keys prevent duplicate events, ensuring accurate
analytics and metrics
- Performance optimization: Statistics are cached for 1 hour to reduce database
load while maintaining visibility
Key Features:
- Event queue system: Events are queued in database with status tracking
(pending/sent/failed)
- Asynchronous processing: Events are sent via background tasks, not blocking
user interactions
- Error tracking: Failed events include detailed error reasons for debugging
- Campaign tracking: Only events with valid campaign_id and tracking_id are
stored, ensuring data quality
- Admin visibility: Statistics dashboard shows delivery status at a glance
This system ensures reliable data collection for campaign analytics, A/B testing,
and performance metrics, providing accurate insights for business decisions.
- Add TeleCartPulse service for event tracking and analytics
- Implement PayloadSigner for secure payload signing/verification
- Add StartParamSerializer for campaign parameter handling
- Create TeleCartPulseServiceProvider for dependency injection
- Add PulseEvents constants and exception classes
- Add TelemetryHandler for ingesting client-side events
- Implement /ingest endpoint for receiving webapp events
- Support WEBAPP_OPEN event tracking with campaign metadata
- Add ETLHandler for customer data export
- Implement /customers endpoint for ETL processes
- Add /customers/meta endpoint for pagination metadata
- Support filtering by updated_at timestamp
- Include customer metrics: orders count, total spent, etc.
- Add InvalidApiTokenException for API key validation
- Update Request class to support API key extraction
- Add Utils helper methods for domain extraction
- Integrate telemetry in frontend SPA (webapp open event)
- Add TeleCartPulseView in admin panel for API key configuration
- Update routes to include new telemetry and ETL endpoints
Основные изменения:
Backend:
- Добавлена миграция для поля privacy_consented_at в таблицу telecart_customers
- Создан PrivacyPolicyHandler с методами:
* checkIsUserPrivacyConsented - проверка наличия согласия пользователя
* userPrivacyConsent - сохранение согласия пользователя
- Обновлен TelegramService для извлечения userId из initData
- Обновлен TelegramServiceProvider для внедрения зависимостей
- Добавлены новые маршруты в routes.php
- Обновлен SettingsHandler для возврата privacy_policy_link
- Обновлен TelegramCustomersHandler для включения privacy_consented_at в ответы
- Обновлены тесты TelegramServiceTest
Frontend (SPA):
- Создан компонент PrivacyPolicy.vue для отображения запроса согласия
- Добавлена проверка согласия при инициализации приложения (main.js)
- Обновлен App.vue для отображения компонента PrivacyPolicy
- Добавлены функции checkIsUserPrivacyConsented и userPrivacyConsent в ftch.js
- Обновлен SettingsStore для хранения privacy_policy_link и is_privacy_consented
Frontend (Admin):
- Добавлено поле privacy_policy_link в настройки (settings.js)
- Добавлена настройка ссылки на политику конфиденциальности в GeneralView.vue
- Обновлен CustomersView.vue:
* Добавлена колонка privacy_consented_at с отображением даты согласия
* Добавлена поддержка help-текста для колонок с иконкой вопроса и tooltip
* Добавлены help-тексты для колонок last_seen_at, privacy_consented_at, created_at
* Улучшено форматирование кода
- Add `telecart_forms` table migration and default checkout form seeder
- Implement `FormsHandler` to fetch form schemas
- Update `OrderCreateService` to handle custom fields in order comments
- Add `update` method to QueryBuilder and Grammar
- Add `Arr::except` helper
- Update composer dependencies (Carbon, Symfony, PHPUnit, etc.)
- Improve `MigratorService` error handling
- Add unit tests for new functionality