Pull to refresh

Google Analytics для телеграм бота

Reading time3 min
Views17K
На Хабре уже есть несколько статей про телеграм бота. Но как же следить за использованием бота? Под катом собираем данные для оценки наиболее используемых функции бота, эффективности кампаний и показателей отказа.

image

Сперва небольшая ремарка. Я не являюсь ни аналитиком, ни seo-специалистом. Возможно, некоторые задачи можно решить эффективнее, но об этом крайне мало информации. Так сложилось, что наши коллеги за океаном наотрез отказались работать с продуктом Яндекса botan и требовали знакомый интерфейс “как в google analytics”. Было решено использовать google analytics measurement protocol. С его помощью можно передавать почти все те же данные в google analytics, что и обычным образом (например, скриптом на сайте).

Если ваш бот написан на laravel, мы можем посоветовать пакет irazasyed/laravel-gamp для работы measurement protocol.

Как пользуются ботом?


В нашем боте мы разметили основное взаимодействие пользователя с ботом по диалогам и шагам. Например, диалог настроек выглядит примерно вот так:

image

На самом деле это один шаг диалога с кнопками и 6 отдельных шагов настройки конкретных параметров. Эту структуру можно представить в виде адресов:

  • /settings
    • /settings/gender
    • /settings/frequency
    • /settings/language

Мы рассматриваем набор текущих кнопок пользователя как его состояние или как страницу, на которой он находится. Соответственно мы можем отправлять в аналитику просмотр страницы.

use Irazasyed\LaravelGAMP\Facades\GAMP;
...

$gamp = GAMP::setClientId( '123456' );
$gamp->setDocumentPath( '/settings' );
$gamp->sendPageview();

...

image

Откуда появляются новые пользователи?


Если аналогия страниц сайта с состоянием пользователя (его текущей клавиатурой) вполне очевидна, то как провести аналогию с источником трафика? По факту мы никак не можем узнать, каким именно образом пользователь нашел нашего бота. Но есть одна хитрость. У нас уже имелся инструмент для передачи аналога 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);
}

С этого момента мы можем следить за успешностью рекламных компаний:

image

Что делать, если пользователь заблокировал бота?


При очередной отправке сообщения вы можете столкнуться с неприятной ситуацией — пользователь заблокировал бота. Как это отразить в аналитике? На самом деле мы не можем отдать аналитеке просмотр страницы “/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)
    

image

Внимательный читатель мог заметить, что по каким-то причинам Гренландия имеет почти столько же сеансов, что и Россия. Дело в том, что это маленькая хитрость. Не все пользователи переходят по ссылкам или отправляют свою локацию. Поскольку для нас важно понимать не только географическое расположение, но и сколько пользователей нам его не предоставили, мы решили всех кто еще не успел рассказать о своем местоположении считать в крупной, но малонаселенной Гренландии.
Tags:
Hubs:
Total votes 21: ↑21 and ↓0+21
Comments5

Articles