Как можно интегрировать Яндекс.Метрику с Telegram-ботом?

Здравствуйте! Я долго искал решение своего вопроса, но, к сожалению, не нашел подходящей информации. У меня есть телеграм-бот на Python, и мне нужно отправлять данные в Яндекс.Метрику о том, кто нажал кнопки "Старт" и "Поделиться номером". Я не заинтересован в использовании сторонних сервисов, хочу реализовать это напрямую. Понимаю, что это может быть невозможно, однако у меня есть лендинг, куда можно было бы внедрить скрипт. Не могли бы вы поделиться подробной инструкцией или мануалом по этому вопросу? Буду очень благодарен!
  • 7 марта 2025 г. 19:24
Ответы на вопрос 2
Интеграция Яндекс.Метрики с Telegram-ботом — это интересная задача, которая потребует от вас немного работы, но вполне реализуемая. Основная идея заключается в том, чтобы отправлять данные о событиях (нажатия кнопок) с вашего Telegram-бота на Ваш веб-сайт, который уже отслеживается Яндекс.Метрикой.

Вот шаги, которые помогут вам реализовать это:

### 1. Подготовьте ваш лендинг

На вашем лендинге вы должны установить код Яндекс.Метрики. Вы можете сделать это, добавив следующий код в `<head>` вашего HTML-документа:

```html
<!-- Код Яндекс.Метрики -->
<script type="text/javascript">
    (function(m,e,t,r,i,k,a){
        m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
        m[i].l=1*new Date();
        k=e.createElement(t);
        a=e.getElementsByTagName(t)[0];
        k.async=1;k.src=r;a.parentNode.insertBefore(k,a)
    })
    (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");

    ym(YOUR_METRIC_ID, "init", {
        clickmap:true,
        trackLinks:true,
        accurateTrackBounce:true
    });
</script>
<noscript><div><img src="https://mc.yandex.ru/watch/YOUR_METRIC_ID" style="position:absolute; left:-9999px;" alt=""/></div></noscript>
```
Замените `YOUR_METRIC_ID` на ваш ID метрики.

### 2. Настройте обработку событий в вашем Telegram-боте

Теперь вам нужно будет реализовать логику для отслеживания нажатий кнопок и отправки данных на ваш лендинг.

В вашем боте, например с помощью библиотеки `python-telegram-bot`, вы можете добавить обработчики для кнопок:

```python
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import Updater, CommandHandler, CallbackQueryHandler, CallbackContext
import requests

def start(update: Update, context: CallbackContext) -> None:
    keyboard = [
        [InlineKeyboardButton("Поделиться номером", callback_data='share_number')]
    ]

    reply_markup = InlineKeyboardMarkup(keyboard)
    update.message.reply_text('Привет! Нажми на кнопку, чтобы поделиться номером.', reply_markup=reply_markup)

def button(update: Update, context: CallbackContext) -> None:
    query = update.callback_query
    query.answer()

    if query.data == 'share_number':
        # Отправка события в Яндекс.Метрику
        requests.get('https://ваш_лендинг/track_event?event=share_number')
        query.edit_message_text(text="Спасибо за нажатие кнопки 'Поделиться номером'.")

def main() -> None:
    updater = Updater("YOUR_BOT_TOKEN")

    updater.dispatcher.add_handler(CommandHandler('start', start))
    updater.dispatcher.add_handler(CallbackQueryHandler(button))

    updater.start_polling()
    updater.idle()

if __name__ == '__main__':
    main()
```

### 3. Обработка события на лендинге

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

Вот пример, как можно это сделать с помощью PHP:

```php
<?php
if (isset($_GET['event'])) {
    $event = $_GET['event'];
    echo '<script type="text/javascript">
        ym(YOUR_METRIC_ID, "reachGoal", "' . $event . '");
    </script>';
}
?>
```

Замените `YOUR_METRIC_ID` на ваш ID метрики.

### Заключение

Теперь, когда пользователь нажимает кнопку в вашем телеграм-боте, будет вызван запрос на ваш лендинг и произойдёт отправка события в Яндекс.Метрику. Это позволит отслеживать действия пользователей, не используя сторонние сервисы.

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

Отслеживание офлайн-данных
Похожие вопросы