The rule, stated plainly
A bot can message a person who has started a conversation with it. That is the permission model, and no tool can work around it. If three thousand people are in your group and four hundred have opened your bot, a broadcast goes to four hundred.
This matters because a lot of marketing copy around Telegram implies otherwise. If a product promises to message every member of a group, ask which API call does that, because there is not one.
What this changes about planning
Two numbers now matter instead of one: group size, and how many of those people started the bot. The second is the only one a broadcast can use. A group that doubled while the bot list stayed flat has not grown your reach at all.
Plan sends against the smaller number and your expectations stay accurate. Reporting against group size is how a send gets called a failure when it was never possible.
Growing the list you can actually message
Give people a reason to press start. A bot that does something, such as answering a repeated question, serving a catalogue or handing out a file, earns starts because it is useful once. Pinning a message that explains what the bot does usually works better than asking people to subscribe to a bot.
The shop route has a side effect here: anyone who orders through your Mini App has started the bot by definition, so a working shop builds a sendable audience as it sells.
Sending without becoming spam
Set a schedule and keep it. A weekly send that people expect is read more than a daily one that surprises them, and it costs far fewer blocks. Keep each message to one subject and one action, and leave an obvious way to stop receiving them.
What to check after a send
Look at how many messages were delivered against how many were attempted, and at how many people blocked the bot afterwards. A rising block count is the clearest signal that the frequency is wrong, and it shows up long before anyone complains.