Pesquisa de preenchimento automático em cartões adaptáveis

Importante

Essa documentação é considerada herdada. Para obter informações e recursos abrangentes relacionados à pesquisa typahead em Cartões Adaptáveis, visite o hub de documentação de Cartões Adaptáveis.

A captura de tela mostra a página inicial do site de Cartões Adaptáveis da Microsoft.

O hub de documentação de Cartões Adaptáveis oferece documentação de referência completa e mais recente, um Designer de Cartão Adaptável atualizado, exemplos de JSON internos, práticas recomendadas de design e um histórico de versão detalhado dos recursos do Cartão Adaptável. Para obter mais informações, consulte introdução ao hub de documentação de Cartões Adaptáveis e novas atualizações de Cartões Adaptáveis.

A funcionalidade de pesquisa de digitação antecipada em Cartões Adaptáveis oferece uma experiência de pesquisa aprimorada no Input.ChoiceSet componente. Ele fornece uma lista de opções para inserir texto no campo de pesquisa. Você pode incorporar a pesquisa de digitação antecipada com Cartões Adaptáveis para pesquisar e selecionar dados.

Você pode usar a pesquisa de digitação antecipada para as seguintes pesquisas:

A pesquisa estática de digitação antecipada permite que os usuários pesquisem a partir de valores especificados Input.ChoiceSet no conteúdo do Cartão Adaptável. A pesquisa estática de digitação antecipada pode ser usada para mostrar várias opções para o usuário. O tamanho do conteúdo na pesquisa estática aumenta com o número de opções especificadas no conteúdo. À medida que o usuário começa a inserir os textos, as opções são filtradas, o que corresponde parcialmente à entrada. A lista suspensa destaca os caracteres de entrada que correspondem à pesquisa.

A imagem a seguir demonstra a pesquisa estática de digitação antecipada:

A representação gráfica demonstra a pesquisa de cabeça de tipo estática.

A pesquisa dinâmica de digitação antecipada é útil para pesquisar e selecionar dados de grandes conjuntos de dados. Os conjuntos de dados são carregados dinamicamente a partir do conjunto de dados especificado no conteúdo do card. A funcionalidade de digitação antecipada ajuda a filtrar as opções à medida que o usuário digita.

Pesquisa dinâmica de digitação antecipada

Pesquisa dinâmica de digitação antecipada 2

Observação

Você não pode obter experiências avançadas de card com pesquisa dinâmica, como extensões de mensagem baseadas em consulta.

Input.ChoiceSet é um dos componentes de entrada importantes nos Cartões Adaptáveis. Você pode adicionar um controle de pesquisa de digitação antecipada ao Input.ChoiceSet componente para implementar a pesquisa de digitação antecipada. Você pode pesquisar e selecionar as informações necessárias com as seguintes seleções:

  • Lista suspensa, como a seleção expandida.
  • Botão de opção, como seleção única.
  • Caixas de seleção, como várias seleções.

Observação

  • O Input.ChoiceSet controle é baseado no estilo e isMultiSelect nas propriedades.
  • Para usar a pesquisa dinâmica de digitação antecipada no chat em grupo, o usuário deve adicionar groupchat escopo ao escopo de instalação do bot no manifesto do aplicativo e instalá-lo nesse chat em grupo específico.
  • O número de opções na lista suspensa é limitado a 15.

Propriedades do esquema

As propriedades a seguir são as novas adições ao esquema para habilitar a Input.ChoiceSet pesquisa de digitação antecipada:

Propriedade Tipo Obrigatório Descrição
estilo Compact
Expandido
Filtered
Não Adiciona o estilo filtrado à lista de validações com suporte para o tipo antecipado estático.
escolhas.dados Data.Query Não Habilita a digitação dinâmica conforme o usuário digita, buscando um conjunto remoto de opções de um back-end.
valor Cadeia de caracteres Não A opção inicial (ou conjunto de opções) que deve ser selecionada. Para seleção múltipla, especifique uma cadeia de valores separados por vírgula.

Data.Query

