All Tabs

The Most Annoying Feature Was Three Little Dots

telegramdebuggingux

The feature was three little dots. That was it. I wanted Pocket Nenek to look alive while it was thinking instead of going silent for a few seconds like it had wandered off.

14:02 — add typing indicator

14:05 — indicator does not appear

14:19 — convince myself Telegram is caching something

14:27 — discover the method I called does not exist in the installed aiogram version

15:05 — finally see the three dots

I had used a method that sounded right: Message.answer_chat_action(). The installed library did not have it. The working path was through the bot object: send a chat action for the current chat, then keep refreshing it while the longer task runs.

There was a second small surprise. Telegram typing indicators expire quickly. Sending one at the start of a slow operation is not enough, because it can disappear while the work is still happening. Mine now refreshes every few seconds through middleware.

Why did this take so long?

Because the exception was being swallowed in a best-effort helper. That is normally sensible for cosmetic behaviour: a failed typing indicator should not break the actual reply. It is less sensible while debugging, because “nothing happened” gives you no clue whether Telegram rejected the request, the method was wrong, or the code path never ran.

Once I surfaced the hidden error and checked the API that was actually installed, the mystery disappeared immediately.

Tiny interface details are often tiny only for the user. The implementation still has a full contract underneath.

The dots work now. Nobody using the bot will think about them for even one second. This is both the goal and slightly offensive.

Thanks for reading.Read more tabs →