Server SDK
Установка
Требования
Для использования SDK Telesend вам понадобится:
- Node.js версии 18 или выше
- Проект на JavaScript или TypeScript
- API ключ
Установка пакета
npm i telesend-server-sdkpnpm add telesend-server-sdkyarn add telesend-server-sdkПолучение API ключа
API ключ необходим для аутентификации вашего приложения при взаимодействии с Telesend. Для получения API ключа:
- Войдите в свой аккаунт на сайте Telesend
- Перейдите к своему проекту:
- Если у вас уже есть проект - выберите его в личном кабинете.
- Если у вас еще нет проекта - создайте новый:
- Нажмите на кнопку “Создать проект”.
- Заполните все поля и нажмите на кнопку “Создать”.
- Найдите кнопку “Редактировать” и скопируйте ваш API ключ
Храните ваш API ключ в безопасном месте и не публикуйте его в открытом доступе.
Инициализация клиента
Для начала работы с SDK необходимо создать экземпляр класса TelesendClient:
import { TelesendClient, composeMessage, type MessageQueueItem } from 'telesend-server-sdk';
const client = new TelesendClient({ apiKey: 'your-api-key', // Ваш API ключ // Обязательный колбэк для отправки сообщений callbackHookSendMessage: async (payload: MessageQueueItem) => { const { type, body } = composeMessage(payload);
const response = await fetch(`https://api.telegram.org/bot${BOT_TOKEN}/${type}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) });
if (!response.ok) { const errorData = await response.json(); throw new Error(JSON.stringify(errorData)); } }});Отправка аналитических событий
Идентификация пользователя
Прежде чем отправлять аналитические события, рекомендуется идентифицировать пользователя:
// Идентификация пользователяawait client.identify({ id: '123456789', username: 'username', firstName: 'Имя', lastName: 'Фамилия', isPremium: false});Подробнее о методе client.identify
Отправка события
// Отправка аналитического событияawait client.track('123456789', 'button_click', { startParameter: '', path: '/start', params: { buttonId: 'start' }, language: 'ru', device: 'mobile'});Подробнее о методе client.track
Обработка событий
SDK Telesend использует систему событий для отслеживания состояния подключения и отправки сообщений:
// Отслеживание отправки сообщенийclient.on('messageSent', (userId: string, success: boolean) => { if (success) { console.log(`Сообщение успешно отправлено пользователю ${userId}`); } else { console.log(`Ошибка при отправке сообщения пользователю ${userId}`); }});
// Отслеживание ошибокclient.on('error', (error: Error) => { console.error('Произошла ошибка:', error.message);});Примеры использования
Отправка аналитического события
Пример отправки события о нажатии на кнопку:
await client.identify({ id: '123456789', username: 'username', firstName: 'Имя', lastName: 'Фамилия', isPremium: true})await client.track('123456789', 'button_click', { startParameter: '', path: '/start', params: { buttonId: 'start_button', buttonText: 'Начать' }, language: 'ru', device: 'mobile'});Интеграция с Telegram API
SDK Telesend не взаимодействует напрямую с Telegram API. Вместо этого он использует переданную в конструкторе функцию callbackHookSendMessage для отправки сообщений. Это позволяет разработчикам иметь полный контроль над процессом отправки сообщений.
Пример реализации колбэка для отправки сообщений:
const sendTelegramMessage = async (payload: MessageQueueItem) => { const { type, body } = composeMessage(payload);
const response = await fetch(`https://api.telegram.org/bot${BOT_TOKEN}/${type}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) });
if (!response.ok) { const errorData = await response.json(); throw new Error(JSON.stringify(errorData)); }};API и типы данных
Класс TelesendClient
Основной класс для работы с SDK Telesend.
Конструктор
new TelesendClient(config: TelesendClientConfig)
interface TelesendClientConfig { apiKey: string; // API ключ проекта callbackHookSendMessage: (payload: MessageQueueItem) => Promise<void>; // Функция для отправки сообщений}Методы
track
Отправляет аналитическое событие на сервер.
track(userId: string | number, type: string, payload: Event): Promise<void>identify
Идентифицирует пользователя.
identify(userDetails: UserDetails): Promise<void>isConnected
Проверяет, установлено ли соединение с сервисом.
isConnected(): booleanclose
Закрывает соединение с сервисом при завершении работы с SDK.
close(): Promise<void>События
messageSent
Событие вызывается при отправке сообщения пользователю.
on('messageSent', (userId: string, success: boolean) => void)error
Событие вызывается при возникновении ошибки.
on('error', (error: Error) => void)Вспомогательные функции
composeMessage
Формирует данные для запроса к Telegram API на основе сообщения.
composeMessage(messageData: MessageQueueItem): { type: string; body: any }Типы данных
UserDetails и Event
interface UserDetails { id: string; // Уникальный идентификатор пользователя username?: string; // Имя пользователя в Telegram (без @) firstName?: string; // Имя пользователя lastName?: string; // Фамилия пользователя isPremium?: boolean; // Статус премиум-подписки пользователя timeZone?: number; // Часовой пояс пользователя (от -12 до +12)}
interface Event { startParameter: string; // Начальный параметр события path: string; // Путь, на котором произошло событие params: { [key: string]: unknown }; // Дополнительные параметры события language?: string; // Язык пользователя device?: string; // Устройство пользователя}TelegramMessage
Типы сообщений для отправки через Telegram API.
// Базовые типыinterface Button { text: string; // Текст кнопки url?: string; // URL для перехода callback_data?: string; // Данные для обратного вызова}
interface MediaItem { type: 'audio' | 'document' | 'photo' | 'video'; // Тип медиа url: string; // URL медиафайла caption?: string; // Подпись к медиафайлу}
interface BaseMessage { disable_notification: boolean; // Отключить уведомление parse_mode?: string; // Режим парсинга (Markdown, HTML)}
// Типы сообщенийtype TelegramMessage = | MessageText | MessageMediaGroup | MessagePhoto | MessageVideoNote | MessageVoice | MessagePoll;
// Текстовое сообщениеinterface MessageText extends BaseMessage { type: 'message'; text: string; // Текст сообщения buttons?: Button[]; // Кнопки}
// Группа медиафайловinterface MessageMediaGroup extends BaseMessage { type: 'mediaGroup'; items: MediaItem[]; // Медиафайлы}
// Фотоinterface MessagePhoto extends BaseMessage { type: 'photo'; photo: string; // URL фото caption?: string; // Подпись к фото buttons?: Button[]; // Кнопки}
// Видео-заметкаinterface MessageVideoNote extends BaseMessage { type: 'videoNote'; video_note: string; // URL видео-заметки buttons?: Button[]; // Кнопки}
// Голосовое сообщениеinterface MessageVoice extends BaseMessage { type: 'voice'; voice: string; // URL голосового сообщения caption?: string; // Подпись buttons?: Button[]; // Кнопки}
// Опросinterface MessagePoll extends BaseMessage { type: 'poll'; question: string; // Вопрос options: string[]; // Варианты ответов is_anonymous: boolean; // Анонимный опрос allows_multiple_answers: boolean; // Множественный выбор}Прочие типы
// Данные пользователяinterface UserData { tg: string | number; // Telegram ID пользователя}
// Элемент очереди сообщенийinterface MessageQueueItem { userId: string; // ID пользователя message: TelegramMessage; // Сообщение}