团队机器人Activity.CreateReply抛出NullReferenceException

时间:2017-06-27 16:13:30

标签: c# botframework microsoft-teams

我正在为Microsoft Teams开发机器人。我正在使用自定义机器人功能。我让机器人作为侧载软件包工作,但由于我的网络限制,我需要保持机器人内部并使用自定义机器人功能。我目前正在测试它,使用ngrok隧道到我的localhost。

当我尝试创建回复时,我现在遇到了问题。每当我打电话给你:

var reply = activity.CreateReply(message.ReadToEnd());

我得到一个NullReferenceException,说“对象引用未设置为对象的实例”。 message是一个打开的.txt文件。每次调用activity.CreateReply()时都会收到此错误。我不明白的部分是Bot框架模拟器中的所有内容都是按预期运行的,当bot是一个侧载软件包时,但是当bot是自定义机器人时则不行。

这是我的完整Post方法:

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

        if (activity.Type == ActivityTypes.Message)
        {
            // Commands:
            // Retrieve TFS Work Item(s)
            if (new Regex(@"\but\s?\d{5}\b").IsMatch(activity.Text.ToLower()))
            {
                var reply = new RetrieveWorkItem();
                await connector.Conversations.ReplyToActivityAsync(reply.Response(activity));
            }
            // Help
            else if (activity.Text.ToLower().Contains("help"))
            {
                var message = File.OpenText($"{System.AppDomain.CurrentDomain.BaseDirectory}/Messages/HelpMessage.txt");
                var reply = activity.CreateReply(message.ReadToEnd());
                await connector.Conversations.ReplyToActivityAsync(reply);
            }
            // Not Recognized
            else
            {
                var reply = activity.CreateReply("Command not recognized. Type \"@Keller Bot Help\" for a list of commands.");
                await connector.Conversations.ReplyToActivityAsync(reply);
            }
        }
        else
        {
            HandleSystemMessage(activity, connector);
        }

        var response = Request.CreateResponse(HttpStatusCode.OK);
        return response;
    }

这是机器人发送的完整错误和StackTrace:https://pastebin.com/ZSrjrA9z

1 个答案:

答案 0 :(得分:0)

根据说明here,您说您正在将其作为自定义机器人实施。问题是看起来好像你正在使用Bot Framework消息传递调用(例如CreateReply()),因为当你经历时你没有处理注册的BF机器人,所以它不会起作用自定义机器人流程。

相反,你可以创建一个新的Activity()并返回它以响应HttpPost请求。

我们确实有sample您可以查看,以防万一。