Compartir a través de


Referencia de definiciones del conector de datos para Codeless Connector Framework

Para crear un conector de datos con Codeless Connector Framework (CCF), use este documento como complemento a los documentos de referencia de la API REST de Microsoft Sentinel para definiciones de conectores de datos. En concreto, este documento de referencia se expande en la sección siguiente:

  • connectorUiConfig : define los elementos visuales y el texto que se muestran en la página del conector de datos de Microsoft Sentinel.

Para más información, consulte Creación de un conector sin código.

Definiciones del conector de datos: creación o actualización

Consulte la operación Crear o actualizar en los documentos de la API REST para encontrar la versión más reciente de la API estable o preliminar. Solo la update operación requiere el etag valor .

Método PUT

https://management.azure.com/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.OperationalInsights/workspaces/{{workspaceName}}/providers/Microsoft.SecurityInsights/dataConnectorDefinitions/{{dataConnectorDefinitionName}}?api-version={{apiVersion}}

Parámetros de URI

Para obtener más información sobre la versión más reciente de la API, consulte Definiciones de conectores de datos: creación o actualización de parámetros de URI.

Nombre Descripción
dataConnectorDefinitionName La definición del conector de datos debe ser un nombre único y es el mismo que el name parámetro en el cuerpo de la solicitud.
resourceGroupName Nombre del grupo de recursos, no distingue mayúsculas de minúsculas.
subscriptionId Identificador de la suscripción de destino.
workspaceName Nombre del área de trabajo, no el identificador.
Patrón de expresión regular: ^[A-Za-z0-9][A-Za-z0-9-]+[A-Za-z0-9]$.
api-version Versión de la API que se va a usar para esta operación.

Cuerpo de la solicitud

El cuerpo de la solicitud para crear una definición de conector de datos CCF con la API tiene la siguiente estructura:

{
    "kind": "Customizable",
    "properties": {
        "connectorUIConfig": {}
    }
}

dataConnectorDefinition tiene las siguientes propiedades:

Nombre Obligatorio Tipo Descripción
Amable Cierto Cuerda Customizable para el conector de datos de sondeo de API o Static en caso contrario
Propiedades. connectorUiConfig Cierto JSON anidado
connectorUiConfig
Las propiedades de configuración de la interfaz de usuario del conector de datos

Configuración de la interfaz de usuario del conector

En esta sección se describen las opciones de configuración disponibles para personalizar la interfaz de usuario de la página del conector de datos.

En la captura de pantalla siguiente se muestra una página de conector de datos de ejemplo, resaltada con números que corresponden a áreas importantes de la interfaz de usuario.

Captura de pantalla de una página del conector de datos de ejemplo con secciones etiquetadas entre 1 y 9.

Cada uno de los siguientes elementos de la connectorUiConfig sección necesarios para configurar la interfaz de usuario corresponde a la parte PersonalizableConnectorUiConfig de la API.

Campo Obligatorio Tipo Descripción Captura de pantalla del área notable #
título Cierto cuerda / cadena Título que se muestra en la página del conector de datos 1
ID cuerda / cadena Establece el identificador de conector personalizado para el uso interno.
logotipo cuerda / cadena Ruta de acceso al archivo de imagen en formato SVG. Si no se configura ningún valor, se usa un logotipo predeterminado. 2
editor Cierto cuerda / cadena Proveedor del conector 3
descriptionMarkdown Cierto string en Markdown Descripción del conector con la capacidad de agregar el lenguaje Markdown para mejorarlo. 4
sampleQueries Cierto JSON anidado
sampleQueries
Consulta al cliente para comprender cómo buscar los datos en el registro de eventos.
graphConsultas Cierto JSON anidado
graphConsultas
Consultas que presentan la ingesta de datos en las últimas dos semanas.

