Как ответить на задачу / выборку в OnturnAsyn c в платформе Bot v4 - PullRequest
2 голосов
/ 25 января 2020

Я использую Bot framewokV4 и хочу вернуть адаптивную карту в модуль задач в командах.

Я использую адаптивную карту со значением отправки как "data":{"msteams":{"type":"task/fetch"}}" для всплывающего окна модуля задач.

Как я могу вернуть базовую c адаптивную карту в модуль задач из метода public override async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default(CancellationToken)).

Я могу вернуться, используя protected override async Task<TaskModuleResponse> OnTeamsTaskModuleFetchAsync(ITurnContext<IInvokeActivity> turnContext, TaskModuleRequest taskModuleRequest, CancellationToken cancellationToken) метод

, но этот метод не запускается, когда Я использую метод OnturnAsyn c.

Пожалуйста, помогите, спасибо.

1 Ответ

2 голосов
/ 25 января 2020

Вы должны еще раз взглянуть на Как работают боты , особенно на разделы "Стек обработки активности" и "Bot logi c". По сути, есть последовательность работы обработчиков событий - OnTurnAsyn c будет называться FIRST в этой цепочке. Если вы полностью обработаете событие внутри собственного OnTurnAsyn c, то цепочка прекратит обработку там. В данном конкретном случае базовый OnTurnAsyn c не вызывается, и это тот, который должен был бы вызвать OnTeamsTaskModuleFetchAsyn c. Взгляните на исходный код OnTurnAsyn c *1003* TeamsActivityHandler, который в вашем конкретном случае не вызывается.

По сути, вам следует:

1) НЕ используйте свой собственный OnTurnAsyn c, если вам не нужно иметь свое собственное ИЛИ 2) Если вам НЕОБХОДИМО реализовать свой OnTurnAsyn c (например, если вы там что-то делаете), то обязательно вызовите base.OnTurnAsyn c изнутри вашего собственного OnTurnAsyn c для любых случаев, когда вы сами не справляетесь.

Конечно, все это предполагает, что вы правильно наследуете от TeamsActivityHandler, а не просто ActivityHandler иначе все, что связано с командами, не будет загружено.

...