将IInvokeActivity从根机器人发布到技能机器人

时间:2020-04-16 12:28:20

标签: botframework chatbot microsoft-teams azure-language-understanding

我有一个根漫游器,该漫游器托管在Microsoft团队频道上。 OAuthCard会显示在“团队”频道上,如下所示:

enter image description here

我们使用下面的给定行将任何传入的活动发送到Skill bot:

    // route the activity to the skill
    var response = await _skillClient.PostActivityAsync(_configuration["MicrosoftAppId"], targetSkill, _skillsConfig.SkillHostEndpoint, (Activity)turnContext.Activity, cancellationToken);

当我们单击登录按钮时,TeamsActivityHandler生成 IInvokeActivity ,但是由于PostActivityAsync方法仅接受 IMessageActivity <,我无法将控制权再次传递给Skill bot / strong>。

是否可以将IInvokeActivity转换或发布到Skill机器人?

1 个答案:

答案 0 :(得分:0)

如果您再次查看PostActivityAsync()的签名,您会发现它使用的是 Activity 类型,而不是IMessageActivity

public async Task<InvokeResponse> PostActivityAsync(string fromBotId, BotFrameworkSkill toSkill, Uri callbackUrl, Activity activity, CancellationToken cancellationToken)

看看Activity,您可以看到Activity实现了所有Activity类型,可以无限制地来回投射它们

    public partial class Activity :
        IActivity,
        IConversationUpdateActivity,
        IContactRelationUpdateActivity,
        IInstallationUpdateActivity,
        IMessageActivity,
        IMessageUpdateActivity,
        IMessageDeleteActivity,
        IMessageReactionActivity,
        ISuggestionActivity,
        ITypingActivity,
        IEndOfConversationActivity,
        IEventActivity,
        IInvokeActivity,
        ITraceActivity,
        IHandoffActivity { // ... }

另外,如果您查看IInvokeActivity

public interface IInvokeActivity : IActivity

它实现IActivity,它指定实现它的类必须具有IInvokeActivity AsInvokeActivity();


因此,当您将IInvokeActivity传递到PostActivityAsync()时,请使用AsInvokeActivity()方法将其转换为InvokeActivity。

await _skillClient.PostActivityAsync(_botId, targetSkill, _skillsConfig.SkillHostEndpoint, (Activity)turnContext.Activity.AsInvokeActivity(), cancellationToken);