Как подключить Google Analytics к Telegram боту?

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Существует множество способов отслеживать активность пользователей Telegram бота. Многие разработчики предпочитают создавать собственные решения. В данной статье я попытаюсь по пунктам объяснить, как можно использовать всем известный сервис Google Analytics для отслеживания действий пользователей вашего Telegram бота.

Для примера я буду использовать свой бот для автоматической проверки и исправления текста на английском языке. Бот представляет собой ни что иное, кроме как обертку для одного из GPT сервисов. Поскольку база данных при этом не используется, использование Google Analytics для учета пользователей выглядит оптимальным вариантом. Поехали: 

  • Для начала заходим на официальный сайт GA, выбираем или создаем аккаунт для вашего счетчика и создаем новое Property. На последнем шаге в качестве платформы выбираем Web, вводим адрес, с которого будут идти запросы к GA и нажимаем Create stream. На этом этапе все делаете как для обычного сайта. 

Create stream
Create stream
  • Открываем страницу только что созданного Property, в боковой панели выбираем Home и нажимаем на кнопку Get tagging instructions. В появившемся окне нас интересует Measurement ID. Копируем его и сохраняем для дальнейшего использования.

Measurement ID
Measurement ID
  • Модальное окно пока не закрываем, переходим в Measurement Protocol API secrets, принимаем условия использования и создаем новый Secret key. Также сохраняем его.

Secret key
Secret key

Measurement ID и Secret key нужны для того, чтобы сгенерировать адрес, по которому мы будем обращаться к GA. 

Далее переходим в код вашего бота. Я использую библиотеку Grammy для Node.js, поэтому весь код ниже будет на JavaScript. Естественно, вы можете использовать любой другой язык программирования и любую другую библиотеку. 

  • В отличие от стандартного использования GA для отслеживания трафика на сайте, для Telegram бота мы будет отслеживать определенные события. События могут быть абсолютно любые (например, выполнение определенной команды, совершение покупки и т.п.). В моем случае меня интересует только количество отправленных боту сообщений и непосредственно их текст, поэтому запрос к GA будет осуществляться после получения каждого сообщения от пользователя.

bot.on('message:text', async (ctx) => {
  ...
}
  • Создаем URL, к которому будет обращаться наш бот. Для этого используем Measurement ID и Secret key, который мы сохранили ранее:

const url = `https://www.google-analytics.com/mp/collect?measurement_id=${your_measurement_id}&api_secret=${your_secret_key}`;
  • Создаем объект с данными, которые мы будем передавать GA:

  const data = {
    client_id: ctx.from.id.toString(),
    events: [
      {
        name: 'message',
        params: {
          engagement_time_msec: '100',
          session_id: ctx.chat.id.toString(),
          message: ctx.message.text,
        },
      },
    ],
  };

client_id - это ID пользователя, который можно получить из функции gtag. Однако поскольку наш код будет выполняться на бэкэнде, функция gtag будет для нас недоступна. Это поле является обязательным, поэтому вы можете просто использовать ID вашего пользователя. Вследствие этого ваш запрос будет обрабатываться GA с ошибкой, однако все данные все равно будут учтены.

events - это массив событий, которые вы передаете. Каждое событие может содержать любую информацию в свойстве params, которую вы захотите ему передать. Вся переданная информация будет доступна в личном кабинете GA при просмотре этого события. Также рекомендую указать engagement_time_msec и session_id для того, чтобы события отображались в режиме реального времени.

  • Далее мы просто отправляем собранные данные по вышеуказанному адресу. Окончательный код может выглядеть следующим образом:

bot.on('message:text', async (ctx) => {
  const url = `https://www.google-analytics.com/mp/collect?measurement_id=${your_measurement_id}&api_secret=${your_secret_key}`;
  const data = {
    client_id: ctx.from.id.toString(),
    events: [
      {
        name: 'message',
        params: {
          engagement_time_msec: '100',
          session_id: ctx.chat.id.toString(),
          message: ctx.message.text,
        },
      },
    ],
  };
  try {
    const response = await axios.post(url, JSON.stringify(data));
    if (response.status === 200) {
      console.log('Event processed successfully.');
    } else {
      console.log('Processing by Google Analytics failed.');
    }
  } catch (error) {
    console.error('Error sending event to Google Analytics: ', error);
  }
});

Убедимся, что код работает. Отправляем нашему боту сообщение на английском языке с намеренно неправильной грамматикой. В ответ получаем откорректированную версию сообщения:

@english-proofreader-bot
@english-proofreader-bot

Заходим в GA во вкладку Realtime и видим запись о произошедшем событии:

По клику на событие можно получить полную информацию о нем. 

Готово! Таким образом можно легко и бесплатно отслеживать активность ваших пользователей в Telegram боте. Спасибо за внимание!

---

Ссылка на Google Analytics: https://marketingplatform.google.com/about/analytics/.
Ссылка на Telegram бот: https://t.me/english_proofreader_bot.

Источник: https://habr.com/ru/articles/790156/


Интересные статьи

Интересные статьи

Итак, в предыдущих статьях (Введение, Командуем, Дратути) мы уже разобрали многие аспекты написания бота: как начать писать бота, как делать плагины-расширения и как работать с непосредственно пользов...
Приветствую, дорогой читатель! Сегодня мы поговорим про старый, но по-прежнему довольно полезный инструмент под названием «Google Таблицы» и обсудим как его функционал можно использовать в своих OSINT...
Приветики-омлетики, как-то недавно у меня появилась идея написать Telegram бота на Ruby на специфическую тематику, в двух словах этот бот должен был поднимать онлайн чатах по ср...
Нас часто спрашивают, насколько хорошо те или иные популярные мессенджеры хранят тайны своих пользователей — переписку и пересылаемые файлы, существуют ли риски взлома самих сервисов,...
SRE (Site Reliability Engineering) — подход к обеспечению доступности веб-проектов. Считается фреймворком для DevOps и говорит как добиться успеха в применение DevOps-практик. В этой статье п...