Найти тему
PHP-разработка

Туннелированные веб-хуки | Tunneled webhooks

#tunneling #webhooks #ngrok #telegram #bot #php #development

Игрался с созданием бота для Telegram, изучил возможность проброса публичных HTTP-запросов на рабочую станцию без белого IP.

Сервисом туннелирования был выбран ngrok, так как можно пользоваться абсолютно бесплатно, есть некоторые ограничения, но при разработке возможностей более чем достаточно. Одним из ограничений для бесплатного использования является уникальная внешняя ссылка, ведущая на рабочую станцию разрабочика при каждом запуске локально, из-за чего и задумался, нельзя ли автоматизировать поднятия сервиса туннелирования запросов и регистрацию веб-хуков. Так родился данный проект.

Таким образом код действует следующим образом: запускает сервис туннелирования, запрашивает у сервиса текущую внешнюю ссылку и регистрирует веб-хук Telegram c текущей внешней ссылкой.

Архитектура кода позволяет добавлять свои сервисы туннелирования и регистраторы/обработчики веб-хуков (см. документацию по API).

Установка

Так как проект рассчитан на разработчиков, предусмотрена установка только через Composer: выполните

composer require donbidon/tunneled-webhooks dev-master

или добавьте в файл "composer.json" код

"require": {
"donbidon/tunneled-webhooks": "dev-master"
}

и выполните

composer update

Скачайте ngrok, зарегистрируйтесь, скопируйте auth token и запустите

/путь/до/ngrok authtoken %ВАШ_ТОКЕН_ДЛЯ_АВТОРИЗАЦИИ%

Зарегистриуйте бота Telegram и получите токен авторизации для него.

В конфигурацию локального веб-сервера (nginx, Apache не использую для фронтенда многие годы) добавьте

server {
listen 127.0.0.1:80;
server_name ~^(.*)\.ngrok\.io;

; Путь до директории www данного проекта
root /path/to/www;
}

Скопируйте "data/config.skeleton.php" в "data/config.php" и пропишите путь до ngrok / токен авторизации Telegram в новом файле:

...
;;;
; путь до ngrok:
;;;
command = "/path/to/ngrok http 80"
...
[app.webhook.Telegram.Windbag]
...
token = "токен авторизации Telegram"
...

Запуск

Выполните в корне проекта

/путь/до/php bin/run.php data/config.php

Будет запущен сервис туннелирования и зарегистрирован веб-хук для бота Telegram, с которым даже можно общаться :)