群组对话中的机器人可以知道用户何时与之通话

时间:2016-11-23 13:18:41

标签: c# botframework groupchat

我正在编写一个BotFramework机器人,并将它与Slack和Teams集成在一起,并且在一对一的聊天中它运行得非常好。

我也想让它在小组频道中发挥作用,但我不希望它回应每一条评论(因为大多数回复都是“我不明白这个问题”) - 我是使用Luis Dialog以及FormFlow表单和一些提示。

我最初在MessagesController Post方法中尝试了以下设置:

if (questionIsToMe(activity))
{
  await Conversation.SendAsync(activity, () => new OctopusLuisDialog());
}

questionIsToMe定义为:

private bool questionIsToMe(Activity activity)
{
  // IsGroup is null => 1-1 conversation with non-group capable client
  // IsGroup is False => 1-1 conversation within group capable client
  // IsGroup is True AND message starts with OctoBot => group conversation with question 
  // to me
  return !activity.Conversation.IsGroup.HasValue ||
         !activity.Conversation.IsGroup.Value ||
         (activity.Conversation.IsGroup.Value &&
         activity.Text.StartsWith("OctoBot", StringComparison.InvariantCultureIgnoreCase));
    }

对于大多数意图都很好,但是当用户响应FormFlow或提示时会导致问题 - 因为我需要在响应中包含“Octobot”来发送值,我可以从中删除FormFlow,但提示全部都以我的后备文本失败。

如何区分正常的频道聊天和对我的机器人问题的回答?

2 个答案:

答案 0 :(得分:2)

如果机器人被提及,它将显示在活动的实体字段中。

activity.Entities.Items [0] =     {{       “提到”:{         “id”:“{你的bot slack id}”,         “名字”:“{你的机器人名称}”       },       “text”:“@ {your bot name}”     }}

答案 1 :(得分:0)

无法知道何时将消息发送到您的机器人。您可以尝试:

  • 仅在知道答案时才响应消息
  • 仅在邮件包含机器人名称时才响应