Georgi Stoyanov
Georgi Stoyanov

Reputation: 644

Adaptivecards Send POST call to external API in MS Teams

I am building a script that pushes adaptive card messages to an MS Teams channel connector via a webhook requesting the approval of a supervisor.

I want to put two buttons on the bottom of the message, one to decline and another to approve the request. For this, I need to push a boolean value to an API endpoint. My initial idea was to create an API endpoint accepting a JSON body and looking into the JSON body for approval over a POST request but apparently, this is no longer supported in MS Teams and then I was thinking to use Action.OpenUrl to push this as a query parameter in the URL, but unfortunately this opens a new tab with the query parameter.

Is there any other way to achieve this? This is a sample JSON for the MS Teams webhook:

{
    "type": "message",
    "attachments": [
        {
            "contentType": "application/vnd.microsoft.card.adaptive",
            "contentUrl": null,
            "content": {
                "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
                "type": "AdaptiveCard",
                "version": "1.5",
                "msTeams": {
                    "width": "full"
                },
                "actions": [
                    {
                        "type": "Action.OpenUrl",
                        "title": "Approve",
                        "url": "https://<api_endpoint_url>?approved=true"
                    },
                    {
                        "type": "Action.OpenUrl",
                        "title": "Decline",
                        "url": "https://<api_endpoint_url>?approved=false"
                    }
                ]
            }
        }
    ]
}

Upvotes: 0

Views: 2885

Answers (1)

Sayali-MSFT
Sayali-MSFT

Reputation: 369

This sample shows a feature where user can send task request to his manager and manager can approve/reject the request in group chat.You can try like below code:-

  case "approved":
                    string[] approvedCard = { ".", "Cards", "ApprovedCard.json" };
                    var approvedAttachment = GetResponseAttachment(approvedCard, data, out cardJson);
                    Activity approvedActivity = new Activity();
                    approvedActivity.Type = "message";
                    approvedActivity.Id = turnContext.Activity.ReplyToId;
                    approvedActivity.Attachments = new List<Attachment> { approvedAttachment };

                    await turnContext.UpdateActivityAsync(approvedActivity);

                    response = JObject.Parse(cardJson);
                    adaptiveCardResponse = new AdaptiveCardInvokeResponse()
                    {
                        StatusCode = 200,
                        Type = "application/vnd.microsoft.card.adaptive",
                        Value = response
                    };

                    return CreateInvokeResponse(adaptiveCardResponse);

Ref Sample-https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-request-approval/csharp

Upvotes: 2

Related Questions