Azure Communication Chat Package-clientbibliotheek voor Python - versie 1.2.0
Dit pakket bevat een Python-SDK voor Azure Communication Services voor Chat. Lees hier meer over Azure Communication Services
Broncode | Pakket (Pypi) | Pakket (Conda) | API-referentiedocumentatie | Productdocumentatie
Disclaimer
Ondersteuning voor Azure SDK Python-pakketten voor Python 2.7 is beëindigd op 1 januari 2022. Voor meer informatie en vragen raadpleegt u https://github.com/Azure/azure-sdk-for-python/issues/20691
Aan de slag
Vereisten
- Python 3.7 of hoger is vereist voor het gebruik van dit pakket.
- Een geïmplementeerde Communication Services-resource. U kunt azure portal of de Azure PowerShell gebruiken om het in te stellen.
Het pakket installeren
Installeer de Azure Communication Service Chat SDK.
pip install --pre azure-communication-chat
Tokens voor gebruikerstoegang
Met toegangstokens voor gebruikers kunt u clienttoepassingen maken die zich rechtstreeks verifiëren bij Azure Communication Services. U kunt deze tokens genereren met de module azure.communication.identity en deze vervolgens gebruiken om de Communication Services SDK's te initialiseren. Voorbeeld van het gebruik van 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
De user
hierboven gemaakte wordt later gebruikt, omdat die gebruiker moet worden toegevoegd als deelnemer aan een nieuwe chat-thread wanneer u deze met dit token maakt. De oorzaak hiervan is dat de initiator van de aanvraag voor het maken in de lijst met deelnemers van de chat-thread moet staan.
De chatclient maken
Hiermee kunt u chatthreads maken, ophalen, weergeven of verwijderen.
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))
Chatthreadclient maken
Met De ChatThreadClient kunt u bewerkingen uitvoeren die specifiek zijn voor een chatgesprek, zoals bericht verzenden, bericht ophalen, het onderwerp van de chat-thread bijwerken, deelnemers toevoegen aan chatgesprek, enzovoort.
U kunt deze verkrijgen door een nieuwe chat-thread te maken met behulp van 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)
Daarnaast kan de client ook doorsturen zodat de aanvraag herhaalbaar is; dat wil gezegd, als de client de aanvraag meerdere keren met dezelfde Idempotency-Token en deze een geschikt antwoord krijgt zonder dat de server de aanvraag meerdere keren uitvoert. De waarde van de Idempotency-Token is een ondoorzichtige tekenreeks die een door de client gegenereerde, wereldwijd unieke id voor altijd vertegenwoordigt voor de aanvraag.
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)
Als u eerder een chat-thread hebt gemaakt en u de bijbehorende thread_id hebt, kunt u deze ook maken door:
chat_thread_client = chat_client.get_chat_thread_client(thread_id) # thread_id is the id of an existing chat thread
Belangrijkste concepten
Een chatgesprek wordt vertegenwoordigd door een chatgesprek. Elke gebruiker in de thread wordt een threaddeelnemer genoemd. Threaddeelnemers kunnen privé met elkaar chatten in een 1:1-chat of in een 1:N-groepschat. Gebruikers krijgen ook bijna realtime updates voor wanneer anderen typen en wanneer ze de berichten hebben gelezen.
Nadat u een ChatClient
klasse hebt geïnitialiseerd, kunt u de volgende chatbewerkingen uitvoeren:
Threads maken, ophalen, bijwerken en verwijderen
CRD-bewerkingen (Create-Read-Delete) uitvoeren op threads
create_chat_thread(topic, **kwargs)
list_chat_threads(**kwargs)
delete_chat_thread(thread_id, **kwargs)
Nadat u een ChatThreadClient
klasse hebt geïnitialiseerd, kunt u de volgende chatbewerkingen uitvoeren:
Thread bijwerken
Updatebewerking uitvoeren op threadonderwerp
update_topic(topic, **kwargs)
Eigenschappen van chatthread ophalen
get_properties(**kwargs)
Berichten verzenden, ophalen, bijwerken en verwijderen
CRUD-bewerkingen (Create-Read-Update-Delete) uitvoeren op berichten
send_message(content, **kwargs)
get_message(message_id, **kwargs)
list_messages(**kwargs)
update_message(message_id, content, **kwargs)
delete_message(message_id, **kwargs)
Deelnemers ophalen, toevoegen en verwijderen
CRD-bewerkingen (Create-Read-Delete) uitvoeren op threaddeelnemers
list_participants(**kwargs)
add_participants(thread_participants, **kwargs)
remove_participant(participant_identifier, **kwargs)
Melding over typen verzenden
De service op de hoogte stellen van het typen van een melding
send_typing_notification(**kwargs)
Leesbevestiging verzenden en ophalen
Informeer de service dat een bericht is gelezen en haal een lijst met gelezen berichten op.
send_read_receipt(message_id, **kwargs)
list_read_receipts(**kwargs)
Voorbeelden
De volgende secties bevatten verschillende codefragmenten voor enkele van de meest voorkomende taken, waaronder:
Threadbewerkingen
Een thread maken
Gebruik de methode create_chat_thread
om een chat-thread te maken.
- Gebruik
topic
, vereist, om een threadonderwerp te geven; - Gebruik
thread_participants
, optioneel, om een lijst op te geven dieChatParticipant
aan de thread moet worden toegevoegd;user
, vereist, is het deCommunicationUserIdentifier
die u hebt gemaakt door CommunicationIdentityClient.create_user() op basis van gebruikerstoegangstokens
display_name
, optioneel, is de weergavenaam voor de threaddeelnemer.share_history_time
optioneel, het tijdstip waarop de chatgeschiedenis wordt gedeeld met de deelnemer.
- Gebruik
idempotency_token
optioneel om de unieke id voor de aanvraag op te geven.
CreateChatThreadResult
is het resultaat dat wordt geretourneerd door het maken van een thread, kunt u deze gebruiken om de id
op te halen van de chat-thread die is gemaakt. Dit id
kan vervolgens worden gebruikt om een ChatThreadClient
-object op te halen met behulp van de get_chat_thread_client
-methode. ChatThreadClient
kan worden gebruikt om andere chatbewerkingen uit te voeren voor deze chat-thread.
# 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)
Een thread ophalen
Methode Use get_properties
haalt een ChatThreadProperties
op uit de service; thread_id
is de unieke id van de thread.
chat_thread_properties = chat_thread_client.get_properties()
Chat-threads weergeven
Methode Use list_chat_threads
haalt de lijst met gemaakte chat-threads op
- Gebruik
results_per_page
optioneel het maximum aantal berichten dat per pagina moet worden geretourneerd. - Gebruik
start_time
, optioneel, De begintijd waarin de bereikquery wordt uitgevoerd.
Een iterator van [ChatThreadItem]
is het antwoord dat wordt geretourneerd door het weergeven van threads
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)
Een threadonderwerp bijwerken
Gebruik update_topic
de methode om de eigenschappen van een thread bij te werken. topic
wordt gebruikt om de wijziging van het threadonderwerp te beschrijven
- Gebruik
topic
om thread een nieuw onderwerp te geven;
topic = "new topic"
chat_thread_client.update_topic(topic=topic)
chat_thread = chat_thread_client.get_properties(thread_id)
assert chat_thread.topic == topic
Een thread verwijderen
Methode gebruiken delete_chat_thread
om een thread te verwijderen; thread_id
is de unieke id van de thread.
- Gebruik
thread_id
, vereist, om de unieke id van de thread op te geven.
chat_client.delete_chat_thread(thread_id=thread_id)
Berichtbewerkingen
Een bericht verzenden
Gebruik send_message
de methode om een bericht te verzenden naar een thread die wordt geïdentificeerd door thread_id
.
- Gebruik
content
, vereist, om de inhoud van het chatbericht op te geven. - Gebruik
chat_message_type
optioneel om het type chatbericht op te geven. Mogelijke waarden zijn:ChatMessageType.TEXT
,ChatMessageType.HTML
,'text'
, ;'html'
indien niet opgegeven,ChatMessageType.TEXT
worden ingesteld - Gebruik
sender_display_name
optioneel om de weergavenaam van de afzender op te geven. Als dit niet is opgegeven, wordt een lege naam ingesteld
SendChatMessageResult
is het antwoord dat wordt geretourneerd door het verzenden van een bericht. Het bevat een id, die de unieke id van het bericht is.
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)
Een bericht ophalen
Methode Use get_message
haalt een bericht op van de service; message_id
is de unieke id van het bericht.
- Gebruik
message_id
, vereist, om de bericht-id van een bestaand berichtChatMessage
op te geven is het antwoord dat wordt geretourneerd na het ontvangen van een bericht, het bevat een id, wat de unieke id van het bericht is, en andere velden raadpleegt u 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)
Berichten weergeven
Methode Use list_messages
haalt berichten op van de service.
- Gebruik
results_per_page
optioneel het maximum aantal berichten dat per pagina moet worden geretourneerd. - Gebruik
start_time
, optioneel, De begintijd waarin de bereikquery wordt uitgevoerd.
Een iterator van [ChatMessage]
is het antwoord dat wordt geretourneerd door het weergeven van berichten
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)
Een bericht bijwerken
Gebruik update_message
om een bericht bij te werken dat wordt geïdentificeerd door threadId en messageId.
- Gebruik
message_id
,required, is de unieke id van het bericht. - Gebruik
content
, optioneel, is de berichtinhoud die moet worden bijgewerkt. Als dit niet is opgegeven, wordt deze toegewezen als leeg
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
Een bericht verwijderen
Gebruik delete_message
om een bericht te verwijderen.
- Gebruik
message_id
, vereist, is de unieke id van het bericht.
chat_thread_client.delete_message(message_id=send_message_result_id)
Bewerkingen van threaddeelnemers
Threaddeelnemers weergeven
Gebruik list_participants
om de deelnemers van de thread op te halen.
- Gebruik
results_per_page
, optioneel, Het maximum aantal deelnemers dat per pagina moet worden geretourneerd. - Gebruik
skip
, optioneel, om deelnemers over te slaan tot een opgegeven positie in antwoord.
Een iterator van [ChatParticipant]
is het antwoord dat wordt geretourneerd door de lijst met deelnemers
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)
Threaddeelnemers toevoegen
Gebruik add_participants
de methode om threaddeelnemers toe te voegen aan de thread.
- Gebruik
thread_participants
, vereist, om eenChatParticipant
lijst weer te geven die aan de thread moet worden toegevoegd;user
, vereist, is het deCommunicationUserIdentifier
die u hebt gemaakt door CommunicationIdentityClient.create_user() op basis van gebruikerstoegangstokens
display_name
, optioneel, is de weergavenaam voor de threaddeelnemer.share_history_time
, optioneel, het tijdstip waarop de chatgeschiedenis wordt gedeeld met de deelnemer.
A list(tuple(ChatParticipant, ChatError))
wordt geretourneerd. Wanneer de deelnemer is toegevoegd, wordt een lege lijst verwacht. In het geval van een fout die is opgetreden tijdens het toevoegen van een deelnemer, wordt de lijst gevuld met de mislukte deelnemers, samen met de fout die is opgetreden.
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)
Threaddeelnemer verwijderen
Gebruik remove_participant
de methode om threaddeelnemer te verwijderen uit de thread die wordt geïdentificeerd door threadId.
identifier
is de CommunicationUserIdentifier
die u hebt gemaakt door CommunicationIdentityClient.create_user() van azure-communication-identity
en is toegevoegd aan deze chat-thread.
- Gebruik
identifier
om deCommunicationUserIdentifier
op te geven die u hebt gemaakt
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))
Gebeurtenisbewerkingen
Melding over typen verzenden
Gebruik send_typing_notification
de methode om namens een gebruiker een meldingsevenement voor typen te posten in een thread.
chat_thread_client.send_typing_notification()
Leesbevestiging verzenden
Gebruik send_read_receipt
de methode om namens een gebruiker een leesbevestiging te posten in een thread.
- Gebruik
message_id
om de id op te geven van het bericht waarvan de leesbevestiging moet worden verzonden
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)
Leesbevestigingen weergeven
Methode Use list_read_receipts
haalt leesbevestigingen op voor een thread.
- Gebruik
results_per_page
, optioneel, Het maximum aantal leesbevestigingen dat per pagina moet worden geretourneerd. - Gebruik
skip
,optioneel, om leesbevestigingen over te slaan tot een opgegeven positie in antwoord.
Een iterator van [ChatMessageReadReceipt]
is het antwoord dat wordt geretourneerd door het weergeven van leesbevestigingen
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)
Voorbeeldcode
Dit zijn codevoorbeelden die algemene scenariobewerkingen laten zien met de Azure Communication Chat-clientbibliotheek.
De asynchrone versies van de voorbeelden (de Python-voorbeeldbestanden toegevoegd met _async
) tonen asynchrone bewerkingen.
Raadpleeg Vereisten voordat u de voorbeeldcode uitvoert
om een resource te maken en vervolgens enkele omgevingsvariabelen in te stellen
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
Problemen oplossen
Ondervindt u problemen? Deze sectie moet details bevatten over wat u daar moet doen.
Volgende stappen
Hier moet meer voorbeeldcode worden weergegeven, samen met koppelingen naar de juiste voorbeeldtests.
Bijdragen
Als u fouten tegenkomt of suggesties hebt, kunt u een probleem melden in de sectie Problemen van het project.
Azure SDK for Python