TunnelHunt Войти

Как создать и отладить Telegram-бота локально с помощью TunnelHunt

Автор: Мария ИвановаОпубликовано: 5 июня 2025 г.
Логотип Telegram на экране смартфона

Telegram-боты — невероятно популярный инструмент для автоматизации, уведомлений и создания интерактивных сервисов. Но при их разработке возникает классическая проблема: чтобы получать сообщения от пользователей, бот должен иметь публичный HTTPS-адрес (вебхук), на который серверы Telegram будут отправлять обновления.

Как же вести разработку на своем уютном localhost? Постоянно разворачивать код на сервер ради каждой правки — долго и неэффективно. Решение есть, и оно не требует ничего, кроме вашего терминала.

Проблема: Telegram не видит ваш localhost

Когда вы запускаете код бота, он обычно слушает локальный порт, например, 3000. Этот адрес доступен только вам. Если вы попытаетесь указать http://localhost:3000 в качестве вебхука для Telegram, его серверы просто не смогут отправить туда данные.

Решение: Создаем мост с TunnelHunt

TunnelHunt мгновенно создает безопасный публичный URL, который перенаправляет все запросы на ваш локальный порт. Давайте посмотрим, как это работает.

Шаг 1: Создаем бота и получаем токен

Если у вас еще нет бота, создайте его через официального @BotFather в Telegram, следуя его инструкциям. В конце вы получите токен — уникальный ключ для доступа к API вашего бота. Сохраните его.

Шаг 2: Пишем простой код для бота

Создадим простой эхо-бот на Node.js и Express. Он будет слушать входящие запросы и отвечать пользователю его же сообщением.

// bot.js
const express = require('express');
const axios = require('axios'); // Для отправки ответов в Telegram API

const app = express();
app.use(express.json()); // Парсим входящие JSON-данные

const BOT_TOKEN = 'ВАШ_СЕКРЕТНЫЙ_ТОКЕН_ЗДЕСЬ';
const API_URL = `https://api.telegram.org/bot${BOT_TOKEN}`;
const PORT = 3000;

// Наш обработчик вебхуков
app.post('/webhook', async (req, res) => {
  console.log('Получено обновление:', req.body);

  const message = req.body.message;
  if (message && message.text) {
    const chatId = message.chat.id;
    const text = message.text;

    // Отправляем ответное сообщение через Telegram API
    await axios.post(`${API_URL}/sendMessage`, {
      chat_id: chatId,
      text: `Вы написали: "${text}"`,
    });
  }

  // Отвечаем Telegram, что все в порядке
  res.sendStatus(200);
});

app.listen(PORT, () => {
  console.log(`Бот слушает порт ${PORT}`);
});

Запустите его локально: node bot.js.

Шаг 3: Запускаем TunnelHunt

В новом окне терминала выполните команду, чтобы ваш локальный порт 3000 стал доступен извне:

ssh -R 80:localhost:3000 -p 2222 nokey@tunnelhunt.ru

Сервис выдаст вам ваш публичный HTTPS-адрес, например: https://pretty-horse-789.tunnelhunt.ru.

Совет: На тарифе Pro вы можете зарезервировать постоянный адрес, например, my-tg-bot.tunnelhunt.ru, чтобы не менять его в настройках Telegram при каждом запуске.

Шаг 4: Регистрируем вебхук в Telegram

Теперь нужно сообщить Telegram, куда отправлять обновления. Это делается одним API-запросом. Вы можете просто вставить следующий URL в адресную строку браузера, подставив свои данные:

https://api.telegram.org/bot<ВАШ_ТОКЕН>/setWebhook?url=<ВАШ_URL_ОТ_TUNNELHUNT>/webhook

Пример: https://api.telegram.org/bot12345:ABC-DEF/setWebhook?url=https://pretty-horse-789.tunnelhunt.ru/webhook

После перехода по ссылке вы должны увидеть ответ: {"ok":true,"result":true,"description":"Webhook was set"}.

Шаг 5: Тестируем!

Откройте Telegram, найдите своего бота и отправьте ему сообщение. Вы должны мгновенно получить ответ! При этом в консоли, где запущен ваш bot.js, вы увидите лог входящего запроса.

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