- Create a bot
- Get the bot's API token from @BotFather
- Add your bot to the chat you'll be sending messages to
- Get the ID of the chat
a. Fetch bot updates and look for the chat id:b. OR, run bot.rb and @-mention your bot in the chat. The chat id will appear incurl https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/getUpdates | -r '.result[].message.chat.id'
bot.rb
's output.
The bot may need temporary message access:@BotFather > Bot Settings > Group Privacy > Turn off
- Send a message using the HTTP API: https://core.telegram.org/bots/api#sendmessage
curl -X POST \ -H 'Content-Type: application/json' \ -d '{"chat_id": "123456789", "text": "This is a test from curl", "disable_notification": true}' \ https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendMessage
-
-
Save dideler/85de4d64f66c1966788c1b2304b9caf1 to your computer and use it in GitHub Desktop.
# Use this script to test that your Telegram bot works. | |
# | |
# Install the dependency | |
# | |
# $ gem install telegram_bot | |
# | |
# Run the bot | |
# | |
# $ ruby bot.rb | |
# | |
# Send a message to the bot to get the current chat's ID in the console output. | |
# If it's a group chat, invite them to the chat first. | |
require 'logger' | |
require 'telegram_bot' | |
TELEGRAM_BOT_TOKEN = "YOUR_BOT_API_TOKEN" | |
bot = TelegramBot.new(token: TELEGRAM_BOT_TOKEN, logger: Logger.new(STDOUT)) | |
bot.get_updates(fail_silently: true) do |message| | |
puts "@#{message.from.username}: #{message.text}" | |
puts "Chat-ID: #{message.chat.id}" | |
end |
If you are getting an empty result list when doing getUpdates
for your bot, kick the bot out of the group, invite again and fetch again.
Very useful. Made a neat little script that you can import in bash. Adds a title/timestamp to it. Keeps me informed whenever my deployments need my attention.
#!bin/bash
TELEGRAM_BOT_TOKEN="botid:token"
CHAT_ID="1234567890"
send_telegram () {
title="$1"
timestamp="$(date -R)"
msg="$title\n$timestamp\n\n$(echo "$2" | sed -z -e 's|\\|\\\\|g' -e 's|\n|\\n|g' -e 's|\t|\\t|g' -e 's|\"|\\"|g')"
entities="[{\"offset\":0,\"length\":${#title},\"type\":\"bold\"},{\"offset\":$((${#title}+1)),\"length\":${#timestamp},\"type\":\"italic\"}]"
data="{\"chat_id\":\"$CHAT_ID\",\"text\":\"$msg\",\"entities\":$entities,\"disable_notification\": true}"
curl -s -o /dev/null -H 'Content-Type: application/json' -d "$data" -X POST https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendMessage
}
Import with source /path/to/telegram.sh
then can call the function each time you want to send a message like so send_telegram "title in bold" "this is the message body"
.
Output:
title in bold
Sat, 07 Oct 2022 00:24:57 +0100
this is the message body
The right curl:
curl -s https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/getUpdates | jq -r '.result[].message.chat.id'
Can i send file with message instead? Like this, but with curl
yes
curl -X POST https://api.telegram.org/bot/sendDocument -F chat_id='123456789' -F document=@'/path/to/file' -F caption='source: https://example.com'
Instead of:
curl https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/getUpdates | jq .message.chat.id
I think it should be:
curl https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/getUpdates | jq 'result[].message.chat.id'
Instead of:
curl https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/getUpdates | jq .message.chat.id
I think it should be:
curl https://api.telegram.org/bot$7040428535:AAH-RtS-yODyP-CIbZrEr433Y2xrLuP13vk/getUpdates | jq 'result[].message.chat.id'
hi guys, is it possible to get the bot's API token from @Botfather NOT through telegram but using some api? I need to create bots automatically in my .net app
its possible with account api, instead of bot api.
What a great, quick tutorial! Thank you!