# pylint: disable=line-too-long,useless-suppression,too-many-lines
# coding=utf-8
# --------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# Code generated by Microsoft (R) Python Code Generator.
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
# --------------------------------------------------------------------------

from typing import Any, Literal, Optional, TYPE_CHECKING, Union
from typing_extensions import Required, TypedDict

if TYPE_CHECKING:
    from .models import (
        AccessMode,
        CreatedByType,
        EmailChannelAuthMethod,
        Key,
        Kind,
        MsaAppType,
        NspAccessRuleDirection,
        OperationResultStatus,
        PrivateEndpointConnectionProvisioningState,
        PrivateEndpointServiceConnectionStatus,
        ProvisioningState,
        PublicNetworkAccess,
        Severity,
        SkuName,
        SkuTier,
    )


class AcsChatChannel(TypedDict, total=False):
    """AcsChat channel definition.

    :ivar etag: Entity Tag of the resource.
    :vartype etag: str
    :ivar provisioning_state: Provisioning state of the resource.
    :vartype provisioning_state: str
    :ivar location: Specifies the location of the resource.
    :vartype location: str
    :ivar channel_name: The channel name. Required. Default value is "AcsChatChannel".
    :vartype channel_name: Literal["AcsChatChannel"]
    """

    etag: Optional[str]
    """Entity Tag of the resource."""
    provisioningState: str
    """Provisioning state of the resource."""
    location: str
    """Specifies the location of the resource."""
    channelName: Required[Literal["AcsChatChannel"]]
    """The channel name. Required. Default value is \"AcsChatChannel\"."""


class AlexaChannel(TypedDict, total=False):
    """Alexa channel definition.

    :ivar etag: Entity Tag of the resource.
    :vartype etag: str
    :ivar provisioning_state: Provisioning state of the resource.
    :vartype provisioning_state: str
    :ivar location: Specifies the location of the resource.
    :vartype location: str
    :ivar properties: The set of properties specific to Alexa channel resource.
    :vartype properties: "AlexaChannelProperties"
    :ivar channel_name: The channel name. Required. Default value is "AlexaChannel".
    :vartype channel_name: Literal["AlexaChannel"]
    """

    etag: Optional[str]
    """Entity Tag of the resource."""
    provisioningState: str
    """Provisioning state of the resource."""
    location: str
    """Specifies the location of the resource."""
    properties: "AlexaChannelProperties"
    """The set of properties specific to Alexa channel resource."""
    channelName: Required[Literal["AlexaChannel"]]
    """The channel name. Required. Default value is \"AlexaChannel\"."""


class AlexaChannelProperties(TypedDict, total=False):
    """The parameters to provide for the Alexa channel.

    :ivar alexa_skill_id: The Alexa skill Id. Required.
    :vartype alexa_skill_id: str
    :ivar url_fragment: Url fragment used in part of the Uri configured in Alexa.
    :vartype url_fragment: str
    :ivar service_endpoint_uri: Full Uri used to configured the skill in Alexa.
    :vartype service_endpoint_uri: str
    :ivar is_enabled: Whether this channel is enabled for the bot. Required.
    :vartype is_enabled: bool
    """

    alexaSkillId: Required[str]
    """The Alexa skill Id. Required."""
    urlFragment: str
    """Url fragment used in part of the Uri configured in Alexa."""
    serviceEndpointUri: str
    """Full Uri used to configured the skill in Alexa."""
    isEnabled: Required[bool]
    """Whether this channel is enabled for the bot. Required."""


class Resource(TypedDict, total=False):
    """Resource.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    """

    id: str
    """Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}."""
    name: str
    """The name of the resource."""
    type: str
    """The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or
     \"Microsoft.Storage/storageAccounts\"."""
    systemData: "SystemData"
    """Azure Resource Manager metadata containing createdBy and modifiedBy information."""


class ProxyResource(Resource):
    """Proxy Resource.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    """


class Bot(ProxyResource):
    """Bot resource definition.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    :ivar properties: The set of properties specific to bot resource.
    :vartype properties: "BotProperties"
    :ivar location: Specifies the location of the resource.
    :vartype location: str
    :ivar tags: Contains resource tags defined as key/value pairs.
    :vartype tags: dict[str, str]
    :ivar sku: Gets or sets the SKU of the resource.
    :vartype sku: "Sku"
    :ivar kind: Required. Gets or sets the Kind of the resource. Known values are: "sdk",
     "designer", "bot", "function", and "azurebot".
    :vartype kind: Union[str, "Kind"]
    :ivar etag: Entity Tag.
    :vartype etag: str
    :ivar zones: Entity zones.
    :vartype zones: list[str]
    """

    properties: "BotProperties"
    """The set of properties specific to bot resource."""
    location: str
    """Specifies the location of the resource."""
    tags: dict[str, str]
    """Contains resource tags defined as key/value pairs."""
    sku: "Sku"
    """Gets or sets the SKU of the resource."""
    kind: Union[str, "Kind"]
    """Required. Gets or sets the Kind of the resource. Known values are: \"sdk\", \"designer\",
     \"bot\", \"function\", and \"azurebot\"."""
    etag: str
    """Entity Tag."""
    zones: list[str]
    """Entity zones."""


class BotChannel(ProxyResource):
    """Bot channel resource definition.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    :ivar properties: The set of properties specific to bot channel resource.
    :vartype properties: "Channel"
    :ivar location: Specifies the location of the resource.
    :vartype location: str
    :ivar tags: Contains resource tags defined as key/value pairs.
    :vartype tags: dict[str, str]
    :ivar sku: Gets or sets the SKU of the resource.
    :vartype sku: "Sku"
    :ivar kind: Required. Gets or sets the Kind of the resource. Known values are: "sdk",
     "designer", "bot", "function", and "azurebot".
    :vartype kind: Union[str, "Kind"]
    :ivar etag: Entity Tag.
    :vartype etag: str
    :ivar zones: Entity zones.
    :vartype zones: list[str]
    """

    properties: "Channel"
    """The set of properties specific to bot channel resource."""
    location: str
    """Specifies the location of the resource."""
    tags: dict[str, str]
    """Contains resource tags defined as key/value pairs."""
    sku: "Sku"
    """Gets or sets the SKU of the resource."""
    kind: Union[str, "Kind"]
    """Required. Gets or sets the Kind of the resource. Known values are: \"sdk\", \"designer\",
     \"bot\", \"function\", and \"azurebot\"."""
    etag: str
    """Entity Tag."""
    zones: list[str]
    """Entity zones."""


class BotProperties(TypedDict, total=False):
    """The parameters to provide for the Bot.

    :ivar display_name: The Name of the bot. Required.
    :vartype display_name: str
    :ivar description: The description of the bot.
    :vartype description: str
    :ivar icon_url: The Icon Url of the bot.
    :vartype icon_url: str
    :ivar endpoint: The bot's endpoint. Required.
    :vartype endpoint: str
    :ivar endpoint_version: The bot's endpoint version.
    :vartype endpoint_version: str
    :ivar all_settings: Contains resource all settings defined as key/value pairs.
    :vartype all_settings: dict[str, str]
    :ivar parameters: Contains resource parameters defined as key/value pairs.
    :vartype parameters: dict[str, str]
    :ivar manifest_url: The bot's manifest url.
    :vartype manifest_url: str
    :ivar msa_app_type: Microsoft App Type for the bot. Known values are: "UserAssignedMSI",
     "SingleTenant", and "MultiTenant".
    :vartype msa_app_type: Union[str, "MsaAppType"]
    :ivar msa_app_id: Microsoft App Id for the bot. Required.
    :vartype msa_app_id: str
    :ivar msa_app_tenant_id: Microsoft App Tenant Id for the bot.
    :vartype msa_app_tenant_id: str
    :ivar msa_app_msi_resource_id: Microsoft App Managed Identity Resource Id for the bot.
    :vartype msa_app_msi_resource_id: str
    :ivar configured_channels: Collection of channels for which the bot is configured.
    :vartype configured_channels: list[str]
    :ivar enabled_channels: Collection of channels for which the bot is enabled.
    :vartype enabled_channels: list[str]
    :ivar developer_app_insight_key: The Application Insights key.
    :vartype developer_app_insight_key: str
    :ivar developer_app_insights_api_key: The Application Insights Api Key.
    :vartype developer_app_insights_api_key: str
    :ivar developer_app_insights_application_id: The Application Insights App Id.
    :vartype developer_app_insights_application_id: str
    :ivar luis_app_ids: Collection of LUIS App Ids.
    :vartype luis_app_ids: list[str]
    :ivar luis_key: The LUIS Key.
    :vartype luis_key: str
    :ivar is_cmek_enabled: Whether Cmek is enabled.
    :vartype is_cmek_enabled: bool
    :ivar cmek_key_vault_url: The CMK Url.
    :vartype cmek_key_vault_url: str
    :ivar cmek_encryption_status: The CMK encryption status.
    :vartype cmek_encryption_status: str
    :ivar tenant_id: The Tenant Id for the bot.
    :vartype tenant_id: str
    :ivar public_network_access: Whether the bot is in an isolated network. Known values are:
     "Enabled", "Disabled", and "SecuredByPerimeter".
    :vartype public_network_access: Union[str, "PublicNetworkAccess"]
    :ivar is_streaming_supported: Whether the bot is streaming supported.
    :vartype is_streaming_supported: bool
    :ivar is_developer_app_insights_api_key_set: Whether the bot is developerAppInsightsApiKey set.
    :vartype is_developer_app_insights_api_key_set: bool
    :ivar migration_token: Token used to migrate non Azure bot to azure subscription.
    :vartype migration_token: str
    :ivar disable_local_auth: Opt-out of local authentication and ensure only MSI and AAD can be
     used exclusively for authentication.
    :vartype disable_local_auth: bool
    :ivar schema_transformation_version: The channel schema transformation version for the bot.
    :vartype schema_transformation_version: str
    :ivar storage_resource_id: The storage resourceId for the bot.
    :vartype storage_resource_id: str
    :ivar private_endpoint_connections: List of Private Endpoint Connections configured for the
     bot.
    :vartype private_endpoint_connections: list["PrivateEndpointConnection"]
    :ivar network_security_perimeter_configurations: List of Network Security Perimeter
     configurations for the bot.
    :vartype network_security_perimeter_configurations:
     list["NetworkSecurityPerimeterConfiguration"]
    :ivar open_with_hint: The hint to browser (e.g. protocol handler) on how to open the bot for
     authoring.
    :vartype open_with_hint: str
    :ivar app_password_hint: The hint (e.g. keyVault secret resourceId) on how to fetch the app
     secret.
    :vartype app_password_hint: str
    :ivar provisioning_state: Provisioning state of the resource.
    :vartype provisioning_state: str
    :ivar publishing_credentials: Publishing credentials of the resource.
    :vartype publishing_credentials: str
    """

    displayName: Required[str]
    """The Name of the bot. Required."""
    description: str
    """The description of the bot."""
    iconUrl: str
    """The Icon Url of the bot."""
    endpoint: Required[Optional[str]]
    """The bot's endpoint. Required."""
    endpointVersion: str
    """The bot's endpoint version."""
    allSettings: dict[str, str]
    """Contains resource all settings defined as key/value pairs."""
    parameters: dict[str, str]
    """Contains resource parameters defined as key/value pairs."""
    manifestUrl: str
    """The bot's manifest url."""
    msaAppType: Union[str, "MsaAppType"]
    """Microsoft App Type for the bot. Known values are: \"UserAssignedMSI\", \"SingleTenant\", and
     \"MultiTenant\"."""
    msaAppId: Required[str]
    """Microsoft App Id for the bot. Required."""
    msaAppTenantId: str
    """Microsoft App Tenant Id for the bot."""
    msaAppMSIResourceId: str
    """Microsoft App Managed Identity Resource Id for the bot."""
    configuredChannels: list[str]
    """Collection of channels for which the bot is configured."""
    enabledChannels: list[str]
    """Collection of channels for which the bot is enabled."""
    developerAppInsightKey: str
    """The Application Insights key."""
    developerAppInsightsApiKey: str
    """The Application Insights Api Key."""
    developerAppInsightsApplicationId: str
    """The Application Insights App Id."""
    luisAppIds: list[str]
    """Collection of LUIS App Ids."""
    luisKey: str
    """The LUIS Key."""
    isCmekEnabled: bool
    """Whether Cmek is enabled."""
    cmekKeyVaultUrl: str
    """The CMK Url."""
    cmekEncryptionStatus: str
    """The CMK encryption status."""
    tenantId: str
    """The Tenant Id for the bot."""
    publicNetworkAccess: Union[str, "PublicNetworkAccess"]
    """Whether the bot is in an isolated network. Known values are: \"Enabled\", \"Disabled\", and
     \"SecuredByPerimeter\"."""
    isStreamingSupported: bool
    """Whether the bot is streaming supported."""
    isDeveloperAppInsightsApiKeySet: bool
    """Whether the bot is developerAppInsightsApiKey set."""
    migrationToken: str
    """Token used to migrate non Azure bot to azure subscription."""
    disableLocalAuth: bool
    """Opt-out of local authentication and ensure only MSI and AAD can be used exclusively for
     authentication."""
    schemaTransformationVersion: Optional[str]
    """The channel schema transformation version for the bot."""
    storageResourceId: str
    """The storage resourceId for the bot."""
    privateEndpointConnections: list["PrivateEndpointConnection"]
    """List of Private Endpoint Connections configured for the bot."""
    networkSecurityPerimeterConfigurations: list["NetworkSecurityPerimeterConfiguration"]
    """List of Network Security Perimeter configurations for the bot."""
    openWithHint: str
    """The hint to browser (e.g. protocol handler) on how to open the bot for authoring."""
    appPasswordHint: str
    """The hint (e.g. keyVault secret resourceId) on how to fetch the app secret."""
    provisioningState: str
    """Provisioning state of the resource."""
    publishingCredentials: str
    """Publishing credentials of the resource."""


