我有一个根机器人,该根机器人托管在Microsoft团队频道上。OAuthCard会显示在Teams频道上,如下所示:
我们正在使用下面的给定行将任何传入的活动发送到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。
是否可以将IInvokeActivity转换或发布到Skill机器人?
[如果再次查看PostActivityAsync()
的签名,您实际上会看到它采用Activity
类型,而不是IMessageActivity
。
public async Task<InvokeResponse> PostActivityAsync(string fromBotId, BotFrameworkSkill toSkill, Uri callbackUrl, Activity activity, CancellationToken cancellationToken)
看着Activity
,您可以看到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()
方法将其转换为InvokeActivity。
AsInvokeActivity()