You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询:从HTML页面向Telegram发消息及模态框内容分享方案

解决方案:从网页分享内容到Telegram(适配你的PHP Bot场景)

嘿,我来帮你搞定这两个问题——尤其是你已经在Heroku部署了PHP Telegram Bot,咱们结合你的场景一步步来:

一、从HTML页面向Telegram发送消息的两种核心方式

方式1:用Telegram内置分享链接(零后端成本,快速上线)

这是最省心的前端方案,直接用Telegram官方提供的分享链接,让用户自己选择聊天对象发送内容:

  • 原理是构造一个Telegram的跳转链接,把要分享的内容编码后带进去,用户点击后会打开Telegram的分享界面。
  • 前端JS示例代码:
// 假设模态框里的名称存在id为lucky-name的元素,GIF地址是lucky-gif的src
function shareViaTelegram() {
  const luckyName = document.getElementById('lucky-name').textContent;
  const gifLink = document.getElementById('lucky-gif').src;
  // 把要发送的文本编码,避免特殊字符问题
  const shareText = encodeURIComponent(`🎉 抽到的幸运儿:${luckyName}\n动图链接:${gifLink}`);
  // 打开Telegram分享界面
  window.open(`https://t.me/share/url?text=${shareText}`, '_blank');
}
  • 优点:不用碰后端,5分钟就能搞定;用户可以自由选择发送给好友、群组还是频道。
  • 缺点:依赖用户本地有Telegram客户端(或网页版),无法自动发送到指定聊天。

方式2:通过你的PHP Bot发送(后端驱动,可控性拉满)

既然你已经有了自己的Bot,这种方式更适合你——可以自动把内容推送到指定的聊天(比如你的私人号、官方群组),或者让用户触发后通过Bot发送给自己。

第一步:先拿到目标聊天的ID

要让Bot发消息,必须知道要发给谁的聊天ID。最简单的方法是:让目标用户(比如你自己)给Bot发一条随便的消息,然后调用Bot的getUpdates接口获取ID:

// PHP代码,运行一次拿到聊天ID就行
$botToken = '你的Bot Token';
$apiUrl = "https://api.telegram.org/bot{$botToken}/getUpdates";
$response = file_get_contents($apiUrl);
$updateData = json_decode($response, true);
if (!empty($updateData['result'])) {
    // 取最近一条消息的聊天ID
    $chatId = $updateData['result'][count($updateData['result'])-1]['message']['chat']['id'];
    echo "你的聊天ID是:{$chatId},把它存在你的配置里哦";
}

第二步:前端把模态框内容传给后端

当用户点击分享按钮时,前端把抽到的名称和GIF地址发送到你Heroku上的PHP接口:

// 给分享按钮绑定点击事件
document.querySelector('.share-btn').addEventListener('click', async () => {
  const name = document.getElementById('lucky-name').textContent;
  const gifUrl = document.getElementById('lucky-gif').src;
  
  try {
    const response = await fetch('/api/share-to-telegram', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ name, gifUrl })
    });
    const result = await response.json();
    if (result.success) {
      alert('内容已经通过Bot发送到Telegram啦!');
    } else {
      alert(`发送失败:${result.error}`);
    }
  } catch (err) {
    alert('网络出错啦,请稍后重试');
  }
});

第三步:后端调用Telegram API发送内容

在你的PHP后端接口里,处理前端的请求,调用Telegram的sendPhoto接口(支持GIF动图),把名称作为图片的说明文字:

<?php
// /api/share-to-telegram 接口
header('Content-Type: application/json');

// 配置你的Bot信息
$botToken = '你的Bot Token';
$targetChatId = '你刚才拿到的聊天ID'; // 比如你的私人聊天ID

// 获取前端传过来的数据
$input = json_decode(file_get_contents('php://input'), true);
if (empty($input['name']) || empty($input['gifUrl'])) {
  echo json_encode(['success' => false, 'error' => '缺少必要参数']);
  exit;
}
$luckyName = $input['name'];
$gifUrl = $input['gifUrl'];

// 构造要发送的内容
$caption = "🎉 今日幸运儿:{$luckyName}";

// 调用Telegram API发送GIF和说明
$apiUrl = "https://api.telegram.org/bot{$botToken}/sendPhoto";
$postData = [
  'chat_id' => $targetChatId,
  'photo' => $gifUrl,
  'caption' => $caption,
  'parse_mode' => 'Markdown' // 可选,支持加粗、斜体等格式
];

// 发送POST请求
$options = [
  'http' => [
    'method' => 'POST',
    'header' => 'Content-Type: application/x-www-form-urlencoded',
    'content' => http_build_query($postData)
  ]
];
$context = stream_context_create($options);
$apiResponse = file_get_contents($apiUrl, false, $context);
$responseData = json_decode($apiResponse, true);

// 返回结果给前端
if ($responseData['ok']) {
  echo json_encode(['success' => true]);
} else {
  echo json_encode(['success' => false, 'error' => $responseData['description']]);
}
?>

针对你场景的小优化

  • 如果想让用户把内容发送到自己的Telegram,可以让用户先给Bot发消息获取自己的聊天ID,然后前端把这个ID一起传给后端,替换掉targetChatId。
  • 如果sendPhoto显示的GIF是静态的,换成sendDocument接口,把photo参数改成document即可,Telegram会正确识别动图。
  • 在Heroku上部署的话,记得把Bot Token和Chat ID存在环境变量里,不要硬编码在代码里(安全第一!)。

内容的提问来源于stack exchange,提问作者Leon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:43:58