class ChannelSettings(TypedDict, total=False):
    """Channel settings definition.

    :ivar extension_key1: The extensionKey1.
    :vartype extension_key1: str
    :ivar extension_key2: The extensionKey2.
    :vartype extension_key2: str
    :ivar sites: The list of sites.
    :vartype sites: list["Site"]
    :ivar channel_id: The channel id.
    :vartype channel_id: str
    :ivar channel_display_name: The channel display name.
    :vartype channel_display_name: str
    :ivar bot_id: The bot id.
    :vartype bot_id: str
    :ivar bot_icon_url: The bot icon url.
    :vartype bot_icon_url: str
    :ivar is_enabled: Whether this channel is enabled for the bot.
    :vartype is_enabled: bool
    :ivar disable_local_auth: Opt-out of local authentication and ensure only MSI and AAD can be
     used exclusively for authentication.
    :vartype disable_local_auth: bool
    :ivar require_terms_agreement: Whether customer needs to agree to new terms.
    :vartype require_terms_agreement: bool
    """

    extensionKey1: str
    """The extensionKey1."""
    extensionKey2: str
    """The extensionKey2."""
    sites: list["Site"]
    """The list of sites."""
    channelId: str
    """The channel id."""
    channelDisplayName: str
    """The channel display name."""
    botId: str
    """The bot id."""
    botIconUrl: str
    """The bot icon url."""
    isEnabled: bool
    """Whether this channel is enabled for the bot."""
    disableLocalAuth: bool
    """Opt-out of local authentication and ensure only MSI and AAD can be used exclusively for
     authentication."""
    requireTermsAgreement: bool
    """Whether customer needs to agree to new terms."""


class CheckNameAvailabilityRequestBody(TypedDict, total=False):
    """The request body for a request to Bot Service Management to check availability of a bot name.

    :ivar name: the name of the bot for which availability needs to be checked.
    :vartype name: str
    :ivar type: the type of the bot for which availability needs to be checked.
    :vartype type: str
    """

    name: str
    """the name of the bot for which availability needs to be checked."""
    type: str
    """the type of the bot for which availability needs to be checked."""


class CheckNameAvailabilityResponseBody(TypedDict, total=False):
    """The response body returned for a request to Bot Service Management to check availability of a
    bot name.

    :ivar valid: indicates if the bot name is valid.
    :vartype valid: bool
    :ivar message: additional message from the bot management api showing why a bot name is not
     available.
    :vartype message: str
    :ivar abs_code: response code from ABS.
    :vartype abs_code: str
    """

    valid: bool
    """indicates if the bot name is valid."""
    message: str
    """additional message from the bot management api showing why a bot name is not available."""
    absCode: str
    """response code from ABS."""


class ConnectionSetting(ProxyResource):
    """Bot channel resource definition.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    :ivar properties: The set of properties specific to bot channel resource.
    :vartype properties: "ConnectionSettingProperties"
    :ivar location: Specifies the location of the resource.
    :vartype location: str
    :ivar tags: Contains resource tags defined as key/value pairs.
    :vartype tags: dict[str, str]
    :ivar sku: Gets or sets the SKU of the resource.
    :vartype sku: "Sku"
    :ivar kind: Required. Gets or sets the Kind of the resource. Known values are: "sdk",
     "designer", "bot", "function", and "azurebot".
    :vartype kind: Union[str, "Kind"]
    :ivar etag: Entity Tag.
    :vartype etag: str
    :ivar zones: Entity zones.
    :vartype zones: list[str]
    """

    properties: "ConnectionSettingProperties"
    """The set of properties specific to bot channel resource."""
    location: str
    """Specifies the location of the resource."""
    tags: dict[str, str]
    """Contains resource tags defined as key/value pairs."""
    sku: "Sku"
    """Gets or sets the SKU of the resource."""
    kind: Union[str, "Kind"]
    """Required. Gets or sets the Kind of the resource. Known values are: \"sdk\", \"designer\",
     \"bot\", \"function\", and \"azurebot\"."""
    etag: str
    """Entity Tag."""
    zones: list[str]
    """Entity zones."""


class ConnectionSettingParameter(TypedDict, total=False):
    """Extra Parameter in a Connection Setting Properties to indicate service provider specific
    properties.

    :ivar key: Key for the Connection Setting Parameter.
    :vartype key: str
    :ivar value: Value associated with the Connection Setting Parameter.
    :vartype value: str
    """

    key: str
    """Key for the Connection Setting Parameter."""
    value: Optional[str]
    """Value associated with the Connection Setting Parameter."""


class ConnectionSettingProperties(TypedDict, total=False):
    """Properties for a Connection Setting Item.

    :ivar id: Id of the Connection Setting.
    :vartype id: str
    :ivar name: Name of the Connection Setting.
    :vartype name: str
    :ivar client_id: Client Id associated with the Connection Setting.
    :vartype client_id: str
    :ivar setting_id: Setting Id set by the service for the Connection Setting.
    :vartype setting_id: str
    :ivar client_secret: Client Secret associated with the Connection Setting.
    :vartype client_secret: str
    :ivar scopes: Scopes associated with the Connection Setting.
    :vartype scopes: str
    :ivar service_provider_id: Service Provider Id associated with the Connection Setting.
    :vartype service_provider_id: str
    :ivar service_provider_display_name: Service Provider Display Name associated with the
     Connection Setting.
    :vartype service_provider_display_name: str
    :ivar parameters: Service Provider Parameters associated with the Connection Setting.
    :vartype parameters: list["ConnectionSettingParameter"]
    :ivar provisioning_state: Provisioning state of the resource.
    :vartype provisioning_state: str
    """

    id: str
    """Id of the Connection Setting."""
    name: str
    """Name of the Connection Setting."""
    clientId: str
    """Client Id associated with the Connection Setting."""
    settingId: str
    """Setting Id set by the service for the Connection Setting."""
    clientSecret: str
    """Client Secret associated with the Connection Setting."""
    scopes: str
    """Scopes associated with the Connection Setting."""
    serviceProviderId: str
    """Service Provider Id associated with the Connection Setting."""
    serviceProviderDisplayName: str
    """Service Provider Display Name associated with the Connection Setting."""
    parameters: list["ConnectionSettingParameter"]
    """Service Provider Parameters associated with the Connection Setting."""
    provisioningState: str
    """Provisioning state of the resource."""


class CreateEmailSignInUrlResponse(TypedDict, total=False):
    """The ARM create email sign in url operation response.

    :ivar id: Specifies the resource ID.
    :vartype id: str
    :ivar location: Specifies the location of the resource.
    :vartype location: str
    :ivar properties: The set of properties specific to sign in url.
    :vartype properties: "CreateEmailSignInUrlResponseProperties"
    """

    id: str
    """Specifies the resource ID."""
    location: str
    """Specifies the location of the resource."""
    properties: "CreateEmailSignInUrlResponseProperties"
    """The set of properties specific to sign in url."""


class CreateEmailSignInUrlResponseProperties(TypedDict, total=False):
    """The set of properties specific to sign in url.

    :ivar url: Sign in url.
    :vartype url: str
    """

    url: str
    """Sign in url."""


class DirectLineChannel(TypedDict, total=False):
    """Direct Line channel definition.

    :ivar etag: Entity Tag of the resource.
    :vartype etag: str
    :ivar provisioning_state: Provisioning state of the resource.
    :vartype provisioning_state: str
    :ivar location: Specifies the location of the resource.
    :vartype location: str
    :ivar properties: The set of properties specific to Direct Line channel resource.
    :vartype properties: "DirectLineChannelProperties"
    :ivar channel_name: The channel name. Required. Default value is "DirectLineChannel".
    :vartype channel_name: Literal["DirectLineChannel"]
    """

    etag: Optional[str]
    """Entity Tag of the resource."""
    provisioningState: str
    """Provisioning state of the resource."""
    location: str
    """Specifies the location of the resource."""
    properties: "DirectLineChannelProperties"
    """The set of properties specific to Direct Line channel resource."""
    channelName: Required[Literal["DirectLineChannel"]]
    """The channel name. Required. Default value is \"DirectLineChannel\"."""


class DirectLineChannelProperties(TypedDict, total=False):
    """The parameters to provide for the Direct Line channel.

    :ivar sites: The list of Direct Line sites.
    :vartype sites: list["DirectLineSite"]
    :ivar extension_key1: The extensionKey1.
    :vartype extension_key1: str
    :ivar extension_key2: The extensionKey2.
    :vartype extension_key2: str
    :ivar direct_line_embed_code: Direct Line embed code of the resource.
    :vartype direct_line_embed_code: str
    """

    sites: list["DirectLineSite"]
    """The list of Direct Line sites."""
    extensionKey1: str
    """The extensionKey1."""
    extensionKey2: str
    """The extensionKey2."""
    DirectLineEmbedCode: str
    """Direct Line embed code of the resource."""


