обавлена отправка целевых событий в систему аналитики

This commit is contained in:
kazachilo 2025-03-28 12:53:38 +03:00
parent 861670e481
commit fa8a012ad3
3 changed files with 65 additions and 0 deletions

View File

@ -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 = () => {
// Функция для выполнения одной попытки обновления баланса

View File

@ -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<void> => {
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);
}
};

View File

@ -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 {