如何在电报/开始时回显消息?

ult*_*rax 2 telegram python-telegram-bot telegram-bot

我想使用它的深层链接api通过电报设置身份验证。

为了进行身份验证,在我的应用程序中,我要求用户单击以下链接:

https://telegram.me/myloginbot?start=somesecretkey
Run Code Online (Sandbox Code Playgroud)

如果我正确理解文档,我应该期望机器人回显somesecretky到我的服务器。

现在,我不清楚文档的这一步:

  1. 配置 webhook 处理器以使用传入消息中以 /start 开头的参数查询 Memcached

如果我理解正确,我需要进行配置,myloginbot以便当用户单击机器人页面上的开始按钮时,机器人会向我的服务器回显一个包含somesecretkey一些用户信息的 URL 。但我不知道该怎么做。

这个答案中,建议:

  1. 让机器人通过查询数据库或键值存储的 unique_code 来检索用户名。

但我不知道如何让机器人查询(大概是远程)数据库。

所以真的很感谢你的提示。

Nic*_*Lee 6

我对深度链接的理解是这样的:

  1. 你有一个用户数据库。每个用户都有一个 ID。假设您希望 Telegram 机器人与 user 通信123。但是你不知道他的 Telegram chat_id(机器人需要它来向他发送消息)。你如何“引诱”他与机器人交谈,从而揭示他的chat_id?你在网页上放了一个链接。

  2. 但链接必须是“个性化的”。您希望每个用户按稍微不同的链接,以便区分他们。一种方法是在链接中嵌入用户 ID。但是,用户 ID不是您想要公开的内容,因此您生成与每个用户 ID 关联的(临时)密钥,并将该密钥嵌入链接中。例如,用户123有密钥abcde。他的个性化链接将是:

    https://telegram.me/myloginbot?start=abcde
    
    Run Code Online (Sandbox Code Playgroud)
  3. 有人点击链接,并被引导到与您的机器人的对话。同时(或当他按下 START 按钮时),您的机器人将收到一条消息:

    /start abcde
    
    Run Code Online (Sandbox Code Playgroud)
  4. 收到该消息后,机器人会看到abcde与 user 相关联的消息123。电报chat_id也可以从消息中提取。现在,机器人知道用户123chat_id,然后可以向他发送消息。

要试验深度链接,您需要一个可以处理/start消息的机器人,并由记住密钥 ID 关联的“数据存储”支持。当 Telegram 文档说“memcache”时,它们只是表示存储密钥 ID 关联的东西。对于实验,它可能像字典或关联数组一样简单。在现实生活中,它可能是 Memcached(内存缓存软件),也可能是数据库表。

如果您使用 Python,我建议您查看Telepot,这是 Telegram Bot API 的 Python 框架。它本身并不进行深度链接,但它确实可以帮助您接收机器人的消息,以及其他机器人操作。我还有一个示例,演示如何输出个性化链接、设置 webhook 以及/start使用密钥解析传入的命令。