PHP-bot на localhost: node.js в помощь

Совсем не секрет, что у Телеграм API есть не только webHook, как вариант взаимодействия с вашим приложением, но и getUpdates.

В чем между ними разница: 

  1. webHook - это адрес, по которому расположена точка входа вашего приложения, именно на него будет отправлено "обновление" (данные в формате JSON) при любом взаимодействии с вашим ботом.
  2. getUpdates - это метод Телеграм API, при вызове которого вам будут выданы накопленные на серверах Телеграм "обновления" вашего бота.

При разработке бота я пользуюсь IDE PHPStorm, настраиваю загрузку на сервер всех изменений при нажатии горячих клавиш. На сервере у меня при этом настроен домен, ssl-сертификат и к боту привязан webHook. Совсем недавно при просмотре одного из вебинаров я увидел, как ведущий запустил бота через getUpdates и в него прилетали "обновления" совсем не хуже, чем через вебхук. 

Мне это стало интересно, я попробовал настроить такого бота у себя. Это не составило труда с использованием фреймворка Telegraf.js - буквально несколько строк. Пришла мысль - перенаправить "обновления" на локальный сервер, а там обработать данные PHP скриптом. Изменив немного первоначальный код у меня появился хороший инструмент, которым я теперь пользуюсь. Теперь можно работать на локальном компьютере без необходимости иметь домен, ssl-сертификат и хостинг. Если вы используете хостинг как и я Timeweb, то Node.js можно настроить по инструкции.


index.js

// Подключаем необходимые модули
const Telegraf = require('telegraf');
const request = require('request');
// Заполняем конфиг
let config = {
    "token": "TOKEN_BOT",
    "webhook": "http://localhost/",
    "method": "POST",
    "headers": {"content-type": "application/json"}
};
// Создаем объект бота
const bot = new Telegraf(config.token)
.use((ctx) => { // вешаем прослушку
    // при событии отправляем обновление на наш обработчик
    request({ 
            url: config.webhook,
            method: config.method,
            headers: config.headers,
            json: ctx.update
    });
}).launch(); // запускаем прослушку событий

index.js с настройками proxy

Если есть необходимость в работе через прокси, то можно этот вариант кода, это на случай если у вас заблокирован Телеграм

// Подключаем необходимые модули
const Telegraf = require('telegraf');
const HttpsProxyAgent = require('https-proxy-agent');
const request = require('request');
// Заполняем конфиг
let config = {
    "token": "TOKEN_BOT",
    "webhook": "http://localhost/",
    "method": "POST",
    "headers": {"content-type": "application/json"},
    "proxy_user": "login",
    "proxy_pass": "password",
    "proxy_protokol": "http",
    "proxy_host": "0.0.0.0",
    "proxy_port": "1000",
};
// Создаем объект бота
const bot = new Telegraf(config.token, {
         telegram: {
             agent: new HttpsProxyAgent(
                 config.proxy_protokol+'://'+
                 config.proxy_user+':'+
                 config.proxy_pass+'@'+
                 config.proxy_host+':'+
                 config.proxy_port)
         }
    }
).use((ctx) => { // вешаем прослушку
    // при событии отправляем обновление на наш обработчик
    request({ 
            url: config.webhook,
            method: config.method,
            headers: config.headers,
            json: ctx.update
   });
}).launch(); // запускаем прослушку событий

package.json

{
  "name": "getUpdates",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "iMakeBots.ru",
  "license": "",
  "dependencies": {
    "https-proxy-agent": "^2.2.1",
    "request": "^2.88.0",
    "telegraf": "^3.26.0"
  }
}

 


Комментарии

Авторизуйтесь через Telegram, чтобы оставить комментарий.
Откройте бот @SiteAuthBot, нажмите кнопку Старт/Start. Следуйте инструкциям бота.


    Еще нет ни одного комментария.