Proporcione una consulta para todos los tipos de datos del conector de datos o una consulta diferente para cada tipo de datos.
5
graphQueriesTableName Establece el nombre de la tabla en la que el conector inserta datos. Este nombre se puede usar en otras consultas especificando {{graphQueriesTableName}} el marcador de posición en graphQueries los valores y lastDataReceivedQuery .
Datatypes Cierto JSON anidado
Datatypes
Lista de todos los tipos de datos del conector y una consulta para capturar la hora del último evento para cada tipo de datos. 6
criteriosDeConectividad Cierto JSON anidado
criteriosDeConectividad
Objeto que define cómo comprobar si el conector está conectado. 7
disponibilidad JSON anidado
disponibilidad
Objeto que define el estado de disponibilidad del conector.
permisos Cierto JSON anidado
permisos
La información que se muestra en la sección Requisitos previos de la interfaz de usuario, que enumera los permisos necesarios para habilitar o deshabilitar el conector. 8
instructionSteps Cierto JSON anidado
instrucciones
Matriz de elementos de widget que explican cómo instalar el conector y controles accionables que se muestran en la pestaña Instrucciones . 9
isConnectivityCriteriasMatchSome Booleano Valor booleano que indica si se debe usar 'OR'(SOME) o 'AND' entre los elementos ConnectivityCriteria.

connectivityCriteria

Campo Obligatorio Tipo Descripción
Tipo Cierto Cuerda Una de las dos opciones siguientes: HasDataConnectors : este valor es mejor para los conectores de datos de sondeo de API, como CCF. El conector se considera conectado con al menos una conexión activa.

isConnectedQuery : este valor es el mejor para otros tipos de conectores de datos. El conector se considera conectado cuando la consulta proporcionada devuelve datos.
Importancia True cuando el tipo es isConnectedQuery Cuerda Consulta para determinar si los datos se reciben dentro de un período de tiempo determinado. Por ejemplo: CommonSecurityLog | where DeviceVendor == \"Vectra Networks\"\n| where DeviceProduct == \"X Series\"\n | summarize LastLogReceived = max(TimeGenerated)\n | project IsConnected = LastLogReceived > ago(7d)"

tipos de datos

Valor de matriz Tipo Descripción
nombre Cuerda Descripción significativa de ,lastDataReceivedQuery incluida la compatibilidad con la graphQueriesTableName variable .

Ejemplo: {{graphQueriesTableName}}
lastDataReceivedQuery Cuerda Una consulta KQL que devuelve una fila e indica la última vez que se recibieron datos o ningún dato si no hay ningún resultado.

Ejemplo: {{graphQueriesTableName}}\n | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)

graphConsultas

Define una consulta que presenta la ingesta de datos en las últimas dos semanas.

Proporcione una consulta para todos los tipos de datos del conector de datos o una consulta diferente para cada tipo de datos.

Valor de matriz Tipo Descripción
metricName Cuerda Un nombre descriptivo para el grafo.

Ejemplo: Total data received
leyenda Cuerda Cadena que aparece en la leyenda a la derecha del gráfico y que incluye una referencia de variable.

Ejemplo: {{graphQueriesTableName}}
baseQuery Cuerda La consulta que filtra los eventos pertinentes, incluida una referencia a una variable.

Por ejemplo, TableName_CL | where ProviderName == "myprovider" o {{graphQueriesTableName}}.

availability

Campo Obligatorio Tipo Descripción
estado Integer Estado de disponibilidad del conector.
Disponible = 1
Marca de características = 2
Próximamente = 3
Interno = 4
isPreview Booleano Valor booleano que indica si el conector está en modo de vista previa.

permisos

Valor de matriz Tipo Descripción
aduana Cuerda Describe los permisos personalizados necesarios para la conexión de datos, en la sintaxis siguiente:
{
"name":cadena,
"description":cadena
}

Ejemplo: el valor aduanero se muestra en la sección Requisitos previos de Microsoft Sentinel con un icono informativo azul. En el ejemplo de GitHub, este valor se correlaciona con la línea Clave de token personal de la API de GitHub: Necesita acceso al token personal de GitHub...
Licencias ENUM Define las licencias necesarias, como uno de los siguientes valores: OfficeIRM,OfficeATP, Office365, AadP1P2, McasAatp, , Mdatp, , Mtp.IoT

Ejemplo: El valor de licencias se muestra en Microsoft Sentinel como : Licencia: Obligatorio Azure AD Premium P2
resourceProvider resourceProvider Describe los requisitos previos para el recurso de Azure.

Ejemplo: el valor resourceProvider se muestra en la sección Requisitos previos de Microsoft Sentinel como:
Área de trabajo: se requiere permiso de lectura y escritura.
Claves: se requieren permisos de lectura para claves compartidas para el área de trabajo.
arrendatario matriz de valores ENUM
Ejemplo:

