【问题标题】:How can I prevent my bot replying to every message in Slack?如何防止我的机器人回复 Slack 中的每条消息?
【发布时间】:2017-03-20 16:21:21
【问题描述】:

当 ms bot 集成到 slack 时,它在回复直接消息时可以正常工作,但是如果将 bot 添加到频道,它会回复发布到频道中的每条消息,而不仅仅是像 @myCustomBot '这是我的问题'

是否可以将传入的消息过滤到机器人中,使其只回复专门针对机器人的频道消息?

到目前为止,它使用您为新机器人项目获得的基本控制器操作:

public async Task<HttpResponseMessage> Post([FromBody] Activity activity)
{
    if (activity.Type == ActivityTypes.Message)
    {
        ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));

        connector.Conversations.ReplyToActivityAsync(activity.CreateReply("hi there"));
        //...
    }
    //...
}

【问题讨论】:

  • 逻辑会声明你测试消息字符串中的短语“@myCustomBot”来决定你是否回应
  • 好计划,但我担心的是,您正在将您的 bot 实现与如何将其安装到消息传递通道中。例如。如果您安装到 slack 并调用不同的机器人安装,您的代码将会失败。同样,如果您在另一个应用程序(例如 Skype)中使用 - 您会收到相同的介绍信息吗?
  • 嗯,很明显它应该知道它的名字——这将在它的配置中,所以,你会测试它..

标签: c# botframework


【解决方案1】:

所以逻辑是这样的:

1) 测试人们何时直接使用机器人;

2) 根据渠道进行区分。

public async Task<HttpResponseMessage> Post([FromBody] Activity activity)
{
    if (activity.Type == ActivityTypes.Message)
    {
        if (activity.ChannelId === "slack") {
            if (activity.Text.ToLower().StartsWith("@myCustomBot") {
                return Request.CreateResponse(HttpStatusCode.OK); //quit
            }
        }
        else if (activity.ChannelId === "facebook") {
            //similar check, and if true, then:
                //return Request.CreateResponse(HttpStatusCode.OK);
        }

        //otherwise, keep going:

        ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));

        connector.Conversations.ReplyToActivityAsync(activity.CreateReply("hi there"));
        //...
    }
    //...
}

【讨论】:

  • 谢谢,最后我让它变得更聪明了,并构建了activity.Text.ToLower().StartsWith("@myCustomBot") 检查,因此它从activity.Recipient.Name 构建了收件人名称,因此它没有在c#代码中耦合。
  • 谢谢。我在我的 Slack 频道中引起了一些骚动,机器人回复了每条消息哈哈
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-01
  • 2023-03-21
  • 2017-04-27
  • 1970-01-01
  • 2022-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多