我正在为 Microsoft Teams 开发机器人。我正在使用自定义机器人功能。我让机器人作为侧载包工作,但由于网络的限制,我需要将机器人保留在内部并使用自定义机器人功能。我目前正在通过使用 ngrok 隧道连接到我的本地主机来测试它。
当我尝试创建回复时,我现在遇到了一个问题。每当我这样称呼时:
var reply = activity.CreateReply(message.ReadToEnd());
我得到一个 NullReferenceException 说“对象引用未设置为对象的实例”。message 是一个打开的 .txt 文件。每次调用 activity.CreateReply() 时都会出现此错误。我不明白的部分是 Bot Framework Emulator 中的一切都按预期工作,并且当 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