使用ForceReply选项来获取用户的输入,而无需电报中的回复界面

问题描述 投票:0回答:1

我们知道有 ForceReply 选项可以在 telegram api 中获取用户的输入。

电报说:

收到带有此对象的消息后,Telegram 客户端将 向用户显示回复界面(就好像用户已经选择了 机器人的消息并点击“回复”)。如果出现以下情况,这会非常有用: 您想要创建用户友好的分步界面,而无需 不得不牺牲隐私模式。

现在我使用 irazasyed/telegram-bot-sdk 来制作我的电报机器人。在该包中创建一个

force_reply
界面,我们应该这样做:

$forceReply = Keyboard::forceReply(['force_reply' => true]);

$this->replyWithMessage([
    'text'         => 'Please enter your name ?',
    'reply_markup' => $forceReply
]);

结果就像:

enter image description here

但是在其他机器人的使用中,例如使用此选项的PollBot,当显示问题并想要得到答案时,回复界面不会显示。

我想做同样的事情。我知道如果我将

force_reply
的值设置为
false
它就完成了,但我不知道之后如何检测用户输入的文本与我的问题相关。

我到底该做什么?

laravel telegram telegram-bot
1个回答
4
投票

我为上一个机器人所做的是:

我为用户历史创建了一个表,其中包含有关用户的一些信息,例如用户名和chat_id,我还在last_state中跟踪用户的最后状态

因此,当用户提出问题时,我会用当前状态更新数据库中用户的状态字段,然后接下来的答案是针对用户最后状态中的问题,让我举一个简短的示例。

A:针对 chat_id 为 n 的用户提示问题 x

B:更新 DB 中 chat_id 为 n 等于 x 的用户状态

C:得到答案

D:获取chat_id,然后从DB中获取她的last_state,状态指示问题

现在你知道她要回答哪个问题了

查看我开发的这个机器人:@TunnelCSBot

© www.soinside.com 2019 - 2024. All rights reserved.