# 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.
# --------------------------------------------------------------------------
# pylint: disable=useless-super-delegation

import datetime
from typing import Any, Literal, Mapping, Optional, TYPE_CHECKING, Union, overload

from .._utils.model_base import Model as _Model, rest_discriminator, rest_field

if TYPE_CHECKING:
    from .. import models as _models


class Channel(_Model):
    """Channel definition.

    You probably want to use the sub-classes and not this class directly. Known sub-classes are:
    AcsChatChannel, AlexaChannel, DirectLineChannel, DirectLineSpeechChannel, EmailChannel,
    FacebookChannel, KikChannel, LineChannel, M365Extensions, MsTeamsChannel, Omnichannel,
    OutlookChannel, SearchAssistant, SkypeChannel, SlackChannel, SmsChannel, TelegramChannel,
    TelephonyChannel, WebChatChannel

    :ivar channel_name: The channel name. Required. Default value is None.
    :vartype channel_name: str
    :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
    """

    __mapping__: dict[str, _Model] = {}
    channel_name: str = rest_discriminator(
        name="channelName", visibility=["read", "create", "update", "delete", "query"]
    )
    """The channel name. Required. Default value is None."""
    etag: Optional[str] = rest_field(visibility=["read", "create"])
    """Entity Tag of the resource."""
    provisioning_state: Optional[str] = rest_field(name="provisioningState", visibility=["read"])
    """Provisioning state of the resource."""
    location: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Specifies the location of the resource."""

    @overload
    def __init__(
        self,
        *,
        channel_name: str,
        etag: Optional[str] = None,
        location: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class AcsChatChannel(Channel, discriminator="AcsChatChannel"):
    """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: str
    """

    channel_name: Literal["AcsChatChannel"] = rest_discriminator(name="channelName", visibility=["read", "create", "update", "delete", "query"])  # type: ignore
    """The channel name. Required. Default value is \"AcsChatChannel\"."""

    @overload
    def __init__(
        self,
        *,
        etag: Optional[str] = None,
        location: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)
        self.channel_name = "AcsChatChannel"  # type: ignore


