如何通过 Telegram Bot API 发送嵌入图像以及消息中的文本

问题描述 投票:0回答:8

使用 Telegram Bot API,

我知道可以通过 https://core.telegram.org/bots/api#sendphoto

发送图像

但是,如何将远程图像嵌入到格式化消息中?

我想要发送的消息可以与带有粗体标题、图像和带有链接的较长文本的新闻文章进行比较。我想出了如何使用 Markdown 创建粗体文本和链接,但我无法插入图像。我们怎样才能做到这一点?

telegram telegram-bot
8个回答
37
投票

您必须在 HTML 中设置 ParseMode 并在 A 标记中设置图像 Url,如下所示:

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

&#8205;
-> 从不在消息中显示


17
投票

您可以使用零宽度空间技巧。适用于 Markdown 和 HTML 解析模式。

降价:

$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.",
];

结果:

enter image description here

注意:零宽度空格位于括号“[]”之间。


3
投票

使用

sendPhoto
而不是
sendMessage
是实现此目的的一种更简洁的方法,具体取决于您的用例,例如:

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 += '\n\nStack 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)

2
投票
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)

2
投票

你应该只添加标题

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

在我们的例子中,标题是文本。 看这张图片


2
投票

使用

<a href=http://.......jpg>..</a>
的方法将显示文本下方图像的预览。 像这样:

href 示例

如果您发送带有标题的图像,看起来会更好。

标题示例


0
投票

可能对某人有用。我已经成功以这种方式发送照片+文本+parse_mode(文本格式):

files = {
    'chat_id': id,
    'text': text,
    'photo': open('/root/****/****/*****/photo.jpg', 'rb')
}
url = f'https://api.telegram.org/bot{telegramToken}/sendPhoto?chat_id={id}&caption={text}&parse_mode=HTML'
requests.post(url, files=files)

0
投票

我只是在 Java 代码中创建了一个指向该点的链接,并将其作为带有预览的消息发送。

"<a href=\"https://avandy-news.ru/*.jpg\">.</a>"

messageService.sendMessageWithPreview(chatId, text, Keyboards.getInfoKeyboard());

public void sendMessageWithPreview(long chatId, String textToSend, ReplyKeyboard keyboard) {
        SendMessage message = new SendMessage();
        message.setChatId(chatId);
        if (textToSend != null && !textToSend.isEmpty()) message.setText(textToSend);
        else return;
        message.enableHtml(true);
        message.setParseMode(ParseMode.HTML);
        if (keyboard != null) message.setReplyMarkup(keyboard);
        executeMessage(message);
}

private void executeMessage(SendMessage message) {
        try {
            execute(message);                
        } catch (TelegramApiException e) {
          ..                
        }
        return null;
    }

my bot avandy news

© www.soinside.com 2019 - 2024. All rights reserved.