Запуск проекта по webhook'у

Регистрация
05.06.2019
Сообщения
619
Реакции
515
Баллы
93
1783665738330.png

1) Я как пользователь хочу запускать проект по вызову конечной точки
2) Я как разработчик хочу получить параметры переданные конечной точке
3) Я как владелец хочу, чтобы конечная точка имела механизм аутентификации
 
Посмотреть вложение 142486

1) Я как пользователь хочу запускать проект по вызову конечной точки
2) Я как разработчик хочу получить параметры переданные конечной точке
3) Я как владелец хочу, чтобы конечная точка имела механизм аутентификации
Здравствуйте,

Спасибо за предложение, передам запрос команде.
 
  • Оценить
Реакции: Маломальский
Также хочу иметь возможность обратиться к шаблону по webhook'у.
Тоесть не просто речь о запуске/остановке, но и отправить запрос и тем самым передать какие-то данные внутрь работающего шаблона в какую-то переменную.
Что-то подобное сейчас приходится использовать с такой логикой, что шаблон время от времени должен проверять запросом базу, и если там поменялось значение - идти выполняться по другой ветке.
А вот работа вебхука дала бы возможность не думать о такой логике - вызвал в любой момент - данные записались - внутренняя логика подхватила и уже видит их.
Получается, нужно как-то чтобы слушался какой-то порт на уровне зенно и переадресация данных нужному шаблону или выполнение инструкции управления шаблоном.
А тогда уже на этот порт можно будет уровнем выше через какой-то Nginx переадресовать внешние запросы.
В итоге, иметь возможность удаленно управлять всем семейством зеннопостеров размещенных на разных серверах.
 
по вебхуку получай ивент в .bat.
и батником меняй количество потоков-попыток для нужного проекта.

как одно из решений.
 
Короткий ответ: **напрямую сам по себе `.bat` файл принимать вебхуки не может**.

Классический `.bat` файл (CMD) — это просто интерпретатор команд. У него нет встроенного сетевого сокета, который мог бы постоянно «слушать» входящий HTTP-порт (например, `:80` или `:8080`) и ожидать `POST`-запросы от сторонних сервисов.

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

---

### Вариант 1. Моментальный сервер через PowerShell (без установки софта)

PowerShell встроен во все современные Windows и умеет слушать порты с помощью `HttpListener`. Вы можете запустить его прямо внутри `.bat` файла.

Создайте файл `webhook_server.bat`:

```bat
@echo off
chcp 65001 > nul
echo Запуск вебхук-сервера на http://localhost:8080/webhook/
echo Нажмите Ctrl+C для остановки.

powershell -NoProfile -ExecutionPolicy Bypass -Command "^
$listener = New-Object System.Net.HttpListener; ^
$listener.Prefixes.Add('http://localhost:8080/webhook/'); ^
$listener.Start(); ^
while ($listener.IsListening) { ^
$context = $listener.GetContext(); ^
$request = $context.Request; ^
$reader = New-Object System.IO.StreamReader($request.InputStream, $request.ContentEncoding); ^
$body = $reader.ReadToEnd(); ^
Write-Host '[+] Вебхук получен:' -ForegroundColor Green; ^
Write-Host $body; ^
$response = $context.Response; ^
$buffer = [System.Text.Encoding]::UTF8.GetBytes('OK'); ^
$response.ContentLength64 = $buffer.Length; ^
$response.OutputStream.Write($buffer, 0, $buffer.Length); ^
$response.Close(); ^
}"

```

**Как это работает:**

1. Батник вызывает PowerShell и поднимает служебный HTTP-сервер на порту `8080`.
2. При поступлении запроса на `http://localhost:8080/webhook/` скрипт выводит тело (payload) вебхука прямо в консоль батника и возвращает ответ `200 OK`.

---

### Вариант 2. Использование утилиты `webhook` (для автоматизации)

Если вам нужно не просто посмотреть вебхук, а **автоматически запускать другой `.bat` файл или скрипт при получении вебхука**, проще всего использовать готовый легкий бинарник **webhook** (написан на Go).

1. Скачайте `webhook.exe` (от adnanh).
2. Создайте файл конфигурации `hooks.json`:

```json
[
{
"id": "my-hook",
"execute-command": "C:\\path\\to\\your_script.bat",
"command-working-directory": "C:\\path\\to"
}
]

```

3. Запустите его через батник:

```bat
webhook.exe -hooks hooks.json -verbose

```

Теперь при отправке запроса на `http://your-ip:9000/hooks/my-hook` автоматически выполнится ваш `your_script.bat`.

---

### Как принять вебхук из внешнего интернета?

Если сервису (например, Telegram, GitHub, Stripe) нужно отправить вебхук на ваш локальный компьютер:

1. Используйте туннелирование через **ngrok** или **pinggy**:
```cmd
ngrok http 8080

```


2. Укажите полученный адрес (вида `[https://xxxx.ngrok-free.app/webhook/](https://xxxx.ngrok-free.app/webhook/)`) в настройках вебхука на стороннем сервисе.

вот что-то такое мне gemini сгенерировал на промпт "скажи, а можно батником получать вебхуку?"
 
как одно из решений.
Вариантов реализации может быть много.
А здесь идея у Маломальский иметь вариант который встроен в сам Зеннопостер.
Мне соответственно также такой вариант пригодился бы, чтобы не думать на реализацией каждого отдельного варианта для каждого отдельного шаблона - тоесть иметь функционал готовый "с коробки".
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)