diff --git a/sdk/communication/azure-communication-chat/README.md b/sdk/communication/azure-communication-chat/README.md index 5c1d63426700..26e1d27c84ee 100644 --- a/sdk/communication/azure-communication-chat/README.md +++ b/sdk/communication/azure-communication-chat/README.md @@ -240,7 +240,7 @@ def decide_to_retry(error, **kwargs): return True retry = [thread_participant for thread_participant, error in create_chat_thread_result.errors if decide_to_retry(error)] -if len(retry) > 0: +if retry: chat_thread_client.add_participants(retry) ``` @@ -263,10 +263,8 @@ An iterator of `[ChatThreadItem]` is the response returned from listing threads ```python from datetime import datetime, timedelta -import pytz start_time = datetime.utcnow() - timedelta(days=2) -start_time = start_time.replace(tzinfo=pytz.utc) chat_threads = chat_client.list_chat_threads(results_per_page=5, start_time=start_time) for chat_thread_item_page in chat_threads.by_page(): @@ -358,10 +356,8 @@ An iterator of `[ChatMessage]` is the response returned from listing messages ```Python from datetime import datetime, timedelta -import pytz start_time = datetime.utcnow() - timedelta(days=1) -start_time = start_time.replace(tzinfo=pytz.utc) chat_messages = chat_thread_client.list_messages(results_per_page=1, start_time=start_time) for chat_message_page in chat_messages.by_page(): @@ -464,7 +460,8 @@ def decide_to_retry(error, **kwargs): # verify if all users has been successfully added or not # in case of partial failures, you can retry to add all the failed participants retry = [p for p, e in response if decide_to_retry(e)] -chat_thread_client.add_participants(retry) +if retry: + chat_thread_client.add_participants(retry) ``` ### Remove thread participant diff --git a/sdk/communication/azure-communication-chat/azure/communication/chat/_chat_client.py b/sdk/communication/azure-communication-chat/azure/communication/chat/_chat_client.py index e367095d84d9..a983a6457cb2 100644 --- a/sdk/communication/azure-communication-chat/azure/communication/chat/_chat_client.py +++ b/sdk/communication/azure-communication-chat/azure/communication/chat/_chat_client.py @@ -39,7 +39,7 @@ class ChatClient(object): """A client to interact with the AzureCommunicationService Chat gateway. This client provides operations to create chat thread, delete chat thread, - get chat thread by id, list chat threads, create chat thread client. + get chat thread client by thread id, list chat threads. :param str endpoint: The endpoint of the Azure Communication resource. @@ -108,7 +108,7 @@ def get_chat_thread_client( :end-before: [END get_chat_thread_client] :language: python :dedent: 8 - :caption: Creating the ChatThreadClient from an existing chat thread id. + :caption: Retrieving the ChatThreadClient from an existing chat thread id. """ if not thread_id: raise ValueError("thread_id cannot be None.") @@ -133,9 +133,9 @@ def create_chat_thread( :keyword thread_participants: Optional. Participants to be added to the thread. :paramtype thread_participants: List[~azure.communication.chat.ChatThreadParticipant] :keyword idempotency_token: Optional. If specified, the client directs that the request is - repeatable; that is, that the client can make the request multiple times with the same - Repeatability-Request-ID and get back an appropriate response without the server executing the - request multiple times. The value of the Repeatability-Request-ID is an opaque string + repeatable; that is, the client can make the request multiple times with the same + Idempotency_Token and get back an appropriate response without the server executing the + request multiple times. The value of the Idempotency_Token is an opaque string representing a client-generated, globally unique for all time, identifier for the request. If not specified, a new unique id would be generated. :paramtype idempotency_token: str @@ -150,7 +150,7 @@ def create_chat_thread( :end-before: [END create_thread] :language: python :dedent: 8 - :caption: Creating ChatThread by creating a new chat thread. + :caption: Creating a new chat thread. """ if not topic: raise ValueError("topic cannot be None.") @@ -211,7 +211,7 @@ def list_chat_threads( :end-before: [END list_threads] :language: python :dedent: 8 - :caption: listing chat threads. + :caption: Listing chat threads. """ results_per_page = kwargs.pop("results_per_page", None) start_time = kwargs.pop("start_time", None) @@ -228,7 +228,7 @@ def delete_chat_thread( **kwargs # type: Any ): # type: (...) -> None - """Deletes a thread. + """Deletes a chat thread. :param thread_id: Required. Thread id to delete. :type thread_id: str @@ -243,7 +243,7 @@ def delete_chat_thread( :end-before: [END delete_thread] :language: python :dedent: 8 - :caption: deleting chat thread. + :caption: Deleting a chat thread. """ if not thread_id: raise ValueError("thread_id cannot be None.") diff --git a/sdk/communication/azure-communication-chat/azure/communication/chat/_chat_thread_client.py b/sdk/communication/azure-communication-chat/azure/communication/chat/_chat_thread_client.py index e69dc4d7cc9a..2d314f4baa2c 100644 --- a/sdk/communication/azure-communication-chat/azure/communication/chat/_chat_thread_client.py +++ b/sdk/communication/azure-communication-chat/azure/communication/chat/_chat_thread_client.py @@ -47,9 +47,9 @@ class ChatThreadClient(object): """A client to interact with the AzureCommunicationService Chat gateway. - Instances of this class is normally created by ChatClient.create_chat_thread() + Instances of this class is normally retrieved by ChatClient.get_chat_thread_client() - This client provides operations to add participant to chat thread, remove participant from + This client provides operations to add participant(s) to chat thread, remove participant from chat thread, send message, delete message, update message, send typing notifications, send and list read receipt @@ -138,7 +138,7 @@ def get_properties( :end-before: [END get_thread] :language: python :dedent: 8 - :caption: Getting a chat thread by thread id. + :caption: Retrieving chat thread properties by chat thread id. """ chat_thread = self._client.chat_thread.get_chat_thread_properties(self._thread_id, **kwargs) @@ -154,7 +154,7 @@ def update_topic( # type: (...) -> None """Updates a thread's properties. - :param topic: Thread topic. If topic is not specified, the update will succeeded but + :param topic: Thread topic. If topic is not specified, the update will succeed but chat thread properties will not be changed. :type topic: str :return: None @@ -184,7 +184,7 @@ def send_read_receipt( **kwargs # type: Any ): # type: (...) -> None - """Posts a read receipt event to a thread, on behalf of a user. + """Posts a read receipt event to a chat thread, on behalf of a user. :param message_id: Required. Id of the latest message read by current user. :type message_id: str @@ -262,7 +262,7 @@ def send_typing_notification( :end-before: [END send_typing_notification] :language: python :dedent: 8 - :caption: Sending typing notification. + :caption: Send typing notification. """ return self._client.chat_thread.send_typing_notification(self._thread_id, **kwargs) @@ -277,11 +277,11 @@ def send_message( :param content: Required. Chat message content. :type content: str - :keyword chat_message_type: The chat message type. Possible values include: "text", "html". - Default: ChatMessageType.TEXT + :keyword chat_message_type: + The chat message type. Possible values include: "text", "html". Default: ChatMessageType.TEXT :paramtype chat_message_type: Union[str, ~azure.communication.chat.ChatMessageType] :keyword str sender_display_name: The display name of the message sender. This property is used to - populate sender name for push notifications. + populate sender name for push notifications. :return: SendChatMessageResult :rtype: ~azure.communication.chat.SendChatMessageResult :raises: ~azure.core.exceptions.HttpResponseError, ValueError @@ -348,7 +348,7 @@ def get_message( :end-before: [END get_message] :language: python :dedent: 8 - :caption: Getting a message by message id. + :caption: Retrieving a message by message id. """ if not message_id: raise ValueError("message_id cannot be None.") @@ -416,7 +416,7 @@ def update_message( :end-before: [END update_message] :language: python :dedent: 8 - :caption: Updating a sent messages. + :caption: Updating an already sent message. """ if not message_id: raise ValueError("message_id cannot be None.") @@ -451,7 +451,7 @@ def delete_message( :end-before: [END delete_message] :language: python :dedent: 8 - :caption: Deleting a messages. + :caption: Deleting a message. """ if not message_id: raise ValueError("message_id cannot be None.") diff --git a/sdk/communication/azure-communication-chat/azure/communication/chat/aio/_chat_client_async.py b/sdk/communication/azure-communication-chat/azure/communication/chat/aio/_chat_client_async.py index 7b9fc6d4a2a2..303372d2aab0 100644 --- a/sdk/communication/azure-communication-chat/azure/communication/chat/aio/_chat_client_async.py +++ b/sdk/communication/azure-communication-chat/azure/communication/chat/aio/_chat_client_async.py @@ -43,8 +43,8 @@ class ChatClient(object): """A client to interact with the AzureCommunicationService Chat gateway. - This client provides operations to create a chat thread, delete a chat thread, - get chat thread by id, list chat threads. + This client provides operations to create chat thread, delete chat thread, + get chat thread client by thread id, list chat threads. :param str endpoint: The endpoint of the Azure Communication resource. @@ -113,7 +113,7 @@ def get_chat_thread_client( :end-before: [END get_chat_thread_client] :language: python :dedent: 8 - :caption: Creating the ChatThreadClient from an existing chat thread id. + :caption: Retrieving the ChatThreadClient from an existing chat thread id. """ if not thread_id: raise ValueError("thread_id cannot be None.") @@ -140,9 +140,9 @@ async def create_chat_thread( :keyword thread_participants: Optional. Participants to be added to the thread. :paramtype thread_participants: List[~azure.communication.chat.ChatThreadParticipant] :keyword idempotency_token: Optional. If specified, the client directs that the request is - repeatable; that is, that the client can make the request multiple times with the same - Repeatability-Request-ID and get back an appropriate response without the server executing the - request multiple times. The value of the Repeatability-Request-ID is an opaque string + repeatable; that is, the client can make the request multiple times with the same + Idempotency_Token and get back an appropriate response without the server executing the + request multiple times. The value of the Idempotency_Token is an opaque string representing a client-generated, globally unique for all time, identifier for the request. If not specified, a new unique id would be generated. :paramtype idempotency_token: str @@ -157,7 +157,7 @@ async def create_chat_thread( :end-before: [END create_thread] :language: python :dedent: 12 - :caption: Creating ChatThreadClient by creating a new chat thread. + :caption: Creating a new chat thread. """ if not topic: raise ValueError("topic cannot be None.") @@ -218,7 +218,7 @@ def list_chat_threads( :end-before: [END list_threads] :language: python :dedent: 12 - :caption: listing chat threads. + :caption: Listing chat threads. """ results_per_page = kwargs.pop("results_per_page", None) start_time = kwargs.pop("start_time", None) @@ -234,7 +234,7 @@ async def delete_chat_thread( thread_id: str, **kwargs ) -> None: - """Deletes a thread. + """Deletes a chat thread. :param thread_id: Required. Thread id to delete. :type thread_id: str @@ -249,7 +249,7 @@ async def delete_chat_thread( :end-before: [END delete_thread] :language: python :dedent: 12 - :caption: deleting chat thread. + :caption: Deleting a chat thread. """ if not thread_id: raise ValueError("thread_id cannot be None.") diff --git a/sdk/communication/azure-communication-chat/azure/communication/chat/aio/_chat_thread_client_async.py b/sdk/communication/azure-communication-chat/azure/communication/chat/aio/_chat_thread_client_async.py index f2388f972185..1703ef09341d 100644 --- a/sdk/communication/azure-communication-chat/azure/communication/chat/aio/_chat_thread_client_async.py +++ b/sdk/communication/azure-communication-chat/azure/communication/chat/aio/_chat_thread_client_async.py @@ -47,9 +47,9 @@ class ChatThreadClient(object): """A client to interact with the AzureCommunicationService Chat gateway. - Instances of this class is normally created by ChatClient.create_chat_thread() + Instances of this class is normally retrieved by ChatClient.get_chat_thread_client() - This client provides operations to add participant to chat thread, remove participant from + This client provides operations to add participant(s) to chat thread, remove participant from chat thread, send message, delete message, update message, send typing notifications, send and list read receipt @@ -136,7 +136,7 @@ async def get_properties( :end-before: [END get_thread] :language: python :dedent: 12 - :caption: Getting a chat thread by thread id. + :caption: Retrieving chat thread properties by chat thread id. """ chat_thread = await self._client.chat_thread.get_chat_thread_properties(self._thread_id, **kwargs) @@ -151,7 +151,7 @@ async def update_topic( ) -> None: """Updates a thread's properties. - :param topic: Thread topic. If topic is not specified, the update will succeeded but + :param topic: Thread topic. If topic is not specified, the update will succeed but chat thread properties will not be changed. :type topic: str :return: None @@ -180,7 +180,7 @@ async def send_read_receipt( message_id: str, **kwargs ) -> None: - """Posts a read receipt event to a thread, on behalf of a user. + """Posts a read receipt event to a chat thread, on behalf of a user. :param message_id: Required. Id of the latest message read by current user. :type message_id: str @@ -256,7 +256,7 @@ async def send_typing_notification( :end-before: [END send_typing_notification] :language: python :dedent: 12 - :caption: Sending typing notification. + :caption: Send typing notification. """ return await self._client.chat_thread.send_typing_notification(self._thread_id, **kwargs) @@ -270,11 +270,11 @@ async def send_message( :param content: Required. Chat message content. :type content: str - :keyword chat_message_type: The chat message type. Possible values include: "text", "html". - Default: ChatMessageType.TEXT + :keyword chat_message_type: + The chat message type. Possible values include: "text", "html". Default: ChatMessageType.TEXT :paramtype chat_message_type: Union[str, ~azure.communication.chat.ChatMessageType] :keyword str sender_display_name: The display name of the message sender. This property is used to - populate sender name for push notifications. + populate sender name for push notifications. :return: SendChatMessageResult :rtype: ~azure.communication.chat.SendChatMessageResult :raises: ~azure.core.exceptions.HttpResponseError, ValueError @@ -340,7 +340,7 @@ async def get_message( :end-before: [END get_message] :language: python :dedent: 12 - :caption: Getting a message by message id. + :caption: Retrieving a message by message id. """ if not message_id: raise ValueError("message_id cannot be None.") @@ -404,7 +404,7 @@ async def update_message( :end-before: [END update_message] :language: python :dedent: 12 - :caption: Updating a sent messages. + :caption: Updating an already sent message. """ if not message_id: raise ValueError("message_id cannot be None.") @@ -438,7 +438,7 @@ async def delete_message( :end-before: [END delete_message] :language: python :dedent: 12 - :caption: Deleting a messages. + :caption: Deleting a message. """ if not message_id: raise ValueError("message_id cannot be None.") diff --git a/sdk/communication/azure-communication-chat/samples/chat_client_sample.py b/sdk/communication/azure-communication-chat/samples/chat_client_sample.py index a4cbd1a1d26f..b3817c9afa0a 100644 --- a/sdk/communication/azure-communication-chat/samples/chat_client_sample.py +++ b/sdk/communication/azure-communication-chat/samples/chat_client_sample.py @@ -49,6 +49,7 @@ def create_chat_client(self): # [START create_chat_client] from azure.communication.chat import ChatClient, CommunicationTokenCredential + # set `endpoint` to an existing ACS endpoint chat_client = ChatClient(endpoint, CommunicationTokenCredential(token)) # [END create_chat_client] @@ -67,6 +68,7 @@ def create_thread(self): CommunicationTokenCredential ) + # set `endpoint` to an existing ACS endpoint chat_client = ChatClient(endpoint, CommunicationTokenCredential(token)) topic = "test topic" @@ -99,7 +101,10 @@ def get_chat_thread_client(self): # [START get_chat_thread_client] from azure.communication.chat import ChatClient, CommunicationTokenCredential + # set `endpoint` to an existing ACS endpoint chat_client = ChatClient(endpoint, CommunicationTokenCredential(token)) + + # set `thread_id` to an existing chat thread id chat_thread_client = chat_client.get_chat_thread_client(thread_id) # [END get_chat_thread_client] @@ -114,6 +119,7 @@ def list_threads(self): from azure.communication.chat import ChatClient, CommunicationTokenCredential from datetime import datetime, timedelta + # set `endpoint` to an existing ACS endpoint chat_client = ChatClient(endpoint, CommunicationTokenCredential(token)) start_time = datetime.utcnow() - timedelta(days=2) chat_threads = chat_client.list_chat_threads(results_per_page=5, start_time=start_time) @@ -131,7 +137,10 @@ def delete_thread(self): # [START delete_thread] from azure.communication.chat import ChatClient, CommunicationTokenCredential + # set `endpoint` to an existing ACS endpoint chat_client = ChatClient(endpoint, CommunicationTokenCredential(token)) + + # set `thread_id` to an existing chat thread id chat_client.delete_chat_thread(thread_id) # [END delete_thread] diff --git a/sdk/communication/azure-communication-chat/samples/chat_client_sample_async.py b/sdk/communication/azure-communication-chat/samples/chat_client_sample_async.py index 9121cff29f2d..fdb0de856fe3 100644 --- a/sdk/communication/azure-communication-chat/samples/chat_client_sample_async.py +++ b/sdk/communication/azure-communication-chat/samples/chat_client_sample_async.py @@ -51,6 +51,7 @@ def create_chat_client(self): # [START create_chat_client] from azure.communication.chat.aio import ChatClient, CommunicationTokenCredential + # set `endpoint` to an existing ACS endpoint chat_client = ChatClient(endpoint, CommunicationTokenCredential(token)) # [END create_chat_client] print("chat_client created") @@ -65,6 +66,7 @@ async def create_thread_async(self): from azure.communication.chat.aio import ChatClient, CommunicationTokenCredential from azure.communication.chat import ChatThreadParticipant + # set `endpoint` to an existing ACS endpoint chat_client = ChatClient(endpoint, CommunicationTokenCredential(token)) async with chat_client: @@ -96,7 +98,10 @@ def get_chat_thread_client(self): # [START get_chat_thread_client] from azure.communication.chat.aio import ChatClient, CommunicationTokenCredential + # set `endpoint` to an existing ACS endpoint chat_client = ChatClient(endpoint, CommunicationTokenCredential(token)) + + # set `thread_id` to an existing chat thread id chat_thread_client = chat_client.get_chat_thread_client(thread_id) # [END get_chat_thread_client] @@ -111,6 +116,7 @@ async def list_threads_async(self): # [START list_threads] from azure.communication.chat.aio import ChatClient, CommunicationTokenCredential + # set `endpoint` to an existing ACS endpoint chat_client = ChatClient(endpoint, CommunicationTokenCredential(token)) async with chat_client: @@ -131,10 +137,11 @@ async def delete_thread_async(self): # [START delete_thread] from azure.communication.chat.aio import ChatClient, CommunicationTokenCredential + # set `endpoint` to an existing ACS endpoint chat_client = ChatClient(endpoint, CommunicationTokenCredential(token)) async with chat_client: - - await chat_client.delete_chat_thread(self._thread_id) + # set `thread_id` to an existing chat thread id + await chat_client.delete_chat_thread(thread_id) # [END delete_thread] print("delete_thread succeeded") diff --git a/sdk/communication/azure-communication-chat/samples/chat_thread_client_sample.py b/sdk/communication/azure-communication-chat/samples/chat_thread_client_sample.py index 700fa22e6d6d..2face306585c 100644 --- a/sdk/communication/azure-communication-chat/samples/chat_thread_client_sample.py +++ b/sdk/communication/azure-communication-chat/samples/chat_thread_client_sample.py @@ -87,6 +87,7 @@ def get_chat_thread_properties(self): # [START get_thread] from azure.communication.chat import ChatClient, CommunicationTokenCredential + # set `endpoint` to an existing ACS endpoint chat_client = ChatClient(endpoint, CommunicationTokenCredential(token)) chat_thread_client = chat_client.get_chat_thread_client(thread_id) chat_thread_properties = chat_thread_client.get_properties() @@ -298,7 +299,7 @@ def decide_to_retry(error): # list of participants which were unsuccessful to be added to chat thread retry = [p for p, e in result if decide_to_retry(e)] - if len(retry) > 0: + if retry: chat_thread_client.add_participants(retry) # [END add_participants] print("add_participants_w_check succeeded") @@ -310,7 +311,6 @@ def remove_participant(self): chat_client = self._chat_client identity_client = self.identity_client - # [START remove_participant] from azure.communication.chat import ChatThreadParticipant from azure.communication.identity import CommunicationUserIdentifier from datetime import datetime @@ -336,6 +336,7 @@ def remove_participant(self): thread_participants = [participant1, participant2] chat_thread_client.add_participants(thread_participants) + # [START remove_participant] # Option 1 : Iterate through all participants, find and delete Fred Flinstone chat_thread_participants = chat_thread_client.list_participants() @@ -388,7 +389,6 @@ def clean_up(self): sample.send_read_receipt() sample.list_read_receipts() sample.delete_message() - sample.add_participant_w_check() sample.add_participants_w_check() sample.list_participants() sample.remove_participant() diff --git a/sdk/communication/azure-communication-chat/samples/chat_thread_client_sample_async.py b/sdk/communication/azure-communication-chat/samples/chat_thread_client_sample_async.py index 699513ec8a91..d733e7bcc5f0 100644 --- a/sdk/communication/azure-communication-chat/samples/chat_thread_client_sample_async.py +++ b/sdk/communication/azure-communication-chat/samples/chat_thread_client_sample_async.py @@ -52,18 +52,20 @@ class ChatThreadClientSamplesAsync(object): async def create_chat_thread_client_async(self): token = self.token + endpoint = self.endpoint + user = self.user # [START create_chat_thread_client] from datetime import datetime from azure.communication.chat.aio import ChatClient, CommunicationTokenCredential from azure.communication.chat import ChatThreadParticipant from azure.communication.identity import CommunicationUserIdentifier - - chat_client = ChatClient(self.endpoint, CommunicationTokenCredential(token)) + # set `endpoint` to an existing ACS endpoint + chat_client = ChatClient(endpoint, CommunicationTokenCredential(token)) async with chat_client: topic = "test topic" participants = [ChatThreadParticipant( - user=self.user, + user=user, display_name='name', share_history_time=datetime.utcnow() )] @@ -78,10 +80,12 @@ async def create_chat_thread_client_async(self): async def get_chat_thread_properties_async(self): thread_id = self._thread_id token = self.token + endpoint = self.endpoint # [START get_thread] from azure.communication.chat.aio import ChatClient, CommunicationTokenCredential - chat_client = ChatClient(self.endpoint, CommunicationTokenCredential(token)) + # set `endpoint` to an existing ACS endpoint + chat_client = ChatClient(endpoint, CommunicationTokenCredential(token)) async with chat_client: chat_thread_client = chat_client.get_chat_thread_client(thread_id) @@ -296,8 +300,8 @@ def decide_to_retry(error): # list of participants which were unsuccessful to be added to chat thread retry = [p for p, e in result if decide_to_retry(e)] - if len(retry) > 0: - chat_thread_client.add_participants(retry) + if retry: + await chat_thread_client.add_participants(retry) # [END add_participants] print("add_participants_w_check_async succeeded") @@ -306,7 +310,7 @@ async def remove_participant_async(self): thread_id = self._thread_id chat_client = self._chat_client identity_client = self.identity_client - # [START remove_participant] + from azure.communication.chat import ChatThreadParticipant from azure.communication.identity import CommunicationUserIdentifier from datetime import datetime @@ -333,7 +337,7 @@ async def remove_participant_async(self): thread_participants = [participant1, participant2] await chat_thread_client.add_participants(thread_participants) - + # [START remove_participant] # Option 1 : Iterate through all participants, find and delete Fred Flinstone chat_thread_participants = chat_thread_client.list_participants() @@ -350,7 +354,7 @@ async def remove_participant_async(self): unique_identifier = user2.identifier # in real scenario the identifier would need to be retrieved from elsewhere await chat_thread_client.remove_participant(CommunicationUserIdentifier(unique_identifier)) print("Wilma has been removed from the thread...") - # [END remove_participant] + # [END remove_participant] # clean up temporary users self.identity_client.delete_user(user1) @@ -386,7 +390,6 @@ async def main(): await sample.send_read_receipt_async() await sample.list_read_receipts_async() await sample.delete_message_async() - await sample.add_participant_w_check_async() await sample.add_participants_w_check_async() await sample.list_participants_async() await sample.remove_participant_async() diff --git a/sdk/communication/azure-communication-chat/swagger/SWAGGER.md b/sdk/communication/azure-communication-chat/swagger/SWAGGER.md index c8504a7c8390..307966a8d6b7 100644 --- a/sdk/communication/azure-communication-chat/swagger/SWAGGER.md +++ b/sdk/communication/azure-communication-chat/swagger/SWAGGER.md @@ -15,7 +15,7 @@ autorest SWAGGER.md ### Settings ``` yaml -input-file: https://int.chatgateway.trafficmanager.net/swagger/2021-03-07/swagger.json +input-file: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/master/specification/communication/data-plane/Microsoft.CommunicationServicesChat/stable/2021-03-07/communicationserviceschat.json output-folder: ../azure/communication/chat/_generated namespace: azure.communication.chat no-namespace-folders: true