Klientská knihovna balíčku azure Communication Chat pro Python – verze 1.2.0
Tento balíček obsahuje sadu Python SDK pro Azure Communication Services pro chat. Další informace o Azure Communication Services najdete tady.
Zdrojový kód | Balíček (Pypi) | Balíček (Conda) | Referenční dokumentace k | rozhraní APIDokumentace k produktu
Právní omezení
Podpora balíčků Azure SDK Python pro Python 2.7 skončila 1. ledna 2022. Další informace a dotazy najdete na https://github.com/Azure/azure-sdk-for-python/issues/20691
Začínáme
Požadavky
- K použití tohoto balíčku se vyžaduje Python 3.7 nebo novější.
- Nasazený prostředek komunikačních služeb K jeho nastavení můžete použít Azure Portal nebo Azure PowerShell.
Instalace balíčku
Nainstalujte sadu SDK chatu služby Azure Communication Service.
pip install --pre azure-communication-chat
Uživatelské přístupové tokeny
Uživatelské přístupové tokeny umožňují vytvářet klientské aplikace, které se přímo ověřují pro Azure Communication Services. Tyto tokeny můžete vygenerovat pomocí modulu azure.communication.identity a pak je použít k inicializaci sad SDK služby Communication Services. Příklad použití 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
Vytvořený user
výše uvedený kód se použije později, protože tento uživatel by měl být přidán jako účastník nového vlákna chatu při jeho vytváření pomocí tohoto tokenu. Je to proto, že iniciátor žádosti o vytvoření musí být v seznamu účastníků vlákna chatu.
Vytvoření chatovacího klienta
To vám umožní vytvářet, získávat, vypisovat nebo odstraňovat vlákna chatu.
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))
Vytvoření klienta vlákna chatu
ChatThreadClient vám umožní provádět operace specifické pro vlákno chatu, jako je odeslání zprávy, získání zprávy, aktualizace tématu vlákna chatu, přidání účastníků do vlákna chatu atd.
Můžete ho získat vytvořením nového vlákna chatu pomocí 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)
Kromě toho může klient také směrovat tak, aby požadavek byl opakovatelný; to znamená, že pokud klient odešle požadavek vícekrát se stejnými Idempotency-Token a vrátí odpovídající odpověď, aniž by server požadavek několikrát spouštějí. Hodnota Idempotency-Token je neprůzrazný řetězec představující klientem vygenerovaný globálně jedinečný identifikátor požadavku.
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)
Případně pokud jste už vytvořili vlákno chatu a máte jeho thread_id, můžete ho vytvořit pomocí:
chat_thread_client = chat_client.get_chat_thread_client(thread_id) # thread_id is the id of an existing chat thread
Klíčové koncepty
Chatová konverzace je reprezentována vláknem chatu. Každý uživatel ve vlákně se nazývá účastník vlákna. Účastníci vlákna můžou mezi sebou soukromě chatovat v individuálním chatu nebo se schoulit ve skupinovém chatu 1:N. Uživatelé také získají téměř v reálném čase aktualizace, když ostatní píšou a když si zprávy přečetli.
Po inicializaci ChatClient
třídy můžete provádět následující operace chatu:
Vytváření, získání, aktualizace a odstranění vláken
Provádění operací CRD (Create-Read-Delete) u vláken
create_chat_thread(topic, **kwargs)
list_chat_threads(**kwargs)
delete_chat_thread(thread_id, **kwargs)
Po inicializaci ChatThreadClient
třídy můžete provádět následující operace chatu:
Aktualizovat vlákno
Provedení operace aktualizace v tématu vlákna
update_topic(topic, **kwargs)
Získání vlastností vlákna chatu
get_properties(**kwargs)
Odesílání, získání, aktualizace a odstranění zpráv
Provádění operací CRUD (Create-Read-Update-Delete) u zpráv
send_message(content, **kwargs)
get_message(message_id, **kwargs)
list_messages(**kwargs)
update_message(message_id, content, **kwargs)
delete_message(message_id, **kwargs)
Získání, přidání a odebrání účastníků
Provádění operací CRD (Create-Read-Delete) u účastníků vlákna
list_participants(**kwargs)
add_participants(thread_participants, **kwargs)
remove_participant(participant_identifier, **kwargs)
Odeslání oznámení o psaní
Upozorněte službu na zadání oznámení.
send_typing_notification(**kwargs)
Odeslání a získání potvrzení o přečtení
Upozorněte službu, že je přečtená zpráva, a získejte seznam přečtených zpráv.
send_read_receipt(message_id, **kwargs)
list_read_receipts(**kwargs)
Příklady
Následující části obsahují několik fragmentů kódu, které pokrývají některé z nejběžnějších úloh, mezi které patří:
Operace s vlákny
Vytvoření vlákna
create_chat_thread
Pomocí metody vytvořte vlákno chatu.
- Použijte
topic
, povinné, chcete-li zadat téma vlákna; - Použijte
thread_participants
, volitelné, k zadání seznamu, kterýChatParticipant
má být přidán do vlákna;user
, povinné, jedná se o objekt, kterýCommunicationUserIdentifier
jste vytvořili CommunicationIdentityClient.create_user() z přístupových tokenů uživatelů.
display_name
, volitelné, je zobrazovaný název účastníka vlákna.share_history_time
, volitelný čas, od kterého se historie chatu sdílí s účastníkem.
- K zadání jedinečného identifikátoru požadavku použijte
idempotency_token
volitelný parametr .
CreateChatThreadResult
je výsledek vrácený vytvořením vlákna, můžete ho použít k načtení id
vytvořeného vlákna chatu. To id
se pak dá použít k načtení objektu ChatThreadClient
get_chat_thread_client
pomocí metody . ChatThreadClient
lze použít k provádění dalších operací chatu s tímto vláknem chatu.
# 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)
Získání vlákna
Use get_properties
metoda načte ze služby thread_id
. ChatThreadProperties
Je jedinečné ID vlákna.
chat_thread_properties = chat_thread_client.get_properties()
Seznam vláken chatu
Použití metody načte seznam vytvořených vláken chatu.list_chat_threads
- Použijte
results_per_page
, volitelné, maximální počet zpráv, které se mají vrátit na stránku. - Použijte
start_time
nepovinný čas zahájení dotazu na rozsah.
Iterátor je [ChatThreadItem]
odpověď vrácená z výpisu vláken.
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)
Aktualizace tématu vlákna
Pomocí update_topic
metody aktualizujte vlastnosti vlákna. topic
slouží k popisu změny tématu vlákna.
- Použít
topic
k dát vláknu nové téma;
topic = "new topic"
chat_thread_client.update_topic(topic=topic)
chat_thread = chat_thread_client.get_properties(thread_id)
assert chat_thread.topic == topic
Odstranění vlákna
Pomocí delete_chat_thread
metody odstraňte vlákno; thread_id
je jedinečné ID vlákna.
- K zadání jedinečného ID vlákna použijte
thread_id
, povinné.
chat_client.delete_chat_thread(thread_id=thread_id)
Operace se zprávami
Odeslat zprávu
Pomocí send_message
metody odešle zprávu do vlákna identifikovaného nástrojem thread_id
.
- K poskytnutí obsahu zprávy chatu použijte
content
požadovanou možnost. - K zadání typu zprávy chatu použijte
chat_message_type
volitelnou možnost . Mezi možné hodnoty patří: , , , ;'html'
pokud nejsou zadané,ChatMessageType.TEXT
nastaví se.'text'
ChatMessageType.HTML
ChatMessageType.TEXT
- K zadání zobrazovaného jména odesílatele použijte
sender_display_name
volitelné. Pokud není zadaný, nastaví se prázdný název.
SendChatMessageResult
je odpověď vrácená odesláním zprávy, obsahuje ID, což je jedinečné ID zprávy.
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)
Získání zprávy
Metoda Use get_message
načte zprávu ze služby; message_id
je jedinečné ID zprávy.
- Pomocí parametru
message_id
,required) zadejte ID existující zprávyChatMessage
je odpověď vrácená po získání zprávy, obsahuje ID, což je jedinečné ID zprávy, a další pole najdete v tématu 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)
Seznam zpráv
Použití list_messages
metody načte zprávy ze služby.
- Použijte
results_per_page
, volitelné, maximální počet zpráv, které se mají vrátit na stránku. - Použijte
start_time
nepovinný čas zahájení dotazu na rozsah.
Iterátorem je odpověď vrácená z výpisu [ChatMessage]
zpráv.
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)
Aktualizace zprávy
Slouží update_message
k aktualizaci zprávy identifikované podle threadId a messageId.
- Použijte
message_id
,required, je jedinečné ID zprávy. - Použijte
content
, nepovinný, je obsah zprávy, který se má aktualizovat. Pokud není zadaný, přiřadí se, aby byla prázdná.
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
Odstranění zprávy
Slouží delete_message
k odstranění zprávy.
- Použijte
message_id
, povinné, je jedinečné ID zprávy.
chat_thread_client.delete_message(message_id=send_message_result_id)
Operace účastníka vlákna
Vypsat účastníky vlákna
Slouží list_participants
k načtení účastníků vlákna.
- Použijte
results_per_page
, volitelné, maximální počet účastníků, kteří se mají vrátit na stránku. - Pomocí volitelného
skip
parametru přeskočíte účastníky až na zadanou pozici v odpovědi.
Iterátorem je odpověď vrácená z výpisu [ChatParticipant]
účastníků.
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)
Přidání účastníků vlákna
Pomocí add_participants
metody přidejte do vlákna účastníky vlákna.
- Použijte
thread_participants
, povinné, chcete-liChatParticipant
zobrazit seznam, který má být přidán do vlákna;user
, povinné, jedná se o objekt, kterýCommunicationUserIdentifier
jste vytvořili CommunicationIdentityClient.create_user() z přístupových tokenů uživatelů.
display_name
, volitelné, je zobrazovaný název účastníka vlákna.share_history_time
, volitelný čas, od kterého se historie chatu sdílí s účastníkem.
Vrátí se hodnota .list(tuple(ChatParticipant, ChatError))
Po úspěšném přidání účastníka se očekává prázdný seznam. V případě chyby při přidávání účastníka se seznam naplní neúspěšnými účastníky spolu s chybou, ke které došlo.
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)
Odebrat účastníka vlákna
Pomocí remove_participant
metody odeberte účastníka vlákna z vlákna identifikovaného parametrem threadId.
identifier
je objekt, který CommunicationUserIdentifier
jste vytvořili CommunicationIdentityClient.create_user() z azure-communication-identity
a byla přidána do tohoto vlákna chatu.
- Slouží
identifier
k zadání vytvořeného objektuCommunicationUserIdentifier
.
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))
Operace s událostmi
Odeslání oznámení o psaní
Použijte send_typing_notification
metodu k odeslání události oznámení o psaní do vlákna jménem uživatele.
chat_thread_client.send_typing_notification()
Odeslat potvrzení o přečtení
Použijte send_read_receipt
metodu k odeslání události potvrzení o přečtení do vlákna jménem uživatele.
- Slouží
message_id
k zadání ID zprávy, jejíž potvrzení o přečtení se má odeslat.
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)
Výpis potvrzení o přečtení
Use list_read_receipts
metoda načte potvrzení o přečtení pro vlákno.
- Použijte
results_per_page
, volitelné, maximální počet potvrzení o přečtení, která se mají na stránku vrátit. - Pomocí volitelného příkazu
skip
přeskočíte potvrzení o přečtení až na zadanou pozici v odpovědi.
Iterátor je [ChatMessageReadReceipt]
odpověď vrácená z výpisu potvrzení o přečtení.
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)
Příklad kódu
Jedná se o ukázky kódu, které znázorňují operace běžných scénářů s klientskou knihovnou Azure Communication Chat.
Asynchronní verze ukázek (ukázkové soubory Pythonu připojené k _async
) zobrazují asynchronní operace.
Před spuštěním ukázkového kódu si projděte požadavky.
vytvořte prostředek a pak nastavte některé proměnné prostředí.
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
Řešení potíží
Máte problémy? Tato část by měla obsahovat podrobnosti o tom, co tam dělat.
Další kroky
Sem by měl být uvedený další ukázkový kód spolu s odkazy na příslušné ukázkové testy.
Přispívání
Pokud narazíte na nějaké chyby nebo máte návrhy, nahlaste problém v části Problémy projektu.
Azure SDK for Python