class Site(TypedDict, total=False):
    """A site for the channel.

    :ivar tenant_id: Tenant Id.
    :vartype tenant_id: str
    :ivar site_id: Site Id.
    :vartype site_id: str
    :ivar site_name: Site name. Required.
    :vartype site_name: str
    :ivar key: Primary key. Value only returned through POST to the action Channel List API,
     otherwise empty.
    :vartype key: str
    :ivar key2: Secondary key. Value only returned through POST to the action Channel List API,
     otherwise empty.
    :vartype key2: str
    :ivar is_enabled: Whether this site is enabled for DirectLine channel. Required.
    :vartype is_enabled: bool
    :ivar is_token_enabled: Whether this site is token enabled for channel.
    :vartype is_token_enabled: bool
    :ivar is_endpoint_parameters_enabled: Whether this site is EndpointParameters enabled for
     channel.
    :vartype is_endpoint_parameters_enabled: bool
    :ivar is_detailed_logging_enabled: Whether this site is disabled detailed logging for.
    :vartype is_detailed_logging_enabled: bool
    :ivar is_block_user_upload_enabled: Whether this site is enabled for block user upload.
    :vartype is_block_user_upload_enabled: bool
    :ivar is_no_storage_enabled: Whether this no-storage site is disabled detailed logging for.
    :vartype is_no_storage_enabled: bool
    :ivar e_tag: Entity Tag.
    :vartype e_tag: str
    :ivar app_id: DirectLine application id.
    :vartype app_id: str
    :ivar is_v1_enabled: Whether this site is enabled for Bot Framework V1 protocol.
    :vartype is_v1_enabled: bool
    :ivar is_v3_enabled: Whether this site is enabled for Bot Framework V3 protocol.
    :vartype is_v3_enabled: bool
    :ivar is_secure_site_enabled: Whether this site is enabled for authentication with Bot
     Framework.
    :vartype is_secure_site_enabled: bool
    :ivar trusted_origins: List of Trusted Origin URLs for this site. This field is applicable only
     if isSecureSiteEnabled is True.
    :vartype trusted_origins: list[str]
    :ivar is_web_chat_speech_enabled: Whether this site is enabled for Webchat Speech.
    :vartype is_web_chat_speech_enabled: bool
    :ivar is_webchat_preview_enabled: Whether this site is enabled for preview versions of Webchat.
    :vartype is_webchat_preview_enabled: bool
    """

    tenantId: str
    """Tenant Id."""
    siteId: str
    """Site Id."""
    siteName: Required[str]
    """Site name. Required."""
    key: str
    """Primary key. Value only returned through POST to the action Channel List API, otherwise empty."""
    key2: str
    """Secondary key. Value only returned through POST to the action Channel List API, otherwise
     empty."""
    isEnabled: Required[bool]
    """Whether this site is enabled for DirectLine channel. Required."""
    isTokenEnabled: bool
    """Whether this site is token enabled for channel."""
    isEndpointParametersEnabled: bool
    """Whether this site is EndpointParameters enabled for channel."""
    isDetailedLoggingEnabled: bool
    """Whether this site is disabled detailed logging for."""
    isBlockUserUploadEnabled: Optional[bool]
    """Whether this site is enabled for block user upload."""
    isNoStorageEnabled: bool
    """Whether this no-storage site is disabled detailed logging for."""
    eTag: str
    """Entity Tag."""
    appId: str
    """DirectLine application id."""
    isV1Enabled: bool
    """Whether this site is enabled for Bot Framework V1 protocol."""
    isV3Enabled: bool
    """Whether this site is enabled for Bot Framework V3 protocol."""
    isSecureSiteEnabled: bool
    """Whether this site is enabled for authentication with Bot Framework."""
    trustedOrigins: list[str]
    """List of Trusted Origin URLs for this site. This field is applicable only if isSecureSiteEnabled
     is True."""
    isWebChatSpeechEnabled: bool
    """Whether this site is enabled for Webchat Speech."""
    isWebchatPreviewEnabled: bool
    """Whether this site is enabled for preview versions of Webchat."""


class DirectLineSite(Site):
    """A site for the Direct Line channel.

    :ivar tenant_id: Tenant Id.
    :vartype tenant_id: str
    :ivar site_id: Site Id.
    :vartype site_id: str
    :ivar site_name: Site name. Required.
    :vartype site_name: str
    :ivar key: Primary key. Value only returned through POST to the action Channel List API,
     otherwise empty.
    :vartype key: str
    :ivar key2: Secondary key. Value only returned through POST to the action Channel List API,
     otherwise empty.
    :vartype key2: str
    :ivar is_enabled: Whether this site is enabled for DirectLine channel. Required.
    :vartype is_enabled: bool
    :ivar is_token_enabled: Whether this site is token enabled for channel.
    :vartype is_token_enabled: bool
    :ivar is_endpoint_parameters_enabled: Whether this site is EndpointParameters enabled for
     channel.
    :vartype is_endpoint_parameters_enabled: bool
    :ivar is_detailed_logging_enabled: Whether this site is disabled detailed logging for.
    :vartype is_detailed_logging_enabled: bool
    :ivar is_block_user_upload_enabled: Whether this site is enabled for block user upload.
    :vartype is_block_user_upload_enabled: bool
    :ivar is_no_storage_enabled: Whether this no-storage site is disabled detailed logging for.
    :vartype is_no_storage_enabled: bool
    :ivar e_tag: Entity Tag.
    :vartype e_tag: str
    :ivar app_id: DirectLine application id.
    :vartype app_id: str
    :ivar is_v1_enabled: Whether this site is enabled for Bot Framework V1 protocol.
    :vartype is_v1_enabled: bool
    :ivar is_v3_enabled: Whether this site is enabled for Bot Framework V3 protocol.
    :vartype is_v3_enabled: bool
    :ivar is_secure_site_enabled: Whether this site is enabled for authentication with Bot
     Framework.
    :vartype is_secure_site_enabled: bool
    :ivar trusted_origins: List of Trusted Origin URLs for this site. This field is applicable only
     if isSecureSiteEnabled is True.
    :vartype trusted_origins: list[str]
    :ivar is_web_chat_speech_enabled: Whether this site is enabled for Webchat Speech.
    :vartype is_web_chat_speech_enabled: bool
    :ivar is_webchat_preview_enabled: Whether this site is enabled for preview versions of Webchat.
    :vartype is_webchat_preview_enabled: bool
    """


class DirectLineSpeechChannel(TypedDict, total=False):
    """DirectLine Speech channel definition.

    :ivar etag: Entity Tag of the resource.
    :vartype etag: str
    :ivar provisioning_state: Provisioning state of the resource.
    :vartype provisioning_state: str
    :ivar location: Specifies the location of the resource.
    :vartype location: str
    :ivar properties: The set of properties specific to DirectLine Speech channel resource.
    :vartype properties: "DirectLineSpeechChannelProperties"
    :ivar channel_name: The channel name. Required. Default value is "DirectLineSpeechChannel".
    :vartype channel_name: Literal["DirectLineSpeechChannel"]
    """

    etag: Optional[str]
    """Entity Tag of the resource."""
    provisioningState: str
    """Provisioning state of the resource."""
    location: str
    """Specifies the location of the resource."""
    properties: "DirectLineSpeechChannelProperties"
    """The set of properties specific to DirectLine Speech channel resource."""
    channelName: Required[Literal["DirectLineSpeechChannel"]]
    """The channel name. Required. Default value is \"DirectLineSpeechChannel\"."""


class DirectLineSpeechChannelProperties(TypedDict, total=False):
    """The parameters to provide for the DirectLine Speech channel.

    :ivar cognitive_service_resource_id: The cognitive service id with this channel registration.
    :vartype cognitive_service_resource_id: str
    :ivar cognitive_service_region: The cognitive service region with this channel registration.
    :vartype cognitive_service_region: str
    :ivar cognitive_service_subscription_key: The cognitive service subscription key to use with
     this channel registration.
    :vartype cognitive_service_subscription_key: str
    :ivar is_enabled: Whether this channel is enabled or not.
    :vartype is_enabled: bool
    :ivar custom_voice_deployment_id: Custom speech model id (optional).
    :vartype custom_voice_deployment_id: str
    :ivar custom_speech_model_id: Custom voice deployment id (optional).
    :vartype custom_speech_model_id: str
    :ivar is_default_bot_for_cog_svc_account: Make this a default bot for chosen cognitive service
     account.
    :vartype is_default_bot_for_cog_svc_account: bool
    """

    cognitiveServiceResourceId: str
    """The cognitive service id with this channel registration."""
    cognitiveServiceRegion: Optional[str]
    """The cognitive service region with this channel registration."""
    cognitiveServiceSubscriptionKey: Optional[str]
    """The cognitive service subscription key to use with this channel registration."""
    isEnabled: bool
    """Whether this channel is enabled or not."""
    customVoiceDeploymentId: str
    """Custom speech model id (optional)."""
    customSpeechModelId: str
    """Custom voice deployment id (optional)."""
    isDefaultBotForCogSvcAccount: bool
    """Make this a default bot for chosen cognitive service account."""


class EmailChannel(TypedDict, total=False):
    """Email channel definition.

    :ivar etag: Entity Tag of the resource.
    :vartype etag: str
    :ivar provisioning_state: Provisioning state of the resource.
    :vartype provisioning_state: str
    :ivar location: Specifies the location of the resource.
    :vartype location: str
    :ivar properties: The set of properties specific to email channel resource.
    :vartype properties: "EmailChannelProperties"
    :ivar channel_name: The channel name. Required. Default value is "EmailChannel".
    :vartype channel_name: Literal["EmailChannel"]
    """

    etag: Optional[str]
    """Entity Tag of the resource."""
    provisioningState: str
    """Provisioning state of the resource."""
    location: str
    """Specifies the location of the resource."""
    properties: "EmailChannelProperties"
    """The set of properties specific to email channel resource."""
    channelName: Required[Literal["EmailChannel"]]
    """The channel name. Required. Default value is \"EmailChannel\"."""


class EmailChannelProperties(TypedDict, total=False):
    """The parameters to provide for the Email channel.

    :ivar email_address: The email address. Required.
    :vartype email_address: str
    :ivar auth_method: Email channel auth method. 0 Password (Default); 1 Graph. Known values are:
     0 and 1.
    :vartype auth_method: Union[int, "EmailChannelAuthMethod"]
    :ivar password: The password for the email address. Value only returned through POST to the
     action Channel List API, otherwise empty.
    :vartype password: str
    :ivar magic_code: The magic code for setting up the modern authentication.
    :vartype magic_code: str
    :ivar is_enabled: Whether this channel is enabled for the bot. Required.
    :vartype is_enabled: bool
    """

    emailAddress: Required[str]
    """The email address. Required."""
    authMethod: Union[int, "EmailChannelAuthMethod"]
    """Email channel auth method. 0 Password (Default); 1 Graph. Known values are: 0 and 1."""
    password: str
    """The password for the email address. Value only returned through POST to the action Channel List
     API, otherwise empty."""
    magicCode: str
    """The magic code for setting up the modern authentication."""
    isEnabled: Required[bool]
    """Whether this channel is enabled for the bot. Required."""


class Error(TypedDict, total=False):
    """Bot Service error object.

    :ivar error: The error body.
    :vartype error: "ErrorBody"
    """

    error: "ErrorBody"
    """The error body."""


class ErrorAdditionalInfo(TypedDict, total=False):
    """The resource management error additional info.

    :ivar type: The additional info type.
    :vartype type: str
    :ivar info: The additional info.
    :vartype info: Any
    """

    type: str
    """The additional info type."""
    info: Any
    """The additional info."""


