skip to Main Content

Using Telegram Bot API,

I’m aware that it is possible to send an image via https://core.telegram.org/bots/api#sendphoto

However, how can I embed a remote image into a formatted message?

The message I am looking to send, can be compared to a news article with a title in bold, an image, and a longer text with links. I figured out how to create bold text and links with markdown, but I’m failing at inserting images. How can we do that?

6

Answers


  1. you must set ParseMode in HTML and set your Image Url in A tag like this:

    <a href="' + image + '">&#8205;</a>
    

    &#8205; -> never show in message

    Login or Signup to reply.
  2. You can use zero-width space trick. Works for both Markdown and HTML parse mode.

    Markdown:

    $data = [
        'chat_id'    => $chat_id,
        'parse_mode' => 'markdown',
        'text' => "[​​​​​​​​​​​](https://upload.wikimedia.org/wikipedia/commons/thumb/0/02/Stack_Overflow_logo.svg/200px-Stack_Overflow_logo.svg.png) Some text here.",
    ];
    

    Result:

    enter image description here

    Note: The zero-width space is in-between the brackets “[​​​​​​​​​​​]”.

    Login or Signup to reply.
  3. Method using <a href=http://.......jpg>..</a> will show preview of the image below the text.
    Like this:

    a href sample

    It will look better if you send an image with a caption.

    caption sample

    Login or Signup to reply.
  4. import requests    
    text="testing"    
    img="http://imageurl.png"       
    r = requests.get('https://api.telegram.org/botyour_token_here/sendMessage?chat_id=@your_channel_here&parse_mode=markdown&text='+"[​​​​​​​​​​​]("+img+")"+text)
    
    Login or Signup to reply.
  5. You should just add captions

    bot.send_video(user_id, video, caption='some interesting text')
    

    In our case captions are text. look this image

    Login or Signup to reply.
  6. Using sendPhoto rather than sendMessage is a cleaner way of achieving this, depending on your use case, for example:

    import io
    import json
    import requests
    
    telegram_bot_token = 'INSERT_TOKEN_HERE'
    chat_id = '@INSERT_CHAT_ID_HERE'
    
    bot_url = 'https://api.telegram.org/bot' + telegram_bot_token + '/sendPhoto'
    img_url = 'https://upload.wikimedia.org/wikipedia/commons/thumb/0/02/Stack_Overflow_logo.svg/200px-Stack_Overflow_logo.svg.png'
    
    msg_txt = '<b>Stack Overflow Logo</b>'
    msg_txt += 'nnStack Overflow solves all our problems'
    
    payload = {
      'chat_id': chat_id,
      'caption': msg_txt,
      'parse_mode': 'html'
    }
    
    remote_image = requests.get(img_url)
    photo = io.BytesIO(remote_image.content)
    photo.name = 'img.png'
    files = {'photo': photo}
    
    req = requests.post(url=bot_url, data=payload, files=files)
    response = req.json()
    print(response)
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search