Search code examples
c#visual-studiobotframework

Recognizing Adaptive Card Clicks on Web app bot


My adaptive cards aren't recognizing clicks on the web app bot but are working on my local bot emulator

protected override async Task OnMessageActivityAsync(ITurnContext turnContext, CancellationToken cancellationToken) { Logger.LogInformation("Running dialog with Message Activity.");

        if (turnContext.Activity.Type == ActivityTypes.Message)
        {
            string temp1 = turnContext.Activity.ChannelData.ToString();
            string boolean = "false";
            Logger.LogInformation(temp1.Length.ToString());
            int len = temp1.Length;
            if (len > 70)
            {


                if (temp1.Substring(70, 4) != null)
                    boolean = temp1.Substring(70, 4);
                Logger.LogInformation(temp1.Substring(70, 4));
                if (boolean.Equals("true"))
                    boolean = "True";
                else { boolean = "True"; }
                Logger.LogInformation(boolean);
                bool entry = System.Convert.ToBoolean(boolean);

                if (entry)
                {
                    JToken commandToken = JToken.Parse(turnContext.Activity.Value.ToString());

                    string command = commandToken["action"].Value<string>();
                    string commandPrompt = command;

/* THIS IS WHERE THE CLICKS GET RECOGNIZED*////

                    if (commandPrompt.Equals("order"))
                    {
                        string[] paths = { ".", "Cards", "orderCard.json" };
                        string fullPath = Path.Combine(paths);
                        var welcomeCard = CreateAdaptiveCardAttachment(fullPath);
                        var response = CreateResponse(turnContext.Activity, welcomeCard);

                        await turnContext.SendActivityAsync(response, cancellationToken);
                    }
                    else if (command.ToLowerInvariant() == "inventory")
                    {
                        string[] paths = { ".", "Cards", "InventoryCard.json" };
                        string fullPath = Path.Combine(paths);
                        var welcomeCard = CreateAdaptiveCardAttachment(fullPath);
                        var response = CreateResponse(turnContext.Activity, welcomeCard);
                        await turnContext.SendActivityAsync(response, cancellationToken);
                    }
                    else if (command.ToLowerInvariant() == "somethingelse")
                    {
                        commandPrompt = "somethingelse";
                        await Dialog.Run(turnContext, ConversationState.CreateProperty<DialogState>("DialogState"), cancellationToken);
                    }
                    else if (command.ToLowerInvariant() == "ordernumber")
                    {
                        string[] paths = { ".", "Cards", "orderNumberCard.json" };
                        string fullPath = Path.Combine(paths);
                        var welcomeCard = CreateAdaptiveCardAttachment(fullPath);
                        var response = CreateResponse(turnContext.Activity, welcomeCard);
                        await turnContext.SendActivityAsync(response, cancellationToken);
                    }
                    else if (command.ToLowerInvariant() == "upsordernumber")
                    {
                        string[] paths = { ".", "Cards", "upsOrderNumberCard.json" };
                        string fullPath = Path.Combine(paths);
                        var welcomeCard = CreateAdaptiveCardAttachment(fullPath);
                        var response = CreateResponse(turnContext.Activity, welcomeCard);
                        await turnContext.SendActivityAsync(response, cancellationToken);

                    }
                    else if (command.ToLowerInvariant() == "trackingnumber")
                    {
                        string[] paths = { ".", "Cards", "trackingNumberCard.json" };
                        string fullPath = Path.Combine(paths);
                        var welcomeCard = CreateAdaptiveCardAttachment(fullPath);
                        var response = CreateResponse(turnContext.Activity, welcomeCard);
                        await turnContext.SendActivityAsync(response, cancellationToken);

                    }
                    else if (command.ToLowerInvariant() == "trackingnumber")
                    {
                        string[] paths = { ".", "Cards", "trackingNumberCard.json" };
                        string fullPath = Path.Combine(paths);
                        var welcomeCard = CreateAdaptiveCardAttachment(fullPath);
                        var response = CreateResponse(turnContext.Activity, welcomeCard);
                        await turnContext.SendActivityAsync(response, cancellationToken);

                    }
                    else if (command.ToLowerInvariant() == "skunumber")
                    {
                        string[] paths = { ".", "Cards", "skuNumberCard.json" };
                        string fullPath = Path.Combine(paths);
                        var welcomeCard = CreateAdaptiveCardAttachment(fullPath);
                        var response = CreateResponse(turnContext.Activity, welcomeCard);
                        await turnContext.SendActivityAsync(response, cancellationToken);

                    }
                    else if (command.ToLowerInvariant() == "ponumber")
                    {
                        string[] paths = { ".", "Cards", "poNumberCard.json" };
                        string fullPath = Path.Combine(paths);
                        var welcomeCard = CreateAdaptiveCardAttachment(fullPath);
                        var response = CreateResponse(turnContext.Activity, welcomeCard);
                        await turnContext.SendActivityAsync(response, cancellationToken);

                    }
                    else
                    {
                        await turnContext.SendActivityAsync($"I'm sorry, I didn't understand that. Please try again", cancellationToken: cancellationToken);
                    }
                }
            }
            else
            {
                await Dialog.Run(turnContext, ConversationState.CreateProperty<DialogState>("DialogState"), cancellationToken);
            }
        }

        // Run the Dialog with the new message Activity.

    }
}

}

/*Json File*/
{
  "type": "AdaptiveCard",
  "selectAction": {
    "type": "Action.Submit"
  },
  "body": [
    {
      "type": "Container",
      "items": [
        {
          "type": "TextBlock",
          "size": "Medium",
          "weight": "Bolder",
          "text": "Hi How can I help you today?"
        }
      ]
    },
    {
      "type": "Container",
      "items": [
        {
          "type": "TextBlock",
          "text": "Please select one of the following options to get started",
          "wrap": true
        }
      ]
    }
  ],
  "actions": [
    {
      "type": "Action.Submit",
      "id": "orderButton",
      "title": "Order",
      "data": {
        "action": "order"
      }
    },
    {
      "type": "Action.Submit",
      "id": "inventoryButton",
      "title": "Inventory",
      "data": {
        "action": "inventory"
      }
    },
    {
      "type": "Action.Submit",
      "id": "somethingelseButton",
      "title": "Something Else",
      "data": {
        "action": "somethingElse"
      }
    }
  ],
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "version": "1.0"
}

/Json File/

no error output on webappbot just won't open the next card. But is working on my bot emulator


Solution

  • The issue is that both "Test in Web Chat" and the Web Chat iFrame code still uses WebChat V3, which doesn't support Adaptive Cards well. WebChat V4 should be rolling out to both of those in the next couple of weeks.

    In the meantime, you can switch from the <embed> to one of the WebChat Samples