Skip to content

Provide two new invoke handlers, (message/fetchTask, message/submitAction) for Custom Feedback Loops #6865

@jk-msft

Description

@jk-msft

Overview

We currently allow Bot developers to receive feedback from Teams users using Feedback Loops. When a user clicks "Submit" the feedback, message/submitAction invoke is fired. We need a new invoke handler for message/submitAction invoke.

We are introducing Bot developers to create Custom feedback loops. These custom feedback loops allow Bot developers to show either an Adaptive Card (AC) task module or a website task module. If a bot sent a message with custom feedback loop enabled to the Teams client, the Teams client will fire new invoke, message/fetchTask to determine whether the custom feedback loop should show an AC task module or a website task module. We need another invoke handler for message/fetchTask invoke.

Example Screenshots

Default Feedback

Image

Custom Feedback (AC)

Image

Custom Feedback (Website)

Image

Return Values

How I am currently handling these two invokes inside onInvokeActivity

message/submitAction

{
  status: 200,
  body: {}
}

message/fetchTask

Adaptive Card

const taskModuleReturn = {  
  task: {  
    type: 'continue',  
    value: {  
      card: [Object], // Should contain valid Adaptive Card Payload 
      height: 200,  
      width: 400,  
      title: 'Test Task Module Title with AC'  
    }  
  }  
};
return {
  status: 200,
  body: taskModuleReturn
};

Website URL

const taskModuleReturn = {  
  task: {  
    type: 'continue',  
    value: {  
      url: "https://bing.com", // Should contain valid URL with the valid domain listed under App Manifest
    }  
  }  
};
return {
  status: 200,
  body: taskModuleReturn
};

Sample Bot Code

Send messages with feedback loop

    this.onMessage(async (context, next) => {
      console.log("Running with Message Activity.");
      const removedMentionText = TurnContext.removeRecipientMention(context.activity);
      const txt = removedMentionText.toLowerCase().replace(/\n|\r/g, "").trim();
      await context.sendActivity(`Echo: ${txt}`);
      await context.sendActivity({
        type: ActivityTypes.Message,
        text: "Old message with feedbackLoopEnabled = true",
        channelData: {
          feedbackLoopEnabled: true // use default feedback form
        },
      });
      await context.sendActivity({
        type: ActivityTypes.Message,
        text: "Old message with feedbackLoopEnabled = false",
        channelData: {
          feedbackLoopEnabled: false // use default feedback form
        },
      });
      await context.sendActivity({
        type: ActivityTypes.Message,
        text: "new message with feedbackLoop = default",
        channelData: {
          feedbackLoop: {
            type: "default"
          }
        },
      });
      await context.sendActivity({
        type: ActivityTypes.Message,
        text: "new message with feedbackLoop = custom",
        channelData: {
          feedbackLoop: {
            type: "custom"
          }
        },
      });
      // By calling next() you ensure that the next BotHandler is run.
      await next();
    });

Metadata

Metadata

Assignees

Labels

Area: TeamsThe issue is related to Teams supportfeature-requestA request for new functionality or an enhancement to an existing one.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions