簡體   English   中英

您如何在團隊的 Bot Framework .NET 中處理 CardAction 按鈕點擊?

[英]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);
        }
    }
}

這是一個實際應用的例子。

團隊會議

這是活動的順序。

  1. 我向機器人發送消息“測試”。
  2. Bot 以包含兩個按鈕的消息進行響應。
  3. 我點擊第一個按鈕。
  4. Bot 回應說我明智地選擇了。
  5. 我輸入“cup1”
  6. Bot 回應說我明智地選擇了。

如果我輸入“cup1”,我想要做的是讓機器人忽略,因為那不是按鈕點擊。 當我檢查機器人在單擊按鈕時收到的IMessageActivity時,似乎沒有任何跡象表明這是一次按鈕單擊。 任何幫助表示贊賞!

ImBack操作旨在模擬一條消息,就像用戶通過文本發送給您一樣。 它們旨在用作您的用戶鍵入消息的替代方法,因此上述行為是預期的規范。

話雖這么說,你有幾個選擇來實現你的目標。 第一個是為您的按鈕messageBack操作類型。 這將為您提供更多控制權並更容易確定按鈕單擊 v 的文本消息。

第二種選擇是使用自適應卡片及其操作(在本例中為action.submitaction.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 的組合。

參考: Microsoft Docs for MS Teams 自適應卡

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM