Через несколько секунд бот автоматически отображает рейтинговую карточку, чтобы учесть отзывы пользователей.

У меня есть бот, созданный с использованием фреймворка v4 на С #. Я хочу, чтобы мой бот принимал отзывы пользователей, когда бот переходит в режим ожидания или в случае, если пользователь не отвечает боту. Я сделал свою карточку, но не получил никакой логики для реализации вышеупомянутой функции в моем боте. Также прикрепляю код изготовленной мною карты. Также изображение моей карты. Может ли кто-нибудь изучить это и помочь мне с этой реализацией. введите здесь описание изображения

{
  "type": "AdaptiveCard",
  "body": [
{
  "type": "TextBlock",
  "size": "Medium",
  "weight": "Bolder",
  "color": "Accent",
  "text": "Rate your experience!"
},
{
  "type": "TextBlock",
  "separator": true,
  "text": "Please rate your experience! Your feedback is very appreciated and will help improve your experience in the future. ",
  "wrap": true
},
{
  "type": "ColumnSet",
  "spacing": "Medium",
  "columns": [
    {
      "type": "Column",
      "selectAction": {
        "type": "Action.Submit",
        "data": "awful"
      },
      "items": [
        {
          "type": "Image",
          "horizontalAlignment": "Center",
          "url": "https://upload.wikimedia.org/wikipedia/commons/1/18/Five-pointed_star.svg"
        },
        {
          "type": "TextBlock",
          "horizontalAlignment": "Center",
          "text": "Awful"
        }
      ],
      "width": "stretch"
    },
    {
      "type": "Column",
      "selectAction": {
        "type": "Action.Submit",
        "data": "bad"
      },
      "items": [
        {
          "type": "Image",
          "horizontalAlignment": "Center",
          "url": "https://upload.wikimedia.org/wikipedia/commons/1/18/Five-pointed_star.svg"
        },
        {
          "type": "TextBlock",
          "horizontalAlignment": "Center",
          "text": "Bad"
        }
      ],
      "width": "stretch"
    },
    {
      "type": "Column",
      "selectAction": {
        "type": "Action.Submit",
        "data": "normal"
      },
      "items": [
        {
          "type": "Image",
          "horizontalAlignment": "Center",
          "url": "https://upload.wikimedia.org/wikipedia/commons/1/18/Five-pointed_star.svg"
        },
        {
          "type": "TextBlock",
          "horizontalAlignment": "Center",
          "text": "normal"
        }
      ],
      "width": "stretch"
    },
    {
      "type": "Column",
      "selectAction": {
        "type": "Action.Submit",
        "data": "good"
      },
      "items": [
        {
          "type": "Image",
          "horizontalAlignment": "Center",
          "url": "https://upload.wikimedia.org/wikipedia/commons/1/18/Five-pointed_star.svg"
        },
        {
          "type": "TextBlock",
          "horizontalAlignment": "Center",
          "text": "Good"
        }
      ],
      "width": "stretch"
    },
    {
      "type": "Column",
      "selectAction": {
        "type": "Action.Submit",
        "data": "terrific"
      },
      "items": [
        {
          "type": "Image",
          "horizontalAlignment": "Center",
          "url": "https://upload.wikimedia.org/wikipedia/commons/1/18/Five-pointed_star.svg"
        },
        {
          "type": "TextBlock",
          "horizontalAlignment": "Center",
          "text": "Terrific"
        }
      ],
      "width": "stretch"
    }
  ]
},
{
  "type": "Input.Text",
  "id": "comment",
  "placeholder": "Add a comment",
  "isMultiline": true
}
 ],
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "version": "1.0",
   "actions":
[
  {
    "type": "Action.Submit",
    "title": "OK",
   // "data":  "ok"
  }
]}

person Amit Kumar    schedule 04.02.2020    source источник


Ответы (2)


Нет ни встроенного способа сделать это, ни «стандартного» предложения. Однако мы обычно рекомендуем:

  1. Для каждого сообщения запускайте асинхронный таймер. Вы можете сделать это в боте, но было бы лучше сделать это вне бота, например, с помощью функций Azure или чего-то подобного. Остальная часть этого ответа предполагает, что таймер находится вне бота. Убедитесь, что таймер также отслеживает talkReference, связанный с таймером.
  2. Перезапускайте таймер каждый раз, когда пользователь, совпадающий с conversationReference, отправляет сообщение
  3. По истечении времени таймера отправьте боту событие с информацией о пользователе и разговоре (возможно, через ChannelData), сообщив боту, что время таймера истекло. Вы также можете создать отдельную конечную точку и отслеживать там, так что вам не нужна схема активности; вместо /api/messages вы можете использовать что-то вроде /api/expiredTimers.
  4. После получения события таймера с истекшим сроком действия отправить активное сообщение пользователю, чтобы либо 1) проверить, остались ли они там, или 2) завершить беседу.
person mdrichardson    schedule 05.02.2020
comment
Я не получаю то, что вы хотите, так сказать .. могу предложить какой-нибудь простой способ реализовать это? - person Amit Kumar; 06.02.2020
comment
могу объяснить простым языком, я новичок в разработке - person Amit Kumar; 06.02.2020
comment
@AmitKumar Боюсь, что не могу не потратить несколько часов на написание кода. Это непростая задача ... совсем. В качестве альтернативы вы можете написать диалог обратной связи и вызвать его после того, как пользователь завершит диалог. - person mdrichardson; 06.02.2020

Вы можете использовать код, который ShowTypingMiddleware использует. После получения сообщения активности он затем устанавливает таймер, когда таймер срабатывает, выполняет вашу проактивную активность.

Я просто реализовал это для "ты все еще там?" функциональность. Довольно просто.

Просто нужно изменить SendTypingAsync для выполнения любого действия, которое вы хотите отправить пользователю в это время.

person NiteLordz    schedule 03.06.2020