[英]How do you handle CardAction Button Clicks in Bot Framework .NET for Teams?
我使用Microsoft.Bot.Builder.Azure
4.12.2 構建了一個機器人,該機器人通過 Azure 機器人服務連接到 MS Teams。 我有一條帶有英雄卡附件的消息,其中包含一組按鈕。 當用戶單擊按鈕時,卡片的值會作為消息發送回機器人,但似乎沒有附加任何其他信息來識別消息是按鈕單擊而不是消息。 我想了解如何正確處理按鈕單擊。
我將展示我的代碼來演示......
public class MyBot : ActivityHandler
{
protected override async Task OnMessageActivityAsync(
ITurnContext<IMessageActivity> turnContext,
CancellationToken cancellationToken)
{
var activity = turnContext.Activity;
if (activity.Text is "test")
{
var heroCard = new HeroCard
{
Buttons = new List<CardAction>
{
new(ActionTypes.ImBack)
{
Title = "Cup 1",
DisplayText = "You chose Cup1",
Value = "cup1",
ChannelData = new { id = 1, status = "wise" }
},
new(ActionTypes.ImBack)
{
Title = "Cup 2",
DisplayText = "You chose Cup2",
Value = "cup2",
ChannelData = new { id = 1, status = "unwise" }
}
}
};
var response = MessageFactory.Text("Choose wisely");
response.Attachments.Add(heroCard.ToAttachment());
await turnContext.SendActivityAsync(response, cancellationToken);
return;
}
// How can I tell that they actually clicked the Cup 1 button and didn't just type "cup1"?
if (activity.Text is "cup1")
{
await turnContext.SendActivityAsync(MessageFactory.Text("you chose wisely."), cancellationToken);
}
else
{
await turnContext.SendActivityAsync(MessageFactory.Text("you chose unwisely."), cancellationToken);
}
}
}
這是一個實際應用的例子。
這是活動的順序。
如果我輸入“cup1”,我想要做的是讓機器人忽略,因為那不是按鈕點擊。 當我檢查機器人在單擊按鈕時收到的IMessageActivity
時,似乎沒有任何跡象表明這是一次按鈕單擊。 任何幫助表示贊賞!
ImBack
操作旨在模擬一條消息,就像用戶通過文本發送給您一樣。 它們旨在用作您的用戶鍵入消息的替代方法,因此上述行為是預期的規范。
話雖這么說,你有幾個選擇來實現你的目標。 第一個是為您的按鈕messageBack
操作類型。 這將為您提供更多控制權並更容易確定按鈕單擊 v 的文本消息。
第二種選擇是使用自適應卡片及其操作(在本例中為action.submit
或action.execute
,具體取決於您想要的行為),而不是英雄卡片。 這可能是我建議的團隊解決方案,因為自適應卡比英雄卡給你更多的靈活性。
可以在此處找到 Teams 中卡片操作的完整文檔: https://docs.microsoft.com/en-us/microsoftteams/platform/task-modules-and-cards/cards/cards-actions ,但我也有下面給出了一個示例messageBack
操作。
{
"buttons": [
{
"type": "messageBack",
"title": "My MessageBack button",
"displayText": "I clicked this button",
"text": "User just clicked the MessageBack button",
"value": "{\"property\": \"propertyValue\" }"
}
]
}
如果您想區分按鈕單擊,則可以在 ms 團隊中使用“自適應卡” go。 因為在單擊 ms 團隊頻道中的自適應卡片按鈕時, “活動”文本應該為空,並且 value 屬性將包含“msteams”屬性值。
MS Teams Adaptive 卡需要名為 msteams 的特殊屬性到 object 提交操作的數據屬性中的 object 才能訪問此功能。
{
"type": "Action.Submit",
"title": "Click me for messageBack",
"data": {
"msteams": {
"type": "messageBack",
"displayText": "I clicked this button",
"text": "text to bots",
"value": "{\"bfKey\": \"bfVal\", \"conflictKey\": \"from value\"}"
},
"extraData": {}
}
}
type 屬性是“messageBack”,提交操作的行為類似於 messageBack 卡片操作,類似於 imBack 和 postBack 的組合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.