/// <summary> /// Forward an inbound activity on to the Skill. This is a synchronous operation whereby all response activities are aggregated and returned in one batch. /// </summary> /// <param name="innerDc">Inner DialogContext.</param> /// <param name="activity">Activity.</param> /// <returns>DialogTurnResult.</returns> private async Task <DialogTurnResult> ForwardToSkillAsync(DialogContext innerDc, Activity activity) { try { var endOfConversation = await _skillTransport.ForwardToSkillAsync(innerDc.Context, activity, GetTokenRequestCallback(innerDc)); if (endOfConversation) { await innerDc.Context.SendActivityAsync(new Activity(type : ActivityTypes.Trace, text : $"<--Ending the skill conversation with the {_skillManifest.Name} Skill and handing off to Parent Bot.")); return(await innerDc.EndDialogAsync()); } else { return(EndOfTurn); } } catch { // Something went wrong forwarding to the skill, so end dialog cleanly and throw so the error is logged. // NOTE: errors within the skill itself are handled by the OnTurnError handler on the adapter. await innerDc.EndDialogAsync(); throw; } }
/// <summary> /// Forward an inbound activity on to the Skill. This is a synchronous operation whereby all response activities are aggregated and returned in one batch. /// </summary> /// <param name="innerDc">Inner DialogContext.</param> /// <param name="activity">Activity.</param> /// <returns>DialogTurnResult.</returns> private async Task <DialogTurnResult> ForwardToSkillAsync(DialogContext innerDc, Activity activity) { try { var endOfConversation = await _skillTransport.ForwardToSkillAsync(innerDc.Context, activity, GetTokenRequestCallback(innerDc), GetAPIResponseCallback); if (endOfConversation) { await innerDc.Context.SendActivityAsync(new Activity(type : ActivityTypes.Trace, text : $"<--Ending the skill conversation with the {_skillManifest.Name} Skill and handing off to Parent Bot.")); return(await innerDc.EndDialogAsync()); } else { var dialogResult = new DialogTurnResult(DialogTurnStatus.Waiting); // if there's any response we need to send to the skill queued // forward to skill and start a new turn while (_queuedResponses.Count > 0 && dialogResult.Status != DialogTurnStatus.Complete && dialogResult.Status != DialogTurnStatus.Cancelled) { dialogResult = await ForwardToSkillAsync(innerDc, _queuedResponses.Dequeue()); } return(dialogResult); } } catch { // Something went wrong forwarding to the skill, so end dialog cleanly and throw so the error is logged. // NOTE: errors within the skill itself are handled by the OnTurnError handler on the adapter. await innerDc.EndDialogAsync(); throw; } }