我们知道有 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
]);
结果就像:
但是在其他机器人的使用中,例如使用此选项的PollBot,当显示问题并想要得到答案时,回复界面不会显示。
我想做同样的事情。我知道如果我将
force_reply
的值设置为 false
它就完成了,但我不知道之后如何检测用户输入的文本与我的问题相关。
我到底该做什么?
我为上一个机器人所做的是:
我为用户历史创建了一个表,其中包含有关用户的一些信息,例如用户名和chat_id,我还在last_state列中跟踪用户的最后状态
因此,当用户提出问题时,我会用当前状态更新数据库中用户的状态字段,然后接下来的答案是针对用户最后状态中的问题,让我举一个简短的示例。
A:针对 chat_id 为 n 的用户提示问题 x
B:更新 DB 中 chat_id 为 n 等于 x 的用户状态
C:得到答案
D:获取chat_id,然后从DB中获取她的last_state,状态指示问题
现在你知道她要回答哪个问题了
查看我开发的这个机器人:@TunnelCSBot