class AlexaChannel(Channel, discriminator="AlexaChannel"):
    """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: ~azure.mgmt.botservice.models.AlexaChannelProperties
    :ivar channel_name: The channel name. Required. Default value is "AlexaChannel".
    :vartype channel_name: str
    """

    properties: Optional["_models.AlexaChannelProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The set of properties specific to Alexa channel resource."""
    channel_name: Literal["AlexaChannel"] = rest_discriminator(name="channelName", visibility=["read", "create", "update", "delete", "query"])  # type: ignore
    """The channel name. Required. Default value is \"AlexaChannel\"."""

    @overload
    def __init__(
        self,
        *,
        etag: Optional[str] = None,
        location: Optional[str] = None,
        properties: Optional["_models.AlexaChannelProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)
        self.channel_name = "AlexaChannel"  # type: ignore


class AlexaChannelProperties(_Model):
    """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
    """

    alexa_skill_id: str = rest_field(name="alexaSkillId", visibility=["read", "create", "update", "delete", "query"])
    """The Alexa skill Id. Required."""
    url_fragment: Optional[str] = rest_field(name="urlFragment", visibility=["read"])
    """Url fragment used in part of the Uri configured in Alexa."""
    service_endpoint_uri: Optional[str] = rest_field(name="serviceEndpointUri", visibility=["read"])
    """Full Uri used to configured the skill in Alexa."""
    is_enabled: bool = rest_field(name="isEnabled", visibility=["read", "create", "update", "delete", "query"])
    """Whether this channel is enabled for the bot. Required."""

    @overload
    def __init__(
        self,
        *,
        alexa_skill_id: str,
        is_enabled: bool,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class Resource(_Model):
    """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: ~azure.mgmt.botservice.models.SystemData
    """

    id: Optional[str] = rest_field(visibility=["read"])
    """Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}."""
    name: Optional[str] = rest_field(visibility=["read"])
    """The name of the resource."""
    type: Optional[str] = rest_field(visibility=["read"])
    """The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or
     \"Microsoft.Storage/storageAccounts\"."""
    system_data: Optional["_models.SystemData"] = rest_field(name="systemData", visibility=["read"])
    """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: ~azure.mgmt.botservice.models.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: ~azure.mgmt.botservice.models.SystemData
    :ivar properties: The set of properties specific to bot resource.
    :vartype properties: ~azure.mgmt.botservice.models.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: ~azure.mgmt.botservice.models.Sku
    :ivar kind: Required. Gets or sets the Kind of the resource. Known values are: "sdk",
     "designer", "bot", "function", and "azurebot".
    :vartype kind: str or ~azure.mgmt.botservice.models.Kind
    :ivar etag: Entity Tag.
    :vartype etag: str
    :ivar zones: Entity zones.
    :vartype zones: list[str]
    """

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

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.BotProperties"] = None,
        location: Optional[str] = None,
        tags: Optional[dict[str, str]] = None,
        sku: Optional["_models.Sku"] = None,
        kind: Optional[Union[str, "_models.Kind"]] = None,
        etag: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


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: ~azure.mgmt.botservice.models.SystemData
    :ivar properties: The set of properties specific to bot channel resource.
    :vartype properties: ~azure.mgmt.botservice.models.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: ~azure.mgmt.botservice.models.Sku
    :ivar kind: Required. Gets or sets the Kind of the resource. Known values are: "sdk",
     "designer", "bot", "function", and "azurebot".
    :vartype kind: str or ~azure.mgmt.botservice.models.Kind
    :ivar etag: Entity Tag.
    :vartype etag: str
    :ivar zones: Entity zones.
    :vartype zones: list[str]
    """

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

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.Channel"] = None,
        location: Optional[str] = None,
        tags: Optional[dict[str, str]] = None,
        sku: Optional["_models.Sku"] = None,
        kind: Optional[Union[str, "_models.Kind"]] = None,
        etag: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class BotProperties(_Model):
    """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: str or ~azure.mgmt.botservice.models.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: str or ~azure.mgmt.botservice.models.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[~azure.mgmt.botservice.models.PrivateEndpointConnection]
    :ivar network_security_perimeter_configurations: List of Network Security Perimeter
     configurations for the bot.
    :vartype network_security_perimeter_configurations:
     list[~azure.mgmt.botservice.models.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
    """

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

    @overload
    def __init__(  # pylint: disable=too-many-locals
        self,
        *,
        display_name: str,
        endpoint: str,
        msa_app_id: str,
        description: Optional[str] = None,
        icon_url: Optional[str] = None,
        all_settings: Optional[dict[str, str]] = None,
        parameters: Optional[dict[str, str]] = None,
        manifest_url: Optional[str] = None,
        msa_app_type: Optional[Union[str, "_models.MsaAppType"]] = None,
        msa_app_tenant_id: Optional[str] = None,
        msa_app_msi_resource_id: Optional[str] = None,
        developer_app_insight_key: Optional[str] = None,
        developer_app_insights_api_key: Optional[str] = None,
        developer_app_insights_application_id: Optional[str] = None,
        luis_app_ids: Optional[list[str]] = None,
        luis_key: Optional[str] = None,
        is_cmek_enabled: Optional[bool] = None,
        cmek_key_vault_url: Optional[str] = None,
        tenant_id: Optional[str] = None,
        public_network_access: Optional[Union[str, "_models.PublicNetworkAccess"]] = None,
        is_streaming_supported: Optional[bool] = None,
        disable_local_auth: Optional[bool] = None,
        schema_transformation_version: Optional[str] = None,
        storage_resource_id: Optional[str] = None,
        open_with_hint: Optional[str] = None,
        app_password_hint: Optional[str] = None,
        publishing_credentials: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ChannelSettings(_Model):
    """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[~azure.mgmt.botservice.models.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
    """

    extension_key1: Optional[str] = rest_field(
        name="extensionKey1", visibility=["read", "create", "update", "delete", "query"]
    )
    """The extensionKey1."""
    extension_key2: Optional[str] = rest_field(
        name="extensionKey2", visibility=["read", "create", "update", "delete", "query"]
    )
    """The extensionKey2."""
    sites: Optional[list["_models.Site"]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The list of sites."""
    channel_id: Optional[str] = rest_field(name="channelId", visibility=["read", "create", "update", "delete", "query"])
    """The channel id."""
    channel_display_name: Optional[str] = rest_field(
        name="channelDisplayName", visibility=["read", "create", "update", "delete", "query"]
    )
    """The channel display name."""
    bot_id: Optional[str] = rest_field(name="botId", visibility=["read", "create", "update", "delete", "query"])
    """The bot id."""
    bot_icon_url: Optional[str] = rest_field(
        name="botIconUrl", visibility=["read", "create", "update", "delete", "query"]
    )
    """The bot icon url."""
    is_enabled: Optional[bool] = rest_field(
        name="isEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """Whether this channel is enabled for the bot."""
    disable_local_auth: Optional[bool] = rest_field(
        name="disableLocalAuth", visibility=["read", "create", "update", "delete", "query"]
    )
    """Opt-out of local authentication and ensure only MSI and AAD can be used exclusively for
     authentication."""
    require_terms_agreement: Optional[bool] = rest_field(
        name="requireTermsAgreement", visibility=["read", "create", "update", "delete", "query"]
    )
    """Whether customer needs to agree to new terms."""

    @overload
    def __init__(
        self,
        *,
        extension_key1: Optional[str] = None,
        extension_key2: Optional[str] = None,
        sites: Optional[list["_models.Site"]] = None,
        channel_id: Optional[str] = None,
        channel_display_name: Optional[str] = None,
        bot_id: Optional[str] = None,
        bot_icon_url: Optional[str] = None,
        is_enabled: Optional[bool] = None,
        disable_local_auth: Optional[bool] = None,
        require_terms_agreement: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class CheckNameAvailabilityRequestBody(_Model):
    """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: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """the name of the bot for which availability needs to be checked."""
    type: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """the type of the bot for which availability needs to be checked."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        type: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class CheckNameAvailabilityResponseBody(_Model):
    """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: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """indicates if the bot name is valid."""
    message: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """additional message from the bot management api showing why a bot name is not available."""
    abs_code: Optional[str] = rest_field(name="absCode", visibility=["read", "create", "update", "delete", "query"])
    """response code from ABS."""

    @overload
    def __init__(
        self,
        *,
        valid: Optional[bool] = None,
        message: Optional[str] = None,
        abs_code: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


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: ~azure.mgmt.botservice.models.SystemData
    :ivar properties: The set of properties specific to bot channel resource.
    :vartype properties: ~azure.mgmt.botservice.models.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: ~azure.mgmt.botservice.models.Sku
    :ivar kind: Required. Gets or sets the Kind of the resource. Known values are: "sdk",
     "designer", "bot", "function", and "azurebot".
    :vartype kind: str or ~azure.mgmt.botservice.models.Kind
    :ivar etag: Entity Tag.
    :vartype etag: str
    :ivar zones: Entity zones.
    :vartype zones: list[str]
    """

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

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.ConnectionSettingProperties"] = None,
        location: Optional[str] = None,
        tags: Optional[dict[str, str]] = None,
        sku: Optional["_models.Sku"] = None,
        kind: Optional[Union[str, "_models.Kind"]] = None,
        etag: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ConnectionSettingParameter(_Model):
    """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: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Key for the Connection Setting Parameter."""
    value: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Value associated with the Connection Setting Parameter."""

    @overload
    def __init__(
        self,
        *,
        key: Optional[str] = None,
        value: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ConnectionSettingProperties(_Model):
    """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[~azure.mgmt.botservice.models.ConnectionSettingParameter]
    :ivar provisioning_state: Provisioning state of the resource.
    :vartype provisioning_state: str
    """

    id: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Id of the Connection Setting."""
    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Name of the Connection Setting."""
    client_id: Optional[str] = rest_field(name="clientId", visibility=["read", "create", "update", "delete", "query"])
    """Client Id associated with the Connection Setting."""
    setting_id: Optional[str] = rest_field(name="settingId", visibility=["read"])
    """Setting Id set by the service for the Connection Setting."""
    client_secret: Optional[str] = rest_field(
        name="clientSecret", visibility=["read", "create", "update", "delete", "query"]
    )
    """Client Secret associated with the Connection Setting."""
    scopes: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Scopes associated with the Connection Setting."""
    service_provider_id: Optional[str] = rest_field(
        name="serviceProviderId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Service Provider Id associated with the Connection Setting."""
    service_provider_display_name: Optional[str] = rest_field(
        name="serviceProviderDisplayName", visibility=["read", "create", "update", "delete", "query"]
    )
    """Service Provider Display Name associated with the Connection Setting."""
    parameters: Optional[list["_models.ConnectionSettingParameter"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Service Provider Parameters associated with the Connection Setting."""
    provisioning_state: Optional[str] = rest_field(
        name="provisioningState", visibility=["read", "create", "update", "delete", "query"]
    )
    """Provisioning state of the resource."""

    @overload
    def __init__(
        self,
        *,
        id: Optional[str] = None,  # pylint: disable=redefined-builtin
        name: Optional[str] = None,
        client_id: Optional[str] = None,
        client_secret: Optional[str] = None,
        scopes: Optional[str] = None,
        service_provider_id: Optional[str] = None,
        service_provider_display_name: Optional[str] = None,
        parameters: Optional[list["_models.ConnectionSettingParameter"]] = None,
        provisioning_state: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class CreateEmailSignInUrlResponse(_Model):
    """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: ~azure.mgmt.botservice.models.CreateEmailSignInUrlResponseProperties
    """

    id: Optional[str] = rest_field(visibility=["read"])
    """Specifies the resource ID."""
    location: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Specifies the location of the resource."""
    properties: Optional["_models.CreateEmailSignInUrlResponseProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The set of properties specific to sign in url."""

    @overload
    def __init__(
        self,
        *,
        location: Optional[str] = None,
        properties: Optional["_models.CreateEmailSignInUrlResponseProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class CreateEmailSignInUrlResponseProperties(_Model):
    """The set of properties specific to sign in url.

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

    url: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Sign in url."""

    @overload
    def __init__(
        self,
        *,
        url: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class DirectLineChannel(Channel, discriminator="DirectLineChannel"):
    """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: ~azure.mgmt.botservice.models.DirectLineChannelProperties
    :ivar channel_name: The channel name. Required. Default value is "DirectLineChannel".
    :vartype channel_name: str
    """

    properties: Optional["_models.DirectLineChannelProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The set of properties specific to Direct Line channel resource."""
    channel_name: Literal["DirectLineChannel"] = rest_discriminator(name="channelName", visibility=["read", "create", "update", "delete", "query"])  # type: ignore
    """The channel name. Required. Default value is \"DirectLineChannel\"."""

    @overload
    def __init__(
        self,
        *,
        etag: Optional[str] = None,
        location: Optional[str] = None,
        properties: Optional["_models.DirectLineChannelProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)
        self.channel_name = "DirectLineChannel"  # type: ignore


class DirectLineChannelProperties(_Model):
    """The parameters to provide for the Direct Line channel.

    :ivar sites: The list of Direct Line sites.
    :vartype sites: list[~azure.mgmt.botservice.models.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: Optional[list["_models.DirectLineSite"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The list of Direct Line sites."""
    extension_key1: Optional[str] = rest_field(
        name="extensionKey1", visibility=["read", "create", "update", "delete", "query"]
    )
    """The extensionKey1."""
    extension_key2: Optional[str] = rest_field(
        name="extensionKey2", visibility=["read", "create", "update", "delete", "query"]
    )
    """The extensionKey2."""
    direct_line_embed_code: Optional[str] = rest_field(
        name="DirectLineEmbedCode", visibility=["read", "create", "update", "delete", "query"]
    )
    """Direct Line embed code of the resource."""

    @overload
    def __init__(
        self,
        *,
        sites: Optional[list["_models.DirectLineSite"]] = None,
        extension_key1: Optional[str] = None,
        extension_key2: Optional[str] = None,
        direct_line_embed_code: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class Site(_Model):
    """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
    """

    tenant_id: Optional[str] = rest_field(name="tenantId", visibility=["read", "create", "update", "delete", "query"])
    """Tenant Id."""
    site_id: Optional[str] = rest_field(name="siteId", visibility=["read"])
    """Site Id."""
    site_name: str = rest_field(name="siteName", visibility=["read", "create"])
    """Site name. Required."""
    key: Optional[str] = rest_field(visibility=["read"])
    """Primary key. Value only returned through POST to the action Channel List API, otherwise empty."""
    key2: Optional[str] = rest_field(visibility=["read"])
    """Secondary key. Value only returned through POST to the action Channel List API, otherwise
     empty."""
    is_enabled: bool = rest_field(name="isEnabled", visibility=["read", "create", "update", "delete", "query"])
    """Whether this site is enabled for DirectLine channel. Required."""
    is_token_enabled: Optional[bool] = rest_field(name="isTokenEnabled", visibility=["read"])
    """Whether this site is token enabled for channel."""
    is_endpoint_parameters_enabled: Optional[bool] = rest_field(
        name="isEndpointParametersEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """Whether this site is EndpointParameters enabled for channel."""
    is_detailed_logging_enabled: Optional[bool] = rest_field(
        name="isDetailedLoggingEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """Whether this site is disabled detailed logging for."""
    is_block_user_upload_enabled: Optional[bool] = rest_field(
        name="isBlockUserUploadEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """Whether this site is enabled for block user upload."""
    is_no_storage_enabled: Optional[bool] = rest_field(
        name="isNoStorageEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """Whether this no-storage site is disabled detailed logging for."""
    e_tag: Optional[str] = rest_field(name="eTag", visibility=["read", "create", "update", "delete", "query"])
    """Entity Tag."""
    app_id: Optional[str] = rest_field(name="appId", visibility=["read", "create", "update", "delete", "query"])
    """DirectLine application id."""
    is_v1_enabled: Optional[bool] = rest_field(name="isV1Enabled", visibility=["read", "create"])
    """Whether this site is enabled for Bot Framework V1 protocol."""
    is_v3_enabled: Optional[bool] = rest_field(
        name="isV3Enabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """Whether this site is enabled for Bot Framework V3 protocol."""
    is_secure_site_enabled: Optional[bool] = rest_field(
        name="isSecureSiteEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """Whether this site is enabled for authentication with Bot Framework."""
    trusted_origins: Optional[list[str]] = rest_field(
        name="trustedOrigins", visibility=["read", "create", "update", "delete", "query"]
    )
    """List of Trusted Origin URLs for this site. This field is applicable only if isSecureSiteEnabled
     is True."""
    is_web_chat_speech_enabled: Optional[bool] = rest_field(
        name="isWebChatSpeechEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """Whether this site is enabled for Webchat Speech."""
    is_webchat_preview_enabled: Optional[bool] = rest_field(
        name="isWebchatPreviewEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """Whether this site is enabled for preview versions of Webchat."""

    @overload
    def __init__(
        self,
        *,
        site_name: str,
        is_enabled: bool,
        tenant_id: Optional[str] = None,
        is_endpoint_parameters_enabled: Optional[bool] = None,
        is_detailed_logging_enabled: Optional[bool] = None,
        is_block_user_upload_enabled: Optional[bool] = None,
        is_no_storage_enabled: Optional[bool] = None,
        e_tag: Optional[str] = None,
        app_id: Optional[str] = None,
        is_v1_enabled: Optional[bool] = None,
        is_v3_enabled: Optional[bool] = None,
        is_secure_site_enabled: Optional[bool] = None,
        trusted_origins: Optional[list[str]] = None,
        is_web_chat_speech_enabled: Optional[bool] = None,
        is_webchat_preview_enabled: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


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
    """

    @overload
    def __init__(
        self,
        *,
        site_name: str,
        is_enabled: bool,
        tenant_id: Optional[str] = None,
        is_endpoint_parameters_enabled: Optional[bool] = None,
        is_detailed_logging_enabled: Optional[bool] = None,
        is_block_user_upload_enabled: Optional[bool] = None,
        is_no_storage_enabled: Optional[bool] = None,
        e_tag: Optional[str] = None,
        app_id: Optional[str] = None,
        is_v1_enabled: Optional[bool] = None,
        is_v3_enabled: Optional[bool] = None,
        is_secure_site_enabled: Optional[bool] = None,
        trusted_origins: Optional[list[str]] = None,
        is_web_chat_speech_enabled: Optional[bool] = None,
        is_webchat_preview_enabled: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class DirectLineSpeechChannel(Channel, discriminator="DirectLineSpeechChannel"):
    """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: ~azure.mgmt.botservice.models.DirectLineSpeechChannelProperties
    :ivar channel_name: The channel name. Required. Default value is "DirectLineSpeechChannel".
    :vartype channel_name: str
    """

    properties: Optional["_models.DirectLineSpeechChannelProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The set of properties specific to DirectLine Speech channel resource."""
    channel_name: Literal["DirectLineSpeechChannel"] = rest_discriminator(name="channelName", visibility=["read", "create", "update", "delete", "query"])  # type: ignore
    """The channel name. Required. Default value is \"DirectLineSpeechChannel\"."""

    @overload
    def __init__(
        self,
        *,
        etag: Optional[str] = None,
        location: Optional[str] = None,
        properties: Optional["_models.DirectLineSpeechChannelProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)
        self.channel_name = "DirectLineSpeechChannel"  # type: ignore


class DirectLineSpeechChannelProperties(_Model):
    """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
    """

    cognitive_service_resource_id: Optional[str] = rest_field(
        name="cognitiveServiceResourceId", visibility=["read", "create", "update", "delete", "query"]
    )
    """The cognitive service id with this channel registration."""
    cognitive_service_region: Optional[str] = rest_field(
        name="cognitiveServiceRegion", visibility=["read", "create", "update", "delete", "query"]
    )
    """The cognitive service region with this channel registration."""
    cognitive_service_subscription_key: Optional[str] = rest_field(
        name="cognitiveServiceSubscriptionKey", visibility=["read", "create", "update", "delete", "query"]
    )
    """The cognitive service subscription key to use with this channel registration."""
    is_enabled: Optional[bool] = rest_field(
        name="isEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """Whether this channel is enabled or not."""
    custom_voice_deployment_id: Optional[str] = rest_field(
        name="customVoiceDeploymentId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Custom speech model id (optional)."""
    custom_speech_model_id: Optional[str] = rest_field(
        name="customSpeechModelId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Custom voice deployment id (optional)."""
    is_default_bot_for_cog_svc_account: Optional[bool] = rest_field(
        name="isDefaultBotForCogSvcAccount", visibility=["read", "create", "update", "delete", "query"]
    )
    """Make this a default bot for chosen cognitive service account."""

    @overload
    def __init__(
        self,
        *,
        cognitive_service_resource_id: Optional[str] = None,
        cognitive_service_region: Optional[str] = None,
        cognitive_service_subscription_key: Optional[str] = None,
        is_enabled: Optional[bool] = None,
        custom_voice_deployment_id: Optional[str] = None,
        custom_speech_model_id: Optional[str] = None,
        is_default_bot_for_cog_svc_account: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class EmailChannel(Channel, discriminator="EmailChannel"):
    """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: ~azure.mgmt.botservice.models.EmailChannelProperties
    :ivar channel_name: The channel name. Required. Default value is "EmailChannel".
    :vartype channel_name: str
    """

    properties: Optional["_models.EmailChannelProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The set of properties specific to email channel resource."""
    channel_name: Literal["EmailChannel"] = rest_discriminator(name="channelName", visibility=["read", "create", "update", "delete", "query"])  # type: ignore
    """The channel name. Required. Default value is \"EmailChannel\"."""

    @overload
    def __init__(
        self,
        *,
        etag: Optional[str] = None,
        location: Optional[str] = None,
        properties: Optional["_models.EmailChannelProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)
        self.channel_name = "EmailChannel"  # type: ignore


class EmailChannelProperties(_Model):
    """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: int or ~azure.mgmt.botservice.models.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
    """

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

    @overload
    def __init__(
        self,
        *,
        email_address: str,
        is_enabled: bool,
        auth_method: Optional[Union[int, "_models.EmailChannelAuthMethod"]] = None,
        password: Optional[str] = None,
        magic_code: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class Error(_Model):
    """Bot Service error object.

    :ivar error: The error body.
    :vartype error: ~azure.mgmt.botservice.models.ErrorBody
    """

    error: Optional["_models.ErrorBody"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The error body."""

    @overload
    def __init__(
        self,
        *,
        error: Optional["_models.ErrorBody"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ErrorAdditionalInfo(_Model):
    """The resource management error additional info.

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

    type: Optional[str] = rest_field(visibility=["read"])
    """The additional info type."""
    info: Optional[Any] = rest_field(visibility=["read"])
    """The additional info."""


class ErrorBody(_Model):
    """Bot Service error body.

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

    code: str = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """error code. Required."""
    message: str = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """error message. Required."""

    @overload
    def __init__(
        self,
        *,
        code: str,
        message: str,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ErrorDetail(_Model):
    """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[~azure.mgmt.botservice.models.ErrorDetail]
    :ivar additional_info: The error additional info.
    :vartype additional_info: list[~azure.mgmt.botservice.models.ErrorAdditionalInfo]
    """

    code: Optional[str] = rest_field(visibility=["read"])
    """The error code."""
    message: Optional[str] = rest_field(visibility=["read"])
    """The error message."""
    target: Optional[str] = rest_field(visibility=["read"])
    """The error target."""
    details: Optional[list["_models.ErrorDetail"]] = rest_field(visibility=["read"])
    """The error details."""
    additional_info: Optional[list["_models.ErrorAdditionalInfo"]] = rest_field(
        name="additionalInfo", visibility=["read"]
    )
    """The error additional info."""


class ErrorResponse(_Model):
    """Error response.

    :ivar error: The error object.
    :vartype error: ~azure.mgmt.botservice.models.ErrorDetail
    """

    error: Optional["_models.ErrorDetail"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The error object."""

    @overload
    def __init__(
        self,
        *,
        error: Optional["_models.ErrorDetail"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class FacebookChannel(Channel, discriminator="FacebookChannel"):
    """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: ~azure.mgmt.botservice.models.FacebookChannelProperties
    :ivar channel_name: The channel name. Required. Default value is "FacebookChannel".
    :vartype channel_name: str
    """

    properties: Optional["_models.FacebookChannelProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The set of properties specific to bot facebook channel."""
    channel_name: Literal["FacebookChannel"] = rest_discriminator(name="channelName", visibility=["read", "create", "update", "delete", "query"])  # type: ignore
    """The channel name. Required. Default value is \"FacebookChannel\"."""

    @overload
    def __init__(
        self,
        *,
        etag: Optional[str] = None,
        location: Optional[str] = None,
        properties: Optional["_models.FacebookChannelProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)
        self.channel_name = "FacebookChannel"  # type: ignore


class FacebookChannelProperties(_Model):
    """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[~azure.mgmt.botservice.models.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
    """

    verify_token: Optional[str] = rest_field(name="verifyToken", visibility=["read"])
    """Verify token. Value only returned through POST to the action Channel List API, otherwise empty."""
    pages: Optional[list["_models.FacebookPage"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The list of Facebook pages."""
    app_id: str = rest_field(name="appId", visibility=["read", "create", "update", "delete", "query"])
    """Facebook application id. Required."""
    app_secret: Optional[str] = rest_field(name="appSecret", visibility=["read", "create", "update", "delete", "query"])
    """Facebook application secret. Value only returned through POST to the action Channel List API,
     otherwise empty."""
    callback_url: Optional[str] = rest_field(name="callbackUrl", visibility=["read"])
    """Callback Url."""
    is_enabled: bool = rest_field(name="isEnabled", visibility=["read", "create", "update", "delete", "query"])
    """Whether this channel is enabled for the bot. Required."""

    @overload
    def __init__(
        self,
        *,
        app_id: str,
        is_enabled: bool,
        pages: Optional[list["_models.FacebookPage"]] = None,
        app_secret: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class FacebookPage(_Model):
    """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: str = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Page id. Required."""
    access_token: Optional[str] = rest_field(
        name="accessToken", visibility=["read", "create", "update", "delete", "query"]
    )
    """Facebook application access token. Value only returned through POST to the action Channel List
     API, otherwise empty."""

    @overload
    def __init__(
        self,
        *,
        id: str,  # pylint: disable=redefined-builtin
        access_token: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class HostSettingsResponse(_Model):
    """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
    """

    o_auth_url: Optional[str] = rest_field(name="OAuthUrl", visibility=["read", "create", "update", "delete", "query"])
    """For in-conversation bot user authentication."""
    to_bot_from_channel_open_id_metadata_url: Optional[str] = rest_field(
        name="ToBotFromChannelOpenIdMetadataUrl", visibility=["read", "create", "update", "delete", "query"]
    )
    """For verifying incoming tokens from the channels."""
    to_bot_from_channel_token_issuer: Optional[str] = rest_field(
        name="ToBotFromChannelTokenIssuer", visibility=["read", "create", "update", "delete", "query"]
    )
    """For verifying incoming tokens from the channels."""
    to_bot_from_emulator_open_id_metadata_url: Optional[str] = rest_field(
        name="ToBotFromEmulatorOpenIdMetadataUrl", visibility=["read", "create", "update", "delete", "query"]
    )
    """For verifying incoming tokens from bot emulator."""
    to_channel_from_bot_login_url: Optional[str] = rest_field(
        name="ToChannelFromBotLoginUrl", visibility=["read", "create", "update", "delete", "query"]
    )
    """For getting access token to channels from bot host."""
    to_channel_from_bot_o_auth_scope: Optional[str] = rest_field(
        name="ToChannelFromBotOAuthScope", visibility=["read", "create", "update", "delete", "query"]
    )
    """For getting access token to channels from bot host."""
    validate_authority: Optional[bool] = rest_field(
        name="ValidateAuthority", visibility=["read", "create", "update", "delete", "query"]
    )
    """Per cloud OAuth setting on whether authority is validated."""
    bot_open_id_metadata: Optional[str] = rest_field(
        name="BotOpenIdMetadata", visibility=["read", "create", "update", "delete", "query"]
    )
    """Same as toBotFromChannelOpenIdMetadataUrl, used by SDK < v4.12."""

    @overload
    def __init__(
        self,
        *,
        o_auth_url: Optional[str] = None,
        to_bot_from_channel_open_id_metadata_url: Optional[str] = None,
        to_bot_from_channel_token_issuer: Optional[str] = None,
        to_bot_from_emulator_open_id_metadata_url: Optional[str] = None,
        to_channel_from_bot_login_url: Optional[str] = None,
        to_channel_from_bot_o_auth_scope: Optional[str] = None,
        validate_authority: Optional[bool] = None,
        bot_open_id_metadata: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class KikChannel(Channel, discriminator="KikChannel"):
    """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: ~azure.mgmt.botservice.models.KikChannelProperties
    :ivar channel_name: The channel name. Required. Default value is "KikChannel".
    :vartype channel_name: str
    """

    properties: Optional["_models.KikChannelProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The set of properties specific to Kik channel resource."""
    channel_name: Literal["KikChannel"] = rest_discriminator(name="channelName", visibility=["read", "create", "update", "delete", "query"])  # type: ignore
    """The channel name. Required. Default value is \"KikChannel\"."""

    @overload
    def __init__(
        self,
        *,
        etag: Optional[str] = None,
        location: Optional[str] = None,
        properties: Optional["_models.KikChannelProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)
        self.channel_name = "KikChannel"  # type: ignore


class KikChannelProperties(_Model):
    """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
    """

    user_name: str = rest_field(name="userName", visibility=["read", "create", "update", "delete", "query"])
    """The Kik user name. Required."""
    api_key: Optional[str] = rest_field(name="apiKey", visibility=["read", "create", "update", "delete", "query"])
    """Kik API key. Value only returned through POST to the action Channel List API, otherwise empty."""
    is_validated: Optional[bool] = rest_field(
        name="isValidated", visibility=["read", "create", "update", "delete", "query"]
    )
    """Whether this channel is validated for the bot."""
    is_enabled: bool = rest_field(name="isEnabled", visibility=["read", "create", "update", "delete", "query"])
    """Whether this channel is enabled for the bot. Required."""

    @overload
    def __init__(
        self,
        *,
        user_name: str,
        is_enabled: bool,
        api_key: Optional[str] = None,
        is_validated: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class LineChannel(Channel, discriminator="LineChannel"):
    """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: ~azure.mgmt.botservice.models.LineChannelProperties
    :ivar channel_name: The channel name. Required. Default value is "LineChannel".
    :vartype channel_name: str
    """

    properties: Optional["_models.LineChannelProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The set of properties specific to line channel resource."""
    channel_name: Literal["LineChannel"] = rest_discriminator(name="channelName", visibility=["read", "create", "update", "delete", "query"])  # type: ignore
    """The channel name. Required. Default value is \"LineChannel\"."""

    @overload
    def __init__(
        self,
        *,
        etag: Optional[str] = None,
        location: Optional[str] = None,
        properties: Optional["_models.LineChannelProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)
        self.channel_name = "LineChannel"  # type: ignore


class LineChannelProperties(_Model):
    """The parameters to provide for the Line channel.

    :ivar line_registrations: The list of line channel registrations. Required.
    :vartype line_registrations: list[~azure.mgmt.botservice.models.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
    """

    line_registrations: list["_models.LineRegistration"] = rest_field(
        name="lineRegistrations", visibility=["read", "create", "update", "delete", "query"]
    )
    """The list of line channel registrations. Required."""
    callback_url: Optional[str] = rest_field(name="callbackUrl", visibility=["read"])
    """Callback Url to enter in line registration."""
    is_validated: Optional[bool] = rest_field(name="isValidated", visibility=["read"])
    """Whether this channel is validated for the bot."""

    @overload
    def __init__(
        self,
        *,
        line_registrations: list["_models.LineRegistration"],
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class LineRegistration(_Model):
    """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
    """

    generated_id: Optional[str] = rest_field(name="generatedId", visibility=["read"])
    """Id generated for the line channel registration."""
    channel_secret: Optional[str] = rest_field(
        name="channelSecret", visibility=["read", "create", "update", "delete", "query"]
    )
    """Secret for the line channel registration."""
    channel_access_token: Optional[str] = rest_field(
        name="channelAccessToken", visibility=["read", "create", "update", "delete", "query"]
    )
    """Access token for the line channel registration."""

    @overload
    def __init__(
        self,
        *,
        channel_secret: Optional[str] = None,
        channel_access_token: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


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: ~azure.mgmt.botservice.models.SystemData
    :ivar properties: The set of properties specific to bot channel resource.
    :vartype properties: ~azure.mgmt.botservice.models.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: ~azure.mgmt.botservice.models.Sku
    :ivar kind: Required. Gets or sets the Kind of the resource. Known values are: "sdk",
     "designer", "bot", "function", and "azurebot".
    :vartype kind: str or ~azure.mgmt.botservice.models.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: ~azure.mgmt.botservice.models.Channel
    :ivar setting: Channel settings.
    :vartype setting: ~azure.mgmt.botservice.models.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: Optional["_models.Channel"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The set of properties specific to bot channel resource."""
    setting: Optional["_models.ChannelSettings"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Channel settings."""
    provisioning_state: Optional[str] = rest_field(
        name="provisioningState", visibility=["read", "create", "update", "delete", "query"]
    )
    """Provisioning state of the resource."""
    entity_tag: Optional[str] = rest_field(name="entityTag", visibility=["read", "create", "update", "delete", "query"])
    """Entity tag of the resource."""
    changed_time: Optional[str] = rest_field(
        name="changedTime", visibility=["read", "create", "update", "delete", "query"]
    )
    """Changed time of the resource."""

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.Channel"] = None,
        location: Optional[str] = None,
        tags: Optional[dict[str, str]] = None,
        sku: Optional["_models.Sku"] = None,
        kind: Optional[Union[str, "_models.Kind"]] = None,
        etag: Optional[str] = None,
        resource: Optional["_models.Channel"] = None,
        setting: Optional["_models.ChannelSettings"] = None,
        provisioning_state: Optional[str] = None,
        entity_tag: Optional[str] = None,
        changed_time: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class M365Extensions(Channel, discriminator="M365Extensions"):
    """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: str
    """

    channel_name: Literal["M365Extensions"] = rest_discriminator(name="channelName", visibility=["read", "create", "update", "delete", "query"])  # type: ignore
    """The channel name. Required. Default value is \"M365Extensions\"."""

    @overload
    def __init__(
        self,
        *,
        etag: Optional[str] = None,
        location: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)
        self.channel_name = "M365Extensions"  # type: ignore


class MsTeamsChannel(Channel, discriminator="MsTeamsChannel"):
    """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: ~azure.mgmt.botservice.models.MsTeamsChannelProperties
    :ivar channel_name: The channel name. Required. Default value is "MsTeamsChannel".
    :vartype channel_name: str
    """

    properties: Optional["_models.MsTeamsChannelProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The set of properties specific to Microsoft Teams channel resource."""
    channel_name: Literal["MsTeamsChannel"] = rest_discriminator(name="channelName", visibility=["read", "create", "update", "delete", "query"])  # type: ignore
    """The channel name. Required. Default value is \"MsTeamsChannel\"."""

    @overload
    def __init__(
        self,
        *,
        etag: Optional[str] = None,
        location: Optional[str] = None,
        properties: Optional["_models.MsTeamsChannelProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)
        self.channel_name = "MsTeamsChannel"  # type: ignore


class MsTeamsChannelProperties(_Model):
    """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
    """

    enable_calling: Optional[bool] = rest_field(
        name="enableCalling", visibility=["read", "create", "update", "delete", "query"]
    )
    """Enable calling for Microsoft Teams channel."""
    calling_webhook: Optional[str] = rest_field(
        name="callingWebhook", visibility=["read", "create", "update", "delete", "query"]
    )
    """Webhook for Microsoft Teams channel calls."""
    is_enabled: bool = rest_field(name="isEnabled", visibility=["read", "create", "update", "delete", "query"])
    """Whether this channel is enabled for the bot. Required."""
    incoming_call_route: Optional[str] = rest_field(
        name="incomingCallRoute", visibility=["read", "create", "update", "delete", "query"]
    )
    """Webhook for Microsoft Teams channel calls."""
    deployment_environment: Optional[str] = rest_field(
        name="deploymentEnvironment", visibility=["read", "create", "update", "delete", "query"]
    )
    """Deployment environment for Microsoft Teams channel calls."""
    accepted_terms: Optional[bool] = rest_field(
        name="acceptedTerms", visibility=["read", "create", "update", "delete", "query"]
    )
    """Whether this channel accepted terms."""

    @overload
    def __init__(
        self,
        *,
        is_enabled: bool,
        enable_calling: Optional[bool] = None,
        calling_webhook: Optional[str] = None,
        incoming_call_route: Optional[str] = None,
        deployment_environment: Optional[str] = None,
        accepted_terms: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class NetworkSecurityPerimeter(_Model):
    """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: Optional[str] = rest_field(visibility=["read"])
    """Fully qualified resource ID for the resource. E.g.
     \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}\"."""
    perimeter_guid: Optional[str] = rest_field(
        name="perimeterGuid", visibility=["read", "create", "update", "delete", "query"]
    )
    """Guid of the Network Security Perimeter."""
    location: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Location of the Network Security Perimeter."""

    @overload
    def __init__(
        self,
        *,
        perimeter_guid: Optional[str] = None,
        location: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


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: ~azure.mgmt.botservice.models.SystemData
    :ivar properties: Properties of the Network Security Perimeter configuration.
    :vartype properties:
     ~azure.mgmt.botservice.models.NetworkSecurityPerimeterConfigurationProperties
    """

    properties: Optional["_models.NetworkSecurityPerimeterConfigurationProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Properties of the Network Security Perimeter configuration."""

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.NetworkSecurityPerimeterConfigurationProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class NetworkSecurityPerimeterConfigurationProperties(_Model):  # 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: str or ~azure.mgmt.botservice.models.ProvisioningState
    :ivar provisioning_issues: List of Provisioning Issues if any.
    :vartype provisioning_issues: list[~azure.mgmt.botservice.models.ProvisioningIssue]
    :ivar network_security_perimeter: Information about Network Security Perimeter.
    :vartype network_security_perimeter: ~azure.mgmt.botservice.models.NetworkSecurityPerimeter
    :ivar resource_association: Information about resource association.
    :vartype resource_association: ~azure.mgmt.botservice.models.ResourceAssociation
    :ivar profile: Information about profile.
    :vartype profile: ~azure.mgmt.botservice.models.Profile
    """

    provisioning_state: Optional[Union[str, "_models.ProvisioningState"]] = rest_field(
        name="provisioningState", visibility=["read", "create", "update", "delete", "query"]
    )
    """Known values are: \"Creating\", \"Updating\", \"Accepted\", \"Succeeded\", \"Failed\", and
     \"Deleting\"."""
    provisioning_issues: Optional[list["_models.ProvisioningIssue"]] = rest_field(
        name="provisioningIssues", visibility=["read", "create", "update", "delete", "query"]
    )
    """List of Provisioning Issues if any."""
    network_security_perimeter: Optional["_models.NetworkSecurityPerimeter"] = rest_field(
        name="networkSecurityPerimeter", visibility=["read"]
    )
    """Information about Network Security Perimeter."""
    resource_association: Optional["_models.ResourceAssociation"] = rest_field(
        name="resourceAssociation", visibility=["read"]
    )
    """Information about resource association."""
    profile: Optional["_models.Profile"] = rest_field(visibility=["read"])
    """Information about profile."""

    @overload
    def __init__(
        self,
        *,
        provisioning_state: Optional[Union[str, "_models.ProvisioningState"]] = None,
        provisioning_issues: Optional[list["_models.ProvisioningIssue"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class NspAccessRule(_Model):
    """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: ~azure.mgmt.botservice.models.NspAccessRuleProperties
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Name of the access rule."""
    properties: Optional["_models.NspAccessRuleProperties"] = rest_field(visibility=["read"])
    """Properties of Access Rule."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class NspAccessRuleProperties(_Model):
    """Properties of Access Rule.

    :ivar direction: Direction of Access Rule. Known values are: "Inbound" and "Outbound".
    :vartype direction: str or ~azure.mgmt.botservice.models.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[~azure.mgmt.botservice.models.NspAccessRulePropertiesSubscriptionsItem]
    :ivar network_security_perimeters: NetworkSecurityPerimeters for inbound rules.
    :vartype network_security_perimeters:
     list[~azure.mgmt.botservice.models.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: Optional[Union[str, "_models.NspAccessRuleDirection"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Direction of Access Rule. Known values are: \"Inbound\" and \"Outbound\"."""
    address_prefixes: Optional[list[str]] = rest_field(
        name="addressPrefixes", visibility=["read", "create", "update", "delete", "query"]
    )
    """Address prefixes in the CIDR format for inbound rules."""
    subscriptions: Optional[list["_models.NspAccessRulePropertiesSubscriptionsItem"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Subscriptions for inbound rules."""
    network_security_perimeters: Optional[list["_models.NetworkSecurityPerimeter"]] = rest_field(
        name="networkSecurityPerimeters", visibility=["read"]
    )
    """NetworkSecurityPerimeters for inbound rules."""
    fully_qualified_domain_names: Optional[list[str]] = rest_field(
        name="fullyQualifiedDomainNames", visibility=["read"]
    )
    """FQDN for outbound rules."""
    email_addresses: Optional[list[str]] = rest_field(name="emailAddresses", visibility=["read"])
    """Email addresses for outbound rules."""
    phone_numbers: Optional[list[str]] = rest_field(name="phoneNumbers", visibility=["read"])
    """Phone numbers for outbound rules."""

    @overload
    def __init__(
        self,
        *,
        direction: Optional[Union[str, "_models.NspAccessRuleDirection"]] = None,
        address_prefixes: Optional[list[str]] = None,
        subscriptions: Optional[list["_models.NspAccessRulePropertiesSubscriptionsItem"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class NspAccessRulePropertiesSubscriptionsItem(_Model):
    """Subscription for inbound rule.

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

    id: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Fully qualified identifier of subscription."""

    @overload
    def __init__(
        self,
        *,
        id: Optional[str] = None,  # pylint: disable=redefined-builtin
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class Omnichannel(Channel, discriminator="Omnichannel"):
    """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: str
    """

    channel_name: Literal["Omnichannel"] = rest_discriminator(name="channelName", visibility=["read", "create", "update", "delete", "query"])  # type: ignore
    """The channel name. Required. Default value is \"Omnichannel\"."""

    @overload
    def __init__(
        self,
        *,
        etag: Optional[str] = None,
        location: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)
        self.channel_name = "Omnichannel"  # type: ignore


class OperationDisplayInfo(_Model):
    """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: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The description of the operation."""
    operation: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The action that users can perform, based on their permission level."""
    provider: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Service provider: Microsoft Bot Service."""
    resource: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Resource on which the operation is performed."""

    @overload
    def __init__(
        self,
        *,
        description: Optional[str] = None,
        operation: Optional[str] = None,
        provider: Optional[str] = None,
        resource: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class OperationEntity(_Model):
    """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: ~azure.mgmt.botservice.models.OperationDisplayInfo
    :ivar origin: The origin of the operation.
    :vartype origin: str
    :ivar properties: Additional properties.
    :vartype properties: any
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Operation name: {provider}/{resource}/{operation}."""
    display: Optional["_models.OperationDisplayInfo"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The operation supported by Bot Service Management."""
    origin: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The origin of the operation."""
    properties: Optional[Any] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Additional properties."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        display: Optional["_models.OperationDisplayInfo"] = None,
        origin: Optional[str] = None,
        properties: Optional[Any] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class OperationResultsDescription(_Model):
    """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: str or ~azure.mgmt.botservice.models.OperationResultStatus
    :ivar start_time: The time that the operation was started.
    :vartype start_time: ~datetime.datetime
    """

    id: Optional[str] = rest_field(visibility=["read"])
    """The ID of the operation returned."""
    name: Optional[str] = rest_field(visibility=["read"])
    """The name of the operation result."""
    status: Optional[Union[str, "_models.OperationResultStatus"]] = rest_field(visibility=["read"])
    """The status of the operation being performed. Known values are: \"Canceled\", \"Succeeded\",
     \"Failed\", \"Requested\", and \"Running\"."""
    start_time: Optional[datetime.datetime] = rest_field(name="startTime", visibility=["read"], format="rfc3339")
    """The time that the operation was started."""


class OutlookChannel(Channel, discriminator="OutlookChannel"):
    """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: str
    """

    channel_name: Literal["OutlookChannel"] = rest_discriminator(name="channelName", visibility=["read", "create", "update", "delete", "query"])  # type: ignore
    """The channel name. Required. Default value is \"OutlookChannel\"."""

    @overload
    def __init__(
        self,
        *,
        etag: Optional[str] = None,
        location: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)
        self.channel_name = "OutlookChannel"  # type: ignore


class PrivateEndpoint(_Model):
    """The Private Endpoint resource.

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

    id: Optional[str] = rest_field(visibility=["read"])
    """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: ~azure.mgmt.botservice.models.SystemData
    :ivar properties: Resource properties.
    :vartype properties: ~azure.mgmt.botservice.models.PrivateEndpointConnectionProperties
    """

    properties: Optional["_models.PrivateEndpointConnectionProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Resource properties."""

    __flattened_items = ["private_endpoint", "private_link_service_connection_state", "provisioning_state", "group_ids"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.PrivateEndpointConnectionProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class PrivateEndpointConnectionProperties(_Model):
    """Properties of the PrivateEndpointConnectProperties.

    :ivar private_endpoint: The resource of private end point.
    :vartype private_endpoint: ~azure.mgmt.botservice.models.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:
     ~azure.mgmt.botservice.models.PrivateLinkServiceConnectionState
    :ivar provisioning_state: The provisioning state of the private endpoint connection resource.
     Known values are: "Succeeded", "Creating", "Deleting", and "Failed".
    :vartype provisioning_state: str or
     ~azure.mgmt.botservice.models.PrivateEndpointConnectionProvisioningState
    :ivar group_ids: Group ids.
    :vartype group_ids: list[str]
    """

    private_endpoint: Optional["_models.PrivateEndpoint"] = rest_field(
        name="privateEndpoint", visibility=["read", "create", "update", "delete", "query"]
    )
    """The resource of private end point."""
    private_link_service_connection_state: "_models.PrivateLinkServiceConnectionState" = rest_field(
        name="privateLinkServiceConnectionState", visibility=["read", "create", "update", "delete", "query"]
    )
    """A collection of information about the state of the connection between service consumer and
     provider. Required."""
    provisioning_state: Optional[Union[str, "_models.PrivateEndpointConnectionProvisioningState"]] = rest_field(
        name="provisioningState", visibility=["read"]
    )
    """The provisioning state of the private endpoint connection resource. Known values are:
     \"Succeeded\", \"Creating\", \"Deleting\", and \"Failed\"."""
    group_ids: Optional[list[str]] = rest_field(
        name="groupIds", visibility=["read", "create", "update", "delete", "query"]
    )
    """Group ids."""

    @overload
    def __init__(
        self,
        *,
        private_link_service_connection_state: "_models.PrivateLinkServiceConnectionState",
        private_endpoint: Optional["_models.PrivateEndpoint"] = None,
        group_ids: Optional[list[str]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class PrivateLinkResourceBase(_Model):
    """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: Optional[str] = rest_field(visibility=["read"])
    """Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}."""
    name: Optional[str] = rest_field(visibility=["read"])
    """The name of the resource."""
    type: Optional[str] = rest_field(visibility=["read"])
    """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: ~azure.mgmt.botservice.models.PrivateLinkResourceProperties
    """

    properties: Optional["_models.PrivateLinkResourceProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Resource properties."""

    __flattened_items = ["group_id", "required_members", "required_zone_names"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.PrivateLinkResourceProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class PrivateLinkResourceListResult(_Model):
    """A list of private link resources.

    :ivar value: Array of private link resources.
    :vartype value: list[~azure.mgmt.botservice.models.PrivateLinkResource]
    """

    value: Optional[list["_models.PrivateLinkResource"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Array of private link resources."""

    @overload
    def __init__(
        self,
        *,
        value: Optional[list["_models.PrivateLinkResource"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class PrivateLinkResourceProperties(_Model):
    """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]
    """

    group_id: Optional[str] = rest_field(name="groupId", visibility=["read"])
    """The private link resource group id."""
    required_members: Optional[list[str]] = rest_field(name="requiredMembers", visibility=["read"])
    """The private link resource required member names."""
    required_zone_names: Optional[list[str]] = rest_field(
        name="requiredZoneNames", visibility=["read", "create", "update", "delete", "query"]
    )
    """The private link resource Private link DNS zone name."""

    @overload
    def __init__(
        self,
        *,
        required_zone_names: Optional[list[str]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class PrivateLinkServiceConnectionState(_Model):
    """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: str or ~azure.mgmt.botservice.models.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: Optional[Union[str, "_models.PrivateEndpointServiceConnectionStatus"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Indicates whether the connection has been Approved/Rejected/Removed by the owner of the
     service. Known values are: \"Pending\", \"Approved\", and \"Rejected\"."""
    description: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The reason for approval/rejection of the connection."""
    actions_required: Optional[str] = rest_field(
        name="actionsRequired", visibility=["read", "create", "update", "delete", "query"]
    )
    """A message indicating if changes on the service provider require any updates on the consumer."""

    @overload
    def __init__(
        self,
        *,
        status: Optional[Union[str, "_models.PrivateEndpointServiceConnectionStatus"]] = None,
        description: Optional[str] = None,
        actions_required: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class Profile(_Model):
    """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[~azure.mgmt.botservice.models.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: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Name of the profile."""
    access_rules_version: Optional[int] = rest_field(
        name="accessRulesVersion", visibility=["read", "create", "update", "delete", "query"]
    )
    """Current access rules version."""
    access_rules: Optional[list["_models.NspAccessRule"]] = rest_field(
        name="accessRules", visibility=["read", "create", "update", "delete", "query"]
    )
    """List of Access Rules."""
    diagnostic_settings_version: Optional[int] = rest_field(
        name="diagnosticSettingsVersion", visibility=["read", "create", "update", "delete", "query"]
    )
    """Current diagnostic settings version."""
    enabled_log_categories: Optional[list[str]] = rest_field(name="enabledLogCategories", visibility=["read"])
    """List of log categories."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        access_rules_version: Optional[int] = None,
        access_rules: Optional[list["_models.NspAccessRule"]] = None,
        diagnostic_settings_version: Optional[int] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ProvisioningIssue(_Model):
    """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: ~azure.mgmt.botservice.models.ProvisioningIssueProperties
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Name of the issue."""
    properties: Optional["_models.ProvisioningIssueProperties"] = rest_field(visibility=["read"])
    """Properties of Provisioning Issue."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ProvisioningIssueProperties(_Model):
    """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: str or ~azure.mgmt.botservice.models.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[~azure.mgmt.botservice.models.NspAccessRule]
    """

    issue_type: Optional[str] = rest_field(name="issueType", visibility=["read", "create", "update", "delete", "query"])
    """Type of Issue."""
    severity: Optional[Union[str, "_models.Severity"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Provisioning state of Network Security Perimeter configuration propagation. Known values are:
     \"Warning\" and \"Error\"."""
    description: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Description of the issue."""
    suggested_resource_ids: Optional[list[str]] = rest_field(name="suggestedResourceIds", visibility=["read"])
    """ARM IDs of resources that can be associated to the same perimeter to remediate the issue."""
    suggested_access_rules: Optional[list["_models.NspAccessRule"]] = rest_field(
        name="suggestedAccessRules", visibility=["read", "create", "update", "delete", "query"]
    )
    """Access rules that can be added to the same profile to remediate the issue."""

    @overload
    def __init__(
        self,
        *,
        issue_type: Optional[str] = None,
        severity: Optional[Union[str, "_models.Severity"]] = None,
        description: Optional[str] = None,
        suggested_access_rules: Optional[list["_models.NspAccessRule"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class QnAMakerEndpointKeysRequestBody(_Model):
    """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: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """the host name of the QnA Maker endpoint."""
    authkey: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Subscription key which provides access to this API."""

    @overload
    def __init__(
        self,
        *,
        hostname: Optional[str] = None,
        authkey: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class QnAMakerEndpointKeysResponse(_Model):
    """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
    """

    primary_endpoint_key: Optional[str] = rest_field(
        name="primaryEndpointKey", visibility=["read", "create", "update", "delete", "query"]
    )
    """Primary Access Key."""
    secondary_endpoint_key: Optional[str] = rest_field(
        name="secondaryEndpointKey", visibility=["read", "create", "update", "delete", "query"]
    )
    """Secondary Access Key."""
    installed_version: Optional[str] = rest_field(
        name="installedVersion", visibility=["read", "create", "update", "delete", "query"]
    )
    """Current version of runtime."""
    last_stable_version: Optional[str] = rest_field(
        name="lastStableVersion", visibility=["read", "create", "update", "delete", "query"]
    )
    """Latest version of runtime."""

    @overload
    def __init__(
        self,
        *,
        primary_endpoint_key: Optional[str] = None,
        secondary_endpoint_key: Optional[str] = None,
        installed_version: Optional[str] = None,
        last_stable_version: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ResourceAssociation(_Model):
    """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: str or ~azure.mgmt.botservice.models.AccessMode
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Name of the resource association."""
    access_mode: Optional[Union[str, "_models.AccessMode"]] = rest_field(
        name="accessMode", visibility=["read", "create", "update", "delete", "query"]
    )
    """Access Mode of the resource association. Known values are: \"Enforced\", \"Learning\", and
     \"Audit\"."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        access_mode: Optional[Union[str, "_models.AccessMode"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SearchAssistant(Channel, discriminator="SearchAssistant"):
    """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: str
    """

    channel_name: Literal["SearchAssistant"] = rest_discriminator(name="channelName", visibility=["read", "create", "update", "delete", "query"])  # type: ignore
    """The channel name. Required. Default value is \"SearchAssistant\"."""

    @overload
    def __init__(
        self,
        *,
        etag: Optional[str] = None,
        location: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)
        self.channel_name = "SearchAssistant"  # type: ignore


class ServiceProvider(_Model):
    """Service Provider Definition.

    :ivar properties: The Properties of a Service Provider Object.
    :vartype properties: ~azure.mgmt.botservice.models.ServiceProviderProperties
    """

    properties: Optional["_models.ServiceProviderProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The Properties of a Service Provider Object."""

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.ServiceProviderProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ServiceProviderParameter(_Model):
    """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: ~azure.mgmt.botservice.models.ServiceProviderParameterMetadata
    """

    name: Optional[str] = rest_field(visibility=["read"])
    """Name of the Service Provider."""
    type: Optional[str] = rest_field(visibility=["read"])
    """Type of the Service Provider."""
    display_name: Optional[str] = rest_field(name="displayName", visibility=["read"])
    """Display Name of the Service Provider."""
    description: Optional[str] = rest_field(visibility=["read"])
    """Description of the Service Provider."""
    help_url: Optional[str] = rest_field(name="helpUrl", visibility=["read"])
    """Help Url for the  Service Provider."""
    default: Optional[str] = rest_field(visibility=["read"])
    """Default Name for the Service Provider."""
    metadata: Optional["_models.ServiceProviderParameterMetadata"] = rest_field(visibility=["read"])
    """Meta data for the Service Provider."""


class ServiceProviderParameterMetadata(_Model):
    """Meta data for the Service Provider.

    :ivar constraints: the constraints of the bot meta data.
    :vartype constraints: ~azure.mgmt.botservice.models.ServiceProviderParameterMetadataConstraints
    """

    constraints: Optional["_models.ServiceProviderParameterMetadataConstraints"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """the constraints of the bot meta data."""

    @overload
    def __init__(
        self,
        *,
        constraints: Optional["_models.ServiceProviderParameterMetadataConstraints"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ServiceProviderParameterMetadataConstraints(_Model):  # 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: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Whether required the constraints of the bot meta data."""

    @overload
    def __init__(
        self,
        *,
        required: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ServiceProviderProperties(_Model):
    """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[~azure.mgmt.botservice.models.ServiceProviderParameter]
    """

    id: Optional[str] = rest_field(visibility=["read"])
    """Id for Service Provider."""
    display_name: Optional[str] = rest_field(name="displayName", visibility=["read"])
    """Display Name of the Service Provider."""
    service_provider_name: Optional[str] = rest_field(name="serviceProviderName", visibility=["read"])
    """Name of the Service Provider."""
    dev_portal_url: Optional[str] = rest_field(name="devPortalUrl", visibility=["read"])
    """URL of Dev Portal."""
    icon_url: Optional[str] = rest_field(name="iconUrl", visibility=["read", "create", "update", "delete", "query"])
    """The URL of icon."""
    parameters: Optional[list["_models.ServiceProviderParameter"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The list of parameters for the Service Provider."""

    @overload
    def __init__(
        self,
        *,
        icon_url: Optional[str] = None,
        parameters: Optional[list["_models.ServiceProviderParameter"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ServiceProviderResponseList(_Model):
    """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[~azure.mgmt.botservice.models.ServiceProvider]
    """

    next_link: Optional[str] = rest_field(name="nextLink", visibility=["read", "create", "update", "delete", "query"])
    """The link used to get the next page of bot service providers."""
    value: Optional[list["_models.ServiceProvider"]] = rest_field(visibility=["read"])
    """Gets the list of bot service providers and their properties."""

    @overload
    def __init__(
        self,
        *,
        next_link: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SiteInfo(_Model):
    """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: str or ~azure.mgmt.botservice.models.Key
    """

    site_name: str = rest_field(name="siteName", visibility=["read", "create"])
    """The site name. Required."""
    key: Union[str, "_models.Key"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Determines which key is to be regenerated. Required. Known values are: \"key1\" and \"key2\"."""

    @overload
    def __init__(
        self,
        *,
        site_name: str,
        key: Union[str, "_models.Key"],
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class Sku(_Model):
    """The SKU of the cognitive services account.

    :ivar name: The sku name. Required. Known values are: "F0" and "S1".
    :vartype name: str or ~azure.mgmt.botservice.models.SkuName
    :ivar tier: Gets the sku tier. This is based on the SKU name. Known values are: "Free" and
     "Standard".
    :vartype tier: str or ~azure.mgmt.botservice.models.SkuTier
    """

    name: Union[str, "_models.SkuName"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The sku name. Required. Known values are: \"F0\" and \"S1\"."""
    tier: Optional[Union[str, "_models.SkuTier"]] = rest_field(visibility=["read"])
    """Gets the sku tier. This is based on the SKU name. Known values are: \"Free\" and \"Standard\"."""

    @overload
    def __init__(
        self,
        *,
        name: Union[str, "_models.SkuName"],
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SkypeChannel(Channel, discriminator="SkypeChannel"):
    """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: ~azure.mgmt.botservice.models.SkypeChannelProperties
    :ivar channel_name: The channel name. Required. Default value is "SkypeChannel".
    :vartype channel_name: str
    """

    properties: Optional["_models.SkypeChannelProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The set of properties specific to Skype channel resource."""
    channel_name: Literal["SkypeChannel"] = rest_discriminator(name="channelName", visibility=["read", "create", "update", "delete", "query"])  # type: ignore
    """The channel name. Required. Default value is \"SkypeChannel\"."""

    @overload
    def __init__(
        self,
        *,
        etag: Optional[str] = None,
        location: Optional[str] = None,
        properties: Optional["_models.SkypeChannelProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)
        self.channel_name = "SkypeChannel"  # type: ignore


class SkypeChannelProperties(_Model):
    """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
    """

    enable_messaging: Optional[bool] = rest_field(
        name="enableMessaging", visibility=["read", "create", "update", "delete", "query"]
    )
    """Enable messaging for Skype channel."""
    enable_media_cards: Optional[bool] = rest_field(
        name="enableMediaCards", visibility=["read", "create", "update", "delete", "query"]
    )
    """Enable media cards for Skype channel."""
    enable_video: Optional[bool] = rest_field(
        name="enableVideo", visibility=["read", "create", "update", "delete", "query"]
    )
    """Enable video for Skype channel."""
    enable_calling: Optional[bool] = rest_field(
        name="enableCalling", visibility=["read", "create", "update", "delete", "query"]
    )
    """Enable calling for Skype channel."""
    enable_screen_sharing: Optional[bool] = rest_field(
        name="enableScreenSharing", visibility=["read", "create", "update", "delete", "query"]
    )
    """Enable screen sharing for Skype channel."""
    enable_groups: Optional[bool] = rest_field(
        name="enableGroups", visibility=["read", "create", "update", "delete", "query"]
    )
    """Enable groups for Skype channel."""
    groups_mode: Optional[str] = rest_field(
        name="groupsMode", visibility=["read", "create", "update", "delete", "query"]
    )
    """Group mode for Skype channel."""
    calling_web_hook: Optional[str] = rest_field(
        name="callingWebHook", visibility=["read", "create", "update", "delete", "query"]
    )
    """Calling web hook for Skype channel."""
    incoming_call_route: Optional[str] = rest_field(
        name="incomingCallRoute", visibility=["read", "create", "update", "delete", "query"]
    )
    """Incoming call route for Skype channel."""
    is_enabled: bool = rest_field(name="isEnabled", visibility=["read", "create", "update", "delete", "query"])
    """Whether this channel is enabled for the bot. Required."""

    @overload
    def __init__(
        self,
        *,
        is_enabled: bool,
        enable_messaging: Optional[bool] = None,
        enable_media_cards: Optional[bool] = None,
        enable_video: Optional[bool] = None,
        enable_calling: Optional[bool] = None,
        enable_screen_sharing: Optional[bool] = None,
        enable_groups: Optional[bool] = None,
        groups_mode: Optional[str] = None,
        calling_web_hook: Optional[str] = None,
        incoming_call_route: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SlackChannel(Channel, discriminator="SlackChannel"):
    """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: ~azure.mgmt.botservice.models.SlackChannelProperties
    :ivar channel_name: The channel name. Required. Default value is "SlackChannel".
    :vartype channel_name: str
    """

    properties: Optional["_models.SlackChannelProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The set of properties specific to Slack channel resource."""
    channel_name: Literal["SlackChannel"] = rest_discriminator(name="channelName", visibility=["read", "create", "update", "delete", "query"])  # type: ignore
    """The channel name. Required. Default value is \"SlackChannel\"."""

    @overload
    def __init__(
        self,
        *,
        etag: Optional[str] = None,
        location: Optional[str] = None,
        properties: Optional["_models.SlackChannelProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)
        self.channel_name = "SlackChannel"  # type: ignore


class SlackChannelProperties(_Model):
    """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
    """

    client_id: Optional[str] = rest_field(name="clientId", visibility=["read", "create", "update", "delete", "query"])
    """The Slack client id."""
    client_secret: Optional[str] = rest_field(
        name="clientSecret", visibility=["read", "create", "update", "delete", "query"]
    )
    """The Slack client secret. Value only returned through POST to the action Channel List API,
     otherwise empty."""
    verification_token: Optional[str] = rest_field(
        name="verificationToken", visibility=["read", "create", "update", "delete", "query"]
    )
    """The Slack verification token. Value only returned through POST to the action Channel List API,
     otherwise empty."""
    scopes: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The Slack permission scopes."""
    landing_page_url: Optional[str] = rest_field(
        name="landingPageUrl", visibility=["read", "create", "update", "delete", "query"]
    )
    """The Slack landing page Url."""
    redirect_action: Optional[str] = rest_field(name="redirectAction", visibility=["read"])
    """The Slack redirect action."""
    last_submission_id: Optional[str] = rest_field(name="lastSubmissionId", visibility=["read"])
    """The Sms auth token."""
    register_before_o_auth_flow: Optional[bool] = rest_field(
        name="registerBeforeOAuthFlow", visibility=["read", "create", "update", "delete", "query"]
    )
    """Whether to register the settings before OAuth validation is performed. Recommended to True."""
    is_validated: Optional[bool] = rest_field(name="IsValidated", visibility=["read"])
    """Whether this channel is validated for the bot."""
    signing_secret: Optional[str] = rest_field(
        name="signingSecret", visibility=["read", "create", "update", "delete", "query"]
    )
    """The Slack signing secret."""
    is_enabled: bool = rest_field(name="isEnabled", visibility=["read", "create", "update", "delete", "query"])
    """Whether this channel is enabled for the bot. Required."""

    @overload
    def __init__(
        self,
        *,
        is_enabled: bool,
        client_id: Optional[str] = None,
        client_secret: Optional[str] = None,
        verification_token: Optional[str] = None,
        scopes: Optional[str] = None,
        landing_page_url: Optional[str] = None,
        register_before_o_auth_flow: Optional[bool] = None,
        signing_secret: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SmsChannel(Channel, discriminator="SmsChannel"):
    """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: ~azure.mgmt.botservice.models.SmsChannelProperties
    :ivar channel_name: The channel name. Required. Default value is "SmsChannel".
    :vartype channel_name: str
    """

    properties: Optional["_models.SmsChannelProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The set of properties specific to Sms channel resource."""
    channel_name: Literal["SmsChannel"] = rest_discriminator(name="channelName", visibility=["read", "create", "update", "delete", "query"])  # type: ignore
    """The channel name. Required. Default value is \"SmsChannel\"."""

    @overload
    def __init__(
        self,
        *,
        etag: Optional[str] = None,
        location: Optional[str] = None,
        properties: Optional["_models.SmsChannelProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)
        self.channel_name = "SmsChannel"  # type: ignore


class SmsChannelProperties(_Model):
    """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: str = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The Sms phone. Required."""
    account_sid: str = rest_field(name="accountSID", visibility=["read", "create", "update", "delete", "query"])
    """The Sms account SID. Value only returned through POST to the action Channel List API, otherwise
     empty. Required."""
    auth_token: Optional[str] = rest_field(name="authToken", visibility=["read", "create", "update", "delete", "query"])
    """The Sms auth token. Value only returned through POST to the action Channel List API, otherwise
     empty."""
    is_validated: Optional[bool] = rest_field(
        name="isValidated", visibility=["read", "create", "update", "delete", "query"]
    )
    """Whether this channel is validated for the bot."""
    is_enabled: bool = rest_field(name="isEnabled", visibility=["read", "create", "update", "delete", "query"])
    """Whether this channel is enabled for the bot. Required."""

    @overload
    def __init__(
        self,
        *,
        phone: str,
        account_sid: str,
        is_enabled: bool,
        auth_token: Optional[str] = None,
        is_validated: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SystemData(_Model):
    """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: str or ~azure.mgmt.botservice.models.CreatedByType
    :ivar created_at: The timestamp of resource creation (UTC).
    :vartype created_at: ~datetime.datetime
    :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: str or ~azure.mgmt.botservice.models.CreatedByType
    :ivar last_modified_at: The timestamp of resource last modification (UTC).
    :vartype last_modified_at: ~datetime.datetime
    """

    created_by: Optional[str] = rest_field(name="createdBy", visibility=["read", "create", "update", "delete", "query"])
    """The identity that created the resource."""
    created_by_type: Optional[Union[str, "_models.CreatedByType"]] = rest_field(
        name="createdByType", visibility=["read", "create", "update", "delete", "query"]
    )
    """The type of identity that created the resource. Known values are: \"User\", \"Application\",
     \"ManagedIdentity\", and \"Key\"."""
    created_at: Optional[datetime.datetime] = rest_field(
        name="createdAt", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """The timestamp of resource creation (UTC)."""
    last_modified_by: Optional[str] = rest_field(
        name="lastModifiedBy", visibility=["read", "create", "update", "delete", "query"]
    )
    """The identity that last modified the resource."""
    last_modified_by_type: Optional[Union[str, "_models.CreatedByType"]] = rest_field(
        name="lastModifiedByType", visibility=["read", "create", "update", "delete", "query"]
    )
    """The type of identity that last modified the resource. Known values are: \"User\",
     \"Application\", \"ManagedIdentity\", and \"Key\"."""
    last_modified_at: Optional[datetime.datetime] = rest_field(
        name="lastModifiedAt", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """The timestamp of resource last modification (UTC)."""

    @overload
    def __init__(
        self,
        *,
        created_by: Optional[str] = None,
        created_by_type: Optional[Union[str, "_models.CreatedByType"]] = None,
        created_at: Optional[datetime.datetime] = None,
        last_modified_by: Optional[str] = None,
        last_modified_by_type: Optional[Union[str, "_models.CreatedByType"]] = None,
        last_modified_at: Optional[datetime.datetime] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class TelegramChannel(Channel, discriminator="TelegramChannel"):
    """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: ~azure.mgmt.botservice.models.TelegramChannelProperties
    :ivar channel_name: The channel name. Required. Default value is "TelegramChannel".
    :vartype channel_name: str
    """

    properties: Optional["_models.TelegramChannelProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The set of properties specific to Telegram channel resource."""
    channel_name: Literal["TelegramChannel"] = rest_discriminator(name="channelName", visibility=["read", "create", "update", "delete", "query"])  # type: ignore
    """The channel name. Required. Default value is \"TelegramChannel\"."""

    @overload
    def __init__(
        self,
        *,
        etag: Optional[str] = None,
        location: Optional[str] = None,
        properties: Optional["_models.TelegramChannelProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)
        self.channel_name = "TelegramChannel"  # type: ignore


class TelegramChannelProperties(_Model):
    """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
    """

    access_token: Optional[str] = rest_field(
        name="accessToken", visibility=["read", "create", "update", "delete", "query"]
    )
    """The Telegram access token. Value only returned through POST to the action Channel List API,
     otherwise empty."""
    is_validated: Optional[bool] = rest_field(
        name="isValidated", visibility=["read", "create", "update", "delete", "query"]
    )
    """Whether this channel is validated for the bot."""
    is_enabled: bool = rest_field(name="isEnabled", visibility=["read", "create", "update", "delete", "query"])
    """Whether this channel is enabled for the bot. Required."""

    @overload
    def __init__(
        self,
        *,
        is_enabled: bool,
        access_token: Optional[str] = None,
        is_validated: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class TelephonyChannel(Channel, discriminator="TelephonyChannel"):
    """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: ~azure.mgmt.botservice.models.TelephonyChannelProperties
    :ivar channel_name: The channel name. Required. Default value is "TelephonyChannel".
    :vartype channel_name: str
    """

    properties: Optional["_models.TelephonyChannelProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The set of properties specific to Telephony channel resource."""
    channel_name: Literal["TelephonyChannel"] = rest_discriminator(name="channelName", visibility=["read", "create", "update", "delete", "query"])  # type: ignore
    """The channel name. Required. Default value is \"TelephonyChannel\"."""

    @overload
    def __init__(
        self,
        *,
        etag: Optional[str] = None,
        location: Optional[str] = None,
        properties: Optional["_models.TelephonyChannelProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)
        self.channel_name = "TelephonyChannel"  # type: ignore


class TelephonyChannelProperties(_Model):
    """The parameters to provide for the Direct Line channel.

    :ivar phone_numbers: The list of Telephony phone numbers.
    :vartype phone_numbers: list[~azure.mgmt.botservice.models.TelephonyPhoneNumbers]
    :ivar api_configurations: The list of Telephony api configuration.
    :vartype api_configurations:
     list[~azure.mgmt.botservice.models.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
    """

    phone_numbers: Optional[list["_models.TelephonyPhoneNumbers"]] = rest_field(
        name="phoneNumbers", visibility=["read", "create", "update", "delete", "query"]
    )
    """The list of Telephony phone numbers."""
    api_configurations: Optional[list["_models.TelephonyChannelResourceApiConfiguration"]] = rest_field(
        name="apiConfigurations", visibility=["read", "create", "update", "delete", "query"]
    )
    """The list of Telephony api configuration."""
    cognitive_service_subscription_key: Optional[str] = rest_field(
        name="cognitiveServiceSubscriptionKey", visibility=["read", "create", "update", "delete", "query"]
    )
    """The extensionKey1."""
    cognitive_service_region: Optional[str] = rest_field(
        name="cognitiveServiceRegion", visibility=["read", "create", "update", "delete", "query"]
    )
    """The extensionKey2."""
    default_locale: Optional[str] = rest_field(
        name="defaultLocale", visibility=["read", "create", "update", "delete", "query"]
    )
    """The default locale of the channel."""
    premium_sku: Optional[str] = rest_field(
        name="premiumSKU", visibility=["read", "create", "update", "delete", "query"]
    )
    """The premium SKU applied to the channel."""
    is_enabled: Optional[bool] = rest_field(
        name="isEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """Whether the channel is enabled."""

    @overload
    def __init__(
        self,
        *,
        phone_numbers: Optional[list["_models.TelephonyPhoneNumbers"]] = None,
        api_configurations: Optional[list["_models.TelephonyChannelResourceApiConfiguration"]] = None,
        cognitive_service_subscription_key: Optional[str] = None,
        cognitive_service_region: Optional[str] = None,
        default_locale: Optional[str] = None,
        premium_sku: Optional[str] = None,
        is_enabled: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class TelephonyChannelResourceApiConfiguration(_Model):
    """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: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The id of config."""
    provider_name: Optional[str] = rest_field(
        name="providerName", visibility=["read", "create", "update", "delete", "query"]
    )
    """The provider name."""
    cognitive_service_subscription_key: Optional[str] = rest_field(
        name="cognitiveServiceSubscriptionKey", visibility=["read", "create", "update", "delete", "query"]
    )
    """The cognitive service subscription key."""
    cognitive_service_region: Optional[str] = rest_field(
        name="cognitiveServiceRegion", visibility=["read", "create", "update", "delete", "query"]
    )
    """The cognitive service region."""
    cognitive_service_resource_id: Optional[str] = rest_field(
        name="cognitiveServiceResourceId", visibility=["read", "create", "update", "delete", "query"]
    )
    """The cognitive service resourceId."""
    default_locale: Optional[str] = rest_field(
        name="defaultLocale", visibility=["read", "create", "update", "delete", "query"]
    )
    """The default locale."""

    @overload
    def __init__(
        self,
        *,
        id: Optional[str] = None,  # pylint: disable=redefined-builtin
        provider_name: Optional[str] = None,
        cognitive_service_subscription_key: Optional[str] = None,
        cognitive_service_region: Optional[str] = None,
        cognitive_service_resource_id: Optional[str] = None,
        default_locale: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class TelephonyPhoneNumbers(_Model):
    """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: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The element id."""
    phone_number: Optional[str] = rest_field(
        name="phoneNumber", visibility=["read", "create", "update", "delete", "query"]
    )
    """The phone number."""
    acs_endpoint: Optional[str] = rest_field(
        name="acsEndpoint", visibility=["read", "create", "update", "delete", "query"]
    )
    """The endpoint of ACS."""
    acs_secret: Optional[str] = rest_field(name="acsSecret", visibility=["read", "create", "update", "delete", "query"])
    """The secret of ACS."""
    acs_resource_id: Optional[str] = rest_field(
        name="acsResourceId", visibility=["read", "create", "update", "delete", "query"]
    )
    """The resource id of ACS."""
    cognitive_service_subscription_key: Optional[str] = rest_field(
        name="cognitiveServiceSubscriptionKey", visibility=["read", "create", "update", "delete", "query"]
    )
    """The subscription key of cognitive service."""
    cognitive_service_region: Optional[str] = rest_field(
        name="cognitiveServiceRegion", visibility=["read", "create", "update", "delete", "query"]
    )
    """The service region of cognitive service."""
    cognitive_service_resource_id: Optional[str] = rest_field(
        name="cognitiveServiceResourceId", visibility=["read", "create", "update", "delete", "query"]
    )
    """The resource id of cognitive service."""
    default_locale: Optional[str] = rest_field(
        name="defaultLocale", visibility=["read", "create", "update", "delete", "query"]
    )
    """The default locale of the phone number."""
    offer_type: Optional[str] = rest_field(name="offerType", visibility=["read", "create", "update", "delete", "query"])
    """Optional Property that will determine the offering type of the phone."""

    @overload
    def __init__(
        self,
        *,
        id: Optional[str] = None,  # pylint: disable=redefined-builtin
        phone_number: Optional[str] = None,
        acs_endpoint: Optional[str] = None,
        acs_secret: Optional[str] = None,
        acs_resource_id: Optional[str] = None,
        cognitive_service_subscription_key: Optional[str] = None,
        cognitive_service_region: Optional[str] = None,
        cognitive_service_resource_id: Optional[str] = None,
        default_locale: Optional[str] = None,
        offer_type: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class WebChatChannel(Channel, discriminator="WebChatChannel"):
    """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: ~azure.mgmt.botservice.models.WebChatChannelProperties
    :ivar channel_name: The channel name. Required. Default value is "WebChatChannel".
    :vartype channel_name: str
    """

    properties: Optional["_models.WebChatChannelProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The set of properties specific to Web Chat channel resource."""
    channel_name: Literal["WebChatChannel"] = rest_discriminator(name="channelName", visibility=["read", "create", "update", "delete", "query"])  # type: ignore
    """The channel name. Required. Default value is \"WebChatChannel\"."""

    @overload
    def __init__(
        self,
        *,
        etag: Optional[str] = None,
        location: Optional[str] = None,
        properties: Optional["_models.WebChatChannelProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)
        self.channel_name = "WebChatChannel"  # type: ignore


class WebChatChannelProperties(_Model):
    """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[~azure.mgmt.botservice.models.WebChatSite]
    """

    web_chat_embed_code: Optional[str] = rest_field(name="webChatEmbedCode", visibility=["read"])
    """Web chat control embed code."""
    sites: Optional[list["_models.WebChatSite"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The list of Web Chat sites."""

    @overload
    def __init__(
        self,
        *,
        sites: Optional[list["_models.WebChatSite"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


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
    """

    @overload
    def __init__(
        self,
        *,
        site_name: str,
        is_enabled: bool,
        tenant_id: Optional[str] = None,
        is_endpoint_parameters_enabled: Optional[bool] = None,
        is_detailed_logging_enabled: Optional[bool] = None,
        is_block_user_upload_enabled: Optional[bool] = None,
        is_no_storage_enabled: Optional[bool] = None,
        e_tag: Optional[str] = None,
        app_id: Optional[str] = None,
        is_v1_enabled: Optional[bool] = None,
        is_v3_enabled: Optional[bool] = None,
        is_secure_site_enabled: Optional[bool] = None,
        trusted_origins: Optional[list[str]] = None,
        is_web_chat_speech_enabled: Optional[bool] = None,
        is_webchat_preview_enabled: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)
