我的普通机器人MessageController旁边有一个自定义的WebApi控制器。此自定义Controller经常调用以执行主动消息传递给用户以发送通知。
public bool Post([FromBody]SchedulerTrigger triggerInfo)
{
try
{
//Initiate background processing of notifications
Task.Run(() => NotificationTask.NotificationProcessing(triggerInfo));
}
catch (Exception ex)
{
throw ex;
}
return true;
}
控制器没有[BotAuthentication]属性,因为它是从其他地方调用的。
NotificationProcessing函数进行了一些处理,但最后它调用了一个Dialog:
public static async Task Resume(string resumptionCookie)
{
//Deserialize reference to conversation
ConversationReference conversationReference = JsonConvert.DeserializeObject<ConversationReference>(resumptionCookie);
using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, message))
{
var botData = scope.Resolve<IBotData>();
await botData.LoadAsync(CancellationToken.None);
//This is our dialog stack
var task = scope.Resolve<IDialogTask>();
//interrupt the stack. This means that we're stopping whatever conversation that is currently happening with the user
//Then adding this stack to run and once it's finished, we will be back to the original conversation
var dialog = new MyProActiveDialog();
try
{
task.Call(dialog.Void<object, IMessageActivity>(), null);
await task.PollAsync(CancellationToken.None);
}
catch (Exception ex)
{
//TODO
}
finally
{
//flush dialog stack
await botData.FlushAsync(CancellationToken.None);
}
}
}
当Web服务启动并运行时,一切正常,并且在microsoft bot和我的webservice之间进行任何类型的聊天之后,至少使用https://login.microsoftonline.com/common/oauth2/v2.0/token进行一次登录。
但是,如果我重启我的网络服务并启动主动讨论,我会收到UnauthorizedAccessException。
我尝试使用BotAuthenticator执行手动身份验证或使用传递的令牌添加[BotAuthentication],但我总是使用UnauthorizedAccessException。
所以我注意到Beerer只是一个冷酷的开始。我发现无法在冷启动时强制进行身份验证... Image of Fiddler Web Service --> To Bot
任何类型的帮助都会受到赞赏。
答案 0 :(得分:1)
之前我遇到过这个错误。从本质上讲,消息来自的渠道是&#34;信任&#34;。解决方法是信任该频道访问。
试试这个(第一个参数应该是服务网址):
MicrosoftAppCredentials.TrustServiceUrl(@"https://skype.botframework.com", DateTime.MaxValue);