我正在尝试在EchoBot example of the MS Bot Framework之后本地运行updates to SDK V3,并且无法创建对话框。
致电
Conversation.SendAsync(activity, () => EchoChainDialog.dialog);
我得到的错误是
System.ArgumentNullException occurred
HResult=-2147467261
Message=Value cannot be null.
Parameter name: botId
ParamName=botId
Source=Microsoft.Bot.Builder
StackTrace:
at Microsoft.Bot.Builder.Internals.Fibers.SetField.CheckNull[T](String name, T value)
InnerException:
我想知道null botID的含义。我在Getting Started tutorial之后在本地运行应用程序。它说不需要为机器人提供AppID,我相当肯定AppId和botId不是一回事。我似乎找不到关于这个botId字段的文档。
还有其他人遇到过此问题吗?是注册机器人并提供AppId的唯一方法吗?
答案 0 :(得分:2)
显然你可以做到
ConfigurationManager.AppSettings["BotId"] = "test";
它会起作用。我不确定该怎么设置" BotId"字段,但如果您遇到此问题并且只需要在本地进行测试,则在调用MessagesController.cs
之前在Conversation.SendAsync
中添加此行是一种解决方法。
答案 1 :(得分:1)
它必须位于web.config或app.config
中<appSettings>
<add key="BotId" value="[Your Id]" />
<add key="MicrosoftAppId" value="[The app id]" />
<add key="MicrosoftAppPassword" value="[The client secret]" />
</appSettings>
BotBuilder中的autofac魔法从那里拾取它,而只从那里。
我尝试以其他方式设置它,因为我想使用新的json样式配置,但到目前为止还没有成功。我想必须有某种方式,可以实现一个IBotIdResolver,我尝试过,但它似乎需要更多的自定义,我无法让Conversation类接受我的实现。