telegram-bot-bash/examples/webhook/README.md

95 lines
3.9 KiB
Markdown
Raw Normal View History

2021-01-30 20:36:38 +00:00
#### [Examples](../README.md)
2021-01-31 20:18:40 +00:00
## Bashtbot webhook example
2021-01-30 20:36:38 +00:00
2021-01-31 20:18:40 +00:00
### Webhooks
2021-01-30 20:36:38 +00:00
2021-02-20 07:34:42 +00:00
Bashbot default mode is to poll Telegram server for updates but Telegram offers webhook
2021-01-31 20:18:40 +00:00
as a more efficient method to deliver updates.
2021-02-20 07:34:42 +00:00
If your server is reachable from the Internet you can use the methods described here.
You need a valid SSL certificate or Telegram will refuse to deliever update via webhook.
A self signed certificate will not be sufficient.
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-01-31 20:18:40 +00:00
Prerequisite: An Apache webserver with a valid SLL certificate chain and php enabled.
2021-01-30 20:36:38 +00:00
2021-01-31 20:18:40 +00:00
Prepare Apache to forward webhook to Bashbot:
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-02-15 14:17:50 +00:00
- create file `data-bot-bash/webhook-fifo-<botname>` (_<botname> as in `botconfig.jssh`_)
2021-01-31 20:18:40 +00:00
- run `bashbot.sh init` to setup bashbot to run as same user as Apache (_e.g. www_)
- go to apache web root and create directory `telegram/<your_bot_token>`
- copy all files from `examples/webhook` to new directory and change to it
- write bashbot installation directory as first line to file `BASHBOT_HOME`
- execute `php index.php`
2021-01-30 20:36:38 +00:00
2021-01-31 20:18:40 +00:00
Every call to webhook `https://<yourservername>/telegram/<your_bot_token>/` will execute
`index.php` and write received JSON to file `data-bot-bash/webhook-fifo-<botname>`.
2021-01-31 20:18:40 +00:00
E.g. the URL `https://<yourservername>/telegram/<your_bot_token>/?json={"test":"me"}`
2021-02-15 14:17:50 +00:00
will append `{"test":"me"}` to the file `data-bot-bash/webhook-fifo-<botname>`.
2021-01-30 20:36:38 +00:00
2021-01-31 20:18:40 +00:00
Now your Apache is ready to forward data to Bashbot.
2021-01-30 20:36:38 +00:00
#### Default webhook processing
2021-01-30 20:36:38 +00:00
2021-02-20 07:34:42 +00:00
To enable update processing delete the file `data-bot-bash/webhook-fifo-<botname>` after your webhook is working manually.
2021-02-01 11:58:57 +00:00
All webhook calls are now forwarded to `bin/process_update.sh` for processing.
Every incoming Telegram update load Bashbot once for processing one command. Even it seems overkill to load
2021-02-20 07:34:42 +00:00
Bashbot on every incoming update, it's more responsive and create less server load than polling Telegram
Default webhook has the following limitations:
2021-02-24 15:33:03 +00:00
- no startup actions
2021-02-25 18:20:09 +00:00
- no background and interactive jobs
- `addons` and `TIMER_EVENTS` are not working
2021-02-24 15:33:03 +00:00
Workaround for running new background jobs is to execute `./bashbot.sh resumeback` after starting a new background job.
2021-02-24 15:33:03 +00:00
#### Full webhook processing
Use this method in case you need addons, TIMER or interactive scripts with webhook.
1. Default webook method must work first!
2. Create fifo: `mkfifo data-bot-bash/webhook-fifo-botname`
3. Start Bashbot in batch mode: `bin/process-batch.sh --startbot --watch data-bot-bash/webhook-fifo-<botname>`
In batch mode Bashbot read updates from given file instead of Telegram server. `--startbot` loads the addons, start the TIMER and trigger all startup actions.
`--watch` instructs Bashbot to watch for new updates instead of stop on EOF.
To switch back to default processing delete fifo `data-bot-bash/webhook-fifo-<botname>` and kill `bin/process-batch.sh`.
2021-02-20 07:34:42 +00:00
#### Enable webhook on Telegram side
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
A pure bash webhook implementaition is not possible without additional software because Telegram deliver
updates only over secure TLS connections and if a valid SSL certificate chain exists.
`socat` looks like a tool we can use to listen for Telegram updates from bash scripts, let's see ...
#### $$VERSION$$ v1.45-dev-55-g5dd24c3
2021-01-30 20:36:38 +00:00