使用 ForceReply 选项在电报中没有回复界面的情况下从用户那里获取输入

use ForceReply option to get input from user without reply interface in telegram

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

电报说:

Upon receiving a message with this object, Telegram clients will display a reply interface to the user (act as if the user has selected the bot‘s message and tapped ’Reply'). This can be extremely useful if you want to create user-friendly step-by-step interfaces without having to sacrifice privacy mode.

现在我用 irazasyed/telegram-bot-sdk 制作了我的电报机器人。在那个包中创建一个 force_reply 接口,我们应该这样做:

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

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

结果如下:

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

我想做 same.I 知道如果我将 force_reply 的值设置为 false 它完成了但我不知道之后我如何检测用户输入的文本与我的问题有关。

我到底该做什么?

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

我为用户历史记录创建了一个table,其中包含一些关于用户的信息,例如他们的用户名和chat_id,我还跟踪用户的last_state

中的最后一个状态

所以当向用户提问时,我用当前状态更新她在数据库中的状态字段,然后接下来的答案是针对用户上次状态的问题,让我举一个简单的例子。

A:提示问题 x 给 chat_id n

的用户

B:更新chat_id为n等于DB

中的x的用户状态

C:得到答案

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

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

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