我有一个根漫游器,该漫游器托管在Microsoft团队频道上。 OAuthCard会显示在“团队”频道上,如下所示:
我们使用下面的给定行将任何传入的活动发送到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机器人?
答案 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);