使用ForceReply选项从用户那里获得输入,而无需电报中的回复界面

时间:2018-01-20 19:45:22

标签: laravel telegram telegram-bot

我们知道有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它已完成但我不知道之后我怎么能检测到用户输入的文本与哪个相关我的问题。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

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

我为用户历史记录创建了一个表格,其中包含有关用户名和chat_id等用户的一些信息,我还会在 last_state中跟踪用户的最后状态 专栏

因此,在向用户提出问题时,我会使用当前状态更新DB中的状态字段,然后即将到来的答案是针对用户最后状态中的问题,让我用一个简单的简单示例。

A:对于使用chat_id n

的用户,提示问题 x

B:更新其chat_id n 等于 x 的用户状态

C:得到答案

D:获取 chat_id ,然后从数据库中获取 last_state ,状态会显示问题

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

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