0

I am trying to retrieve data from an adaptive card in a chatbot but I am not sure how to.

I've created an adaptive card using Adaptive card designer and have it successfully displaying in a chatbot but want to be able to retrieve the data inputted by a user once 'Submit' is selected.

I believe it would have something to do with the fact that I do not have an endpoint for the message to go to, but I am not sure how to declare one.

Any help is appreciated!

C#

 private async Task choiceCAIAResult(IDialogContext context, IAwaitable<string> result)
    {
        string message = await result;
        if (message == "Yes")
        {

        var replyMessage = context.MakeMessage();
        CreateAdaptiveCardApplicationJson(context, result);

        // replyMessage.Attachments = new List<Attachment> { attachment };
        // await context.PostAsync(replyMessage);


    }
        if (message == "No")
        {

            var replyMessage = context.MakeMessage();
            Attachment attachment = GetCAIAHeroCard();
            replyMessage.Attachments = new List<Attachment> { attachment };
            await context.PostAsync(replyMessage);
        }
    }

       private async Task CreateAdaptiveCardApplicationJson(IDialogContext context, IAwaitable<string> result)
    {

        var returnMessage = context.MakeMessage();

        var json = await GetCardText("adaptiveCard");
        var results = AdaptiveCard.FromJson(json);
        var card = results.Card;
        returnMessage.Attachments.Add(new Attachment()
        {
            Content = card,
            ContentType = AdaptiveCard.ContentType,
            Name = "Card",
        });
        card.Actions.Add(new AdaptiveSubmitAction() {
            Title = "Next",
        });


        Debug.WriteLine(returnMessage.Attachments[0].Content);

        await context.PostAsync(returnMessage);

    }

    public async Task<string> GetCardText(string cardName)
    {
        var path = HostingEnvironment.MapPath($"/Dialogs/{cardName}.json");
        if (!File.Exists(path))
            return string.Empty;

        using (var f = File.OpenText(path))
        {
            return await f.ReadToEndAsync();
        }

    }

JSON

   {   "type": "AdaptiveCard",   "body": [
    {
      "type": "TextBlock",
      "horizontalAlignment": "Center",
      "size": "Large",
      "text": "Residential Aged Care Online Application Form",
      "wrap": true
    },
    {
      "type": "TextBlock",
      "size": "Medium",
      "text": "Applicant Details"
    },
    {
      "type": "Input.Text",
      "id": "firstName",
      "placeholder": "First Name"
    },
    {
      "type": "Input.Text",
      "id": "lastName",
      "placeholder": "Last Name"
    },
    {
      "type": "ColumnSet",
      "columns": [
        {
          "type": "Column",
          "horizontalAlignment": "Left",
          "verticalContentAlignment": "Center",
          "items": [
            {
              "type": "TextBlock",
              "id": "dobTitle",
              "horizontalAlignment": "Right",
              "size": "Medium",
              "text": "Date of Birth"
            }
          ]
        },
        {
          "type": "Column",
          "items": [
            {
              "type": "Input.Date",
              "id": "dob"
            }
          ],
          "width": "stretch"
        }
      ]
    },
    {
      "type": "Input.ChoiceSet",
      "id": "gender",
      "style": "compact",
      "placeholder": "Gender",
      "choices": [
        {
          "title": "Female",
          "value": "female"
        },
        {
          "title": "Male",
          "value": "male"
        },
        {
          "title": "Intersex",
          "value": "intersex"
        },
        {
          "title": "Indeterminate",
          "value": "indeterminate"
        },
        {
          "title": "Transgender - Female",
          "value": "transFemale"
        },
        {
          "title": "Transgender - Male",
          "value": "transMale"
        },
        {
          "title": "Other",
          "value": "other"
        }
      ]
    },
    {
      "type": "Input.Text",
      "id": "street1",
      "title": "Street1",
      "placeholder": "Street 1"
    },
    {
      "type": "Input.Text",
      "id": "city",
      "title": "city",
      "placeholder": "City"
    },
    {
      "type": "Input.ChoiceSet",
      "id": "state",
      "style": "compact",
      "title": "State",
      "placeholder": "State",
      "choices": [
        {
          "title": "SA",
          "value": "SA"
        },
        {
          "title": "ACT",
          "value": "ACT"
        },
        {
          "title": "NSW",
          "value": "NSW"
        },
        {
          "title": "NT",
          "value": "NT"
        },
        {
          "title": "QLD",
          "value": "QLD"
        },
        {
          "title": "TAS",
          "value": "TAS"
        },
        {
          "title": "VIC",
          "value": "VIC"
        },
        {
          "title": "WA",
          "value": "WA"
        },
        {
          "title": "N/A",
          "value": "N/A"
        }
      ]
    },
    {
      "type": "Input.Text",
      "id": "postCode",
      "title": "PostCode",
      "placeholder": "Post Code"
    },
    {
      "type": "Input.Text",
      "id": "phone",
      "title": "Phone",
      "placeholder": "Phone",
      "style": "Tel"
    },
    {
      "type": "Input.Text",
      "id": "email",
      "title": "Email",
      "placeholder": "Email",
      "style": "Email"
    },
    {
      "type": "Input.ChoiceSet",
      "id": "currentAccommodation",
      "style": "compact",
      "title": "CurrentAccommodation",
      "placeholder": "Current Accommodation",
      "choices": [
        {
          "title": "Home",
          "value": "home"
        },
        {
          "title": "Hospital",
          "value": "hospital"
        },
        {
          "title": "Aged Care",
          "value": "agedCare"
        },
        {
          "title": "Other",
          "value": "other"
        }
      ]
    }   ],     "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",   "version": "1.0"

}
Amin Mozhgani
  • 604
  • 1
  • 7
  • 22
r.k0
  • 1
  • 1
  • 1

1 Answers1

0

As you mentioned, you need to have an endpoint for the message. I've used adaptive cards with RESTful web services, but any web service where you can perform an HTTP Post request will do. As far as I know, the only way to send data from adaptive cards is to use an HTTP POST action (anyone feel free to correct me if I'm wrong here).

You'll want to look into the Actions portion of the documentation to see how to

Here's the actions portion of a JSON package with a simple submit button:

   "actions": [
        {
            "type": "Action.Http",
            "id": "Submit",
            "title": "Submit",
            "method": "POST",
            "url": "webserviceURL",
            "body": "{\n  \"requestId\": \"testapprove\",\n  \"callerId\": \"id\",\n  \"requestContent\": \"content\",\n  \"responseContent\": \"content\"\n}",
            "headers": [
                {
                    "name": "content-type",
                    "value": "\"application/json; charset=utf-8\""
                }
            ]
        }
    ],

Here are links for RESTful web services:

tutorial: http://www.drdobbs.com/web-development/restful-web-services-a-tutorial/240169069

stack overlow post on what REST is: What are RESTful web services?

You don't have to use REST in your web service, but it is becoming pretty common. Googling will lead you to many tutorials on creating your own web service.

Other options for testing:

Use websites designed to receive POST requests from anyone.

Here's one you could use for testing: https://httpbin.org/

Another: https://docs.postman-echo.com/

If you only need to send data locally, then google 'set up local http server'. There are many tutorials out there. What you choose to use will probably depend on your environment and which languages you are familiar with. Here is one for python that will echo get and post requests. Here is another python one, and the comments cover how to access posted information.

mborger
  • 31
  • 1
  • 6