首页 > 解决方案 > 如何取消机器人框架中的对话框?

问题描述

我试图让我的机器人用户在等待特别慢的 api 时保持忙碌。一旦api返回了我的结果,我将用户转发到一个新对话框并提供一个取消令牌以取消对话框。

当我在取消令牌上调用 Cancel() 时,我希望下面的代码退出stallUntilCompletedDialog

public async Task ResumeAfterFirstDialog(IDialogContext context,
                                         IAwaitable<API.Models.Request> result)
{
    var requestData = await result;
    var response = new API.Models.Response();
    var cancellationToken = new CancellationTokenSource();

    Task.Run(async () =>
    {
        response = await _slowApi.CallApi(requestData, accessToken);

        cancellationToken.Cancel();
    });

    var stallUntilCompletedDialog = new StallUntilCompletedDialog<ApiResponse>();
    await context.Forward(stallUntilCompletedDialog, 
                          ResumeAfterCompletedDialog, 
                          result, 
                          cancellationToken.Token);
}

ResumeAfterCompletedDialog 永远不会启动,我被困在停顿对话框中。当 api 响应时,如何实现对话框退出,以及如何使 api 响应在我的 ResumeAfterCompletedDialog 中可用?

标签: botframework

解决方案


推荐阅读