Propriedade Tipo Obrigatório Descrição
type Data.Query Sim Especifica que é um objeto Data.Query.
do Power BI Cadeia de caracteres Sim Especifica o tipo de dados que são buscados dinamicamente.
valor Cadeia de caracteres Não Preenche a solicitação de invocação para o bot com a entrada que o usuário forneceu ao ChoiceSet.
count Número Não Preenche a solicitação de invocação ao bot para especificar o número de elementos que devem ser retornados. O bot o ignorará se os usuários quiserem enviar um valor diferente.
skip Número Não Preenche a solicitação de invocação ao bot para indicar que os usuários desejam paginar e avançar na lista.
associatedInputs Cadeia de caracteres Não Especifica os valores de entrada associados ao Data.Query objeto. Valores permitidos: auto, none

Quando você define a associatedInputs propriedade sob o Data.Query objeto e a define como auto, o Teams inclui todos os valores de entrada do card na solicitação de consulta de dados enviada ao bot. Se você definir o valor como none, o Teams não incluirá nenhum valor de entrada na solicitação de consulta de dados. Essa propriedade permite que o bot use valores de entrada como filtros de pesquisa para refinar a pesquisa dinâmica de digitação antecipada. Para obter mais informações, consulte Entradas dependentes.

Exemplo

O conteúdo de exemplo que contém pesquisa de digitação antecipada estática e dinâmica com opções de seleção única e múltipla da seguinte maneira:

{
  "type": "AdaptiveCard",
  "body": [
    {
      "columns": [
        {
          "width": "1",
          "items": [
            {
              "size": null,
              "url": "https://urlp.asm.skype.com/v1/url/content?url=https%3a%2f%2fi.imgur.com%2fhdOYxT8.png",
              "height": "auto",
              "type": "Image"
            }
          ],
          "type": "Column"
        },
        {
          "width": "2",
          "items": [
            {
              "size": "extraLarge",
              "text": "Game Purchase",
              "weight": "bolder",
              "wrap": true,
              "type": "TextBlock"
            }
          ],
          "type": "Column"
        }
      ],
      "type": "ColumnSet"
    },
    {
      "text": "Please fill out the below form to send a game purchase request.",
      "wrap": true,
      "type": "TextBlock"
    },
    {
      "columns": [
        {
          "width": "auto",
          "items": [
            {
              "text": "Game: ",
              "wrap": true,
              "height": "stretch",
              "type": "TextBlock"
            }
          ],
          "type": "Column"
        }
      ],
      "type": "ColumnSet"
    },
    {
      "columns": [
        {
          "width": "stretch",
          "items": [
            {
              "choices": [
                {
                  "title": "Call of Duty",
                  "value": "call_of_duty"
                },
                {
                  "title": "Death's Door",
                  "value": "deaths_door"
                },
                {
                  "title": "Grand Theft Auto V",
                  "value": "grand_theft"
                },
                {
                  "title": "Minecraft",
                  "value": "minecraft"
                }
              ],
              "style": "filtered",
              "placeholder": "Search for a game",
              "id": "choiceGameSingle",
              "type": "Input.ChoiceSet"
            }
          ],
          "type": "Column"
        }
      ],
      "type": "ColumnSet"
    },
    {
      "columns": [
        {
          "width": "auto",
          "items": [
            {
              "text": "Multi-Game: ",
              "wrap": true,
              "height": "stretch",
              "type": "TextBlock"
            }
          ],
          "type": "Column"
        }
      ],
      "type": "ColumnSet"
    },
    {
      "columns": [
        {
          "width": "stretch",
          "items": [
            {
              "choices": [
                {
                  "title": "Static Option 1",
                  "value": "static_option_1"
                },
                {
                  "title": "Static Option 2",
                  "value": "static_option_2"
                },
                {
                  "title": "Static Option 3",
                  "value": "static_option_3"
                }
              ],
              "value": "Static_option_2",
              "isMultiSelect": true,
              "style": "filtered",
              "choices.data": {
                "type": "Data.Query",
                "dataset": "xbox"
              },
              "id": "choiceGameMulti",
              "type": "Input.ChoiceSet"
            }
          ],
          "type": "Column"
        }
      ],
      "type": "ColumnSet"
    },
    {
      "columns": [
        {
          "width": "auto",
          "items": [
            {
              "text": "Needed by: ",
              "wrap": true,
              "height": "stretch",
              "type": "TextBlock"
            }
          ],
          "type": "Column"
        },
        {
          "width": "stretch",
          "items": [
            {
              "id": "choiceDate",
              "type": "Input.Date"
            }
          ],
          "type": "Column"
        }
      ],
      "type": "ColumnSet"
    },
    {
      "text": "Buy and download digital games and content directly from your Xbox console, Windows 10 PC, or at Xbox.com.",
      "wrap": true,
      "type": "TextBlock"
    },
    {
      "text": "Earn points for what you already do on Xbox, then redeem your points on real rewards. Play more, get rewarded. Start earning today.",
      "wrap": true,
      "type": "TextBlock"
    }
  ],
  "actions": [
    {
      "data": {
        "msteams": {
          "type": "invoke",
          "value": {
            "type": "task/submit"
          }
        }
      },
      "title": "Request Purchase",
      "type": "Action.Submit"
    }
  ],
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "version": "1.2"
}

