我有一个根机器人,它托管在微软团队频道上。在Teams上显示一个OAuthCard,如下所示:

我们正在使用下面给定的行将任何传入的活动发送给技能机器人:
// route the activity to the skill
var response = await _skillClient.PostActivityAsync(_configuration["MicrosoftAppId"], targetSkill, _skillsConfig.SkillHostEndpoint, (Activity)turnContext.Activity, cancellationToken);当我们单击“登录IInvokeActivity,”按钮时,TeamsActivityHandler会生成,但由于PostActivityAsync方法只接受IMessageActivity.,所以无法再次将控制传递给技能机器人。
是否有一种将IInvokeActivity转换为技术机器人的方法?
发布于 2020-04-16 16:57:38
如果您再次查看Activity的签名,您会发现实际上需要一个类型的,而不是IMessageActivity。
public async Task<InvokeResponse> PostActivityAsync(string fromBotId, BotFrameworkSkill toSkill, Uri callbackUrl, Activity activity, CancellationToken cancellationToken)查看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);https://stackoverflow.com/questions/61250260
复制相似问题