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

调用SendArticleAsync发送Telegram文章时报BUTTON_URL_INVALID错误排查

错误触发原因
  • 最常见的原因是第22篇文章的链接格式不符合Telegram API的校验规则,即便你确认链接可正常访问、对象非空,也会触发报错,具体可能的场景包括:
    1. 链接缺失HTTP/HTTPS协议头:Telegram要求inline按钮的URL必须携带完整的HTTP/HTTPS前缀,相对协议(//xxx.com)、无协议纯域名路径(xxx.com/xxx)都会被判定为无效
    2. 链接包含未处理的特殊字符或不可见字符:比如链接首尾有空格、换行符,或者中文、&、#等特殊字符未做URL编码,都会导致校验失败
    3. 链接属于Telegram黑名单范围内的地址:比如被标记为恶意的站点链接、不符合规则的TG内部协议链接都会被拦截
    4. KeyboardGoOver方法内部处理异常,导致最终生成的按钮URL被拼接了多余字符
解决方案
  • 先加日志输出第22篇文章article.Href的原始值,包括字符串长度、每个字符的编码,确认是否存在不可见字符、协议头缺失问题
  • 对所有文章链接做标准化预处理,示例处理逻辑如下:
// 放在生成按钮之前执行
var processedHref = article.Href.Trim();
// 自动补全协议头
if (!processedHref.StartsWith("http://") && !processedHref.StartsWith("https://"))
{
    processedHref = "https://" + processedHref;
}
// 对特殊字符做标准URL编码
processedHref = Uri.EscapeUriString(processedHref);
var linkButton = KeyboardGoOver("Перейти", processedHref);
  • 在单篇文章发送逻辑外层增加异常捕获,避免单篇发送失败中断整个发送流程,同时记录错误信息方便后续排查:
foreach (var article in articles)
{
    try
    {
        // 链接处理+发送逻辑写在这里
    }
    catch (ApiRequestException ex)
    {
        // 按需记录失败文章的信息,此处仅为示例
        Console.WriteLine($"文章发送失败:标题{article.Title},原始链接{article.Href},错误信息{ex.Message}");
        continue;
    }
}
  • 如果确认链接格式完全正确仍然报错,可替换为其他公开可访问的正常链接测试,排除链接被Telegram平台拉黑的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:15:04