Trechos de código para invocar solicitação e resposta

Invocar solicitação

{
    "name": "application/search",
    "type": "invoke",
    "value": {
        "queryText": "fluentui",
        "queryOptions": {
            "skip": 0,
            "top": 15
        },
        "dataset": "npm"
    },
    "locale": "en-US",
    "localTimezone": "America/Los_Angeles",
    // …. other fields
}

Resposta

protected override async Task<InvokeResponse> OnInvokeActivityAsync(ITurnContext<IInvokeActivity> turnContext, CancellationToken cancellationToken)
{
    if (turnContext.Activity.Name == "application/search")
    {
 var packages = new[] {
   new { title = "A very extensive set of extension methods", value = "FluentAssertions" },
   new { title = "Fluent UI Library", value = "FluentUI" }};

 var searchResponseData = new
 {
     type = "application/vnd.microsoft.search.searchResponse",
     value = new
     {
  results = packages
     }
 };
 var jsonString = JsonConvert.SerializeObject(searchResponseData);
 JObject jsonData = JObject.Parse(jsonString);
 return new InvokeResponse()
 {
     Status = 200,
     Body = jsonData
 };
    }

    return null;
}

Entradas dependentes

Observação

As entradas dependentes não estão disponíveis nos ambientes GCC (Nuvem da Comunidade Governamental), GCC High, DoD (Departamento de Defesa) e Teams operados pela 21Vianet .

Você pode criar Cartões Adaptáveis no Teams em que o valor de uma entrada depende do valor de outra. Por exemplo, considere um Cartão Adaptável com duas Input.ChoiceSet listas suspensas: uma para selecionar um país e outra para selecionar uma cidade específica dentro desse país. A primeira lista suspensa deve filtrar as cidades exibidas na segunda lista suspensa. Isso pode ser feito criando uma Input.ChoiceSet lista suspensa com pesquisa dinâmica de digitação antecipada que depende de uma ou mais outras entradas no card.

Como funciona

Para criar entradas dependentes em um Cartão Adaptável, use as seguintes propriedades:

  1. valueChangedAction: defina essa propriedade em qualquer elemento de entrada, como Input.Text ou Input.ChoiceSet. Esta propriedade permite definir a Action.ResetInputs ação, que dispara uma solicitação de consulta de dados para o bot quando um usuário altera o valor de uma entrada no card.

  2. Action.ResetInputs: essa ação redefine os valores das entradas especificadas para targetInputIds seus valores padrão.

  3. associatedInputs: Defina essa propriedade no objeto Data.Query . Essa propriedade garante que, quando o Teams fizer uma solicitação de consulta de dados ao bot, ela inclua os valores de todas as entradas no card.

Action.ResetInputs

A Action.ResetInputs propriedade redefine os valores das entradas em um Cartão Adaptável. Por padrão, a Action.ResetInputs propriedade redefine os valores de todas as entradas em um Cartão Adaptável. Se você precisar redefinir valores de entrada específicos, defina as IDs dos elementos que contêm esses valores na targetInputIds propriedade.

