Telegram 电报机器人Api:多级测验

Telegram 电报机器人Api:多级测验,telegram,telegram-bot,Telegram,Telegram Bot,我想开发一个具有多个选项的电报机器人,例如,首先我显示3个按钮:按钮1、按钮2、按钮3 当用户再次单击每个按钮时,我会显示另外三个按钮:按钮1、按钮2、按钮3 在第2步之后,我想向用户显示他单击的第一个和第二个按钮,例如: 他首先单击按钮3,然后单击按钮1,因此,我想显示: 三十一 我怎么知道他先按了哪个按钮?是否仍然可以从bot获取聊天历史记录?或者我应该保存他在数据库上的点击?或者你的解决方案是什么 *我正在使用c#和telegrame.bot,但请给我一个解决方案,语言并不重要。您应该将聊

我想开发一个具有多个选项的电报机器人,例如,首先我显示3个按钮:按钮1、按钮2、按钮3

当用户再次单击每个按钮时,我会显示另外三个按钮:按钮1、按钮2、按钮3

在第2步之后,我想向用户显示他单击的第一个和第二个按钮,例如:

他首先单击按钮3,然后单击按钮1,因此,我想显示:

三十一

我怎么知道他先按了哪个按钮?是否仍然可以从bot获取聊天历史记录?或者我应该保存他在数据库上的点击?或者你的解决方案是什么


*我正在使用c#和telegrame.bot,但请给我一个解决方案,语言并不重要。

您应该将聊天id和单击的按钮保存在数据库中。机器人的聊天历史记录是短暂的,可能不可靠

首先,您可以使用内联键盘,为用户提供数据更新。这意味着您可以获得任何问题的Id,当用户单击时,您可以获得问题Id

  • 使用带有问题键的InlineKeyboardMarkup作为数据
  • 我建议您将问题树保存到数据库中,并保存每个用户的当前状态 然后当用户点击一个按钮;你得到问题的关键,并在树中找到它,然后问下一个问题或找到它的来源(以前的问题)


    如果您想运行与每个问题相关的任何方法,只需将每个问题方法名称存储在树中,当用户到达时,使用该方法即可。

    您可以使用内联按钮。使用JavaScript的解决方案:

    var options = {
      reply_markup: JSON.stringify({
        inline_keyboard: [
          [
            {text: 'button 1', callback_data: '1'},
            {text: 'button 2', callback_data: '2'},
            {text: 'button 3', callback_data: '3'},
          ],
        ]
      })
    };
    
    bot.sendMessage(chatId, 'Pick action:', options);
    
    请参阅,您可以传递任何回调数据。所以我会将当前路径保存在这个
    callback\u data
    属性中。格式不重要,可以是数组、字符串等。但它将代表堆栈

    例如,path
    a2.a1.a3
    表示您依次单击了按钮2、按钮1和按钮3。数据结构可以类似于此:

    {
      q: 'Which path you wanna go?',
      a1: { ... },
      a2: {
        value: 'right',
        q: 'You're going right. You see the wall, what will you do?',
        a1: {
           a1: { ... },
           a2: { ... }
           a3: {
             value: 'go back',
             q: 'You\'re going back and you see the tiger, what will you do?',
             a1: { ... },
             a2: { ... }
           }
        },
        a2: { ... },
        a3: { ... }
      },
      a3: { ... }
    }
    
    而且打包也很容易。只需从堆栈中弹出一个值,即可进入上一个菜单