If you need a bot for your personal home automation, then this post describes how to achieve what is perceived as a private bot on Telegram.
In this post, I want to explain how to create a private bot in Telegram. With private, I'm referring to bots that are not possible to be found by others or won't interact with others. These sort of bots are meant usually for some personal automation, where the bot act as the delivery entity to you or your family.
Not exactly a private bot
With Telegram bots are not private. Everybody can find them. The difference is that a certain communication channel with the bot can be made private. This is a group with the bot that you and the bot are members of. This sort of private channels is usually useful for home automation, where the bot is to speak with one person only.
Creating the bot
Creating the bot is generally easy by following instructions on Bots: An introduction for developers using the BotFather.
- Open a session with BotFather.
- Enter
/newbot
. - Enter the name of the bot.
Example Bot for Blog
- Enter a username for the bot. it must end with
bot
.example_blog_bot
Me, [25.03.20 16:02]
/newbotBotFather, [25.03.20 16:02]
Alright, a new bot. How are we going to call it? Please choose a name for > your bot.Me, [25.03.20 16:03]
Example Bot for BlogBotFather, [25.03.20 16:03]
Good. Now let's choose a username for your bot. It must end inbot
. Like > this, for example: TetrisBot or tetris_bot.Me, [25.03.20 16:03]
example_blog_botBotFather, [25.03.20 16:03]
Done! Congratulations on your new bot. You will find it at t.me/> example_blog_bot. You can now add a description, about section and profile > picture for your bot, see /help for a list of commands. By the way, when > you've finished creating your cool bot, ping our Bot Support if you want a > better username for it. Just make sure the bot is fully operational before > you do this.Use this token to access the HTTP API:
1101361374:AAHS_DYrAUohT-HQXVKKz-M1howAxvXdRLA
Keep your token secure and store it safely, it can be used by anyone to > control your bot.For a description of the Bot API, see this page: https://core.telegram.org/> bots/api
That's it. The new bot is available and anyone can find it as Example Bot for Blog.
The bot has been deleted and therefore all sensitive information is irrelevant.
Create a group with your bot
This is a simple step. We need to do this now because afterward, we will disable the ability of the bot to be added into conversations.
This group we have created is going to be also our private chat with the bot.
Disable joining groups
By default, the bot can be added to a group conversation by anybody who can find it. To make sure this doesn't happen, we need to disable this.
- Open a session with BotFather.
- Enter
/setjoingroups
. - Enter the name of the bot.
@example_blog_bot
. - Enter
Disable
Me, [25.03.20 16:13]
/setjoingroupsBotFather, [25.03.20 16:13]
Choose a bot to change group membership settings.Me, [25.03.20 16:13]
@example_blog_botBotFather, [25.03.20 16:13]
'Enable' - bot can be added to groups.
'Disable' - block group invitations, the bot can't be added to groups.
Current status is: ENABLEDMe, [25.03.20 16:13]
DisableBotFather, [25.03.20 16:13]
Success! The new status is: DISABLED. /help
If you try to add your bot into a group, you can't. So it is best that you already start a group with it before doing this step. You can always enable the group joining feature, create a group with it and yourself and then disable it again.
Interacting with the bot
In the Telegram Bot API the API of Telegram is described. To interact with this bot we need the API token 1101361374:AAHS_DYrAUohT-HQXVKKz-M1howAxvXdRLA
which the BotFather provided to us. The general uri pattern is https://api.telegram.org/bot<token>/METHOD_NAME
. Notice that the token follows the word bot
in the URL.
For example the getMe
method will provide information about the bot. Just do a GET
with this URL https://api.telegram.org/bot1101361374:AAHS_DYrAUohT-HQXVKKz-M1howAxvXdRLA/getMe
.
{
"ok":true,
"result":{
"id":1101361374,
"is_bot":true,
"first_name":"Example Bot for Blog",
"username":"example_blog_bot",
"can_join_groups":false,
"can_read_all_group_messages":false,
"supports_inline_queries":false
}
}
To send messages to this private group we've created with the bot, we will need to target it by providing the chat_id
parameter that represents this group. The chat_id
is also necessary for all integrations with other tools like Zapier or Integromat and this is why it is important.
To extract it use the getUpdates
method. Do a GET
with this URL https://api.telegram.org/bot1101361374:AAHS_DYrAUohT-HQXVKKz-M1howAxvXdRLA/getUpdates
. If the result is empty then just type something to the bot in this group.
Note that this method returns results only when the bot is not enabled for privacy. If you want to enable privacy, make sure you do it after extracting the chat_id
as explained below.
{
"ok":true,
"result":[
{
"update_id":726362299,
"message":{
"message_id":3,
"from":{
"id":877419474,
"is_bot":false,
"first_name":"Alex",
"last_name":"Sarafian"
},
"chat":{
"id":-475387861,
"title":"Example Blog Bot",
"type":"group",
"all_members_are_administrators":true
},
"date":1585150611,
"text":"Hello"
}
}
]
}
Hello
is the message I had sent to the bot to make sure I could get results with getUpdates
.
From the JSON, the chat_id
is -475387861
. We can use this send a message using the sendMessage
method.
The sendMethod
is much more complicated but for the purposes of this demonstration, a simple GET
with a simple message will suffice like this URL https://api.telegram.org/bot1101361374:AAHS_DYrAUohT-HQXVKKz-M1howAxvXdRLA/sendMessage?chat_id=-475387861&text=Hello
.
{
"ok":true,
"result":{
"message_id":4,
"from":{
"id":1101361374,
"is_bot":true,
"first_name":"Example Bot for Blog",
"username":"example_blog_bot"
},
"chat":{
"id":-475387861,
"title":"Example Blog Bot",
"type":"group",
"all_members_are_administrators":true
},
"date":1585151160,
"text":"Hello"
}
}
And this has happened in the group with the bot
Me, [25.03.20 16:36]
HelloExample Bot for Blog, [25.03.20 16:46]
Hello
Configuring for privacy
To enable encryption of the communication with the bot, you must enable the privacy feature.
- Open a session with BotFather.
- Enter
/setprivacy
. - Enter the name of the bot.
@example_blog_bot
. Note that the@
is required. - Enter
Enable
Me, [25.03.20 16:09]
/setprivacyBotFather, [25.03.20 16:09]
Choose a bot to change group messages settings.Me, [25.03.20 16:09]
@example_blog_botBotFather, [25.03.20 16:09]
'Enable' - your bot will only receive messages that either start with the '/' > symbol or mention the bot by username.
'Disable' - your bot will receive all messages that people send to groups.
Current status is: ENABLEDMe, [25.03.20 16:09]
EnableBotFather, [25.03.20 16:09]
Success! The new status is: ENABLED. /help
Remember that after doing this the getUpdates
method from the API will return empty results or the last encrypted message.
Top comments (4)
So, we're considering Telegram private, now?
What do you mean? I've clarified that with private I refer to personal or select few only usage.
Yeah, I read the article and am aware of the qualification you made. I'm just a bit skeptical that even those single person Telegram chats are "private," too.
What is private here? If refer to privacy in general that e.g. telegram can't read your messages then I don't know but when the telegram's privacy mode is enabled, you can't retrieve the messages from the API. If you refer to other people can't interact/see my communication with the particular chat bot then based on some tests I did it seems to work fine and others can't discover it. If you refer to something else, please elaborate, I'm curious.