Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我怎样才能防止我的机器人对每一条消息都反应迟钝?_C#_Botframework - Fatal编程技术网

C# 我怎样才能防止我的机器人对每一条消息都反应迟钝?

C# 我怎样才能防止我的机器人对每一条消息都反应迟钝?,c#,botframework,C#,Botframework,当ms bot集成到slack中时,它在回复直接消息时工作正常。但是,如果将该bot添加到频道中,它会回复该频道中发布的每一条消息,而不仅仅是像@myCustomBot“这是我的问题”这样的消息。 是否可以将传入消息过滤到bot中,使其只回复专门指向bot的通道消息 到目前为止,它使用的是您为新bot项目获得的基本控制器操作: public async Task<HttpResponseMessage> Post([FromBody] Activity activity) {

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

是否可以将传入消息过滤到bot中,使其只回复专门指向bot的通道消息

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

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"));
        //...
    }
    //...
}
公共异步任务发布([FromBody]活动)
{
if(activity.Type==ActivityTypes.Message)
{
ConnectorClient连接器=新的ConnectorClient(新Uri(activity.ServiceUrl));
connector.Conversations.ReplyToActivityAsync(activity.CreateReply(“hi-there”);
//...
}
//...
}

所以逻辑是这样的:

1) 测试人们何时直接向bot寻址

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"));
        //...
    }
    //...
}
公共异步任务发布([FromBody]活动)
{
if(activity.Type==ActivityTypes.Message)
{
如果(activity.ChannelId==“slack”){
if(activity.Text.ToLower().StartsWith(“@myCustomBot”){
return Request.CreateResponse(HttpStatusCode.OK);//退出
}
}
else if(activity.ChannelId==“facebook”){
//类似检查,如果为真,则:
//返回Request.CreateResponse(HttpStatusCode.OK);
}
//否则,请继续:
ConnectorClient连接器=新的ConnectorClient(新Uri(activity.ServiceUrl));
connector.Conversations.ReplyToActivityAsync(activity.CreateReply(“hi-there”);
//...
}
//...
}

逻辑将说明您测试消息字符串中的短语“@myCustomBot”要决定您是否响应或不好的计划,但我在这里担心的是,您正在将您的bot实现与如何将其安装到消息传递通道相耦合。例如,如果您安装到slack并将bot安装称为其他内容,您的代码将失败。同样,如果您在另一个应用程序中使用(skype为例)-你会收到同样的介绍信息吗?很明显,它应该知道它的名称-这将在它的配置中,因此,你需要对此进行测试..谢谢,最后我稍微聪明了一点,并构建了
activity.Text.ToLower().StartsWith(“@myCustomBot”)
检查,因此它根据
activity.recipient.name
生成收件人名称,因此它没有耦合到c代码中。谢谢。我在我的空闲频道中引起了一些骚动,机器人对每条消息都做出了响应哈哈