[Из песочницы] Google Analytics для телеграм бота
Сперва небольшая ремарка. Я не являюсь ни аналитиком, ни seo-специалистом. Возможно, некоторые задачи можно решить эффективнее, но об этом крайне мало информации. Так сложилось, что наши коллеги за океаном наотрез отказались работать с продуктом Яндекса botan и требовали знакомый интерфейс «как в google analytics». Было решено использовать google analytics measurement protocol. С его помощью можно передавать почти все те же данные в google analytics, что и обычным образом (например, скриптом на сайте).
Если ваш бот написан на laravel, мы можем посоветовать пакет irazasyed/laravel-gamp для работы measurement protocol.
Как пользуются ботом?
В нашем боте мы разметили основное взаимодействие пользователя с ботом по диалогам и шагам. Например, диалог настроек выглядит примерно вот так:
На самом деле это один шаг диалога с кнопками и 6 отдельных шагов настройки конкретных параметров. Эту структуру можно представить в виде адресов:
- /settings
- /settings/gender
- /settings/frequency
- /settings/language
- …
Мы рассматриваем набор текущих кнопок пользователя как его состояние или как страницу, на которой он находится. Соответственно мы можем отправлять в аналитику просмотр страницы.
use Irazasyed\LaravelGAMP\Facades\GAMP;
...
$gamp = GAMP::setClientId( '123456' );
$gamp->setDocumentPath( '/settings' );
$gamp->sendPageview();
...
Откуда появляются новые пользователи?
Если аналогия страниц сайта с состоянием пользователя (его текущей клавиатурой) вполне очевидна, то как провести аналогию с источником трафика? По факту мы никак не можем узнать, каким именно образом пользователь нашел нашего бота. Но есть одна хитрость. У нас уже имелся инструмент для передачи аналога utm_campaign в Google Analytics.
Телеграм дает возможность начинать диалог с пользователем не с чистого листа. Когда пользователь нажмет на кнопку «start» в приложении телеграма, бот получает сообщение »/start». Это сообщение можно расширить дополнительным параметром. Каждый бот имеет ссылку, которая открывает чат с ним в телеграмме — telegram.me
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);
}
С этого момента мы можем следить за успешностью рекламных компаний:
Что делать, если пользователь заблокировал бота?
При очередной отправке сообщения вы можете столкнуться с неприятной ситуацией — пользователь заблокировал бота. Как это отразить в аналитике? На самом деле мы не можем отдать аналитеке просмотр страницы »/unsubscribe» или подобной, т.к. пользователь сейчас находится в другом состоянии (на другой «странице»). Но gamp поддерживает и события. Соответственно, отправляем ему событие о блокировке пользователя.
use Irazasyed\LaravelGAMP\Facades\GAMP;
...
$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)
Внимательный читатель мог заметить, что по каким-то причинам Гренландия имеет почти столько же сеансов, что и Россия. Дело в том, что это маленькая хитрость. Не все пользователи переходят по ссылкам или отправляют свою локацию. Поскольку для нас важно понимать не только географическое расположение, но и сколько пользователей нам его не предоставили, мы решили всех кто еще не успел рассказать о своем местоположении считать в крупной, но малонаселенной Гренландии.