class ErrorBody(TypedDict, total=False):
    """Bot Service error body.

    :ivar code: error code. Required.
    :vartype code: str
    :ivar message: error message. Required.
    :vartype message: str
    """

    code: Required[str]
    """error code. Required."""
    message: Required[str]
    """error message. Required."""


class ErrorDetail(TypedDict, total=False):
    """The error detail.

    :ivar code: The error code.
    :vartype code: str
    :ivar message: The error message.
    :vartype message: str
    :ivar target: The error target.
    :vartype target: str
    :ivar details: The error details.
    :vartype details: list["ErrorDetail"]
    :ivar additional_info: The error additional info.
    :vartype additional_info: list["ErrorAdditionalInfo"]
    """

    code: str
    """The error code."""
    message: str
    """The error message."""
    target: str
    """The error target."""
    details: list["ErrorDetail"]
    """The error details."""
    additionalInfo: list["ErrorAdditionalInfo"]
    """The error additional info."""


class ErrorResponse(TypedDict, total=False):
    """Error response.

    :ivar error: The error object.
    :vartype error: "ErrorDetail"
    """

    error: "ErrorDetail"
    """The error object."""


class FacebookChannel(TypedDict, total=False):
    """Facebook channel definition.

    :ivar etag: Entity Tag of the resource.
    :vartype etag: str
    :ivar provisioning_state: Provisioning state of the resource.
    :vartype provisioning_state: str
    :ivar location: Specifies the location of the resource.
    :vartype location: str
    :ivar properties: The set of properties specific to bot facebook channel.
    :vartype properties: "FacebookChannelProperties"
    :ivar channel_name: The channel name. Required. Default value is "FacebookChannel".
    :vartype channel_name: Literal["FacebookChannel"]
    """

    etag: Optional[str]
    """Entity Tag of the resource."""
    provisioningState: str
    """Provisioning state of the resource."""
    location: str
    """Specifies the location of the resource."""
    properties: "FacebookChannelProperties"
    """The set of properties specific to bot facebook channel."""
    channelName: Required[Literal["FacebookChannel"]]
    """The channel name. Required. Default value is \"FacebookChannel\"."""


class FacebookChannelProperties(TypedDict, total=False):
    """The parameters to provide for the Facebook channel.

    :ivar verify_token: Verify token. Value only returned through POST to the action Channel List
     API, otherwise empty.
    :vartype verify_token: str
    :ivar pages: The list of Facebook pages.
    :vartype pages: list["FacebookPage"]
    :ivar app_id: Facebook application id. Required.
    :vartype app_id: str
    :ivar app_secret: Facebook application secret. Value only returned through POST to the action
     Channel List API, otherwise empty.
    :vartype app_secret: str
    :ivar callback_url: Callback Url.
    :vartype callback_url: str
    :ivar is_enabled: Whether this channel is enabled for the bot. Required.
    :vartype is_enabled: bool
    """

    verifyToken: str
    """Verify token. Value only returned through POST to the action Channel List API, otherwise empty."""
    pages: list["FacebookPage"]
    """The list of Facebook pages."""
    appId: Required[str]
    """Facebook application id. Required."""
    appSecret: str
    """Facebook application secret. Value only returned through POST to the action Channel List API,
     otherwise empty."""
    callbackUrl: str
    """Callback Url."""
    isEnabled: Required[bool]
    """Whether this channel is enabled for the bot. Required."""


class FacebookPage(TypedDict, total=False):
    """A Facebook page for Facebook channel registration.

    :ivar id: Page id. Required.
    :vartype id: str
    :ivar access_token: Facebook application access token. Value only returned through POST to the
     action Channel List API, otherwise empty.
    :vartype access_token: str
    """

    id: Required[str]
    """Page id. Required."""
    accessToken: str
    """Facebook application access token. Value only returned through POST to the action Channel List
     API, otherwise empty."""


class HostSettingsResponse(TypedDict, total=False):
    """The response body returned for a request to Bot Service Management to check per subscription
    hostSettings.

    :ivar o_auth_url: For in-conversation bot user authentication.
    :vartype o_auth_url: str
    :ivar to_bot_from_channel_open_id_metadata_url: For verifying incoming tokens from the
     channels.
    :vartype to_bot_from_channel_open_id_metadata_url: str
    :ivar to_bot_from_channel_token_issuer: For verifying incoming tokens from the channels.
    :vartype to_bot_from_channel_token_issuer: str
    :ivar to_bot_from_emulator_open_id_metadata_url: For verifying incoming tokens from bot
     emulator.
    :vartype to_bot_from_emulator_open_id_metadata_url: str
    :ivar to_channel_from_bot_login_url: For getting access token to channels from bot host.
    :vartype to_channel_from_bot_login_url: str
    :ivar to_channel_from_bot_o_auth_scope: For getting access token to channels from bot host.
    :vartype to_channel_from_bot_o_auth_scope: str
    :ivar validate_authority: Per cloud OAuth setting on whether authority is validated.
    :vartype validate_authority: bool
    :ivar bot_open_id_metadata: Same as toBotFromChannelOpenIdMetadataUrl, used by SDK < v4.12.
    :vartype bot_open_id_metadata: str
    """

    OAuthUrl: str
    """For in-conversation bot user authentication."""
    ToBotFromChannelOpenIdMetadataUrl: str
    """For verifying incoming tokens from the channels."""
    ToBotFromChannelTokenIssuer: str
    """For verifying incoming tokens from the channels."""
    ToBotFromEmulatorOpenIdMetadataUrl: str
    """For verifying incoming tokens from bot emulator."""
    ToChannelFromBotLoginUrl: str
    """For getting access token to channels from bot host."""
    ToChannelFromBotOAuthScope: str
    """For getting access token to channels from bot host."""
    ValidateAuthority: bool
    """Per cloud OAuth setting on whether authority is validated."""
    BotOpenIdMetadata: str
    """Same as toBotFromChannelOpenIdMetadataUrl, used by SDK < v4.12."""


class KikChannel(TypedDict, total=False):
    """Kik channel definition.

    :ivar etag: Entity Tag of the resource.
    :vartype etag: str
    :ivar provisioning_state: Provisioning state of the resource.
    :vartype provisioning_state: str
    :ivar location: Specifies the location of the resource.
    :vartype location: str
    :ivar properties: The set of properties specific to Kik channel resource.
    :vartype properties: "KikChannelProperties"
    :ivar channel_name: The channel name. Required. Default value is "KikChannel".
    :vartype channel_name: Literal["KikChannel"]
    """

    etag: Optional[str]
    """Entity Tag of the resource."""
    provisioningState: str
    """Provisioning state of the resource."""
    location: str
    """Specifies the location of the resource."""
    properties: "KikChannelProperties"
    """The set of properties specific to Kik channel resource."""
    channelName: Required[Literal["KikChannel"]]
    """The channel name. Required. Default value is \"KikChannel\"."""


class KikChannelProperties(TypedDict, total=False):
    """The parameters to provide for the Kik channel.

    :ivar user_name: The Kik user name. Required.
    :vartype user_name: str
    :ivar api_key: Kik API key. Value only returned through POST to the action Channel List API,
     otherwise empty.
    :vartype api_key: str
    :ivar is_validated: Whether this channel is validated for the bot.
    :vartype is_validated: bool
    :ivar is_enabled: Whether this channel is enabled for the bot. Required.
    :vartype is_enabled: bool
    """

    userName: Required[str]
    """The Kik user name. Required."""
    apiKey: str
    """Kik API key. Value only returned through POST to the action Channel List API, otherwise empty."""
    isValidated: bool
    """Whether this channel is validated for the bot."""
    isEnabled: Required[bool]
    """Whether this channel is enabled for the bot. Required."""


class LineChannel(TypedDict, total=False):
    """Line channel definition.

    :ivar etag: Entity Tag of the resource.
    :vartype etag: str
    :ivar provisioning_state: Provisioning state of the resource.
    :vartype provisioning_state: str
    :ivar location: Specifies the location of the resource.
    :vartype location: str
    :ivar properties: The set of properties specific to line channel resource.
    :vartype properties: "LineChannelProperties"
    :ivar channel_name: The channel name. Required. Default value is "LineChannel".
    :vartype channel_name: Literal["LineChannel"]
    """

    etag: Optional[str]
    """Entity Tag of the resource."""
    provisioningState: str
    """Provisioning state of the resource."""
    location: str
    """Specifies the location of the resource."""
    properties: "LineChannelProperties"
    """The set of properties specific to line channel resource."""
    channelName: Required[Literal["LineChannel"]]
    """The channel name. Required. Default value is \"LineChannel\"."""


class LineChannelProperties(TypedDict, total=False):
    """The parameters to provide for the Line channel.

    :ivar line_registrations: The list of line channel registrations. Required.
    :vartype line_registrations: list["LineRegistration"]
    :ivar callback_url: Callback Url to enter in line registration.
    :vartype callback_url: str
    :ivar is_validated: Whether this channel is validated for the bot.
    :vartype is_validated: bool
    """

    lineRegistrations: Required[list["LineRegistration"]]
    """The list of line channel registrations. Required."""
    callbackUrl: str
    """Callback Url to enter in line registration."""
    isValidated: bool
    """Whether this channel is validated for the bot."""


class LineRegistration(TypedDict, total=False):
    """The properties corresponding to a line channel registration.

    :ivar generated_id: Id generated for the line channel registration.
    :vartype generated_id: str
    :ivar channel_secret: Secret for the line channel registration.
    :vartype channel_secret: str
    :ivar channel_access_token: Access token for the line channel registration.
    :vartype channel_access_token: str
    """

    generatedId: str
    """Id generated for the line channel registration."""
    channelSecret: str
    """Secret for the line channel registration."""
    channelAccessToken: str
    """Access token for the line channel registration."""


class ListChannelWithKeysResponse(BotChannel):
    """The ARM channel of list channel with keys operation response.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    :ivar properties: The set of properties specific to bot channel resource.
    :vartype properties: "Channel"
    :ivar location: Specifies the location of the resource.
    :vartype location: str
    :ivar tags: Contains resource tags defined as key/value pairs.
    :vartype tags: dict[str, str]
    :ivar sku: Gets or sets the SKU of the resource.
    :vartype sku: "Sku"
    :ivar kind: Required. Gets or sets the Kind of the resource. Known values are: "sdk",
     "designer", "bot", "function", and "azurebot".
    :vartype kind: Union[str, "Kind"]
    :ivar etag: Entity Tag.
    :vartype etag: str
    :ivar zones: Entity zones.
    :vartype zones: list[str]
    :ivar resource: The set of properties specific to bot channel resource.
    :vartype resource: "Channel"
    :ivar setting: Channel settings.
    :vartype setting: "ChannelSettings"
    :ivar provisioning_state: Provisioning state of the resource.
    :vartype provisioning_state: str
    :ivar entity_tag: Entity tag of the resource.
    :vartype entity_tag: str
    :ivar changed_time: Changed time of the resource.
    :vartype changed_time: str
    """

    resource: "Channel"
    """The set of properties specific to bot channel resource."""
    setting: "ChannelSettings"
    """Channel settings."""
    provisioningState: str
    """Provisioning state of the resource."""
    entityTag: str
    """Entity tag of the resource."""
    changedTime: str
    """Changed time of the resource."""


