На Хабре уже есть несколько статей про телеграм бота. Но как же следить за использованием бота? Под катом собираем данные для оценки наиболее используемых функции бота, эффективности кампаний и показателей отказа.
![Google Analytics для телеграм бота - 1 image](https://www.pvsm.ru/images/2016/09/09/Google-Analytics-dlya-telegram-bota.png)
Сперва небольшая ремарка. Я не являюсь ни аналитиком, ни seo-специалистом. Возможно некоторые задачи можно решить эффективнее, но об этом крайне мало информации. Так сложилось, что наши коллеги за океаном наотрез отказались работать с продуктом Яндекса botan и требовали знакомый интерфейс “как в google analytics”. Было решено использовать google analytics measurement protocol. С его помощью можно передавать почти все те же данные в google analytics, что и обычным образом (например скриптом на сайте).
Если ваш бот написан на laravel, то мы можем посоветовать пакет irazasyed/laravel-gamp для работы measurement protocol.
Как пользуются ботом?
В нашем боты мы разметили основное взаимодействие пользователя с ботом по диалогам и шагам. Например, диалог настроек выглядящий примерно вот так:
![Google Analytics для телеграм бота - 2 image](https://www.pvsm.ru/images/2016/09/09/Google-Analytics-dlya-telegram-bota-2.png)
На самом деле это один шаг диалога с кнопками и 6 отдельных шагов настройки конкретных параметров. Эту структуру можно представить в виде адресов:
- /settings
- /settings/gender
- /settings/frequency
- /settings/language
- …
Мы рассматриваем набор текущих кнопок пользователя как его состояние или как страницу, на которой он находится. Соответственно мы можем отправлять в аналитику просмотр страницы.
use IrazasyedLaravelGAMPFacadesGAMP;
...
$gamp = GAMP::setClientId( '123456' );
$gamp->setDocumentPath( '/settings' );
$gamp->sendPageview();
...
![Google Analytics для телеграм бота - 3 image](https://www.pvsm.ru/images/2016/09/09/Google-Analytics-dlya-telegram-bota-3.png)
Откуда появляются новые пользователи?
Если аналогия страниц сайта с состоянием пользователя (его текущей клавиатурой) вполне очевидна, то как провести аналогию с источником трафика? По факту мы никак не можем узнать, каким именно образом пользователь нашел нашего бота. Но есть одна хитрость. У нас уже имелся инструмент для переда аналога utm_campaign в Google Analytics.
Телеграм дает возможность начинать диалог с пользователем не с чистого листа. Когда пользователь нажмет на кнопку “start” в приложении телеграма, бот получает сообщение “/start”. Это сообщение можно расширить дополнительным параметром. Каждый бот имеет ссылку, которая открывает чат с ним в телеграмме — telegram.me<bot_name>. К этой ссылке можно добавить параметр “start” (или “startgroup”), например:
https://telegram.me/bot_name?start=habr-gamp
В данном случае мы можем передать в аналитику источник “habr” и даже уточнить его каналом “gamp”.
if($campaign){
if(strpos($campaign,'-')){
list($campaign,$medium) = explode('-',$campaign);
$gamp->setCampaignMedium($medium);
}
else{
$gamp->setCampaignMedium('none');
}
$gamp->setCampaignSource($campaign);
}
С этого момента мы можем следить за успешностью рекламных компаний:
![Google Analytics для телеграм бота - 4 image](https://www.pvsm.ru/images/2016/09/09/Google-Analytics-dlya-telegram-bota-4.png)
Что делать, если пользователь заблокировал бота?
При очередной отправке сообщения вы можете столкнуться с неприятной ситуацией — пользователь заблокировал бота. Как это отразить в аналитике? На самом деле мы не можем отдать аналитеке просмотр страницы “/unsubscribe” или подобной, т.к. пользователь сейчас находится в другом состоянии (на другой ”странице”). Но gamp поддерживает и события. Соответственно, отправляем ему событие о блокировке пользователя.
use IrazasyedLaravelGAMPFacadesGAMP;
...
$gamp = GAMP::setClientId( '123456' );
$gamp->setEventCategory('User')
->setEventAction('Unsubscribe')
->setEventLabel('Blocked')
->sendEvent();
...
География использования бота
Т.к. все сообщения приходят с одного и того же сервера то его географическая принадлежность практически не имеет значения. Нам интересно распределение аудитории бота. Принципиально мы можем узнать о местоположении пользователя двумя способами: по присланной геолокации или по его ip.
- У api google карт есть замечательный сервис геокодирования и в частности обратного геокодирвоания. Соответственно, остается отдать в аналитику соответствующую страну:
$gamp->setGeographicalOverride($oChat->country);
- Альтернативный способ заключается в
вычислению по ipполучении ip пользователя. Единственный способ узнать его — это “заманить” пользователя на сайт. Например, через короткие ссылки-редиректы.В таком случае уже не обязательно выяснять, какой стране принадлежит ip, google умеет это делать самостоятельно.
$this->gamp->setIpOverride($oChat->last_ip_address)
Внимательный читатель мог заметить, что по каким-то причинам Гренландия имеет почти столько же сеансов, что и Россия. Дело в том, что это маленькая хитрость. Не все пользователи переходят по ссылкам или отправляют свою локацию. Поскольку для нас важно понимать не только географическое расположение, но и сколько пользователей нам его не предоставили, мы решили всех кто еще не успел рассказать о своем местоположении считать в крупной, но малонаселенной Гренландии.
Автор: Visionary