2021-01-30 20:36:38 +00:00
|
|
|
#### [Examples](../README.md)
|
|
|
|
|
2021-03-01 11:59:06 +00:00
|
|
|
## Bashbot webhook example
|
2021-01-30 20:36:38 +00:00
|
|
|
|
2021-03-01 07:30:11 +00:00
|
|
|
### Webhook
|
2021-01-30 20:36:38 +00:00
|
|
|
|
2021-03-01 07:30:11 +00:00
|
|
|
Bashbot default mode is to poll Telegram server for updates but Telegram offers webhook as a more efficient method to deliver updates.
|
2021-03-01 11:59:06 +00:00
|
|
|
If your server is reachable from the Internet its possible to use the method described here.
|
2021-02-20 07:34:42 +00:00
|
|
|
|
2021-03-01 18:40:53 +00:00
|
|
|
Prerequisite for receiving Telegram updates with webhook is a valid SSL certificate, a self signed certificate will not be sufficient.
|
2021-03-01 07:30:11 +00:00
|
|
|
|
|
|
|
*Note:* You need at least sudo rights to setup webhook.
|
2021-01-30 20:36:38 +00:00
|
|
|
|
|
|
|
|
2021-01-31 20:18:40 +00:00
|
|
|
#### Setup Apache webhook
|
2021-01-30 20:36:38 +00:00
|
|
|
|
2021-03-01 12:22:49 +00:00
|
|
|
Prerequisite: An Apache webserver with a valid SLL certificate chain and php enabled.\
|
|
|
|
This should work with other webservers also but it's not testet.
|
2021-01-30 20:36:38 +00:00
|
|
|
|
2021-03-01 12:22:49 +00:00
|
|
|
Setup webhook with Apache:
|
2021-01-30 20:36:38 +00:00
|
|
|
|
2021-01-31 20:18:40 +00:00
|
|
|
- install bashbot as described in [Bashbot Installation](../../doc/0_install.md)
|
2021-03-01 07:30:11 +00:00
|
|
|
- create file `data-bot-bash/webhook-fifo-<botname>` (_\<botname\> as in `botconfig.jssh`_)
|
2021-03-05 10:48:06 +00:00
|
|
|
- run `sudo bashbot.sh init` to setup bashbot to run as same user as web server (_e.g. www_)
|
2021-03-01 18:40:53 +00:00
|
|
|
- create a directory in web root: `telegram/<your_bot_token>` (_<your_bot_token> as `botconfig.jssh`_)
|
2021-03-05 10:48:06 +00:00
|
|
|
- give web server access to directory (_e.g.`chown www:www -R telegram`_)
|
2021-03-01 12:22:49 +00:00
|
|
|
- go into the new directory and copy all files from `examples/webhook` to it
|
|
|
|
- edit file `BASHBOT_HOME` to contain ithe Bashbot installation directory as first line (_other lines are ignored_)
|
2021-03-03 07:49:50 +00:00
|
|
|
- execute `php index.php` with user id of web server to test write access to `data-bot-bash/webhook-fifo-<botname>
|
2021-03-01 07:30:11 +00:00
|
|
|
|
2021-03-01 12:22:49 +00:00
|
|
|
Calling `https://<yourservername>/telegram/<your_bot_token>/` will execute `index.php`
|
|
|
|
thus append received data to the file `data-bot-bash/webhook-fifo-<botname>`.
|
|
|
|
E.g. `https://<yourservername>/telegram/<your_bot_token>/?json={"test":"me"}` will append `{"test":"me"}`.
|
2021-01-30 20:36:38 +00:00
|
|
|
|
2021-03-01 07:30:11 +00:00
|
|
|
Now your Server is ready to receive updates from Telegram.
|
2021-01-30 20:36:38 +00:00
|
|
|
|
|
|
|
|
2021-02-28 16:13:25 +00:00
|
|
|
#### Default webhook processing
|
2021-01-30 20:36:38 +00:00
|
|
|
|
2021-03-01 18:40:53 +00:00
|
|
|
This is the testet and supported default method for processing Telegram updates over webhook.
|
2021-01-31 20:30:28 +00:00
|
|
|
|
2021-03-01 18:40:53 +00:00
|
|
|
To enable update processing delete the file `data-bot-bash/webhook-fifo-<botname>` if webhook is working as described above.
|
2021-03-01 07:30:11 +00:00
|
|
|
Incoming Telegram updates are now forwarded to the script `bin/process_update.sh` for processing.
|
2021-01-31 20:30:28 +00:00
|
|
|
|
2021-03-01 18:40:53 +00:00
|
|
|
On incoming Telegram updates the script is executed, it sources bashbot.sh and forward the update to Bashbot for processing.
|
2021-03-01 12:22:49 +00:00
|
|
|
Even it seems overhead to source Bashbot for every update, it's more responsive and create less load than Bashbot polling mode.
|
2021-01-31 20:30:28 +00:00
|
|
|
|
2021-03-01 12:22:49 +00:00
|
|
|
Nevertheles there are some limitations compared to polling mode:
|
2021-02-24 15:33:03 +00:00
|
|
|
- no startup actions
|
2021-03-01 12:22:49 +00:00
|
|
|
- no background* and interactive jobs
|
2021-02-25 18:20:09 +00:00
|
|
|
- `addons` and `TIMER_EVENTS` are not working
|
2021-02-24 15:33:03 +00:00
|
|
|
|
2021-03-01 12:22:49 +00:00
|
|
|
\* Workaround for background jobs is to execute `./bashbot.sh resumeback` if a new background job was started.
|
2021-02-24 15:33:03 +00:00
|
|
|
|
2021-02-28 16:13:25 +00:00
|
|
|
#### Full webhook processing
|
2021-01-31 20:30:28 +00:00
|
|
|
|
2021-03-01 11:59:06 +00:00
|
|
|
Full webhook processing use an external script to imitate Bashbot polling mode with webhook.
|
2021-03-03 07:49:50 +00:00
|
|
|
*Warning:* This method is not much testet and may not work in all cases.
|
2021-02-28 16:13:25 +00:00
|
|
|
|
|
|
|
1. Default webook method must work first!
|
2021-03-01 12:22:49 +00:00
|
|
|
2. run `bashbot.sh init` to setup bashbot to run with your user id
|
|
|
|
2. Create a named pipe: `mkfifo data-bot-bash/webhook-fifo-botname` and give the web server write access to it
|
2021-03-03 07:49:50 +00:00
|
|
|
3. execute `php index.php` with user id of web server to test write access to `data-bot-bash/webhook-fifo-<botname>
|
2021-03-05 10:48:06 +00:00
|
|
|
4. Start script for Bashbot webhook polling mode:\
|
2021-03-01 07:30:11 +00:00
|
|
|
`bin/process-batch.sh --startbot --watch data-bot-bash/webhook-fifo-<botname>`
|
2021-02-28 16:13:25 +00:00
|
|
|
|
2021-03-01 12:22:49 +00:00
|
|
|
The script read updates from given file line by line and forward updates to Bashbot update processing. `--startbot` will run the startup actions
|
|
|
|
(_e.g. load addons, start TIMER, trigger first run_) and `--watch` will wait for new updates instead of exit on end of file.
|
2021-03-01 18:40:53 +00:00
|
|
|
Short form: 'bin/process-batch.sh -s -w'
|
2021-02-28 16:13:25 +00:00
|
|
|
|
2021-03-05 10:48:06 +00:00
|
|
|
If script works as expected, you may run Bashbot webook polling in background by using `./bachbot.rc starthook/stophook`.
|
2021-03-03 08:00:41 +00:00
|
|
|
|
2021-03-05 10:48:06 +00:00
|
|
|
To switch back to default processing delete fifo `data-bot-bash/webhook-fifo-<botname>` and stop `bin/process-batch.sh`.
|
2021-02-01 09:30:47 +00:00
|
|
|
|
2021-02-20 07:34:42 +00:00
|
|
|
#### Enable webhook on Telegram side
|
2021-01-31 20:30:28 +00:00
|
|
|
|
|
|
|
To get updates via webhook your server must be reachable from the internet and you must
|
|
|
|
instruct Telegram where to deliver updates, this is done by calling bashbot function `set_webhook`.
|
|
|
|
|
|
|
|
*Example:*
|
|
|
|
|
|
|
|
```bash
|
|
|
|
bin/any_command.sh set_webhook "https://myserver.com/telegram"
|
|
|
|
```
|
|
|
|
|
|
|
|
instruct Telegram to use the URL `https://myserver.com/telegram/<your_bot_token>/` to deliver updates.
|
|
|
|
After you enable webhook to deliver Telegram updates it's no more possible to poll updates with `bashbot.sh start`.
|
|
|
|
|
|
|
|
To stop delivering of Telegram updates via webhook run `bin/any_command.sh delete_webhook`.
|
|
|
|
|
2021-02-20 07:34:42 +00:00
|
|
|
**Important**: Telegram will refuse to deliver updates if your webhook has no valid SSL certificate chain.
|
|
|
|
|
|
|
|
|
|
|
|
#### Bash webhook
|
|
|
|
|
2021-03-01 12:22:49 +00:00
|
|
|
A pure bash webhook implementation is not possible without extra software because Telegram delivers
|
|
|
|
webhook updates only over secure TLS connections with a valid SSL certificate chain.
|
2021-02-20 07:34:42 +00:00
|
|
|
|
2021-03-01 12:22:49 +00:00
|
|
|
`socat` looks like a tool to listen for Telegram updates from bash scripts, let's see ...
|
2021-02-20 07:34:42 +00:00
|
|
|
|
|
|
|
|
2021-03-05 10:48:06 +00:00
|
|
|
#### $$VERSION$$ v1.45-dev-77-g235f26a
|
2021-01-30 20:36:38 +00:00
|
|
|
|