На Хабре уже есть несколько статей про телеграм бота. Но как же следить за использованием бота? Под катом собираем данные для оценки наиболее используемых функции бота, эффективности кампаний и показателей отказа.
![image](https://habrastorage.org/files/4b3/123/c4e/4b3123c4ea164955ba828f3c2f8b0fce)
Сперва небольшая ремарка. Я не являюсь ни аналитиком, ни seo-специалистом. Возможно, некоторые задачи можно решить эффективнее, но об этом крайне мало информации. Так сложилось, что наши коллеги за океаном наотрез отказались работать с продуктом Яндекса botan и требовали знакомый интерфейс “как в google analytics”. Было решено использовать google analytics measurement protocol. С его помощью можно передавать почти все те же данные в google analytics, что и обычным образом (например, скриптом на сайте).
Если ваш бот написан на laravel, мы можем посоветовать пакет irazasyed/laravel-gamp для работы measurement protocol.
В нашем боте мы разметили основное взаимодействие пользователя с ботом по диалогам и шагам. Например, диалог настроек выглядит примерно вот так:
![image](https://habrastorage.org/files/d61/ad1/23d/d61ad123de554b34851b0ece78463d0b)
На самом деле это один шаг диалога с кнопками и 6 отдельных шагов настройки конкретных параметров. Эту структуру можно представить в виде адресов:
Мы рассматриваем набор текущих кнопок пользователя как его состояние или как страницу, на которой он находится. Соответственно мы можем отправлять в аналитику просмотр страницы.
![image](https://habrastorage.org/files/837/135/657/837135657f6d47c9aeb912671797ede7)
Если аналогия страниц сайта с состоянием пользователя (его текущей клавиатурой) вполне очевидна, то как провести аналогию с источником трафика? По факту мы никак не можем узнать, каким именно образом пользователь нашел нашего бота. Но есть одна хитрость. У нас уже имелся инструмент для передачи аналога utm_campaign в Google Analytics.
Телеграм дает возможность начинать диалог с пользователем не с чистого листа. Когда пользователь нажмет на кнопку “start” в приложении телеграма, бот получает сообщение “/start”. Это сообщение можно расширить дополнительным параметром. Каждый бот имеет ссылку, которая открывает чат с ним в телеграмме — telegram.me<bot_name>. К этой ссылке можно добавить параметр “start” (или “startgroup”), например:
В данном случае мы можем передать в аналитику источник “habr” и даже уточнить его каналом “gamp”.
С этого момента мы можем следить за успешностью рекламных компаний:
![image](https://habrastorage.org/files/71d/a34/1a8/71da341a866d45f899df82cb6f3200f9)
При очередной отправке сообщения вы можете столкнуться с неприятной ситуацией — пользователь заблокировал бота. Как это отразить в аналитике? На самом деле мы не можем отдать аналитеке просмотр страницы “/unsubscribe” или подобной, т.к. пользователь сейчас находится в другом состоянии (на другой ”странице”). Но gamp поддерживает и события. Соответственно, отправляем ему событие о блокировке пользователя.
Т.к. все сообщения приходят с одного и того же сервера, его географическая принадлежность практически не имеет значения. Нам интересно распределение аудитории бота. Принципиально мы можем узнать о местоположении пользователя двумя способами: по присланной геолокации или по его ip.
![image](https://habrastorage.org/files/cb2/354/43d/cb235443dce14376a6e7ea537656dec1)
Внимательный читатель мог заметить, что по каким-то причинам Гренландия имеет почти столько же сеансов, что и Россия. Дело в том, что это маленькая хитрость. Не все пользователи переходят по ссылкам или отправляют свою локацию. Поскольку для нас важно понимать не только географическое расположение, но и сколько пользователей нам его не предоставили, мы решили всех кто еще не успел рассказать о своем местоположении считать в крупной, но малонаселенной Гренландии.
Сперва небольшая ремарка. Я не являюсь ни аналитиком, ни 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<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);
}
С этого момента мы можем следить за успешностью рекламных компаний:
Что делать, если пользователь заблокировал бота?
При очередной отправке сообщения вы можете столкнуться с неприятной ситуацией — пользователь заблокировал бота. Как это отразить в аналитике? На самом деле мы не можем отдать аналитеке просмотр страницы “/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)
Внимательный читатель мог заметить, что по каким-то причинам Гренландия имеет почти столько же сеансов, что и Россия. Дело в том, что это маленькая хитрость. Не все пользователи переходят по ссылкам или отправляют свою локацию. Поскольку для нас важно понимать не только географическое расположение, но и сколько пользователей нам его не предоставили, мы решили всех кто еще не успел рассказать о своем местоположении считать в крупной, но малонаселенной Гренландии.
Поделиться с друзьями
Комментарии (5)
and7ey
09.09.2016 21:04Отправлять статистику по боту в Google Analytics, а затем ее же смотреть в Telegram (например, с помощью @MetricsBot)? Хм, кажется, где-то я об этом уже писал :).
Важное замечание, о котором вы не написали — в Google Analytics нужно указать, что вы отслеживается Сайт, а не Мобильное Приложение. Так как во втором случае pageViews с описанным вами способом работать не будут.Visionary
09.09.2016 21:26Да, не хватает только бота, через который заменит настройку аналитики (добавление отображений и отчетов).
Спасибо за замечание!
EkaterinaSava
А этого хвалёного бота можно где-то пощупать?
Visionary
Конечно. @EpytomBot