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
2021-02-28 16:13:25 +00:00
`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
2021-02-28 16:13:25 +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.
2021-01-31 20:30:28 +00:00
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
2021-01-31 20:30:28 +00:00
2021-02-28 16:13:25 +00:00
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
2021-02-28 16:13:25 +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
2021-02-28 16:13:25 +00:00
#### Full webhook processing
2021-01-31 20:30:28 +00:00
2021-02-28 16:13:25 +00:00
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-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
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 ...
2021-02-28 16:13:25 +00:00
#### $$VERSION$$ v1.45-dev-55-g5dd24c3
2021-01-30 20:36:38 +00:00