Если вы ведёте Telegram-канал — рано или поздно возникает вопрос: почему люди подписываются, когда отписываются и как понять эффективность публикаций и рекламы. Telegram сам по себе почти ничего не показывает: только общее количество участников. Никаких логов «кто пришёл / кто ушёл» он не хранит.
Но есть способ отслеживать всё это с точностью до пользователя. И причём не через сервисы, а своими руками на PHP, используя библиотеку MadelineProto — мощный инструмент для работы с Telegram через MTProto API.
Зачем нужен учёт подписчиков и отписчиков?
Имея данные:
- кто подписался;
- кто ушёл;
- в какое время;
- после какой рекламы был приток;
- какой пост вызвал всплеск;
вы можете:
- понимать эффективность контента;
- оценивать работу рекламы;
- видеть качество привлечённой аудитории;
- распознавать моменты оттока;
- прогнозировать рост канала.
Почему MadelineProto?
MadelineProto:
- бесплатная;
- работает как полноценный Telegram-клиент;
- позволяет получать список участников канала напрямую;
- работает без webhook и без бота.
Важно: бот не видит подписки и отписки в каналах — только MTProto-клиент.
Архитектура решения
- Периодически получаем список участников канала.
- Сравниваем его с предыдущим сохранённым списком.
- Определяем: кто пришёл, кто ушёл.
- Сохраняем данные в файл или БД.
Пример реализации на PHP
1. Установка MadelineProto
composer require danog/madelineproto
2. Инициализация и запуск сессии
require 'vendor/autoload.php';
$MadelineProto = new \danog\MadelineProto\API('session.madeline');
$MadelineProto->start();
3. Получение списка участников Telegram-канала
$participants = [];
$offset = 0;
do {
$result = $MadelineProto->channels->getParticipants([
'channel' => '@my_channel',
'filter' => ['_' => 'channelParticipantsRecent'],
'offset' => $offset,
'limit' => 200,
'hash' => 0
]);
foreach ($result['participants'] as $user) {
$participants[] = $user['user_id'];
}
$offset += 200;
} while (count($result['participants']) > 0);
4. Сравниваем текущий список с предыдущим
$previous = file_exists('members.json')
? json_decode(file_get_contents('members.json'), true)
: [];
$new = array_diff($participants, $previous);
$gone = array_diff($previous, $participants);
5. Выводим результаты
if ($new) {
echo \"Новые подписчики: \" . implode(', ', $new) . PHP_EOL;
}
if ($gone) {
echo \"Отписались: \" . implode(', ', $gone) . PHP_EOL;
}
6. Обновляем файл со списком
file_put_contents('members.json', json_encode($participants));
Автоматизация через CRON
Для автоматического запуска каждые 10 минут:
*/10 * * * * php /var/www/check.php
Что можно улучшить?
- Статистика по дням — сколько пришло/ушло.
- Привязка к рекламе — кто пришёл после рекламных интеграций.
- Графики роста — визуализация динамики.
- Уведомления — если резкий всплеск подписок или отписок.
- Привязка к постам — прирост после публикаций.
Итог
Учёт подписчиков и отписчиков Telegram-канала через PHP MadelineProto — это простой и точный способ получить полноценную аналитику без сторонних сервисов. Решение устанавливается за несколько минут, легко автоматизируется и работает стабильно.
Если хочешь интегрировать данное решение в свой сервис, попробуй написать мне.
