【问题标题】:Tegram bot API token format电报机器人 API 令牌格式
【发布时间】:2024-01-12 22:58:01
【问题描述】:

我想弄清楚电报机器人令牌的格式以实现一些有效性检查,但似乎没有官方格式说明。

根据我的令牌和我在网上找到的内容,我可以假设以下内容:

  • (最多)46 个字符长度
  • 以(最多)10 位数字开头,后跟:
  • 其余 35 个字符属于 [[:alnum:]] 类加 - 和 _

任何人 (dis) 都可以确认或指向文档吗?

【问题讨论】:

  • 第一部分(机器人的内部用户 ID)最多可以是 10 位,而不是 9 位。用户 ID 在某种程度上是连续的,因此较新的机器人(以及普通用户)更有可能拥有10 位数 ID
  • 我认为这已经随着时间的推移而改变。我的机器人代码以 10 位数字开头,: 和 35 'azAZ09',总共 46
  • 你让我很好奇,我检查了我最近的 14 个令牌(就我与 botFather 的历史而言),2 个以 10 位开头,其余的与 9。对于特殊字符,我只有这些:__-_
  • @0stone0,感谢这符合我的研究,__ 字符真的在你的一个标记中还是 2 _?
  • 是的,只有第一部分可以(?)包含 10 位数字;)。它是令牌的一部分,你的权利,2x _

标签: api token telegram telegram-bot


【解决方案1】:

让我总结一下到目前为止我们所知道的:

  • 要验证电报 API 令牌是否具有正确的格式并且当前有效,您必须进行电报 getMe API 调用,例如在命令行上: curl -s https://api.telegram.org/botYOURTOKEN/getMe

不过,我们有一些很好的猜测,正确的令牌应该是什么样子:

  • 由 8-10 位数字组成,后跟 :
  • : 后跟一个 35 个字符的 Telegram 内部标识符/哈希
  • 标识符由字符类[[:alnum:]] 加上_- 组成,这适合为deep linking parameter 记录的字符

总结:

  • 令牌格式:8-10 digits:35 alnum characters plus _-,例如123456789:AaZz0...AaZz9

  • 用于测试的正则表达式:/^[0-9]{8,10}:[a-zA-Z0-9_-]{35}$/

【讨论】:

    【解决方案2】:

    如果您想检查机器人令牌的有效性,可以使用getMe 方法。

    https://core.telegram.org/bots/api#getme

    一种用于测试机器人身份验证令牌的简单方法。不需要 参数。以用户的形式返回有关机器人的基本信息 对象。

    任何无效的令牌都会返回 401 错误。

    我相信这将是一种比检查正确格式更可靠的方法。

    【讨论】:

      【解决方案3】:

      BOT token 由两部分组成。在BOT_ID:BOT_ALPHANUMERIC_PART 中,BOT_ID 的长度为 8 到 10 位,BOT_ALPHANUMERIC_PART 的长度为 35 个字符。所以总长度是 43 到 45 个字符。

      如果您想验证机器人令牌,则可以使用:https://api.telegram.org/bot< YOUR_BOT_TOKEN>/getMe。 它将为您的机器人返回 JSON 数据。如果 bot 令牌无效,它将抛出 401 错误。

      【讨论】: