Skip to content

Local Bot API Server

Poolitzer edited this page May 6, 2024 · 9 revisions

Since Bot API 5.0, Telegram made the Bot API server open source, allowing you to host your own instance. For details on what benefits hosting your own instance has and how it works, please see the official docs.

Bot API 5.0 (and therefore local API server) is supported by PTB since v13.1.

How to use a local Bot API Server with PTB

  • Before you can move your bot from the official server cloud to a self hosted server, you need to call the log_out method.
  • Before moving from one self hosted instance to another, you need to use the delete_webhook and close methods.
  • To make PTB aware that you're not using the official server, pass the following to your ApplicationBuilder (or Bot):
    • base_url='your-bot-api-server.com/bot'

Working with files

  • When running the server with the --local flag
    • you need to set local_mode=True
    • get_file will give you the local file path as file_path. PTB detects that, so that await get_file(…).download_to_drive() just returns the local file string instead of downloading it.
    • you can send files by passing 'file:///absolute/path/to/file' instead of an URL or a file handle.
    • passing relative paths (without prefix) or even passing pathlib.Path objects is supported as well, even if you're not running in local mode, in which case it will be opened and send via upload as usual.
    • To adjust for larger file sizes transmitted between PTB and the local API server, it may be beneficial to extend the timeout values for networking operations. See the wiki pages on handling networking errors as well as on adding defaults.
  • When running the server without the --local flag
    • you need to set base_file_url='your-bot-api-server.com/file/bot'
    • the Bot API server does not automatically serve the files obtained by get_file(), see telegram-bot-api/#26. So be aware that you have to run a web server which serves them, otherwise you will run into 404 errors.
Clone this wiki locally