class M365Extensions(TypedDict, total=False):
    """M365 Extensions definition.

    :ivar etag: Entity Tag of the resource.
    :vartype etag: str
    :ivar provisioning_state: Provisioning state of the resource.
    :vartype provisioning_state: str
    :ivar location: Specifies the location of the resource.
    :vartype location: str
    :ivar channel_name: The channel name. Required. Default value is "M365Extensions".
    :vartype channel_name: Literal["M365Extensions"]
    """

    etag: Optional[str]
    """Entity Tag of the resource."""
    provisioningState: str
    """Provisioning state of the resource."""
    location: str
    """Specifies the location of the resource."""
    channelName: Required[Literal["M365Extensions"]]
    """The channel name. Required. Default value is \"M365Extensions\"."""


class MsTeamsChannel(TypedDict, total=False):
    """Microsoft Teams channel definition.

    :ivar etag: Entity Tag of the resource.
    :vartype etag: str
    :ivar provisioning_state: Provisioning state of the resource.
    :vartype provisioning_state: str
    :ivar location: Specifies the location of the resource.
    :vartype location: str
    :ivar properties: The set of properties specific to Microsoft Teams channel resource.
    :vartype properties: "MsTeamsChannelProperties"
    :ivar channel_name: The channel name. Required. Default value is "MsTeamsChannel".
    :vartype channel_name: Literal["MsTeamsChannel"]
    """

    etag: Optional[str]
    """Entity Tag of the resource."""
    provisioningState: str
    """Provisioning state of the resource."""
    location: str
    """Specifies the location of the resource."""
    properties: "MsTeamsChannelProperties"
    """The set of properties specific to Microsoft Teams channel resource."""
    channelName: Required[Literal["MsTeamsChannel"]]
    """The channel name. Required. Default value is \"MsTeamsChannel\"."""


class MsTeamsChannelProperties(TypedDict, total=False):
    """The parameters to provide for the Microsoft Teams channel.

    :ivar enable_calling: Enable calling for Microsoft Teams channel.
    :vartype enable_calling: bool
    :ivar calling_webhook: Webhook for Microsoft Teams channel calls.
    :vartype calling_webhook: str
    :ivar is_enabled: Whether this channel is enabled for the bot. Required.
    :vartype is_enabled: bool
    :ivar incoming_call_route: Webhook for Microsoft Teams channel calls.
    :vartype incoming_call_route: str
    :ivar deployment_environment: Deployment environment for Microsoft Teams channel calls.
    :vartype deployment_environment: str
    :ivar accepted_terms: Whether this channel accepted terms.
    :vartype accepted_terms: bool
    """

    enableCalling: bool
    """Enable calling for Microsoft Teams channel."""
    callingWebhook: str
    """Webhook for Microsoft Teams channel calls."""
    isEnabled: Required[bool]
    """Whether this channel is enabled for the bot. Required."""
    incomingCallRoute: str
    """Webhook for Microsoft Teams channel calls."""
    deploymentEnvironment: str
    """Deployment environment for Microsoft Teams channel calls."""
    acceptedTerms: Optional[bool]
    """Whether this channel accepted terms."""


class NetworkSecurityPerimeter(TypedDict, total=False):
    """Information about Network Security Perimeter.

    :ivar id: Fully qualified resource ID for the resource. E.g.
     "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}".
    :vartype id: str
    :ivar perimeter_guid: Guid of the Network Security Perimeter.
    :vartype perimeter_guid: str
    :ivar location: Location of the Network Security Perimeter.
    :vartype location: str
    """

    id: str
    """Fully qualified resource ID for the resource. E.g.
     \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}\"."""
    perimeterGuid: str
    """Guid of the Network Security Perimeter."""
    location: str
    """Location of the Network Security Perimeter."""


class NetworkSecurityPerimeterConfiguration(ProxyResource):
    """Network Security Perimeter configuration.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    :ivar properties: Properties of the Network Security Perimeter configuration.
    :vartype properties: "NetworkSecurityPerimeterConfigurationProperties"
    """

    properties: "NetworkSecurityPerimeterConfigurationProperties"
    """Properties of the Network Security Perimeter configuration."""


class NetworkSecurityPerimeterConfigurationProperties(TypedDict, total=False):  # pylint: disable=name-too-long
    """Properties of Network Security Perimeter configuration.

    :ivar provisioning_state: Known values are: "Creating", "Updating", "Accepted", "Succeeded",
     "Failed", and "Deleting".
    :vartype provisioning_state: Union[str, "ProvisioningState"]
    :ivar provisioning_issues: List of Provisioning Issues if any.
    :vartype provisioning_issues: list["ProvisioningIssue"]
    :ivar network_security_perimeter: Information about Network Security Perimeter.
    :vartype network_security_perimeter: "NetworkSecurityPerimeter"
    :ivar resource_association: Information about resource association.
    :vartype resource_association: "ResourceAssociation"
    :ivar profile: Information about profile.
    :vartype profile: "Profile"
    """

    provisioningState: Union[str, "ProvisioningState"]
    """Known values are: \"Creating\", \"Updating\", \"Accepted\", \"Succeeded\", \"Failed\", and
     \"Deleting\"."""
    provisioningIssues: list["ProvisioningIssue"]
    """List of Provisioning Issues if any."""
    networkSecurityPerimeter: "NetworkSecurityPerimeter"
    """Information about Network Security Perimeter."""
    resourceAssociation: "ResourceAssociation"
    """Information about resource association."""
    profile: "Profile"
    """Information about profile."""


class NspAccessRule(TypedDict, total=False):
    """Information of Access Rule in a profile.

    :ivar name: Name of the access rule.
    :vartype name: str
    :ivar properties: Properties of Access Rule.
    :vartype properties: "NspAccessRuleProperties"
    """

    name: str
    """Name of the access rule."""
    properties: "NspAccessRuleProperties"
    """Properties of Access Rule."""


class NspAccessRuleProperties(TypedDict, total=False):
    """Properties of Access Rule.

    :ivar direction: Direction of Access Rule. Known values are: "Inbound" and "Outbound".
    :vartype direction: Union[str, "NspAccessRuleDirection"]
    :ivar address_prefixes: Address prefixes in the CIDR format for inbound rules.
    :vartype address_prefixes: list[str]
    :ivar subscriptions: Subscriptions for inbound rules.
    :vartype subscriptions: list["NspAccessRulePropertiesSubscriptionsItem"]
    :ivar network_security_perimeters: NetworkSecurityPerimeters for inbound rules.
    :vartype network_security_perimeters: list["NetworkSecurityPerimeter"]
    :ivar fully_qualified_domain_names: FQDN for outbound rules.
    :vartype fully_qualified_domain_names: list[str]
    :ivar email_addresses: Email addresses for outbound rules.
    :vartype email_addresses: list[str]
    :ivar phone_numbers: Phone numbers for outbound rules.
    :vartype phone_numbers: list[str]
    """

    direction: Union[str, "NspAccessRuleDirection"]
    """Direction of Access Rule. Known values are: \"Inbound\" and \"Outbound\"."""
    addressPrefixes: list[str]
    """Address prefixes in the CIDR format for inbound rules."""
    subscriptions: list["NspAccessRulePropertiesSubscriptionsItem"]
    """Subscriptions for inbound rules."""
    networkSecurityPerimeters: list["NetworkSecurityPerimeter"]
    """NetworkSecurityPerimeters for inbound rules."""
    fullyQualifiedDomainNames: list[str]
    """FQDN for outbound rules."""
    emailAddresses: list[str]
    """Email addresses for outbound rules."""
    phoneNumbers: list[str]
    """Phone numbers for outbound rules."""


class NspAccessRulePropertiesSubscriptionsItem(TypedDict, total=False):
    """Subscription for inbound rule.

    :ivar id: Fully qualified identifier of subscription.
    :vartype id: str
    """

    id: str
    """Fully qualified identifier of subscription."""


class Omnichannel(TypedDict, total=False):
    """Omnichannel channel definition.

    :ivar etag: Entity Tag of the resource.
    :vartype etag: str
    :ivar provisioning_state: Provisioning state of the resource.
    :vartype provisioning_state: str
    :ivar location: Specifies the location of the resource.
    :vartype location: str
    :ivar channel_name: The channel name. Required. Default value is "Omnichannel".
    :vartype channel_name: Literal["Omnichannel"]
    """

    etag: Optional[str]
    """Entity Tag of the resource."""
    provisioningState: str
    """Provisioning state of the resource."""
    location: str
    """Specifies the location of the resource."""
    channelName: Required[Literal["Omnichannel"]]
    """The channel name. Required. Default value is \"Omnichannel\"."""


class OperationDisplayInfo(TypedDict, total=False):
    """The operation supported by Bot Service Management.

    :ivar description: The description of the operation.
    :vartype description: str
    :ivar operation: The action that users can perform, based on their permission level.
    :vartype operation: str
    :ivar provider: Service provider: Microsoft Bot Service.
    :vartype provider: str
    :ivar resource: Resource on which the operation is performed.
    :vartype resource: str
    """

    description: str
    """The description of the operation."""
    operation: str
    """The action that users can perform, based on their permission level."""
    provider: str
    """Service provider: Microsoft Bot Service."""
    resource: str
    """Resource on which the operation is performed."""


class OperationEntity(TypedDict, total=False):
    """The operations supported by Bot Service Management.

    :ivar name: Operation name: {provider}/{resource}/{operation}.
    :vartype name: str
    :ivar display: The operation supported by Bot Service Management.
    :vartype display: "OperationDisplayInfo"
    :ivar origin: The origin of the operation.
    :vartype origin: str
    :ivar properties: Additional properties.
    :vartype properties: Any
    """

    name: str
    """Operation name: {provider}/{resource}/{operation}."""
    display: "OperationDisplayInfo"
    """The operation supported by Bot Service Management."""
    origin: str
    """The origin of the operation."""
    properties: Any
    """Additional properties."""


class OperationResultsDescription(TypedDict, total=False):
    """The properties indicating the operation result of an operation on a service.

    :ivar id: The ID of the operation returned.
    :vartype id: str
    :ivar name: The name of the operation result.
    :vartype name: str
    :ivar status: The status of the operation being performed. Known values are: "Canceled",
     "Succeeded", "Failed", "Requested", and "Running".
    :vartype status: Union[str, "OperationResultStatus"]
    :ivar start_time: The time that the operation was started.
    :vartype start_time: str
    """

    id: str
    """The ID of the operation returned."""
    name: str
    """The name of the operation result."""
    status: Union[str, "OperationResultStatus"]
    """The status of the operation being performed. Known values are: \"Canceled\", \"Succeeded\",
     \"Failed\", \"Requested\", and \"Running\"."""
    startTime: str
    """The time that the operation was started."""


class OutlookChannel(TypedDict, total=False):
    """Outlook channel definition.

    :ivar etag: Entity Tag of the resource.
    :vartype etag: str
    :ivar provisioning_state: Provisioning state of the resource.
    :vartype provisioning_state: str
    :ivar location: Specifies the location of the resource.
    :vartype location: str
    :ivar channel_name: The channel name. Required. Default value is "OutlookChannel".
    :vartype channel_name: Literal["OutlookChannel"]
    """

    etag: Optional[str]
    """Entity Tag of the resource."""
    provisioningState: str
    """Provisioning state of the resource."""
    location: str
    """Specifies the location of the resource."""
    channelName: Required[Literal["OutlookChannel"]]
    """The channel name. Required. Default value is \"OutlookChannel\"."""


