首页 > 解决方案 > Telegram:将照片发送到消息中,但不显示 Telegraf(NodeJs)的照片链接

问题描述

我在一个发送包含文本的消息的频道上,带有链接(该链接没有图像)和图像(来自亚马逊的提示产品):

在此处输入图像描述

我试过这段代码,它是相似的:

bot.telegram.sendMessage('mychannel', `Hello https:/path/to/image.jpg`)

它的工作原理类似,但它仍然是链接。那么我怎么能用图像预览而不是链接呢?

谢谢

标签: node.jstelegramtelegraftelegram-api

解决方案


一种解决方法(技巧)是插入链接但使用空字符 unicode(例如来自https://emptycharacter.com/

这是一个示例(我插入了带有空字符 的照片 URL )在此处输入图像描述

一些示例代码可以帮助您入门:

const Telegraf = require("telegraf");

const bot = new Telegraf(" ... ");

const CHAT_ID = ... ;

function getHiddenLink(url, parse_mode = "markdown") {
  const emptyChar = "‎"; // copied and pasted the char from https://emptycharacter.com/

  switch (parse_mode) {
    case "markdown":
      return `[${emptyChar}](${url})`;
    case "HTML":
      return `<a href="${url}">${emptyChar}</a>`;
    default:
      throw new Error("invalid parse_mode");
  }
}


// Option 1: sending with MARKDOWN syntax
bot.telegram.sendMessage(
  CHAT_ID,
  `
some test text in markdown
${getHiddenLink("https://i.stack.imgur.com/TPKR5.png", "markdown")}
`,
  {
    parse_mode: "markdown",
  }
);


// Another option: sending with HTML syntax
bot.telegram.sendMessage(
  CHAT_ID,
  `
some test text in HTML
${getHiddenLink("https://i.stack.imgur.com/TPKR5.png", "HTML")}
`,
  {
    parse_mode: "HTML",
  }
);

在这里,我们只创建一个getHiddenLink()接受 URL 和 parse_mode(HTML 或 markdown)的新函数,并使用空字符作为链接文本创建一个新的 URL 表示并返回它。


推荐阅读