Klientbibliotek för Azure Communication Chat Package för Python – version 1.2.0
Det här paketet innehåller en Python SDK för Azure Communication Services för chatt. Läs mer om Azure Communication Services här
Källkod | Paket (Pypi) | Paket (Conda) | API-referensdokumentation | Produktdokumentation
Friskrivning
Stöd för Azure SDK Python-paket för Python 2.7 har upphört den 1 januari 2022. Mer information och frågor finns i https://github.com/Azure/azure-sdk-for-python/issues/20691
Komma igång
Förutsättningar
- Python 3.7 eller senare krävs för att använda det här paketet.
- En distribuerad Communication Services-resurs. Du kan använda Azure-portalen eller Azure PowerShell för att konfigurera den.
Installera paketet
Installera Azure Communication Service Chat SDK.
pip install --pre azure-communication-chat
Användaråtkomsttoken
Med användaråtkomsttoken kan du skapa klientprogram som autentiseras direkt till Azure Communication Services. Du kan generera dessa token med modulen azure.communication.identity och sedan använda dem för att initiera Communication Services-SDK:erna. Exempel på användning av azure.communication.identity:
pip install azure-communication-identity
from azure.communication.identity import CommunicationIdentityClient
identity_client = CommunicationIdentityClient.from_connection_string("<connection string of your Communication service>")
user = identity_client.create_user()
tokenresponse = identity_client.get_token(user, scopes=["chat"])
token = tokenresponse.token
Ovanstående user
skapas senare eftersom användaren ska läggas till som deltagare i en ny chatttråd när du skapar den med den här token. Det beror på att initieraren för create-begäran måste finnas i listan över deltagarna i chatttråden.
Skapa chattklienten
På så sätt kan du skapa, hämta, lista eller ta bort chatttrådar.
from azure.communication.chat import ChatClient, CommunicationTokenCredential
# Your unique Azure Communication service endpoint
endpoint = "https://<RESOURCE_NAME>.communcationservices.azure.com"
chat_client = ChatClient(endpoint, CommunicationTokenCredential(token))
Skapa chatttrådsklient
Med ChatThreadClient kan du utföra åtgärder som är specifika för en chatttråd, till exempel skicka meddelande, hämta meddelande, uppdatera chatttrådsämnet, lägga till deltagare i chatttråd osv.
Du kan hämta den genom att skapa en ny chatttråd med Hjälp av ChatClient:
create_chat_thread_result = chat_client.create_chat_thread(topic)
chat_thread_client = chat_client.get_chat_thread_client(create_chat_thread_result.chat_thread.id)
Dessutom kan klienten också dirigera så att begäran kan upprepas. om klienten gör begäran flera gånger med samma Idempotency-Token och den får ett lämpligt svar igen utan att servern kör begäran flera gånger. Värdet för Idempotency-Token är en täckande sträng som representerar en klientgenererad, globalt unik för hela tiden, identifierare för begäran.
create_chat_thread_result = chat_client.create_chat_thread(
topic,
thread_participants=thread_participants,
idempotency_token=idempotency_token
)
chat_thread_client = chat_client.get_chat_thread_client(create_chat_thread_result.chat_thread.id)
Om du har skapat en chatttråd tidigare och har dess thread_id kan du också skapa den genom att:
chat_thread_client = chat_client.get_chat_thread_client(thread_id) # thread_id is the id of an existing chat thread
Viktiga begrepp
En chattkonversation representeras av en chatttråd. Varje användare i tråden kallas för en tråddeltagare. Tråddeltagare kan chatta med varandra privat i en 1:1-chatt eller i en 1:N-gruppchatt. Användarna får också nästan realtidsuppdateringar för när andra skriver och när de har läst meddelandena.
När du har initierat en ChatClient
klass kan du utföra följande chattåtgärder:
Skapa, hämta, uppdatera och ta bort trådar
Utföra CRD-åtgärder (Create-Read-Delete) på trådar
create_chat_thread(topic, **kwargs)
list_chat_threads(**kwargs)
delete_chat_thread(thread_id, **kwargs)
När du har initierat en ChatThreadClient
klass kan du utföra följande chattåtgärder:
Uppdatera tråd
Utföra uppdateringsåtgärd i trådavsnittet
update_topic(topic, **kwargs)
Hämta egenskaper för chatttråd
get_properties(**kwargs)
Skicka, hämta, uppdatera och ta bort meddelanden
Utföra CRUD-åtgärder (Create-Read-Update-Delete) på meddelanden
send_message(content, **kwargs)
get_message(message_id, **kwargs)
list_messages(**kwargs)
update_message(message_id, content, **kwargs)
delete_message(message_id, **kwargs)
Hämta, lägga till och ta bort deltagare
Utföra CRD-åtgärder (Create-Read-Delete) på tråddeltagare
list_participants(**kwargs)
add_participants(thread_participants, **kwargs)
remove_participant(participant_identifier, **kwargs)
Skicka inmatningsmeddelande
Meddela tjänsten om att skriva meddelanden
send_typing_notification(**kwargs)
Skicka och hämta läskvitto
Meddela tjänsten att ett meddelande läse och hämta en lista över lästa meddelanden.
send_read_receipt(message_id, **kwargs)
list_read_receipts(**kwargs)
Exempel
Följande avsnitt innehåller flera kodfragment som täcker några av de vanligaste uppgifterna, inklusive:
Trådåtgärder
Skapa en tråd
create_chat_thread
Använd metoden för att skapa en chatttråd.
- Använd
topic
, obligatoriskt, för att ge ett trådämne; - Använd
thread_participants
, valfritt, för att ange en lista över somChatParticipant
ska läggas till i tråden.user
, obligatoriskt ärCommunicationUserIdentifier
det du skapade av CommunicationIdentityClient.create_user() från användaråtkomsttoken
display_name
, valfritt, är visningsnamnet för tråddeltagaren.share_history_time
, valfritt, tid från vilken chatthistoriken delas med deltagaren.
- Använd
idempotency_token
, valfritt, för att ange den unika identifieraren för begäran.
CreateChatThreadResult
är resultatet som returneras från skapandet av en tråd, kan du använda den för att hämta chatttråden id
som skapades. Detta id
kan sedan användas för att hämta ett ChatThreadClient
objekt med hjälp av get_chat_thread_client
metoden . ChatThreadClient
kan användas för att utföra andra chattåtgärder i den här chatttråden.
# Without idempotency_token and thread_participants
topic = "test topic"
create_chat_thread_result = chat_client.create_chat_thread(topic)
chat_thread_client = chat_client.get_chat_thread_client(create_chat_thread_result.chat_thread.id)
# With idempotency_token and thread_participants
from azure.communication.identity import CommunicationIdentityClient
from azure.communication.chat import ChatParticipant, ChatClient, CommunicationTokenCredential
import uuid
from datetime import datetime
# create an user
identity_client = CommunicationIdentityClient.from_connection_string('<connection_string>')
user = identity_client.create_user()
# user access tokens
tokenresponse = identity_client.get_token(user, scopes=["chat"])
token = tokenresponse.token
## OR pass existing user
# from azure.communication.chat import CommunicationUserIdentifier
# user_id = 'some_user_id'
# user = CommunicationUserIdentifier(user_id)
# create the chat_client
endpoint = "https://<RESOURCE_NAME>.communcationservices.azure.com"
chat_client = ChatClient(endpoint, CommunicationTokenCredential(token))
# modify function to implement customer logic
def get_unique_identifier_for_request(**kwargs):
res = uuid.uuid4()
return res
topic = "test topic"
thread_participants = [ChatParticipant(
identifier=user,
display_name='name',
share_history_time=datetime.utcnow()
)]
# obtains idempotency_token using some customer logic
idempotency_token = get_unique_identifier_for_request()
create_chat_thread_result = chat_client.create_chat_thread(
topic,
thread_participants=thread_participants,
idempotency_token=idempotency_token)
thread_id = create_chat_thread_result.chat_thread.id
# fetch ChatThreadClient
chat_thread_client = chat_client.get_chat_thread_client(create_chat_thread_result.chat_thread.id)
# Additionally, you can also check if all participants were successfully added or not
# and subsequently retry adding the failed participants again
def decide_to_retry(error, **kwargs):
"""
Insert some custom logic to decide if retry is applicable based on error
"""
return True
retry = [thread_participant for thread_participant, error in create_chat_thread_result.errors if decide_to_retry(error)]
if retry:
chat_thread_client.add_participants(retry)
Hämta en tråd
Använd-metoden get_properties
hämtar en ChatThreadProperties
från tjänsten, thread_id
är trådens unika ID.
chat_thread_properties = chat_thread_client.get_properties()
Lista chatttrådar
Använd-metoden list_chat_threads
hämtar listan över skapade chatttrådar
- Använd
results_per_page
, valfritt, Det maximala antalet meddelanden som ska returneras per sida. - Använd
start_time
, valfritt, Starttiden där intervallfrågan.
En iterator för [ChatThreadItem]
är svaret som returneras från listningstrådar
from azure.communication.chat import ChatClient, CommunicationTokenCredential
from datetime import datetime, timedelta
token = "<token>"
endpoint = "https://<RESOURCE_NAME>.communcationservices.azure.com"
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)
for chat_thread_item_page in chat_threads.by_page():
for chat_thread_item in chat_thread_item_page:
print("thread id:", chat_thread_item.id)
Uppdatera ett trådämne
Använd update_topic
metoden för att uppdatera en tråds egenskaper. topic
används för att beskriva ändringen av trådämnet
- Använd
topic
för att ge tråden ett nytt ämne;
topic = "new topic"
chat_thread_client.update_topic(topic=topic)
chat_thread = chat_thread_client.get_properties(thread_id)
assert chat_thread.topic == topic
Ta bort en tråd
Använd delete_chat_thread
metoden för att ta bort en tråd. thread_id
Är trådens unika ID.
- Använd
thread_id
, obligatoriskt, för att ange trådens unika ID.
chat_client.delete_chat_thread(thread_id=thread_id)
Meddelandeåtgärder
Skicka ett meddelande
Använd send_message
metoden för att skicka ett meddelande till en tråd som identifieras av thread_id
.
- Använd
content
, obligatoriskt, för att ange innehållet i chattmeddelandet. - Använd
chat_message_type
, valfritt, för att ange typ av chattmeddelande. Möjliga värden är:ChatMessageType.TEXT
,ChatMessageType.HTML
,'text'
,'html'
; om det inte anges anges,ChatMessageType.TEXT
kommer att anges - Använd
sender_display_name
,valfritt för att ange avsändarens visningsnamn, om det inte anges anges, kommer det tomma namnet att anges
SendChatMessageResult
är svaret som returneras från att skicka ett meddelande, det innehåller ett ID, vilket är det unika ID:t för meddelandet.
from azure.communication.chat import ChatMessageType
topic = "test topic"
create_chat_thread_result = chat_client.create_chat_thread(topic)
thread_id = create_chat_thread_result.chat_thread.id
chat_thread_client = chat_client.get_chat_thread_client(create_chat_thread_result.chat_thread.id)
content='hello world'
sender_display_name='sender name'
chat_message_type = ChatMessageType.TEXT
# without specifying sender_display_name and chat_message_type
send_message_result = chat_thread_client.send_message(content)
send_message_result_id = send_message_result.id
print("Message sent: id: ", send_message_result_id)
# specifying sender_display_name and chat_message_type
send_message_result_w_type = chat_thread_client.send_message(
content,
sender_display_name=sender_display_name,
chat_message_type=chat_message_type # equivalent to chat_message_type = 'text'
)
send_message_result_w_type_id = send_message_result_w_type.id
print("Message sent: id: ", send_message_result_w_type_id)
Hämta ett meddelande
Använd-metoden get_message
hämtar ett meddelande från tjänsten, message_id
är det unika ID:t för meddelandet.
- Använd
message_id
,required för att ange meddelande-ID för ett befintligt meddelandeChatMessage
är svaret som returneras från att få ett meddelande, det innehåller ett ID, vilket är det unika ID:t för meddelandet, och andra fält finns i azure.communication.chat.ChatMessage
chat_message = chat_thread_client.get_message(message_id=send_message_result_id)
print("get_chat_message succeeded, message id:", chat_message.id, "content: ", chat_message.content)
Lista meddelanden
Använd-metoden list_messages
hämtar meddelanden från tjänsten.
- Använd
results_per_page
, valfritt, Det maximala antalet meddelanden som ska returneras per sida. - Använd
start_time
, valfritt, Starttiden där intervallfrågan.
En iterator för är svaret som returneras från listningsmeddelanden [ChatMessage]
from datetime import datetime, timedelta
start_time = datetime.utcnow() - timedelta(days=1)
chat_messages = chat_thread_client.list_messages(results_per_page=1, start_time=start_time)
for chat_message_page in chat_messages.by_page():
for chat_message in chat_message_page:
print("ChatMessage: Id=", chat_message.id, "; Content=", chat_message.content.message)
Uppdatera ett meddelande
Använd update_message
för att uppdatera ett meddelande som identifieras av threadId och messageId.
- Använd
message_id
,required, är det unika ID:t för meddelandet. - Använd
content
, valfritt, är meddelandeinnehållet som ska uppdateras. Om det inte anges tilldelas det att vara tomt
content = "updated message content"
chat_thread_client.update_message(send_message_result_id, content=content)
chat_message = chat_thread_client.get_message(message_id=send_message_result_id)
assert chat_message.content.message == content
Ta bort ett meddelande
Använd delete_message
för att ta bort ett meddelande.
- Använd
message_id
, krävs, är det unika ID:t för meddelandet.
chat_thread_client.delete_message(message_id=send_message_result_id)
Åtgärder för tråddeltagare
Lista tråddeltagare
Använd list_participants
för att hämta deltagarna i tråden.
- Använd
results_per_page
, valfritt, Det maximala antalet deltagare som ska returneras per sida. - Använd
skip
, valfritt, för att hoppa över deltagare upp till en angiven position som svar.
En iterator för [ChatParticipant]
är svaret som returneras från listningsdeltagare
chat_participants = chat_thread_client.list_participants(results_per_page=5, skip=5)
for chat_participant_page in chat_participants.by_page():
for chat_participant in chat_participant_page:
print("ChatParticipant: ", chat_participant)
Lägg till tråddeltagare
Använd add_participants
metoden för att lägga till tråddeltagare i tråden.
- Använd
thread_participants
, obligatoriskt, för att visa en lista över somChatParticipant
ska läggas till i tråden.user
, obligatoriskt ärCommunicationUserIdentifier
det du skapade av CommunicationIdentityClient.create_user() från användaråtkomsttoken
display_name
, valfritt, är visningsnamnet för tråddeltagaren.share_history_time
, valfritt, tid från vilken chatthistoriken delas med deltagaren.
A list(tuple(ChatParticipant, ChatError))
returneras. När deltagaren har lagts till förväntas en tom lista. Om ett fel uppstår när deltagaren läggs till fylls listan i med de misslyckade deltagarna tillsammans med det fel som påträffades.
from azure.communication.identity import CommunicationIdentityClient
from azure.communication.chat import ChatParticipant
from datetime import datetime
# create 2 users
identity_client = CommunicationIdentityClient.from_connection_string('<connection_string>')
new_users = [identity_client.create_user() for i in range(2)]
# # conversely, you can also add an existing user to a chat thread; provided the user_id is known
# from azure.communication.chat import CommunicationUserIdentifier
#
# user_id = 'some user id'
# user_display_name = "Wilma Flinstone"
# new_user = CommunicationUserIdentifier(user_id)
# participant = ChatParticipant(
# identifier=new_user,
# display_name=user_display_name,
# share_history_time=datetime.utcnow())
participants = []
for _user in new_users:
chat_participant = ChatParticipant(
identifier=_user,
display_name='Fred Flinstone',
share_history_time=datetime.utcnow()
)
participants.append(chat_participant)
response = chat_thread_client.add_participants(thread_participants=participants)
def decide_to_retry(error, **kwargs):
"""
Insert some custom logic to decide if retry is applicable based on error
"""
return True
# 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)]
if retry:
chat_thread_client.add_participants(retry)
Ta bort tråddeltagare
Använd remove_participant
metoden för att ta bort tråddeltagaren från tråden som identifieras av threadId.
identifier
är den CommunicationUserIdentifier
du skapade av CommunicationIdentityClient.create_user() från azure-communication-identity
och lades till i den här chatttråden.
- Använd
identifier
för att ange denCommunicationUserIdentifier
du skapade
chat_thread_client.remove_participant(identifier=new_user)
# # conversely you can also do the following; provided the user_id is known
# from azure.communication.chat import CommunicationUserIdentifier
#
# user_id = 'some user id'
# chat_thread_client.remove_participant(identifier=CommunicationUserIdentifier(new_user))
Händelseråtgärder
Skicka inmatningsmeddelande
Använd send_typing_notification
metoden för att publicera en typningsmeddelandehändelse i en tråd för en användares räkning.
chat_thread_client.send_typing_notification()
Skicka läskvitto
Använd send_read_receipt
metoden för att publicera en läskvittohändelse i en tråd för en användares räkning.
- Använd
message_id
för att ange ID för meddelandet vars läskvitto ska skickas
content='hello world'
send_message_result = chat_thread_client.send_message(content)
send_message_result_id = send_message_result.id
chat_thread_client.send_read_receipt(message_id=send_message_result_id)
Visa en lista över läskvitton
Använd list_read_receipts
metoden hämtar läskvitton för en tråd.
- Använd
results_per_page
, valfritt, Det maximala antalet läskvitton som ska returneras per sida. - Använd
skip
,valfritt för att hoppa över läskvitton upp till en angiven position som svar.
En iterator för [ChatMessageReadReceipt]
är svaret som returneras från listan över läskvitton
read_receipts = chat_thread_client.list_read_receipts(results_per_page=5, skip=5)
for read_receipt_page in read_receipts.by_page():
for read_receipt in read_receipt_page:
print(read_receipt)
print(read_receipt.sender)
print(read_receipt.chat_message_id)
print(read_receipt.read_on)
Exempelkod
Det här är kodexempel som visar vanliga scenarioåtgärder med Azure Communication Chat-klientbiblioteket.
Asynkrona versioner av exemplen (python-exempelfilerna som läggs till med _async
) visar asynkrona åtgärder.
Innan du kör exempelkoden läser du Krav
för att skapa en resurs och ange sedan några miljövariabler
set AZURE_COMMUNICATION_SERVICE_ENDPOINT="https://<RESOURCE_NAME>.communcationservices.azure.com"
set COMMUNICATION_SAMPLES_CONNECTION_STRING="<connection string of your Communication service>"
pip install azure-communication-identity
python samples\chat_client_sample.py
python samples\chat_client_sample_async.py
python samples\chat_thread_client_sample.py
python samples\chat_thread_client_sample_async.py
Felsökning
Stöter du på problem? Det här avsnittet bör innehålla information om vad du ska göra där.
Nästa steg
Mer exempelkod bör gå hit, tillsammans med länkar till lämpliga exempeltester.
Bidra
Om du stöter på buggar eller har förslag kan du ange ett problem i avsnittet Problem i projektet.
Azure SDK for Python
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för