Propriedade Tipo Obrigatório Descrição
valueChangedAction Action.ResetInputs ✔️ Contém a Action.ResetInputs propriedade.
Action.ResetInputs Cadeia de caracteres ✔️ Redefine os valores de entrada.
targetInputIds Matriz de cadeias de caracteres Define as IDs dos valores de entrada a serem redefinidos.
id Cadeia de caracteres Um identificador exclusivo para a ação.
requires Objeto Uma lista de recursos que a ação requer que o aplicativo host dê suporte. Se o aplicativo host não der suporte a pelo menos um dos recursos listados, a ação não será renderizada e seu fallback será renderizado, se fornecido.
fallback Objeto ou Cadeia de Caracteres Define uma ação alternativa a ser renderizada. Defina o valor como drop para ignorar a ação se Action.ResetInputs não houver suporte ou se o aplicativo host não der suporte a requires todos os recursos especificados na propriedade.
iconUrl Cadeia de caracteres Uma URL para uma imagem a ser exibida à esquerda do título da ação. Há suporte para URIs de dados.
isEnabled Booliano Define o enabled estado ou disabled da ação. Um usuário não pode selecionar uma ação desabilitada. Se a ação for representada como um botão, o estilo do botão refletirá esse estado.
mode Cadeia de caracteres Define se a ação é primária ou secundária. Valores permitidos: primary, secondary
style Cadeia de caracteres Define o estilo da ação, afetando suas representações visuais e faladas. Valores permitidos: default, positive, ou destructive
title Cadeia de caracteres O título da ação, como aparece em um botão.
tooltip Cadeia de caracteres O texto da dica de ferramenta a ser exibido quando um usuário passa o mouse sobre a ação.

Exemplo

Considere o exemplo anterior: um card com dois Input.ChoiceSet menus suspensos que permitem aos usuários selecionar um país e uma cidade dentro desse país. O conteúdo de card a seguir demonstra como usar as valueChangedAction propriedades and associatedInputs para implementar o card.

  • A valueChangedAction propriedade é definida ao lado da country entrada para garantir que, sempre que seu valor for alterado, o city valor da entrada seja redefinido.
  • Como a city entrada é necessária, redefinir seu valor força o usuário a selecionar uma nova cidade sempre que o valor mudar country .
  • Com a propriedade definida, quando o associatedInputs Teams envia uma solicitação de consulta de dados para o bot, ela inclui o valor da country entrada. Assim, quando o usuário começa a city digitar na entrada, o card retorna uma lista de cidades para o país selecionado.

A captura de tela mostra um Cartão Adaptável com entradas dependentes.

{
    "type": "AdaptiveCard",
    "$schema": "https://adaptivecards.io/schemas/adaptive-card.json",
    "version": "1.5",
    "body": [
        {
            "size": "ExtraLarge",
            "text": "Country Picker",
            "weight": "Bolder",
            "wrap": true,
            "type": "TextBlock"
        },
        {
            "id": "country",
            "type": "Input.ChoiceSet",
            "label": "Select a country or region:",
            "choices": [
                {
                    "title": "USA",
                    "value": "usa"
                },
                {
                    "title": "France",
                    "value": "france"
                },
                {
                    "title": "India",
                    "value": "india"
                }
            ],
            "valueChangedAction": {
                "type": "Action.ResetInputs",
                "targetInputIds": [
                    "city"
                ]
            },
            "isRequired": true,
            "errorMessage": "Please select a country or region"
        },
        {
            "style": "filtered",
            "choices.data": {
                "type": "Data.Query",
                "dataset": "cities",
                "associatedInputs": "auto"
            },
            "id": "city",
            "type": "Input.ChoiceSet",
            "label": "Select a city:",
            "placeholder": "Type to search for a city in the selected country",
            "isRequired": true,
            "errorMessage": "Please select a city"
        }
    ],
    "actions": [
        {
            "title": "Submit",
            "type": "Action.Submit"
        }
    ]
}

O trecho de código a seguir mostra um exemplo de uma solicitação de invocação de bot para o conteúdo do card:

{
    "name": "application/search",
    "type": "invoke",
    "value": {
        "queryText": "india",
        "queryOptions": {
            "skip": 0,
            "top": 15
        },
        "dataset": "cities",
        "data": {
            "country": "<value of the country input>"
        }
    },
    // …. other fields
}

Exemplo de código

Nome de exemplo Descrição .NET Node.js Manifesto
Controle de pesquisa de digitação antecipada em Cartões Adaptáveis Demonstração do recurso de controle de pesquisa de digitação antecipada (estático, dinâmico e dependente) em Cartões Adaptáveis usando o bot enviado. View View Exibir

Confira também