Botframework 如何在没有TeamsActivityHandler的情况下使用Node JS响应Bot framework v4中的任务模块或任务/获取?

Botframework 如何在没有TeamsActivityHandler的情况下使用Node JS响应Bot framework v4中的任务模块或任务/获取?,botframework,bots,microsoft-teams,Botframework,Bots,Microsoft Teams,在团队中,我需要使用NodeJS和botbuilder4.8用网页填充任务模块。一旦Bot从带有“msteams”的AdaptiveCard检测到调用:{“type”:“task/fetch”}: if(turnContext.activity.type==ActivityTypes.Invoke){… 我不知道如何响应HTTP 200状态,内容类型和正文如下: { "task": { "type": "continue", "value": {

在团队中,我需要使用NodeJS和botbuilder4.8用网页填充任务模块。一旦Bot从带有“msteams”的AdaptiveCard检测到调用:{“type”:“task/fetch”}:

if(turnContext.activity.type==ActivityTypes.Invoke){…

我不知道如何响应HTTP 200状态,内容类型和正文如下:

{
    "task": {
      "type": "continue",
      "value": {
        "title": "My Title",
        "height": 200,
        "width": 500,
        "url": "[myURL]",
        "fallbackUrl": "[myURL]"
      }
    }
  }
记录于:

我不能从TeamsActivityHandler扩展

我甚至试过:

const botbuilder_core_1 = require("botbuilder-core");
return botbuilder_core_1.ActivityHandler.createInvokeResponse(myBody);
它抛出[Adapter onTurnError]:错误:未设置附件的ContentType

是否有MessageFactory类或类似类可以简单地发送响应

目前的样品对我来说不够

Bot.js
if (turnContext.activity.type === ActivityTypes.Invoke) {
    // Handler for Adaptive Cards actions 
    if (turnContext.activity.value != undefined && turnContext.activity.value.id != undefined) {
    switch (turnContext.activity.value.id) {
        case "openOfficesMaps":
            await this.findOfficesAdressesDialog.displayMaps(turnContext);
            break;
        ...

class FindOfficesAdressesDialog extends SalesHubComponentDialog {
    async displayMaps(turnContext) {
        // If it were an adaptive card I would do this:
        return await turnContext.sendActivity({
            attachments: [CardFactory.adaptiveCard(officesMapTaskModule)]
        });

officesMapTaskModule.json
{
    "task": {
      "type": "continue",
      "value": {
        "title": "Offices Map",
        "height": 500,
        "width": "medium",
        "url": "[myURL]/$24web/officesMapTaskModule.html",
        "fallbackUrl": "[myURL]/%24web/officesMapTaskModule.html"
      }
    }
  }

class FindOfficesAdressesDialog extends SalesHubComponentDialog {
    async displayMaps(turnContext) {
        // This gives content type is missing
        const botbuilder_core_1 = require("botbuilder-core");
        return botbuilder_core_1.ActivityHandler.createInvokeResponse(body); 

谢谢

是的,您需要
TeamsaActivityHandler
。为什么不能像示例那样扩展它?请包含您的ActivityHandler的完整代码。该示例使整个Bot声明为:类TeamsTaskModuleBot扩展TeamsaActivityHandler{仅仅因为一个对话框需要显示一个弹出窗口,就让整个bot从某个通道的处理程序扩展不是一个好的设计。在我的例子中,类findofficesadressdialog已经从另一个类扩展了,我是否需要解决nodejs中的多重继承来解决它?提前感谢@mdrichardsonAh。我明白了。
TeamsActivityHandler
只是团队的附加处理程序,但它仍然支持所有正常的
ActivityHandler
s而不覆盖任何。请参阅。您可以使用它,并且仍然对所有通道使用其中的正常
ActivityHandler
方法。我甚至使用TeamsActivityHandler扩展了我的Bot类,然后我得到了一个无响应的消息然后,我尝试了另一种方法,比如创建一个从TeamsActivityHandler扩展而来的单独类,当Bot接收到ActivityTypes.Invoke消息时,该类由Bot实例化。仅当我这样做时才在该类中进行。onInvokeActivity(turnContext);makes handleTeamsTaskModuleFetch()被调用,但也没有得到好的结果。我仍然不知道如何让团队收到一个简单的AdaptiveCard/URL以显示在这些弹出窗口中。在没有看到您的代码的情况下,我不确定如何最好地帮助您。从一个团队示例(#50-60)开始重新开始从这里开始;它在所有通道上都有效,您只需要在非
onTeams*
方法中做一些事情。您需要
TeamsActivityHandler
,并且您只需要一个实现
ActivityHandler
的类。是的,您需要
TeamsActivityHandler
。为什么不能像示例那样扩展它呢?请包括:为ActivityHandler编写完整代码。该示例使整个Bot声明为:类TeamsTaskModuleBot扩展TeamsActivityHandler{仅仅因为一个对话框需要显示一个弹出窗口,就让整个bot从某个通道的处理程序扩展不是一个好的设计。在我的例子中,类findofficesadressdialog已经从另一个类扩展了,我是否需要解决nodejs中的多重继承来解决它?提前感谢@mdrichardsonAh。我明白了。
TeamsActivityHandler
只是团队的附加处理程序,但它仍然支持所有正常的
ActivityHandler
s而不覆盖任何。请参阅。您可以使用它,并且仍然对所有通道使用其中的正常
ActivityHandler
方法。我甚至使用TeamsActivityHandler扩展了我的Bot类,然后我得到了一个无响应的消息然后,我尝试了另一种方法,比如创建一个从TeamsActivityHandler扩展而来的单独类,当Bot接收到ActivityTypes.Invoke消息时,该类由Bot实例化。仅当我这样做时才在该类中进行。onInvokeActivity(turnContext);makes handleTeamsTaskModuleFetch()被调用,但也没有得到好的结果。我仍然不知道如何让团队收到一个简单的AdaptiveCard/URL以显示在这些弹出窗口中。在没有看到您的代码的情况下,我不确定如何最好地帮助您。从一个团队示例(#50-60)开始重新开始从这里开始;它可以在所有通道上工作,您只需要在非
onTeams*
方法中执行一些操作。您需要
TeamsActivityHandler
,并且只需要一个实现
ActivityHandler
的类。