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

Существует множество способов отслеживать активность пользователей 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}`;
  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 и видим запись о произошедшем событии:

fc7b2a9b3153d4c2fdc2b898d53839d9.png

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

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

---

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

© Habrahabr.ru