"tenant": [
"GlobalADmin",
"SecurityAdmin"
]
Define los permisos necesarios, como uno o varios de los siguientes valores: "GlobalAdmin", "SecurityAdmin", "SecurityReader", , "InformationProtection"

Ejemplo: muestra el valor de inquilino en Microsoft Sentinel como: Permisos de inquilino: Requiere Global Administrator o Security Administrator en el inquilino del área de trabajo

Importante

Microsoft recomienda usar roles con el menor número de permisos. Esto ayuda a mejorar la seguridad de su organización. El administrador global es un rol con privilegios elevados que debe limitarse a escenarios de emergencia cuando no se puede usar un rol existente.

proveedor de recursos

valor de sub array Tipo Descripción
proveedor ENUM Describe el proveedor de recursos, con uno de los siguientes valores:
- Microsoft.OperationalInsights/workspaces
- Microsoft.OperationalInsights/solutions
- Microsoft.OperationalInsights/workspaces/datasources
- microsoft.aadiam/diagnosticSettings
- Microsoft.OperationalInsights/workspaces/sharedKeys
- Microsoft.Authorization/policyAssignments
providerDisplayName Cuerda Un elemento de lista en Requisitos previos que muestra una marca de verificación roja "x" o verde cuando los requiredPermissions se validan en la página del conector. Ejemplo "Workspace"
permissionsDisplayText Cuerda Mostrar texto para permisos de lectura, escritura o lectura y escritura que deben corresponder a los valores configurados en requiredPermissions
requiredPermissions {
"action":Booleano,
"delete":Booleano,
"read":Booleano,
"write":Booleano
}
Describe los permisos mínimos necesarios para el conector.
de ámbito de ENUM Describe el ámbito del conector de datos, como uno de los siguientes valores: "Subscription", , "ResourceGroup""Workspace"

sampleQueries

valor de matriz Tipo Descripción
descripción Cuerda Descripción significativa de la consulta de ejemplo.

Ejemplo: Top 10 vulnerabilities detected
consulta Cuerda Consulta de ejemplo usada para capturar los datos del tipo de datos.

Ejemplo: {{graphQueriesTableName}}\n | sort by TimeGenerated\n | take 10

Para definir un vínculo insertado mediante Markdown, use el ejemplo siguiente.

{
   "title": "",
   "description": "Make sure to configure the machine's security according to your organization's security policy\n\n\n[Learn more >](https://aka.ms/SecureCEF)"
}

Para definir un vínculo como plantilla de ARM, use el ejemplo siguiente como guía:

{
   "title": "Azure Resource Manager (ARM) template",
   "description": "1. Click the **Deploy to Azure** button below.\n\n\t[![Deploy To Azure](https://aka.ms/deploytoazurebutton)]({URL to custom ARM template})"
}

instructionSteps

En esta sección se proporcionan parámetros que definen el conjunto de instrucciones que aparecen en la página del conector de datos de Microsoft Sentinel y que tiene la estructura siguiente:

"instructionSteps": [
    {
        "title": "",
        "description": "",
        "instructions": [
        {
            "type": "",
            "parameters": {}
        }
        ],
        "innerSteps": {}
    }
]
Propiedad de Array Obligatorio Tipo Descripción
título Cuerda Define un título para las instrucciones.
descripción Cuerda Define una descripción significativa para tus instrucciones.
innerSteps Arreglo Define una matriz de pasos de instrucción interna.
instrucciones Cierto Matriz de instrucciones Define una matriz de instrucciones de un tipo de parámetro específico.

instrucciones

Muestra un grupo de instrucciones, con varios parámetros y la capacidad de anidar más instruccionesPasos en grupos. Los parámetros definidos aquí corresponden

