microsoft / botbuilder-dotnet

Welcome to the Bot Framework SDK for .NET repository, which is the home for the libraries and packages that enable developers to build sophisticated bot applications using .NET.
https://github.com/Microsoft/botframework
MIT License
878 stars 484 forks source link

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

Open jk-msft opened 2 weeks ago

jk-msft commented 2 weeks ago

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();
    });
jk-msft commented 2 weeks ago

I created a similar ticket for AI Library

tracyboehrer commented 2 weeks ago

@ceciliaavila Write a sample for this to test with too. You'll need to test on a specific Teams version that jk-msft can help with if needed.

sw-joelmut commented 1 week ago

Hi @jk-msft,

We are implementing this feature and wanted to know if we would require targeting a specific endpoint or Teams version for testing. If this is the case, can you share it with us?

Thanks!

jk-msft commented 1 week ago

Hi @sw-joelmut , can you find me in Teams? kimjason@microsoft.com I'll share the details with you internally. Thanks!