我正在使用C#Bot Framework库从Bot State Service检索一些数据。每当channelId == "emulator"
在下面的代码中时,它都会以400 Bad Request
失败。看起来Emulator版本3.0.0.59和3.5.27都使用此通道ID。这是返回的有效负载:
{
"error": {
"code": "BadArgument",
"message": "Invalid channel ID"
}
}
请注意,如果我将channelId
更改为"skype"
之类的其他内容,则会按预期工作。
var credentials = new MicrosoftAppCredentials(id, password);
this.botState = new BotState(new StateClient(credentials));
var channelId = activity.ChannelId;
await botState.GetUserDataAsync(channelId, activity.From.Id);
答案 0 :(得分:1)
对于模拟器,他们需要在创建状态客户端时使用activity的serviceurl。 Builder会在连接器客户端工厂中自动执行此操作:
if (IsEmulator(this.address)) { // for emulator we should use serviceUri of the emulator for storage return new StateClient(this.serviceUri, this.credentials); }
该错误来自state.botframework.com(这是stateclient的默认端点),因为模拟器不是状态服务的有效channelid。