class PrivateEndpoint(TypedDict, total=False):
    """The Private Endpoint resource.

    :ivar id: The ARM identifier for Private Endpoint.
    :vartype id: str
    """

    id: str
    """The ARM identifier for Private Endpoint."""


class PrivateEndpointConnection(ProxyResource):
    """The Private Endpoint Connection resource.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    :ivar properties: Resource properties.
    :vartype properties: "PrivateEndpointConnectionProperties"
    """

    properties: "PrivateEndpointConnectionProperties"
    """Resource properties."""


class PrivateEndpointConnectionProperties(TypedDict, total=False):
    """Properties of the PrivateEndpointConnectProperties.

    :ivar private_endpoint: The resource of private end point.
    :vartype private_endpoint: "PrivateEndpoint"
    :ivar private_link_service_connection_state: A collection of information about the state of the
     connection between service consumer and provider. Required.
    :vartype private_link_service_connection_state: "PrivateLinkServiceConnectionState"
    :ivar provisioning_state: The provisioning state of the private endpoint connection resource.
     Known values are: "Succeeded", "Creating", "Deleting", and "Failed".
    :vartype provisioning_state: Union[str, "PrivateEndpointConnectionProvisioningState"]
    :ivar group_ids: Group ids.
    :vartype group_ids: list[str]
    """

    privateEndpoint: "PrivateEndpoint"
    """The resource of private end point."""
    privateLinkServiceConnectionState: Required["PrivateLinkServiceConnectionState"]
    """A collection of information about the state of the connection between service consumer and
     provider. Required."""
    provisioningState: Union[str, "PrivateEndpointConnectionProvisioningState"]
    """The provisioning state of the private endpoint connection resource. Known values are:
     \"Succeeded\", \"Creating\", \"Deleting\", and \"Failed\"."""
    groupIds: list[str]
    """Group ids."""


class PrivateLinkResourceBase(TypedDict, total=False):
    """Common fields that are returned in the response for all BotService Private Link Resources.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    """

    id: str
    """Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}."""
    name: str
    """The name of the resource."""
    type: str
    """The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or
     \"Microsoft.Storage/storageAccounts\"."""


class PrivateLinkResource(PrivateLinkResourceBase):
    """A private link resource.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar properties: Resource properties.
    :vartype properties: "PrivateLinkResourceProperties"
    """

    properties: "PrivateLinkResourceProperties"
    """Resource properties."""


class PrivateLinkResourceListResult(TypedDict, total=False):
    """A list of private link resources.

    :ivar value: Array of private link resources.
    :vartype value: list["PrivateLinkResource"]
    """

    value: list["PrivateLinkResource"]
    """Array of private link resources."""


class PrivateLinkResourceProperties(TypedDict, total=False):
    """Properties of a private link resource.

    :ivar group_id: The private link resource group id.
    :vartype group_id: str
    :ivar required_members: The private link resource required member names.
    :vartype required_members: list[str]
    :ivar required_zone_names: The private link resource Private link DNS zone name.
    :vartype required_zone_names: list[str]
    """

    groupId: str
    """The private link resource group id."""
    requiredMembers: list[str]
    """The private link resource required member names."""
    requiredZoneNames: list[str]
    """The private link resource Private link DNS zone name."""


class PrivateLinkServiceConnectionState(TypedDict, total=False):
    """A collection of information about the state of the connection between service consumer and
    provider.

    :ivar status: Indicates whether the connection has been Approved/Rejected/Removed by the owner
     of the service. Known values are: "Pending", "Approved", and "Rejected".
    :vartype status: Union[str, "PrivateEndpointServiceConnectionStatus"]
    :ivar description: The reason for approval/rejection of the connection.
    :vartype description: str
    :ivar actions_required: A message indicating if changes on the service provider require any
     updates on the consumer.
    :vartype actions_required: str
    """

    status: Union[str, "PrivateEndpointServiceConnectionStatus"]
    """Indicates whether the connection has been Approved/Rejected/Removed by the owner of the
     service. Known values are: \"Pending\", \"Approved\", and \"Rejected\"."""
    description: str
    """The reason for approval/rejection of the connection."""
    actionsRequired: str
    """A message indicating if changes on the service provider require any updates on the consumer."""


class Profile(TypedDict, total=False):
    """Information about profile.

    :ivar name: Name of the profile.
    :vartype name: str
    :ivar access_rules_version: Current access rules version.
    :vartype access_rules_version: int
    :ivar access_rules: List of Access Rules.
    :vartype access_rules: list["NspAccessRule"]
    :ivar diagnostic_settings_version: Current diagnostic settings version.
    :vartype diagnostic_settings_version: int
    :ivar enabled_log_categories: List of log categories.
    :vartype enabled_log_categories: list[str]
    """

    name: str
    """Name of the profile."""
    accessRulesVersion: int
    """Current access rules version."""
    accessRules: list["NspAccessRule"]
    """List of Access Rules."""
    diagnosticSettingsVersion: int
    """Current diagnostic settings version."""
    enabledLogCategories: list[str]
    """List of log categories."""


class ProvisioningIssue(TypedDict, total=False):
    """Describes Provisioning issue for given Network Security Perimeter configuration.

    :ivar name: Name of the issue.
    :vartype name: str
    :ivar properties: Properties of Provisioning Issue.
    :vartype properties: "ProvisioningIssueProperties"
    """

    name: str
    """Name of the issue."""
    properties: "ProvisioningIssueProperties"
    """Properties of Provisioning Issue."""


class ProvisioningIssueProperties(TypedDict, total=False):
    """Properties of Provisioning Issue.

    :ivar issue_type: Type of Issue.
    :vartype issue_type: str
    :ivar severity: Provisioning state of Network Security Perimeter configuration propagation.
     Known values are: "Warning" and "Error".
    :vartype severity: Union[str, "Severity"]
    :ivar description: Description of the issue.
    :vartype description: str
    :ivar suggested_resource_ids: ARM IDs of resources that can be associated to the same perimeter
     to remediate the issue.
    :vartype suggested_resource_ids: list[str]
    :ivar suggested_access_rules: Access rules that can be added to the same profile to remediate
     the issue.
    :vartype suggested_access_rules: list["NspAccessRule"]
    """

    issueType: str
    """Type of Issue."""
    severity: Union[str, "Severity"]
    """Provisioning state of Network Security Perimeter configuration propagation. Known values are:
     \"Warning\" and \"Error\"."""
    description: str
    """Description of the issue."""
    suggestedResourceIds: list[str]
    """ARM IDs of resources that can be associated to the same perimeter to remediate the issue."""
    suggestedAccessRules: list["NspAccessRule"]
    """Access rules that can be added to the same profile to remediate the issue."""


class QnAMakerEndpointKeysRequestBody(TypedDict, total=False):
    """The request body for a request to Bot Service Management to list QnA Maker endpoint keys.

    :ivar hostname: the host name of the QnA Maker endpoint.
    :vartype hostname: str
    :ivar authkey: Subscription key which provides access to this API.
    :vartype authkey: str
    """

    hostname: str
    """the host name of the QnA Maker endpoint."""
    authkey: str
    """Subscription key which provides access to this API."""


class QnAMakerEndpointKeysResponse(TypedDict, total=False):
    """Schema for EndpointKeys generate/refresh operations.

    :ivar primary_endpoint_key: Primary Access Key.
    :vartype primary_endpoint_key: str
    :ivar secondary_endpoint_key: Secondary Access Key.
    :vartype secondary_endpoint_key: str
    :ivar installed_version: Current version of runtime.
    :vartype installed_version: str
    :ivar last_stable_version: Latest version of runtime.
    :vartype last_stable_version: str
    """

    primaryEndpointKey: str
    """Primary Access Key."""
    secondaryEndpointKey: str
    """Secondary Access Key."""
    installedVersion: str
    """Current version of runtime."""
    lastStableVersion: str
    """Latest version of runtime."""


class ResourceAssociation(TypedDict, total=False):
    """Information about resource association.

    :ivar name: Name of the resource association.
    :vartype name: str
    :ivar access_mode: Access Mode of the resource association. Known values are: "Enforced",
     "Learning", and "Audit".
    :vartype access_mode: Union[str, "AccessMode"]
    """

    name: str
    """Name of the resource association."""
    accessMode: Union[str, "AccessMode"]
    """Access Mode of the resource association. Known values are: \"Enforced\", \"Learning\", and
     \"Audit\"."""


class SearchAssistant(TypedDict, total=False):
    """SearchAssistant definition.

    :ivar etag: Entity Tag of the resource.
    :vartype etag: str
    :ivar provisioning_state: Provisioning state of the resource.
    :vartype provisioning_state: str
    :ivar location: Specifies the location of the resource.
    :vartype location: str
    :ivar channel_name: The channel name. Required. Default value is "SearchAssistant".
    :vartype channel_name: Literal["SearchAssistant"]
    """

    etag: Optional[str]
    """Entity Tag of the resource."""
    provisioningState: str
    """Provisioning state of the resource."""
    location: str
    """Specifies the location of the resource."""
    channelName: Required[Literal["SearchAssistant"]]
    """The channel name. Required. Default value is \"SearchAssistant\"."""


class ServiceProvider(TypedDict, total=False):
    """Service Provider Definition.

    :ivar properties: The Properties of a Service Provider Object.
    :vartype properties: "ServiceProviderProperties"
    """

    properties: "ServiceProviderProperties"
    """The Properties of a Service Provider Object."""


class ServiceProviderParameter(TypedDict, total=False):
    """Extra Parameters specific to each Service Provider.

    :ivar name: Name of the Service Provider.
    :vartype name: str
    :ivar type: Type of the Service Provider.
    :vartype type: str
    :ivar display_name: Display Name of the Service Provider.
    :vartype display_name: str
    :ivar description: Description of the Service Provider.
    :vartype description: str
    :ivar help_url: Help Url for the  Service Provider.
    :vartype help_url: str
    :ivar default: Default Name for the Service Provider.
    :vartype default: str
    :ivar metadata: Meta data for the Service Provider.
    :vartype metadata: "ServiceProviderParameterMetadata"
    """

    name: str
    """Name of the Service Provider."""
    type: str
    """Type of the Service Provider."""
    displayName: str
    """Display Name of the Service Provider."""
    description: str
    """Description of the Service Provider."""
    helpUrl: str
    """Help Url for the  Service Provider."""
    default: str
    """Default Name for the Service Provider."""
    metadata: "ServiceProviderParameterMetadata"
    """Meta data for the Service Provider."""


class ServiceProviderParameterMetadata(TypedDict, total=False):
    """Meta data for the Service Provider.

    :ivar constraints: the constraints of the bot meta data.
    :vartype constraints: "ServiceProviderParameterMetadataConstraints"
    """

    constraints: "ServiceProviderParameterMetadataConstraints"
    """the constraints of the bot meta data."""


class ServiceProviderParameterMetadataConstraints(TypedDict, total=False):  # pylint: disable=name-too-long
    """the constraints of the bot meta data.

    :ivar required: Whether required the constraints of the bot meta data.
    :vartype required: bool
    """

    required: bool
    """Whether required the constraints of the bot meta data."""


