在带有图像的电报机器人中发送消息

时间:2016-06-16 13:35:02

标签: php telegram telegram-bot

我在php上有电报机器人代码,并通过replyWithMessage方法发送回复消息。

此处所有命令:

 $this->replyWithMessage(['text' => $item['title']. "\n\n" . $url]);

如何在文字前添加一些预览图像?

4 个答案:

答案 0 :(得分:14)

您可以使用/sendphoto并设置图片下方显示的caption https://core.telegram.org/bots/api#sendphoto

答案 1 :(得分:3)

您无法发送包含图片和文字的短信。但是,如果您的文本包含URL,则Telegram默认显示网页的预览。 或者您可以一个接一个地发送两条消息或发送带有标题的照片。

答案 2 :(得分:1)

否,您可以在一条消息中发送包含照片的文本。电报允许您执行此操作,但是方法有点棘手。

  1. 使用https://core.telegram.org/bots/api#sendmessage方法,设置选项disable_web_page_preview => false
  2. 在您的text数据中,在消息文本中放置一个带有不可见字符的图像链接。

示例:

$message = <<<TEXT
*** your content ***
*** somewhere below (or above) a link to your image with invisible character(s) ***
<a href="https://www.carspecs.us/photos/c8447c97e355f462368178b3518367824a757327-2000.jpg"> ‏ </a>
TEXT;

$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: multipart/form-data']);
curl_setopt($ch, CURLOPT_URL, 'https://api.telegram.org/bot<token>/sendMessage');
$postFields = array(
    'chat_id' => '@username',
    'text' => $message,
    'parse_mode' => 'HTML',
    'disable_web_page_preview' => false,
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
if(!curl_exec($ch))
    echo curl_error($ch);
curl_close($ch);

答案 3 :(得分:0)

您也可以使用markdown来做到这一点:

var axios = require('axios');

axios.post('https://api.telegram.org/'+telegram_bot_id+'/sendMessage', { chat_id: _target_telegram_channel, parse_mode: 'markdown', text: '[ ‏ ](https://www.amazon.it/gp/product/B07NVCJ3V8?pf_rd_p=ba8c3f2e-eba5-4c79-9599-683af7a49dd1&pf_rd_r=XPRH5A07HN9W62DK1R84)' } )
    .then(response => {
        console.log(response);
    })
    .catch(error => {
        console.log(error);
    })