Closed andrewconnell closed 8 months ago
@andrewconnell - Thanks for reporting your issue. We will check this at our end and update the document accordingly.
@andrewconnell -We are checking this with the sample team, we will let you know once we have any update.
Hello @andrewconnell - Sorry for delay in response. We have tried to setup and debug this sample but debugger is not hitting for "handleTeamsMessagingExtensionBotMessagePreviewSend" method, so we are looking into it.
handleTeamsMessagingExtensionBotMessagePreviewSend
We will let you know the further updates once we have any.
We have also raised one issue here: https://github.com/microsoft/botbuilder-js/issues/4581
@ChetanSharma-msft any update? I haven't seen any activity on that file in the repo...
I see the reply comment from the the botbuilder issue... any thoughts on their response?
Following up... WRT the root of my question, what's the proper way to do this, where this = "respond to botMessagePreview send"?
Hello @andrewconnell - Sorry for delay in response. We are looking into this issue and let you know the updates, if any.
Regardless of the sample, it's a simple question: How are you supposed to respond to a botMessagePreview send event with TypeScript using the Teams JS SDK?
This sample is the only reference I've found which is why I referenced it in my issue.
Hello @andrewconnell - We will investigate/debug the issue as per the inputs from engineering person from bot builder repo and let you know the updates.
Hello @andrewconnell - Thanks for your patience. I have debugged the code and please find below analysis: (I have executed NodeJS sample)
Below sample is working fine for me: https://github.com/OfficeDev/Microsoft-Teams-Samples/blob/main/samples/msgext-action-preview/nodejs/bots/teamsMessagingExtensionsActionPreviewBot.js#L50-L74
I am able to prepare the card and able to send it in Teams channel:
I am also act on the posted card and able to submit the data:
I can see that the return type of method is Promise<void>
only:
(method) TeamsMessagingExtensionsActionPreviewBot.handleTeamsMessagingExtensionBotMessagePreviewSend(context: any, action: any): Promise
Used "botbuilder": "^4.18.0"
but as per bot builder repro return type is: botbuilder-js/libraries/botbuilder/src/teamsActivityHandler.ts at main · microsoft/botbuilder-js (github.com)
Promise<MessagingExtensionActionRequest>
Action: we will check this with engineering team and let you know.
In C# sample also, we can see the return type as
Task<MessagingExtensionActionResponse>
OnTeamsMessagingExtensionBotMessagePreviewSendAsync
That's why we can return like below: return new MessagingExtensionActionResponse(); Or return null;
Also, regarding the below documentation: https://learn.microsoft.com/en-us/microsoftteams/platform/messaging-extensions/how-to/action-commands/respond-to-task-module-submit?tabs=dotnet%2Cdotnet-1#respond-to-botmessagepreview-send
We will check with engineering team and let you know.
Regarding your below query: How are you supposed to respond to a botMessagePreview send event with TypeScript using the Teams JS SDK? => I will try to create a new TypeScript sample and let you know.
Regardless of the sample, it's a simple question: How are you supposed to respond to a botMessagePreview send event with TypeScript using the Teams JS SDK?
This sample is the only reference I've found which is why I referenced it in my issue.
[ ![68747470733a2f2f6d656469612e67697068792e636f6d2f6d656469612f74584c34464850536e564a30412f67697068792e676966]
Hello @andrewconnell - I have created a new TypeScript sample and able to return the response from handleTeamsMessagingExtensionBotMessagePreviewSend
method.
Simply used below code:
public async handleTeamsMessagingExtensionBotMessagePreviewSend(context, action): Promise<any> {
// The data has been returned to the bot in the action structure.
const submitData = AdaptiveCardHelper.toSubmitExampleData(action);
// This is a send so we are done and we will create the adaptive card editor.
const adaptiveCard = AdaptiveCardHelper.createAdaptiveCardAttachment(submitData);
var responseActivity = { type: 'message', attachments: [adaptiveCard] };
if (submitData.UserAttributionSelect === 'true') {
responseActivity = {
type: 'message',
attachments: [adaptiveCard],
};
}
await context.sendActivity(responseActivity);
}
Note: We don't need to send proactive messages via using Adapter.
We can use this: await context.sendActivity(responseActivity);
We will update the documentation accordingly for proactive messages and other Web service related contents.
Please let me know if you still have any query.
Raised the doc bug as well: https://github.com/MicrosoftDocs/msteams-docs/issues/10360
@ChetanSharma-msft said:
Please let me know if you still have any query.
I'll try to repeat my process to see I still see the issue., but unless the SDK changed, I'm not sure I see a difference in what would get around the issue I was running into. When I tried it, the TypeScript compiler was failing due to no response by the method. In the snippet you shared, it doesn't return anything, but (as my OP mentioned) the signature in the docs explicitly state otherwise (see this).
Shouldn't the docs AND underlying source say that the return type could be Promise<MessagingExtensionActionResponse>
(as it says now) and undefined?
The way it's (docs & source) are written, it implies you must return a Promise of type MessagingExtensionActionResponse
, yet the snippet in your comment doesn't... it changes it to an any
.
Hello @andrewconnell - Thanks for the patience.
I have investigated this issue further and after changing the response type to Promise<MessagingExtensionActionResponse>
And returning the response like below is also working:
return { composeExtension: { type: "result", attachmentLayout: "list", attachments: [adaptiveCard], }, };
public async handleTeamsMessagingExtensionBotMessagePreviewSend(context, action): Promise<MessagingExtensionActionResponse> {
// The data has been returned to the bot in the action structure.
const submitData = AdaptiveCardHelper.toSubmitExampleData(action);
// This is a send so we are done and we will create the adaptive card editor.
const adaptiveCard = AdaptiveCardHelper.createAdaptiveCardAttachment(submitData);
var responseActivity = { type: 'message', attachments: [adaptiveCard], channelData: context.channelData };
if (submitData.UserAttributionSelect === ' true') {
responseActivity = {
type: 'message',
attachments: [adaptiveCard],
channelData: {
onBehalfOf: [
{
itemid: 0,
mentionType: 'person',
mri: context.activity.from.id,
displayName: context.activity.from.name
}
]
}
};
}
return {
composeExtension: {
type: "result",
attachmentLayout: "list",
attachments: [adaptiveCard],
},
};
// await context.sendActivity(responseActivity);
}
Could you please try and let us know if you still face the issue.
Let me get this straight... I post this message on October 13, 2023, over 120 days ago, it took 58 days to get a confirmation... clearly I've had to come up with another solution in the meantime.
You finally prove a meaningful response & while I'd like to test it, I have but just a few days before you close the issue? 😡
Seems pretty crappy. I'll test it when I can but I'm swamped with other commitments... will either reopen this issue or create a new one.
This issue has been automatically marked as stale because it has been marked as requiring author feedback but has not had any activity for 3 days. It will be closed if no further activity occurs within 3 days of this comment.
The section Respond to botMessagePreview send states (emphasis added with my numbered callouts):
WRT 1️⃣ unable to post a message
The docs say this should be a proactive message to the channel... agreed... but the code provided doesn't do that. If the code in the listing is used, you get an error that the bot isn't a member in the conversation. Proactive messages need to use an adapter to post a message to a channel.
WRT 2️⃣ included code snippet invalid
The code listing in the doc below this statement doesn't address 2️⃣. Furthermore, the code listing came from a sample linked to in at the end of the doc that also contradicts the doc (statement 2️⃣).
Why? 👉 The code listing (and referenced sample) don't respond. The method
TeamsActivityHandler. handleTeamsMessagingExtensionBotMessagePreviewSend()
doesn't respond... it acts like it has avoid
return. However the SDK clearly states it should return aPromise<MessagingExtensionActionRequest>
ref.Failure to respond triggers an error.
I've tried multiple response combinations, but every single one fails... per guidelines on the botbuilder-js repo, I posted a question to SO.
Document Details
⚠ Do not edit this section. It is required for learn.microsoft.com ➟ GitHub issue linking.