【问题标题】:Botfather step-by-step bot (telegram/ruby)Botfather 分步机器人(电报/红宝石)
【发布时间】:2016-03-29 23:37:13
【问题描述】:

我真的一直在拖着自己从这里问这个问题,但在谷歌上搜索了很久之后,我觉得它是必要的。所以:

我正在尝试构建一个与电报中的 Botfather 具有相似结构的机器人。我想为使用我的机器人的用户启用分步配置。所以如果我问“你的电子邮件是什么?”我希望他们自然能够回答这个问题,我会知道他们回答了什么问题。这就是问题所在,我似乎无法找到一个好的结构来了解他们回答了哪个问题以及触发什么。我扫描过的每个机器人中的所有文档都使用这样的结构:

if message.text == 'london'
  bot.api.send_message(chat_id: message.chat.id, text: 'Correct!')
end

当我不知道用户会写什么或者我为不同的问题重复了已接受的答案时,这不是很有用。我尝试过使用回复和 ForceReply 等,但这也会产生奇怪的结构,并且在提要中看起来不像自然消息那样干净。

简单地说:我如何知道一条消息是否与一个问题一起出现然后触发某些事情?

抱歉,问题有点不明确,希望你们中的一个很棒的人能回答我的问题。

【问题讨论】:

  • 对于诸如此类的问题可能有更好的论坛,因为您注意到这是非结构化的,但是为什么问题不能成为您正在比较的变量,为什么 q/a 对不能成为字典?问题 => 回答。你不限于 if 中的一个条件。
  • 您需要一个结构来跟踪向谁提出的问题,然后您可以比较答案。您需要编写更多代码。
  • 如果您解决了问题,请编辑您的问题以显示您的代码

标签: ruby telegram telegram-bot


【解决方案1】:

在我的机器人中,我正在 DB 中创建一个“TelegramChat”记录,并在“AwaitingReplyTo”字段中存储对“问题”和一些相关信息(例如需要更新的帐户 ID)的引用。

类似:

def ask_question(question):
  ...
  telegram_chat_record(chat_id).awaiting_reply_to = "question:" + question
  telegram_chat_record.save_to_db()
  ...

def dispatcher(update):
  telegram_chat_record = get_telegram_chat_record(update)
  if telegram_chat_record.awaiting_reply_to == "question:What is your favorite city?":
    check_reply_to_favorite_city(update)
  ...

【讨论】:

  • 这太棒了!我开始建立类似的东西,这使得蛋糕上的奶油。楼主你厉害!谢谢!
猜你喜欢
  • 2014-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-14
  • 2011-05-05
  • 2011-01-09
相关资源
最近更新 更多