Iterations. How to reduce theys?
All iterations on Bots.Business are paid. You can choose payment plan with different iterations count.
Each payment plan has its own iteration limit.
1 iteration it is:
- income message to bot
Bot.run
withrun_after
spent 2 iterations (1 upon installation and 1 on execution)- Pressing the keyboard button
- Pressing the inline keyboard button
- 1 Auto Retry - it is 1 iteration
- 1 received webhook - it is 1 iteration
- 1 sended message on mass broadcasting - 1 iteration
- 100 incoming messages in blocked chat with method
Bot.blockChat(chat.id)
5 iterations it is:
Single command execution - 1 iteration
Iterations are restored every month. Each payment plan has its own iteration limit.
- If you do not have enough iterations, Extra Points are spent.
- Unused Extra Points remain for the next month.
You can upgrade your Plan, buy Extra Points or order BB Cloud with unlimited iterations.
Reduce income messages to bot:
- remove it from super groups
- remove un useful commands
Reduce Bot.runCommand in BJS
Use
Bot.runCommand
, Bot.run
, Bot.runAll
carefully. Example 1
Bad code example. Command
/check
Bot.runCommand("/task")
Command
/task
...
Bot.runCommand("/check")
...
So we have now scheduled
/task
in /check
. But /task also have run for /check
You will end up in an infinite loop and your iterations will quickly end
Example 2
Bad code example. Command
/check
Bot.run(command: "/task", run_after: 60*60) // 1 hour delay
Command
/task
...
Bot.runCommand("/check")
...
So we have now scheduled
/task
in /check
with delay for 1 hour. But /task also have run for /check
But here we have delay for 1 hour. So we have 1 task per hour (and per user!). Is it good?
No! Because user can run
/check
command several times. For example 6 times in one minute. You will be have 6 background tasks during 1 hour instead of 1 tasks. Also any users can execute this command for several times.You will end up in an infinite loop and your iterations will quickly end
Be very careful with Bot.run methods
Very bad example:

Command
check:
var user = options.result.status
User.setProperty("status", user, "string")
if ((user == "member") | (user == "administrator") | (user == "creator")) {
Bot.runCommand("join2")
User.addToGroup("user")
}
if (user == "left") {
Bot.sendMessage("*⚠️ Not Joined :- @Kjtricks_Official *")
}
Command
join2
var channel = "@MyChanell1"
let id = user.telegramid;
Api.getChatMember({ chat_id: channel, user_id: id, on_result: "check2" })
Command
check2
var user = options.result.status
User.setProperty("status", user, "string")
if ((user == "member") | (user == "administrator") | (user == "creator")) {
Bot.runCommand("join3")
User.addToGroup("user")
}
if (user == "left") {
Bot.sendMessage("*⚠️ Not Joined :- @Kjtricks_Official *")
}
and etc!
join1 > check1 > join2 > check2 > .... join10 > check10
What is problem?
- each Api.getChatMember spent 1 - 3 sec for execution
- Bot.runCommand run new BJS immediately!
We have 10 join + 10 check. So it will be 10 - 30 secs per 1 message from 1 user.
- On Nano Cloud second user must wait this 30 secs! Also even Business Cloud is completely down!
- each Bot.runCommand burn 1 iterations. We have 20 iterations here!
Fix
Last modified 2mo ago