Expressões adaptáveis

aplica-se a: SDK v4

Os bots usam expressões adaptáveis para avaliar o resultado de uma condição com base nas informações de runtime disponíveis na memória para a caixa de diálogo ou o sistema de Geração de Linguagem. Essas avaliações determinam como o bot reage à entrada do usuário e a outros fatores que afetam a funcionalidade de bot.

As expressões adaptáveis abordam essa necessidade principal fornecendo uma linguagem de expressão adaptável que pode ser usada com o SDK do Bot Framework e outros componentes de IA conversacional, como Bot Framework Composer ,Geração de Linguagem,Caixas de diálogo Adaptáveis e Cartões Adaptáveis deprogramação.

Uma expressão adaptável pode conter um ou mais valores explícitos, funções predefinidas ou funções personalizadas. Os consumidores de expressões adaptáveis também podem injetar funções adicionais compatíveis. Por exemplo, todos os modelos de geração de linguagem estão disponíveis como funções, bem como funções adicionais que só estão disponíveis dentro do uso desse componente de expressões adaptáveis.

Operadores

As expressões adaptáveis dão suporte aos seguintes tipos de operadores e à seguinte sintaxe de expressão:

  • aritmética
  • comparação
  • logical
  • sintaxe de outros operadores e expressões
Operador Funcionalidade Equivalente da função predefinida
+ Adição. Exemplo: A + B adicionar
- Subtração. Exemplo: A - B sub
unário + Valor positivo. Exemplo: +1, +A N/D
unário - Valor negativo. Exemplo: -2, -B N/D
* Multiplicação. Exemplo: A * B mul
/ Divisão. Exemplo: A / B div
^ Exponenciação. Exemplo: A ^ B exp
% Módulo. Exemplo: A % B mod

Variáveis

As variáveis são sempre referenciadas pelo nome no formato ${myVariable}. Elas podem ser referenciadas pelo operador de seletor de propriedade na forma de myParent.myVariable, usando o operador de seleção de índice de item, como em myParent.myList[0], ou pela função getProperty().

Há duas variáveis especiais. [] representa uma lista vazia e {} representa um objeto vazio.

Valores explícitos

Os valores explícitos podem ser colocados entre aspas simples 'myExplicitValue' ou entre aspas duplas "myExplicitValue".

Funções

Uma expressão adaptável tem uma ou mais funções. Para obter mais informações sobre funções com suporte em expressões adaptáveis, consulte o artigo de referência de funções pré-construídas.

Bot Framework Composer

O Bot Framework Composer é uma tela de criação visual open-source para desenvolvedores e equipes multidisciplinares criarem bots. O Composer usa expressões adaptáveis para criar, calcular e modificar valores. Expressões adaptáveis podem ser usadas em definições de modelo de geração de linguagem e como propriedades na tela de autor. Como visto no exemplo abaixo, as propriedades na memória também podem ser usadas em uma expressão adaptável.

A expressão adiciona os valores das propriedades e e avalia como se a soma for maior que 50 ou se a (dialog.orderTotal + dialog.orderTax) > 50 dialog.orderTotal soma for dialog.orderTax True False 50 ou menos.

Leia Fluxo de conversa e memória para obter mais informações sobre como as expressões são usadas na memória.

Geração de linguagem

Expressões adaptáveis são usadas por sistemas LG (geração de linguagem) para avaliar as condições descritas em modelos LG. No exemplo a seguir, a função pré-construída de junção é usada para listar todos os valores na recentTasks coleção.

# RecentTasks
- IF: ${count(recentTasks) == 1}
    - Your most recent task is ${recentTasks[0]}. You can let me know if you want to add or complete a task.
- ELSEIF: ${count(recentTasks) == 2}
    - Your most recent tasks are ${join(recentTasks, ', ', ' and ')}. You can let me know if you want to add or complete a task.
- ELSEIF: ${count(recentTasks) > 2}
    - Your most recent ${count(recentTasks)} tasks are ${join(recentTasks, ', ', ' and ')}. You can let me know if you want to add or complete a task.
- ELSE:
    - You don't have any tasks.

Leia a seção usando a função pré-construída em variações do artigo formato de arquivo .lg para obter mais informações.

Modelagem de cartões adaptáveis

Modelos de cartões adaptáveis podem ser usados por desenvolvedores de bots e outras tecnologias para separar dados do layout em um cartão adaptável. Os desenvolvedores podem fornecer dados embutidos com a AdaptiveCard carga ou a abordagem mais comum de separar os dados do modelo.

Por exemplo, digamos que você tenha os seguintes dados:

{
    "id": "1291525457129548",
    "status": 4,
    "author": "Matt Hidinger",
    "message": "{\"type\":\"Deployment\",\"buildId\":\"9542982\",\"releaseId\":\"129\",\"buildNumber\":\"20180504.3\",\"releaseName\":\"Release-104\",\"repoProvider\":\"GitHub\"}",
    "start_time": "2018-05-04T18:05:33.3087147Z",
    "end_time": "2018-05-04T18:05:33.3087147Z"
}

A message propriedade é uma cadeia de caracteres serializada em JSON. Para acessar os valores dentro da cadeia de caracteres, a função predefinida JSON pode ser chamada:

{
    "type": "TextBlock",
    "text": "${json(message).releaseName}"
}

E resultará no seguinte objeto:

{
    "type": "TextBlock",
    "text": "Release-104"
}

Para obter mais informações e exemplos, consulte a documentação de modelagem de cartões adaptáveis.

Recursos adicionais