From fa8a012ad3181f88e48e59959c6a548b3b366d8b Mon Sep 17 00:00:00 2001 From: kazachilo Date: Fri, 28 Mar 2025 12:53:38 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=BE=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B0=20?= =?UTF-8?q?=D1=86=D0=B5=D0=BB=D0=B5=D0=B2=D1=8B=D1=85=20=D1=81=D0=BE=D0=B1?= =?UTF-8?q?=D1=8B=D1=82=D0=B8=D0=B9=20=D0=B2=20=D1=81=D0=B8=D1=81=D1=82?= =?UTF-8?q?=D0=B5=D0=BC=D1=83=20=D0=B0=D0=BD=D0=B0=D0=BB=D0=B8=D1=82=D0=B8?= =?UTF-8?q?=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/screens/Home.tsx | 4 +++ src/services/analyticsService.ts | 57 ++++++++++++++++++++++++++++++++ src/services/paymentService.ts | 4 +++ 3 files changed, 65 insertions(+) diff --git a/src/screens/Home.tsx b/src/screens/Home.tsx index 2381b21..a106d20 100644 --- a/src/screens/Home.tsx +++ b/src/screens/Home.tsx @@ -12,6 +12,7 @@ import { paymentService } from '../services/paymentService'; import { tokenPacks } from '../constants/tokenPacks'; import { getCurrentUserId } from '../constants/user'; import { useBalance } from '../contexts/BalanceContext'; +import { sendTargetEvent } from '../services/analyticsService'; // Интерфейс для хранения данных о последней генерации interface LastGenerationData { @@ -193,6 +194,9 @@ const Home: React.FC = () => { customPrompt: userPrompt }); + // Отправляем целевое событие об успешной генерации + sendTargetEvent(10457, getCurrentUserId()); + // Функция для выполнения серии запросов на обновление баланса const updateBalanceWithRetries = () => { // Функция для выполнения одной попытки обновления баланса diff --git a/src/services/analyticsService.ts b/src/services/analyticsService.ts index 118e69d..4f9fb23 100644 --- a/src/services/analyticsService.ts +++ b/src/services/analyticsService.ts @@ -101,3 +101,60 @@ export const trackRejectedPrompt = (originalPrompt: string): void => { }); } }; + +/** + * Отправляет целевое событие в систему аналитики + * @param targetId - ID цели + * @param userId - Telegram ID пользователя + * @param value - Общая цена (опционально) + * @param unit - Код валюты (опционально, обязательно если указан value) + */ +export const sendTargetEvent = async ( + targetId: number, + userId: number, + value?: number, + unit?: string +): Promise => { + try { + const date = new Date().toISOString(); // Текущая дата в формате ISO 8601 + + const payload: { + target_id: number; + user_id: number; + date: string; + value?: number; + unit?: string; + } = { + target_id: targetId, + user_id: userId, + date: date + }; + + // Добавляем value и unit, если они указаны + if (value !== undefined) { + payload.value = value; + + if (unit) { + payload.unit = unit; + } + } + + // Отправляем запрос на сервер + const response = await fetch('https://api.graspil.com/v1/send-target', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Api-Key': '3bb78a396b0aa436843d606d02abfe4c' + }, + body: JSON.stringify(payload) + }); + + const data = await response.json(); + + if (!data.ok) { + console.error('Ошибка при отправке целевого события:', data.error); + } + } catch (error) { + console.error('Ошибка при отправке целевого события:', error); + } +}; diff --git a/src/services/paymentService.ts b/src/services/paymentService.ts index 5d10bee..26f7ac3 100644 --- a/src/services/paymentService.ts +++ b/src/services/paymentService.ts @@ -1,6 +1,7 @@ import { TokenPack } from '../constants/tokenPacks'; import apiService from '../services/api'; import { getCurrentUserId } from '../constants/user'; +import { sendTargetEvent } from './analyticsService'; export const paymentService = { showBuyTokensPopup: async (pack: TokenPack, onSuccess?: (userData?: any) => void) => { @@ -24,6 +25,9 @@ export const paymentService = { // Открываем встроенный платеж Telegram без предварительного подтверждения webApp.openInvoice(invoiceLink, async (status: 'paid' | 'cancelled' | 'failed' | 'pending') => { if (status === 'paid') { + // Отправляем целевое событие о покупке токенов + // Значение value = 0.01 * pack.price (конвертация звезд в USD) + sendTargetEvent(10458, userId, 0.01 * pack.price, 'usd'); // Функция для выполнения одной попытки получения данных пользователя const fetchUserData = async (attempt: number) => { try {