我想通过电报设置身份验证deep linking api。
为了进行身份验证,我在应用中要求用户点击以下链接:
https://telegram.me/myloginbot?start=somesecretkey
如果我理解正确的文档,我应该期望机器人回显somesecretky
到我的服务器。
现在,我不清楚文档的这一步:
- 配置webhook处理器以使用以/ start开头的传入消息中传递的参数查询Memcached
醇>
如果我理解正确,我需要配置myloginbot
,以便当用户点击机器人页面上的开始按钮时,机器人会回复到我的服务器,其中包含somesecretkey
和一些用户信息。但我不知道该怎么做。
在this回答中,建议:
- 让机器人通过查询unique_code的数据库或键值存储来检索用户名。
醇>
但我不知道如何让机器人查询(可能是远程的)数据库。
非常感谢您的提示。
答案 0 :(得分:2)
我对深层链接的理解是:
您有一个用户数据库。每个用户都有一个ID。假设您希望Telegram机器人与用户123
进行通信。但是你不知道他的电报chat_id
(机器人需要为了向他发送信息)。你如何"诱惑"他与机器人交谈,从而揭露了他的chat_id
?你在网页上放了一个链接。
但链接必须是"个性化的"。您希望每个用户按一个稍微不同的链接,以区分它们。一种方法是在链接中嵌入用户ID。但是,用户ID 不您要公开的内容,因此您生成与每个用户ID关联的(临时)密钥,并在该链接中嵌入该密钥即可。例如,用户123
具有密钥abcde
。他的个性化链接将是:
https://telegram.me/myloginbot?start=abcde
有人点击了该链接,并与您的机器人进行了对话。在同一时间(或当他按下START按钮时),您的机器人将收到一条消息:
/start abcde
收到该消息后,机器人会发现abcde
与用户123
相关联。也可以从消息中提取电报chat_id
。现在,机器人知道用户123
chat_id
,然后可以向他发送消息。
要尝试深层链接,您需要一个可以处理/start
消息的机器人,并且需要一个"数据存储区"记得密钥ID关联。当Telegram文档说" memcache"时,它们只是指存储密钥ID关联的东西。对于实验,它可以像字典或关联数组一样简单。在现实生活中,它可能是Memcached(内存缓存软件)或数据库表。
如果您使用Python,我建议您查看 telepot ,这是Telegram Bot API的Python框架。它本身并不进行深层链接,但它确实可以帮助您接收机器人的消息,以及其他一般的机器人操作。我还有一个 example ,演示了如何输出个性化链接,设置webhook以及使用密钥解析传入的/start
命令。