Post IInvokeActivity от root бота до умения бота - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть бот root, который размещен на канале команд Microsoft. OAuthCard отображается на канале Команды, как показано ниже:

enter image description here

, которую мы используем ниже указанной строки для отправки любой входящей активности боту Skill:

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

Когда мы нажимаем кнопку Login TeamsActivityHandler генерирует IInvokeActivity , но я не могу снова передать управление роботу Skill из-за PostActivityAsyn c Метод принимает только IMessageActivity .

Есть ли способ конвертировать или опубликовать функцию IInvokeActivity в Skill?

1 Ответ

0 голосов
/ 16 апреля 2020

Если вы снова посмотрите на подпись 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);
...