5
votes

I have generated an adaptive card using JSON format with two buttons submit and cancel which are returning a "messageBack" message as submit and cancel respectively. I am using C# to access the reply but I am not able to figure out how to access the reply from the adaptive card.

My json is

    {
      "type": "AdaptiveCard",
      "selectAction": {        
        "type": "Action.Submit"
      },
      "body": [
        {
          "type": "TextBlock",
          "horizontalAlignment": "Center",
          "size": "Large",
          "weight": "Bolder",
          "color": "Accent",
          "text": "Meeting Composer Create"
        },
        {
          "type": "ColumnSet",
          "columns": [
            {
              "type": "Column",
              "items": [
                {
                  "type": "TextBlock",
                  "horizontalAlignment": "Left",
                  "spacing": "Medium",
                  "size": "Medium",
                  "weight": "Bolder",
                  "color": "Accent",
                  "text": "Attendees:"
                 }
              ],
              "width": "stretch"
            },
            {
              "type": "Column",
              "items": [
                {
                  "type": "TextBlock",
                  "id": "attendeeVal",
                  "text": "a"
                }
              ],
              "width": "stretch"
            }
          ]
        },
        {
          "type": "ColumnSet",
      "columns": [
        {
          "type": "Column",
          "items": [
            {
              "type": "TextBlock",
              "size": "Medium",
              "weight": "Bolder",
              "color": "Accent",
              "text": "Subject:"
            }
          ],
          "width": "stretch"
        },
        {
          "type": "Column",
          "items": [
            {
              "type": "TextBlock",
              "id": "subVal",
              "text": "meeting"
            }
          ],
          "width": "stretch"
        }
      ]
    },
    {
      "type": "ColumnSet",
      "columns": [
        {
          "type": "Column",
          "items": [
            {
              "type": "TextBlock",
              "size": "Medium",
              "weight": "Bolder",
              "color": "Accent",
              "text": "Date:"
            }
          ],
          "width": "stretch"
        },
        {
          "type": "Column",
          "items": [
            {
              "type": "TextBlock",
              "id": "dateVal",
              "text": "17/11/2018 10.30 AM"
            }
          ],
          "width": "stretch"
        }
      ]
    },
    {
      "type": "ColumnSet",
      "columns": [
        {
          "type": "Column",
          "items": [
            {
              "type": "TextBlock",
              "size": "Medium",
              "weight": "Bolder",
              "color": "Accent",
              "text": "Document Name:"
            }
          ],
          "width": "stretch"
        },
        {
          "type": "Column",
          "items": [
            {
              "type": "TextBlock",
              "id": "docVal",
              "text": "Document1"
            }
          ],
          "width": "stretch"
        }
      ]
    }
  ],
  "actions": [
    {
      "type": "Action.Submit",
      "title": "Submit",
      "data": {
        "msteams": {
          "type": "messageBack",
          "displayText": "I clicked this button",
          "text": "text to bots",
          "value": "Submit"
        }
      }
    },
    {
      "type": "Action.Submit",
      "title": "Cancel",
      "data": {
        "msteams": {
          "type": "messageBack",
          "displayText": "I clicked this button",
          "text": "text to bots",
          "value": "Cancel"
        }
      }
    }
  ],
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "version": "1.0"
}

my C# is

 var response = getCard(stepContext, "Aditya Rao, Vishal Subramaniam" , "Scrum Meeting" , "17/11/1028, 10:30AM" , "Scrum Sprint.pptx");
 await stepContext.Context.SendActivityAsync(response).ConfigureAwait(false);

my additional function to support are

private static Attachment CreateAdaptiveCardAttachment(string filePath, string names, string subj , string datee, string docs)
    {
        var adaptiveCardJson = File.ReadAllText(filePath);
        dynamic obj = JsonConvert.DeserializeObject(adaptiveCardJson);
        obj["body"][1]["columns"][1]["items"][0]["text"] = names;
        obj["body"][2]["columns"][1]["items"][0]["text"] = subj;
        obj["body"][3]["columns"][1]["items"][0]["text"] = datee;
        obj["body"][4]["columns"][1]["items"][0]["text"] = docs;
        var adaptiveCardAttachment = new Attachment()
        {
            ContentType = "application/vnd.microsoft.card.adaptive",
            Content = obj,
        };
        return adaptiveCardAttachment;
    }


    // Create an attachment message response.
    private Activity CreateResponse(Activity activity, Attachment attachment)
    {
        var response = activity.CreateReply();
        response.Attachments = new List<Attachment>() { attachment };
        return response;
    }


    private Activity getCard(WaterfallStepContext stepContext, string names, string subj , string datee, string docs)
    {
        var jsonFilePath = @".\Dialogs\CardTemplates\MeetingComposerCreate.json";
        var activity = stepContext.Context.Activity;
        var adCard = CreateAdaptiveCardAttachment(jsonFilePath,names,subj,datee,docs);
        var response = CreateResponse(activity, adCard);
        return response;
    }

How do I access the values response once submit or cancel is clicked?

Also if someone can help me find how to get reply from input.choice to get the checkbox data of the selected cards.

1

1 Answers

2
votes

How do I access the values response once submit or cancel is clicked?

We can get the value that user submit from adaptive card via Activity.Value property.

if(turnContext.Activity.Value!= null)
{

    reply.Text = $"submit data: {turnContext.Activity.Value}";

}

Test Result:

enter image description here

Output in emulator:

enter image description here

Also if someone can help me find how to get reply from input.choice to get the checkbox data of the selected cards.

To display choice options for user selecting and get the selected option, you can refer to the following code snippet.

In json file:

{
  "type": "Input.ChoiceSet",
  "id": "optionSelection",
  "isMultiSelect": true,
  "style": "compact",
  "choices": [
    {
      "title": "option1",
      "value": "option1"
    },
    {
      "title": "option2",
      "value": "option2"
    },
    {
      "title": "option3",
      "value": "option3"
    }
  ]
}

Using same code to get user's selection:

reply.Text = $"submit data: {turnContext.Activity.Value}";

Test Result:

enter image description here