1

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

我也想让它在群组频道中工作,但我不希望它回复每条评论(因为大多数回复都是“我不明白这个问题”) - 我使用的是 Luis对话框以及 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 或 Prompts 时会导致问题 - 因为我需要在响应中包含“Octobot”以发送值,我可以从 FormFlow 中删除它,但是提示都失败了我的后备文本。

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

4

2 回答 2

2

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

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

于 2016-11-23T16:50:05.147 回答
0

无法知道消息何时被定向到您的机器人。您可以尝试:

  • 仅在知道答案时才回复消息
  • 仅当消息包含机器人名称时才响应
于 2016-11-23T13:35:17.413 回答