class ServiceProviderProperties(TypedDict, total=False):
    """The Object used to describe a Service Provider supported by Bot Service.

    :ivar id: Id for Service Provider.
    :vartype id: str
    :ivar display_name: Display Name of the Service Provider.
    :vartype display_name: str
    :ivar service_provider_name: Name of the Service Provider.
    :vartype service_provider_name: str
    :ivar dev_portal_url: URL of Dev Portal.
    :vartype dev_portal_url: str
    :ivar icon_url: The URL of icon.
    :vartype icon_url: str
    :ivar parameters: The list of parameters for the Service Provider.
    :vartype parameters: list["ServiceProviderParameter"]
    """

    id: str
    """Id for Service Provider."""
    displayName: str
    """Display Name of the Service Provider."""
    serviceProviderName: str
    """Name of the Service Provider."""
    devPortalUrl: str
    """URL of Dev Portal."""
    iconUrl: str
    """The URL of icon."""
    parameters: list["ServiceProviderParameter"]
    """The list of parameters for the Service Provider."""


class ServiceProviderResponseList(TypedDict, total=False):
    """The list of bot service providers response.

    :ivar next_link: The link used to get the next page of bot service providers.
    :vartype next_link: str
    :ivar value: Gets the list of bot service providers and their properties.
    :vartype value: list["ServiceProvider"]
    """

    nextLink: str
    """The link used to get the next page of bot service providers."""
    value: list["ServiceProvider"]
    """Gets the list of bot service providers and their properties."""


class SiteInfo(TypedDict, total=False):
    """Site information for WebChat or DirectLine Channels to identify which site to regenerate keys
    for.

    :ivar site_name: The site name. Required.
    :vartype site_name: str
    :ivar key: Determines which key is to be regenerated. Required. Known values are: "key1" and
     "key2".
    :vartype key: Union[str, "Key"]
    """

    siteName: Required[str]
    """The site name. Required."""
    key: Required[Union[str, "Key"]]
    """Determines which key is to be regenerated. Required. Known values are: \"key1\" and \"key2\"."""


class Sku(TypedDict, total=False):
    """The SKU of the cognitive services account.

    :ivar name: The sku name. Required. Known values are: "F0" and "S1".
    :vartype name: Union[str, "SkuName"]
    :ivar tier: Gets the sku tier. This is based on the SKU name. Known values are: "Free" and
     "Standard".
    :vartype tier: Union[str, "SkuTier"]
    """

    name: Required[Union[str, "SkuName"]]
    """The sku name. Required. Known values are: \"F0\" and \"S1\"."""
    tier: Union[str, "SkuTier"]
    """Gets the sku tier. This is based on the SKU name. Known values are: \"Free\" and \"Standard\"."""


class SkypeChannel(TypedDict, total=False):
    """Skype channel definition.

    :ivar etag: Entity Tag of the resource.
    :vartype etag: str
    :ivar provisioning_state: Provisioning state of the resource.
    :vartype provisioning_state: str
    :ivar location: Specifies the location of the resource.
    :vartype location: str
    :ivar properties: The set of properties specific to Skype channel resource.
    :vartype properties: "SkypeChannelProperties"
    :ivar channel_name: The channel name. Required. Default value is "SkypeChannel".
    :vartype channel_name: Literal["SkypeChannel"]
    """

    etag: Optional[str]
    """Entity Tag of the resource."""
    provisioningState: str
    """Provisioning state of the resource."""
    location: str
    """Specifies the location of the resource."""
    properties: "SkypeChannelProperties"
    """The set of properties specific to Skype channel resource."""
    channelName: Required[Literal["SkypeChannel"]]
    """The channel name. Required. Default value is \"SkypeChannel\"."""


class SkypeChannelProperties(TypedDict, total=False):
    """The parameters to provide for the Microsoft Teams channel.

    :ivar enable_messaging: Enable messaging for Skype channel.
    :vartype enable_messaging: bool
    :ivar enable_media_cards: Enable media cards for Skype channel.
    :vartype enable_media_cards: bool
    :ivar enable_video: Enable video for Skype channel.
    :vartype enable_video: bool
    :ivar enable_calling: Enable calling for Skype channel.
    :vartype enable_calling: bool
    :ivar enable_screen_sharing: Enable screen sharing for Skype channel.
    :vartype enable_screen_sharing: bool
    :ivar enable_groups: Enable groups for Skype channel.
    :vartype enable_groups: bool
    :ivar groups_mode: Group mode for Skype channel.
    :vartype groups_mode: str
    :ivar calling_web_hook: Calling web hook for Skype channel.
    :vartype calling_web_hook: str
    :ivar incoming_call_route: Incoming call route for Skype channel.
    :vartype incoming_call_route: str
    :ivar is_enabled: Whether this channel is enabled for the bot. Required.
    :vartype is_enabled: bool
    """

    enableMessaging: bool
    """Enable messaging for Skype channel."""
    enableMediaCards: bool
    """Enable media cards for Skype channel."""
    enableVideo: bool
    """Enable video for Skype channel."""
    enableCalling: bool
    """Enable calling for Skype channel."""
    enableScreenSharing: bool
    """Enable screen sharing for Skype channel."""
    enableGroups: bool
    """Enable groups for Skype channel."""
    groupsMode: str
    """Group mode for Skype channel."""
    callingWebHook: str
    """Calling web hook for Skype channel."""
    incomingCallRoute: str
    """Incoming call route for Skype channel."""
    isEnabled: Required[bool]
    """Whether this channel is enabled for the bot. Required."""


class SlackChannel(TypedDict, total=False):
    """Slack channel definition.

    :ivar etag: Entity Tag of the resource.
    :vartype etag: str
    :ivar provisioning_state: Provisioning state of the resource.
    :vartype provisioning_state: str
    :ivar location: Specifies the location of the resource.
    :vartype location: str
    :ivar properties: The set of properties specific to Slack channel resource.
    :vartype properties: "SlackChannelProperties"
    :ivar channel_name: The channel name. Required. Default value is "SlackChannel".
    :vartype channel_name: Literal["SlackChannel"]
    """

    etag: Optional[str]
    """Entity Tag of the resource."""
    provisioningState: str
    """Provisioning state of the resource."""
    location: str
    """Specifies the location of the resource."""
    properties: "SlackChannelProperties"
    """The set of properties specific to Slack channel resource."""
    channelName: Required[Literal["SlackChannel"]]
    """The channel name. Required. Default value is \"SlackChannel\"."""


class SlackChannelProperties(TypedDict, total=False):
    """The parameters to provide for the Slack channel.

    :ivar client_id: The Slack client id.
    :vartype client_id: str
    :ivar client_secret: The Slack client secret. Value only returned through POST to the action
     Channel List API, otherwise empty.
    :vartype client_secret: str
    :ivar verification_token: The Slack verification token. Value only returned through POST to the
     action Channel List API, otherwise empty.
    :vartype verification_token: str
    :ivar scopes: The Slack permission scopes.
    :vartype scopes: str
    :ivar landing_page_url: The Slack landing page Url.
    :vartype landing_page_url: str
    :ivar redirect_action: The Slack redirect action.
    :vartype redirect_action: str
    :ivar last_submission_id: The Sms auth token.
    :vartype last_submission_id: str
    :ivar register_before_o_auth_flow: Whether to register the settings before OAuth validation is
     performed. Recommended to True.
    :vartype register_before_o_auth_flow: bool
    :ivar is_validated: Whether this channel is validated for the bot.
    :vartype is_validated: bool
    :ivar signing_secret: The Slack signing secret.
    :vartype signing_secret: str
    :ivar is_enabled: Whether this channel is enabled for the bot. Required.
    :vartype is_enabled: bool
    """

    clientId: str
    """The Slack client id."""
    clientSecret: str
    """The Slack client secret. Value only returned through POST to the action Channel List API,
     otherwise empty."""
    verificationToken: str
    """The Slack verification token. Value only returned through POST to the action Channel List API,
     otherwise empty."""
    scopes: str
    """The Slack permission scopes."""
    landingPageUrl: str
    """The Slack landing page Url."""
    redirectAction: str
    """The Slack redirect action."""
    lastSubmissionId: str
    """The Sms auth token."""
    registerBeforeOAuthFlow: bool
    """Whether to register the settings before OAuth validation is performed. Recommended to True."""
    IsValidated: bool
    """Whether this channel is validated for the bot."""
    signingSecret: str
    """The Slack signing secret."""
    isEnabled: Required[bool]
    """Whether this channel is enabled for the bot. Required."""


class SmsChannel(TypedDict, total=False):
    """Sms channel definition.

    :ivar etag: Entity Tag of the resource.
    :vartype etag: str
    :ivar provisioning_state: Provisioning state of the resource.
    :vartype provisioning_state: str
    :ivar location: Specifies the location of the resource.
    :vartype location: str
    :ivar properties: The set of properties specific to Sms channel resource.
    :vartype properties: "SmsChannelProperties"
    :ivar channel_name: The channel name. Required. Default value is "SmsChannel".
    :vartype channel_name: Literal["SmsChannel"]
    """

    etag: Optional[str]
    """Entity Tag of the resource."""
    provisioningState: str
    """Provisioning state of the resource."""
    location: str
    """Specifies the location of the resource."""
    properties: "SmsChannelProperties"
    """The set of properties specific to Sms channel resource."""
    channelName: Required[Literal["SmsChannel"]]
    """The channel name. Required. Default value is \"SmsChannel\"."""


class SmsChannelProperties(TypedDict, total=False):
    """The parameters to provide for the Sms channel.

    :ivar phone: The Sms phone. Required.
    :vartype phone: str
    :ivar account_sid: The Sms account SID. Value only returned through POST to the action Channel
     List API, otherwise empty. Required.
    :vartype account_sid: str
    :ivar auth_token: The Sms auth token. Value only returned through POST to the action Channel
     List API, otherwise empty.
    :vartype auth_token: str
    :ivar is_validated: Whether this channel is validated for the bot.
    :vartype is_validated: bool
    :ivar is_enabled: Whether this channel is enabled for the bot. Required.
    :vartype is_enabled: bool
    """

    phone: Required[str]
    """The Sms phone. Required."""
    accountSID: Required[str]
    """The Sms account SID. Value only returned through POST to the action Channel List API, otherwise
     empty. Required."""
    authToken: str
    """The Sms auth token. Value only returned through POST to the action Channel List API, otherwise
     empty."""
    isValidated: bool
    """Whether this channel is validated for the bot."""
    isEnabled: Required[bool]
    """Whether this channel is enabled for the bot. Required."""


class SystemData(TypedDict, total=False):
    """Metadata pertaining to creation and last modification of the resource.

    :ivar created_by: The identity that created the resource.
    :vartype created_by: str
    :ivar created_by_type: The type of identity that created the resource. Known values are:
     "User", "Application", "ManagedIdentity", and "Key".
    :vartype created_by_type: Union[str, "CreatedByType"]
    :ivar created_at: The timestamp of resource creation (UTC).
    :vartype created_at: str
    :ivar last_modified_by: The identity that last modified the resource.
    :vartype last_modified_by: str
    :ivar last_modified_by_type: The type of identity that last modified the resource. Known values
     are: "User", "Application", "ManagedIdentity", and "Key".
    :vartype last_modified_by_type: Union[str, "CreatedByType"]
    :ivar last_modified_at: The timestamp of resource last modification (UTC).
    :vartype last_modified_at: str
    """

    createdBy: str
    """The identity that created the resource."""
    createdByType: Union[str, "CreatedByType"]
    """The type of identity that created the resource. Known values are: \"User\", \"Application\",
     \"ManagedIdentity\", and \"Key\"."""
    createdAt: str
    """The timestamp of resource creation (UTC)."""
    lastModifiedBy: str
    """The identity that last modified the resource."""
    lastModifiedByType: Union[str, "CreatedByType"]
    """The type of identity that last modified the resource. Known values are: \"User\",
     \"Application\", \"ManagedIdentity\", and \"Key\"."""
    lastModifiedAt: str
    """The timestamp of resource last modification (UTC)."""


