Deployment Checklist
Here is a list of things that you may want to keep in mind when hosting a large bot.
You may also be interested in our guides for hosting a bot. Check out Resources / Hosting at the top of the page to see some of the platforms that already have dedicated guides.
Errors
- Install an error handler with
bot
(long polling) or on your web framework (webhooks)..catch - Use
await
on all promises and install linting, with rules that enforce this, so that you never forget.
Message Sending
- Send files by path or
Buffer
instead of by stream, or at least make sure you know the pitfalls. - Use
bot
as the fallback handler to react to all callback queries..on('callback _query: data') - Use the
transformer
plugin to avoid hitting rate limits.-throttler - Optional. Consider using the
auto
plugin to automatically handle flood wait errors.-retry
Scaling
This depends on your deployment type.
Long Polling
- Use grammY runner.
- Use
sequentialize
with the same session key resolver function as your session middleware. - Go through the configuration options of
run
(API reference) and make sure they fit your needs, or even consider composing your own runner out of sources and sinks. The main thing to consider is the maximum load you want to apply to your server, i.e. how many updates may be processed at the same time. - Consider implementing graceful shutdown in order to stop your bot when you want to terminate it (i.e. to switch to a new version).
Webhooks
- Make sure you do not perform any long-running operations in your middleware, such as large file transfers. This leads to timeout errors for the webhooks, and duplicate update processing as Telegram will re-send non-acknowledged updates. Consider using a task queuing system instead.
- Make yourself familiar with the configuration of
webhookCallback
API reference. - If you adjusted the
getSessionKey
option for your session, usesequentialize
with the same session key resolver function as your session middleware. - If you are running on a serverless or autoscaling platform, set the bot information to prevent excessive
getMe
calls. - Consider using webhook replies.
Sessions
- Consider using
lazySessions
as explained here. - Use the
storage
option to set your storage adapter, otherwise all data will be lost when the bot process stops.
Testing
Write tests for your bot. This can be done with grammY like so:
- Mock outgoing API requests using transformer functions.
- Define and send sample update objects to your bot via
bot
(API reference). Consider to take some inspiration from these update objects provided by the Telegram team..handleUpdate
Contribute a Testing Framework
While grammY provides the necessary hooks to start writing tests, it would be very helpful to have a testing framework for bots. This is novel territory, such testing frameworks largely do not exist. We look forward to your contributions!
An example on how tests could be done can be found here.