PHPackages                             deepeloper/tunneled-webhooks - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [HTTP &amp; Networking](/categories/http)
4. /
5. deepeloper/tunneled-webhooks

ActiveProject[HTTP &amp; Networking](/categories/http)

deepeloper/tunneled-webhooks
============================

Tunneled Webhooks

1.1.0(2y ago)237MITPHPPHP &gt;=8.2

Since Sep 16Pushed 2y ago1 watchersCompare

[ Source](https://github.com/deepeloper/tunneled-webhooks)[ Packagist](https://packagist.org/packages/deepeloper/tunneled-webhooks)[ Docs](https://github.com/deepeloper/tunneled-webhooks)[ RSS](/packages/deepeloper-tunneled-webhooks/feed)WikiDiscussions main Synced today

READMEChangelogDependencies (6)Versions (7)Used By (0)

Tunneled Webhooks
=================

[](#tunneled-webhooks)

[![Packagist version](https://camo.githubusercontent.com/d62e93949d7caa90fcd34a3b2097946dc1f7eeae63b06b0a8dfbb0ee77fde299/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f64656570656c6f7065722f74756e6e656c65642d776562686f6f6b73)](https://packagist.org/packages/deepeloper/tunneled-webhooks)[![PHP from Packagist](https://camo.githubusercontent.com/967384d973bf631d939d91c43c091bd0f45b86183acc9b6e7283e6e893301549/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f64656570656c6f7065722f74756e6e656c65642d776562686f6f6b732e737667)](http://php.net/)[![GitHub license](https://camo.githubusercontent.com/9bde76ace38590458c642983bc566882e84b259b4d7aaec9f40236a856710eed/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f64656570656c6f7065722f74756e6e656c65642d776562686f6f6b732e737667)](https://github.com/deepeloper/tunneled-webhooks/blob/main/LICENSE)[![GitHub issues](https://camo.githubusercontent.com/6233af34a5094284dcf056180a9b1a8644183a64731af8f40fc9e8bc8f6ad35a/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6973737565732d7261772f64656570656c6f7065722f74756e6e656c65642d776562686f6f6b732e737667)](https://github.com/deepeloper/tunneled-webhooks/issues)[![Packagist](https://camo.githubusercontent.com/4fc1347cc5893c3ce39dc8dc4e70ae49b3fd5b2421ca3f6e71180e182b8fd5fb/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f64656570656c6f7065722f74756e6e656c65642d776562686f6f6b732e737667)](https://packagist.org/packages/deepeloper/tunneled-webhooks)[![CI](https://github.com/deepeloper/tunneled-webhooks/actions/workflows/ci.yml/badge.svg?event=push)](https://github.com/deepeloper/tunneled-webhooks/actions)[![codecov](https://camo.githubusercontent.com/abea86c161cfca2a919d2b06fa8137b4ff6e08b717fb59eda757a06d503a6c04/68747470733a2f2f636f6465636f762e696f2f67682f64656570656c6f7065722f74756e6e656c65642d776562686f6f6b732f6272616e63682f6d61696e2f67726170682f62616467652e737667)](https://codecov.io/gh/deepeloper/tunneled-webhooks)

[![Donation](https://camo.githubusercontent.com/a59a69ad3d5f2b3205fc267af930d371787bc02ca5a4369f1d2556b119b28f16/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f446f6e6174696f6e2d566973612c2532304d6173746572436172642c2532304d61657374726f2c253230556e696f6e5061792c253230596f6f4d6f6e65792c2532302544302539432544302539382544302541302d726564)](https://yoomoney.ru/to/41001351141494)

Runs tunneling service and registers temporary webhooks for workstation having no white IP by one command `/path/to/php bin/run.php /path/to/config.php`.

- Implemented tunneling services: [ngrok](https://ngrok.com/);
- Implemented webhooks connectors: [Telegram](https://core.telegram.org/bots/api#setwebhook);
- Implemented bots: [Windbag](https://github.com/deepeloper/tunneled-webhooks/blob/main/src/Webhook/Handler/Windbag.php).

You can add your own tunneling services, register and handle your own webhooks.

Compatibility
-------------

[](#compatibility)

![PHP 8.0](https://camo.githubusercontent.com/7444df218d54a576685e20198de25c54c314427b59a444d8ce754b48023c2c9b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d2533453d382e302d253233374138364238)

Installation
------------

[](#installation)

`composer require deepeloper/tunneled-webhooks`

### Tunneling services

[](#tunneling-services)

[Download ngrok](https://ngrok.com/download) (and/or other tunneling services), sign up in service, get auth token and run service once `/path/to/ngrok authtoken %YOUR_NGROCK_AUTH_TOKEN%`.

### Webhooks

[](#webhooks)

[Register Telegram bot](https://core.telegram.org/bots) and receive bot auth token.

### Configuring local web server

[](#configuring-local-web-server)

- nginx

Add \*.ngrok.io subdomains:

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

    ; This application www-directory
    root /path/to/www;
}

```

and restart nginx.

- Apache

According to [ngrok docs](https://ngrok.com/docs/using-ngrok-with/virtualHosts/) in own config modify «service/command» value as `/path/to/ngrok http --host-header=%LOCAL_HOST_NAME% 80`.

### Application config

[](#application-config)

Copy «config.skeleton.php» to your own config file and put ngrok path &amp; Telegram token to the new file:

```
    // ...
    'service' => [
        'class' => "\\deepeloper\\TunneledWebhooks\\Service\Ngrok",
        // CLI command to run service.
        // Modify path here:
        'command' => "/path/to/ngrok http 80",
        // ...
    ],

    'webhook' => [
        'Telegram' => [
            'Windbag' => [
                // ...
                // Telegram bot token.
                // Modify token here:
                'token' => "",
                // ...
```

Usage
-----

[](#usage)

### Run tunneling service and bot

[](#run-tunneling-service-and-bot)

`vendor/bin/tunneled-webhooks /path/to/config.php`

Tunneling service will be started, Telegram webhook will be registered, and you could to start conversation with Telegram bot.

### Run bot from CLI

[](#run-bot-from-cli)

`vendor/bin/bot.windbag`

###  Health Score

27

—

LowBetter than 47% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity10

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity60

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~71 days

Total

5

Last Release

734d ago

PHP version history (2 changes)1.0.0PHP &gt;=8.0

1.1.0PHP &gt;=8.2

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/1831371?v=4)[deepeloper](/maintainers/deepeloper)[@deepeloper](https://github.com/deepeloper)

---

Top Contributors

[![deepeloper](https://avatars.githubusercontent.com/u/1831371?v=4)](https://github.com/deepeloper "deepeloper (60 commits)")

---

Tags

phpwebhookstunneling

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StylePHP\_CodeSniffer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/deepeloper-tunneled-webhooks/health.svg)

```
[![Health](https://phpackages.com/badges/deepeloper-tunneled-webhooks/health.svg)](https://phpackages.com/packages/deepeloper-tunneled-webhooks)
```

###  Alternatives

[renoki-co/laravel-aws-webhooks

Easy webhook handler for Laravel to catch AWS SNS notifications for various services.

73251.1k](/packages/renoki-co-laravel-aws-webhooks)[hannesvdvreken/guzzle-debugbar

A Guzzle middleware that logs requests to debugbar's timeline

77428.9k2](/packages/hannesvdvreken-guzzle-debugbar)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