class TelegramChannel(TypedDict, total=False):
    """Telegram channel definition.

    :ivar etag: Entity Tag of the resource.
    :vartype etag: str
    :ivar provisioning_state: Provisioning state of the resource.
    :vartype provisioning_state: str
    :ivar location: Specifies the location of the resource.
    :vartype location: str
    :ivar properties: The set of properties specific to Telegram channel resource.
    :vartype properties: "TelegramChannelProperties"
    :ivar channel_name: The channel name. Required. Default value is "TelegramChannel".
    :vartype channel_name: Literal["TelegramChannel"]
    """

    etag: Optional[str]
    """Entity Tag of the resource."""
    provisioningState: str
    """Provisioning state of the resource."""
    location: str
    """Specifies the location of the resource."""
    properties: "TelegramChannelProperties"
    """The set of properties specific to Telegram channel resource."""
    channelName: Required[Literal["TelegramChannel"]]
    """The channel name. Required. Default value is \"TelegramChannel\"."""


class TelegramChannelProperties(TypedDict, total=False):
    """The parameters to provide for the Telegram channel.

    :ivar access_token: The Telegram access token. Value only returned through POST to the action
     Channel List API, otherwise empty.
    :vartype access_token: str
    :ivar is_validated: Whether this channel is validated for the bot.
    :vartype is_validated: bool
    :ivar is_enabled: Whether this channel is enabled for the bot. Required.
    :vartype is_enabled: bool
    """

    accessToken: str
    """The Telegram access token. Value only returned through POST to the action Channel List API,
     otherwise empty."""
    isValidated: bool
    """Whether this channel is validated for the bot."""
    isEnabled: Required[bool]
    """Whether this channel is enabled for the bot. Required."""


class TelephonyChannel(TypedDict, total=False):
    """Telephony channel definition.

    :ivar etag: Entity Tag of the resource.
    :vartype etag: str
    :ivar provisioning_state: Provisioning state of the resource.
    :vartype provisioning_state: str
    :ivar location: Specifies the location of the resource.
    :vartype location: str
    :ivar properties: The set of properties specific to Telephony channel resource.
    :vartype properties: "TelephonyChannelProperties"
    :ivar channel_name: The channel name. Required. Default value is "TelephonyChannel".
    :vartype channel_name: Literal["TelephonyChannel"]
    """

    etag: Optional[str]
    """Entity Tag of the resource."""
    provisioningState: str
    """Provisioning state of the resource."""
    location: str
    """Specifies the location of the resource."""
    properties: "TelephonyChannelProperties"
    """The set of properties specific to Telephony channel resource."""
    channelName: Required[Literal["TelephonyChannel"]]
    """The channel name. Required. Default value is \"TelephonyChannel\"."""


class TelephonyChannelProperties(TypedDict, total=False):
    """The parameters to provide for the Direct Line channel.

    :ivar phone_numbers: The list of Telephony phone numbers.
    :vartype phone_numbers: list["TelephonyPhoneNumbers"]
    :ivar api_configurations: The list of Telephony api configuration.
    :vartype api_configurations: list["TelephonyChannelResourceApiConfiguration"]
    :ivar cognitive_service_subscription_key: The extensionKey1.
    :vartype cognitive_service_subscription_key: str
    :ivar cognitive_service_region: The extensionKey2.
    :vartype cognitive_service_region: str
    :ivar default_locale: The default locale of the channel.
    :vartype default_locale: str
    :ivar premium_sku: The premium SKU applied to the channel.
    :vartype premium_sku: str
    :ivar is_enabled: Whether the channel is enabled.
    :vartype is_enabled: bool
    """

    phoneNumbers: list["TelephonyPhoneNumbers"]
    """The list of Telephony phone numbers."""
    apiConfigurations: list["TelephonyChannelResourceApiConfiguration"]
    """The list of Telephony api configuration."""
    cognitiveServiceSubscriptionKey: Optional[str]
    """The extensionKey1."""
    cognitiveServiceRegion: Optional[str]
    """The extensionKey2."""
    defaultLocale: Optional[str]
    """The default locale of the channel."""
    premiumSKU: Optional[str]
    """The premium SKU applied to the channel."""
    isEnabled: bool
    """Whether the channel is enabled."""


class TelephonyChannelResourceApiConfiguration(TypedDict, total=False):
    """A resource Api configuration for the Telephony channel.

    :ivar id: The id of config.
    :vartype id: str
    :ivar provider_name: The provider name.
    :vartype provider_name: str
    :ivar cognitive_service_subscription_key: The cognitive service subscription key.
    :vartype cognitive_service_subscription_key: str
    :ivar cognitive_service_region: The cognitive service region.
    :vartype cognitive_service_region: str
    :ivar cognitive_service_resource_id: The cognitive service resourceId.
    :vartype cognitive_service_resource_id: str
    :ivar default_locale: The default locale.
    :vartype default_locale: str
    """

    id: str
    """The id of config."""
    providerName: Optional[str]
    """The provider name."""
    cognitiveServiceSubscriptionKey: Optional[str]
    """The cognitive service subscription key."""
    cognitiveServiceRegion: Optional[str]
    """The cognitive service region."""
    cognitiveServiceResourceId: Optional[str]
    """The cognitive service resourceId."""
    defaultLocale: Optional[str]
    """The default locale."""


class TelephonyPhoneNumbers(TypedDict, total=False):
    """A telephone number for the Telephony channel.

    :ivar id: The element id.
    :vartype id: str
    :ivar phone_number: The phone number.
    :vartype phone_number: str
    :ivar acs_endpoint: The endpoint of ACS.
    :vartype acs_endpoint: str
    :ivar acs_secret: The secret of ACS.
    :vartype acs_secret: str
    :ivar acs_resource_id: The resource id of ACS.
    :vartype acs_resource_id: str
    :ivar cognitive_service_subscription_key: The subscription key of cognitive service.
    :vartype cognitive_service_subscription_key: str
    :ivar cognitive_service_region: The service region of cognitive service.
    :vartype cognitive_service_region: str
    :ivar cognitive_service_resource_id: The resource id of cognitive service.
    :vartype cognitive_service_resource_id: str
    :ivar default_locale: The default locale of the phone number.
    :vartype default_locale: str
    :ivar offer_type: Optional Property that will determine the offering type of the phone.
    :vartype offer_type: str
    """

    id: str
    """The element id."""
    phoneNumber: str
    """The phone number."""
    acsEndpoint: Optional[str]
    """The endpoint of ACS."""
    acsSecret: Optional[str]
    """The secret of ACS."""
    acsResourceId: Optional[str]
    """The resource id of ACS."""
    cognitiveServiceSubscriptionKey: Optional[str]
    """The subscription key of cognitive service."""
    cognitiveServiceRegion: Optional[str]
    """The service region of cognitive service."""
    cognitiveServiceResourceId: Optional[str]
    """The resource id of cognitive service."""
    defaultLocale: Optional[str]
    """The default locale of the phone number."""
    offerType: Optional[str]
    """Optional Property that will determine the offering type of the phone."""


class WebChatChannel(TypedDict, total=False):
    """Web Chat channel definition.

    :ivar etag: Entity Tag of the resource.
    :vartype etag: str
    :ivar provisioning_state: Provisioning state of the resource.
    :vartype provisioning_state: str
    :ivar location: Specifies the location of the resource.
    :vartype location: str
    :ivar properties: The set of properties specific to Web Chat channel resource.
    :vartype properties: "WebChatChannelProperties"
    :ivar channel_name: The channel name. Required. Default value is "WebChatChannel".
    :vartype channel_name: Literal["WebChatChannel"]
    """

    etag: Optional[str]
    """Entity Tag of the resource."""
    provisioningState: str
    """Provisioning state of the resource."""
    location: str
    """Specifies the location of the resource."""
    properties: "WebChatChannelProperties"
    """The set of properties specific to Web Chat channel resource."""
    channelName: Required[Literal["WebChatChannel"]]
    """The channel name. Required. Default value is \"WebChatChannel\"."""


class WebChatChannelProperties(TypedDict, total=False):
    """The parameters to provide for the Web Chat channel.

    :ivar web_chat_embed_code: Web chat control embed code.
    :vartype web_chat_embed_code: str
    :ivar sites: The list of Web Chat sites.
    :vartype sites: list["WebChatSite"]
    """

    webChatEmbedCode: str
    """Web chat control embed code."""
    sites: list["WebChatSite"]
    """The list of Web Chat sites."""


class WebChatSite(Site):
    """A site for the Webchat channel.

    :ivar tenant_id: Tenant Id.
    :vartype tenant_id: str
    :ivar site_id: Site Id.
    :vartype site_id: str
    :ivar site_name: Site name. Required.
    :vartype site_name: str
    :ivar key: Primary key. Value only returned through POST to the action Channel List API,
     otherwise empty.
    :vartype key: str
    :ivar key2: Secondary key. Value only returned through POST to the action Channel List API,
     otherwise empty.
    :vartype key2: str
    :ivar is_enabled: Whether this site is enabled for DirectLine channel. Required.
    :vartype is_enabled: bool
    :ivar is_token_enabled: Whether this site is token enabled for channel.
    :vartype is_token_enabled: bool
    :ivar is_endpoint_parameters_enabled: Whether this site is EndpointParameters enabled for
     channel.
    :vartype is_endpoint_parameters_enabled: bool
    :ivar is_detailed_logging_enabled: Whether this site is disabled detailed logging for.
    :vartype is_detailed_logging_enabled: bool
    :ivar is_block_user_upload_enabled: Whether this site is enabled for block user upload.
    :vartype is_block_user_upload_enabled: bool
    :ivar is_no_storage_enabled: Whether this no-storage site is disabled detailed logging for.
    :vartype is_no_storage_enabled: bool
    :ivar e_tag: Entity Tag.
    :vartype e_tag: str
    :ivar app_id: DirectLine application id.
    :vartype app_id: str
    :ivar is_v1_enabled: Whether this site is enabled for Bot Framework V1 protocol.
    :vartype is_v1_enabled: bool
    :ivar is_v3_enabled: Whether this site is enabled for Bot Framework V3 protocol.
    :vartype is_v3_enabled: bool
    :ivar is_secure_site_enabled: Whether this site is enabled for authentication with Bot
     Framework.
    :vartype is_secure_site_enabled: bool
    :ivar trusted_origins: List of Trusted Origin URLs for this site. This field is applicable only
     if isSecureSiteEnabled is True.
    :vartype trusted_origins: list[str]
    :ivar is_web_chat_speech_enabled: Whether this site is enabled for Webchat Speech.
    :vartype is_web_chat_speech_enabled: bool
    :ivar is_webchat_preview_enabled: Whether this site is enabled for preview versions of Webchat.
    :vartype is_webchat_preview_enabled: bool
    """


Channel = Union[
    AcsChatChannel,
    AlexaChannel,
    DirectLineChannel,
    DirectLineSpeechChannel,
    EmailChannel,
    FacebookChannel,
    KikChannel,
    LineChannel,
    M365Extensions,
    MsTeamsChannel,
    Omnichannel,
    OutlookChannel,
    SearchAssistant,
    SkypeChannel,
    SlackChannel,
    SmsChannel,
    TelegramChannel,
    TelephonyChannel,
    WebChatChannel,
]
