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

Telegram Webhook参数丢失,如何附加完整参数触发指定POST请求?

解决Telegram Webhook附加固定参数的问题

你遇到的问题是因为在setWebhook的URL参数中,&会被Telegram API解析为自身接口的参数分隔符,导致channel=X之后的参数被当成setWebhook的额外参数,而非目标URL的一部分,所以实际转发时只保留了第一个参数。

下面是几种可行的解决方法:

方法1:对目标URL的查询参数进行URL编码

把目标URL中的&替换为URL编码后的%26,这样Telegram会将整个字符串视为url参数的完整值,不会拆分参数。

修改后的setWebhook请求URL应该是:

https://api.telegram.org/bot<telegram_token>/setWebhook?url=https://example.com/control?channel=X%26turn=XXX%26id=XXXXXX%26auth_key=XXXXX

你也可以用在线工具对整个目标URL进行编码,再填入setWebhook的url参数中,确保所有特殊字符都被正确转义。

方法2:搭建中间转发服务

如果需要更灵活的处理(比如根据Telegram消息内容动态调整参数),可以自己写一个简单的中间服务,接收Telegram的Webhook请求,再手动带上固定参数转发到目标端点。

以Python Flask为例,示例代码如下:

from flask import Flask, request
import requests

app = Flask(__name__)

TARGET_URL = "https://example.com/control"
FIXED_PARAMS = {
    "channel": "X",
    "turn": "XXX",
    "id": "XXXXXX",
    "auth_key": "XXXXX"
}

@app.route('/telegram-webhook', methods=['POST'])
def handle_webhook():
    # 这里可以按需处理Telegram传来的消息内容,比如提取用户ID等
    # 发送POST请求到目标端点,带上固定参数
    requests.post(TARGET_URL, data=FIXED_PARAMS)
    return "OK", 200

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)

部署这个服务后,将setWebhook的url设为中间服务的地址(比如https://your-server.com/telegram-webhook)即可。

方法3:将固定参数嵌入URL路径

如果目标端点支持,可以把参数放到URL路径中,比如将端点改为https://example.com/control/X/XXX/XXXXXX/XXXXX,后端通过解析路径来获取参数。这种方式不需要处理查询参数的编码问题,直接将该URL作为setWebhook的url参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:35:25