Tipo Propiedad del array Descripción
OAuthForm OAuthForm Conectar con OAuth
Cuadro de texto Cuadro de texto Esto empareja con ConnectionToggleButton. Hay 4 tipos disponibles:
  • password
  • text
  • number
  • email
  • ConnectionToggleButton ConnectionToggleButton Desencadene la implementación de DCR en función de la información de conexión proporcionada a través de parámetros de marcador de posición. Se admiten los siguientes parámetros:
  • name :obligatorio
  • disabled
  • isPrimary
  • connectLabel
  • disconnectLabel
  • CopyableLabel CopyableLabel Muestra un campo de texto con un botón copiar al final. Cuando se selecciona el botón, se copia el valor del campo.
    Lista desplegable Lista desplegable Muestra una lista desplegable de opciones para que el usuario la seleccione.
    Markdown Markdown Muestra una sección de texto con formato Markdown.
    DataConnectorsGrid DataConnectorsGrid Muestra una cuadrícula de conectores de datos.
    ContextPane ContextPane Muestra un panel de información contextual.
    MensajeInformativo MensajeInformativo Define un mensaje de información en línea.
    InstructionStepsGroup InstructionStepsGroup Muestra un grupo de instrucciones, opcionalmente expandido o contraíble, en una sección de instrucciones independiente.
    InstallAgent InstallAgent Muestra un vínculo a otras partes de Azure para cumplir varios requisitos de instalación.
    OAuthForm

    Este componente requiere que el OAuth2 tipo esté presente en la auth propiedad de la plantilla del conector de datos.

    "instructions": [
    {
      "type": "OAuthForm",
      "parameters": {
        "clientIdLabel": "Client ID",
        "clientSecretLabel": "Client Secret",
        "connectButtonLabel": "Connect",
        "disconnectButtonLabel": "Disconnect"
      }          
    }
    ]
    
    Cuadro de texto

    Estos son algunos ejemplos del Textbox tipo . Estos ejemplos corresponden a los parámetros usados en la sección de ejemplo auth de referencia de conectores de datos para Codeless Connector Framework. Para cada uno de los 4 tipos, cada uno tiene label, placeholdery name.

    "instructions": [
    {
      "type": "Textbox",
      "parameters": {
          {
            "label": "User name",
            "placeholder": "User name",
            "type": "text",
            "name": "username"
          }
      }
    },
    {
      "type": "Textbox",
      "parameters": {
          "label": "Secret",
          "placeholder": "Secret",
          "type": "password",
          "name": "password"
      }
    }
    ]
    
    ConnectionToggleButton
    "instructions": [
    {
      "type": "ConnectionToggleButton",
      "parameters": {
        "connectLabel": "toggle",
        "name": "toggle"
      }          
    }
    ]
    
    EtiquetaCopiable

    Ejemplo:

    Captura de pantalla de un botón que copia el valor en un campo.

    Código de ejemplo:

    {
        "parameters": {
            "fillWith": [
                "WorkspaceId",
                "PrimaryKey"
                ],
            "label": "Here are some values you'll need to proceed.",
            "value": "Workspace is {0} and PrimaryKey is {1}"
        },
        "type": "CopyableLabel"
    }
    
    Valor de matriz Obligatorio Tipo Descripción
    fillWith ENUM Matriz de variables de entorno usadas para llenar un marcador de posición. Separe varios marcadores de posición con comas. Por ejemplo: {0},{1}

    Valores admitidos: workspaceId, workspaceName, primaryKey, MicrosoftAwsAccount, , subscriptionId
    etiqueta Cierto Cuerda Define el texto de la etiqueta encima de un cuadro de texto.
    valor Cierto Cuerda Define el valor que se va a presentar en el cuadro de texto, admite marcadores de posición.
    Filas Filas Define las filas en el área de la interfaz de usuario. De forma predeterminada, establezca en 1.
    wideLabel Booleano Determina una etiqueta ancha para cadenas de texto largas. De forma predeterminada, establezca en false.
    {
      "parameters": {
        "label": "Select an option",
        "name": "dropdown",
        "options": [
          {
            "key": "Option 1",
            "text": "option1"
          },
          {
            "key": "Option 2",
            "text": "option2"
          }
        ],
        "placeholder": "Select an option",
        "isMultiSelect": false,
        "required": true,
        "defaultAllSelected": false
      },
      "type": "Dropdown"
    }
    
    Campo Obligatorio Tipo Descripción
    etiqueta Cierto Cuerda Define el texto de la etiqueta encima de la lista desplegable.
    nombre Cierto Cuerda Define el nombre único de la lista desplegable. Esto se usa en configuración de sondeo.
    Opciones Cierto Arreglo Define la lista de opciones de la lista desplegable.
    marcador Cuerda Define el texto del marcador de posición para la lista desplegable.
    isMultiSelect Booleano Determina si se pueden seleccionar varias opciones. De forma predeterminada, establezca en false.
    requerido Booleano Si truees , es necesario rellenar la lista desplegable.
    defaultAllSelected Booleano Si truees , todas las opciones se seleccionan de forma predeterminada.
    Markdown
    {
      "parameters": {
        "content": "## This is a Markdown section\n\nYou can use **bold** text, _italic_ text, and even [links](https://www.example.com)."
      },
      "type": "Markdown"
    }
    
    DataConnectorsGrid
    {
      "type": "DataConnectorsGrid",
      "parameters": {
        "mapping": [
          {
            "columnName": "Column 1",
            "columnValue": "Value 1"
          },
          {
            "columnName": "Column 2",
            "columnValue": "Value 2"
          }
        ],
        "menuItems": [
          "MyConnector"
        ]
      }
    }
    
    
    Campo Obligatorio Tipo Descripción
    mapping Cierto Arreglo Define la asignación de columnas en la cuadrícula.
    menuItems Arreglo Define los elementos de menú de la cuadrícula.
    ContextPane
    {
      "type": "ContextPane",
      "parameters": {
        "isPrimary": true,
        "label": "Add Account",
        "title": "Add Account",
        "subtitle": "Add Account",
        "contextPaneType": "DataConnectorsContextPane",
        "instructionSteps": [
          {
            "instructions": [
              {
                "type": "Textbox",
                "parameters": {
                  "label": "Snowflake Account Identifier",
                  "placeholder": "Enter Snowflake Account Identifier",
                  "type": "text",
                  "name": "accountId",
                  "validations": {
                    "required": true
                  }
                }
              },
              {
                "type": "Textbox",
                "parameters": {
                  "label": "Snowflake PAT",
                  "placeholder": "Enter Snowflake PAT",
                  "type": "password",
                  "name": "apikey",
                  "validations": {
                    "required": true
                  }
                }
              }
            ]
          }
        ]
      }
    }
    
    Campo Obligatorio Tipo Descripción
    título Cierto Cuerda Título del panel de contexto.
    subtítulo Cierto Cuerda Subtítulo del panel de contexto.
    contextPaneType Cierto Cuerda Tipo del panel de contexto.
    instructionSteps Cierto Arreglo
    instructionSteps
    Los pasos de instrucción para el panel de contexto.
    etiqueta Cuerda Etiqueta del panel de contexto.
    isPrimary Booleano Indica si se trata del panel de contexto principal.
    InfoMessage

    Este es un ejemplo de un mensaje de información insertado:

    Captura de pantalla de un mensaje de información insertado.

    En cambio, en la imagen siguiente se muestra un mensaje de información que no está insertado:

    Captura de pantalla de un mensaje de información que no está insertado.

    Valor de matriz Tipo Descripción
    Mensaje de texto Cuerda Defina el texto que se va a mostrar en el mensaje.
    visible Booleano Determina si se muestra el mensaje.
    Inline Booleano Determina cómo se muestra el mensaje de información.

    - true: (Recomendado) Muestra el mensaje de información incrustado en las instrucciones.
    - false: agrega un fondo azul.
    InstructionStepsGroup

    Este es un ejemplo de un grupo de instrucciones expandible:

    Captura de pantalla de un grupo de instrucciones adicional expandible.

    Valor de matriz Obligatorio Tipo Descripción
    título Cierto Cuerda Define el título del paso de instrucción.
    descripción Cuerda Texto descriptivo opcional.
    canCollapseAllSections Booleano Determina si la sección es un acordeón plegable o no.
    noFxPadding Booleano Si el true, reduce el relleno de altura para ahorrar espacio.
    Ampliado Booleano Si true se muestra como expandido de forma predeterminada.

    Para obtener un ejemplo detallado, consulte el código JSON de configuración para el conector dns de Windows.

    Agente de Instalación

    Algunos tipos InstallAgent aparecen como un botón; otros aparecen como un vínculo. Estos son ejemplos de ambos:

    Captura de pantalla de un vínculo agregado como un botón.

    Captura de pantalla de un vínculo agregado como texto insertado.

    Valores de matriz Obligatorio Tipo Descripción
    tipoDeEnlace Cierto ENUM Determina el tipo de vínculo, como uno de los siguientes valores:

    InstallAgentOnWindowsVirtualMachine
    InstallAgentOnWindowsNonAzure
    InstallAgentOnLinuxVirtualMachine
    InstallAgentOnLinuxNonAzure
    OpenSyslogSettings
    OpenCustomLogsSettings
    OpenWaf
    OpenAzureFirewall OpenMicrosoftAzureMonitoring
    OpenFrontDoors
    OpenCdnProfile
    AutomaticDeploymentCEF
    OpenAzureInformationProtection
    OpenAzureActivityLog
    OpenIotPricingModel
    OpenPolicyAssignment
    OpenAllAssignmentsBlade
    OpenCreateDataCollectionRule
    policyDefinitionGuid True cuando se usa OpenPolicyAssignment linkType. Cuerda Para los conectores basados en directivas, define el GUID de la definición de directiva predefinida.
    assignMode ENUM Para los conectores basados en directivas, define el modo de asignación, como uno de los siguientes valores: Initiative, Policy
    dataCollectionRuleType ENUM Para los conectores basados en DCR, define el tipo de regla de recopilación de datos como SecurityEvent, o ForwardEvent.

    Definición del conector de datos de ejemplo

    En el ejemplo siguiente se reúnen algunos de los componentes definidos en este artículo como formato de cuerpo JSON para usarlos con la API de definición de conector de datos Create Or Update.

    Para obtener más ejemplos de la connectorUiConfig revisión de otros conectores de datos CCF. Incluso los conectores que usan el CCF heredado tienen ejemplos válidos de la creación de la interfaz de usuario.

    {
        "kind": "Customizable",
        "properties": {
            "connectorUiConfig": {
              "title": "Example CCF Data Connector",
              "publisher": "My Company",
              "descriptionMarkdown": "This is an example of data connector",
              "graphQueriesTableName": "ExampleConnectorAlerts_CL",
              "graphQueries": [
                {
                  "metricName": "Alerts received",
                  "legend": "My data connector alerts",
                  "baseQuery": "{{graphQueriesTableName}}"
                },   
               {
                  "metricName": "Events received",
                  "legend": "My data connector events",
                  "baseQuery": "ASIMFileEventLogs"
                }
              ],
                "sampleQueries": [
                {
                    "description": "All alert logs",
                    "query": "{{graphQueriesTableName}} \n | take 10"
                }
              ],
              "dataTypes": [
                {
                  "name": "{{graphQueriesTableName}}",
                  "lastDataReceivedQuery": "{{graphQueriesTableName}} \n | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)"
                },
                 {
                  "name": "ASIMFileEventLogs",
                  "lastDataReceivedQuery": "ASIMFileEventLogs \n | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)"
                 }
              ],
              "connectivityCriteria": [
                {
                  "type": "HasDataConnectors"
                }
              ],
              "permissions": {
                "resourceProvider": [
                  {
                    "provider": "Microsoft.OperationalInsights/workspaces",
                    "permissionsDisplayText": "Read and Write permissions are required.",
                    "providerDisplayName": "Workspace",
                    "scope": "Workspace",
                    "requiredPermissions": {
                      "write": true,
                      "read": true,
                      "delete": true
                    }
                  },
                ],
                "customs": [
                  {
                    "name": "Example Connector API Key",
                    "description": "The connector API key username and password is required"
                  }
                ] 
            },
              "instructionSteps": [
                {
                  "title": "Connect My Connector to Microsoft Sentinel",
                  "description": "To enable the connector provide the required information below and click on Connect.\n>",
                  "instructions": [
                   {
                      "type": "Textbox",
                      "parameters": {
                        "label": "User name",
                        "placeholder": "User name",
                        "type": "text",
                        "name": "username"
                      }
                    },
                    {
                      "type": "Textbox",
                      "parameters": {
                        "label": "Secret",
                        "placeholder": "Secret",
                        "type": "password",
                        "name": "password"
                      }
                    },
                    {
                      "type": "ConnectionToggleButton",
                      "parameters": {
                        "connectLabel": "toggle",
                        "name": "toggle"
                      }
                    }
                  ]
                }
              ]
            }
        }
    }