Botframework - 主动 - 冷呼叫时的UnauthorizedAccessException

时间:2017-04-21 20:53:11

标签: botframework

我的普通机器人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

任何类型的帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

之前我遇到过这个错误。从本质上讲,消息来自的渠道是&#34;信任&#34;。解决方法是信任该频道访问。

试试这个(第一个参数应该是服务网址):

MicrosoftAppCredentials.TrustServiceUrl(@"https://skype.botframework.com", DateTime.MaxValue);