Azure Communication Chat Package ügyfélkódtár Pythonhoz – 1.2.0-s verzió
Ez a csomag egy Python SDK-t tartalmaz a csevegéshez Azure Communication Services. További információ a Azure Communication Services itt
Forráskód | Csomag (Pypi) | Csomag (Conda) | API-referenciadokumentáció | Termékdokumentáció
Felelősséget kizáró nyilatkozat
Az Azure SDK Python-csomagok támogatása a Python 2.7-hez 2022. január 01-én véget ért. További információkért és kérdésekért lásd: https://github.com/Azure/azure-sdk-for-python/issues/20691
Első lépések
Előfeltételek
- A csomag használatához Python 3.7 vagy újabb verzió szükséges.
- Üzembe helyezett Communication Services-erőforrás. A beállításához használhatja az Azure Portalt vagy a Azure PowerShell.
A csomag telepítése
Telepítse az Azure Communication Service Chat SDK-t.
pip install --pre azure-communication-chat
Felhasználói hozzáférési jogkivonatok
A felhasználói hozzáférési jogkivonatokkal olyan ügyfélalkalmazásokat hozhat létre, amelyek közvetlenül hitelesítik magukat Azure Communication Services. Ezeket a jogkivonatokat az azure.communication.identity modullal hozhatja létre, majd használhatja őket a Communication Services SDK-k inicializálására. Példa az azure.communication.identity használatára:
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
A user
fent létrehozott üzenet később lesz használatban, mivel a felhasználót új csevegési szál résztvevőjeként kell hozzáadni, amikor ezzel a jogkivonattal hozza létre. Ennek az az oka, hogy a létrehozási kérelem kezdeményezőjének szerepelnie kell a csevegési szál résztvevőinek listájában.
A csevegőügyfél létrehozása
Ez lehetővé teszi csevegési szálak létrehozását, lekérését, listázását vagy törlését.
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))
Csevegőszál-ügyfél létrehozása
A ChatThreadClient lehetővé teszi a csevegési szálhoz kapcsolódó műveletek végrehajtását, például üzenetküldést, üzenet lekérését, a csevegési téma frissítését, résztvevők hozzáadását a csevegési szálhoz stb.
Ehhez hozzon létre egy új csevegési szálat a ChatClient használatával:
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)
Emellett az ügyfél közvetlenül is irányíthatja a kérést, hogy megismételhető legyen; vagyis ha az ügyfél többször is ugyanazzal a Idempotency-Token küldi el a kérést, és megfelelő választ kap, anélkül, hogy a kiszolgáló többször is végrehajtja a kérést. A Idempotency-Token értéke egy átlátszatlan sztring, amely egy ügyfél által generált, globálisan minden alkalommal egyedi, a kérés azonosítóját jelöli.
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)
Másik lehetőségként, ha korábban létrehozott egy csevegési szálat, és rendelkezik annak thread_id, a következő módon hozhatja létre:
chat_thread_client = chat_client.get_chat_thread_client(thread_id) # thread_id is the id of an existing chat thread
Fő fogalmak
A csevegéseket egy csevegési szál képviseli. A szál minden felhasználóját szál résztvevőnek nevezzük. A beszélgetés résztvevői privát módon cseveghetnek egy 1:1-ás csevegésben, vagy egy 1:N csoportos csevegésben. A felhasználók közel valós idejű frissítéseket kapnak arról is, hogy mások mikor gépelnek, és mikor olvasták el az üzeneteket.
Miután inicializált egy osztályt ChatClient
, a következő csevegési műveleteket végezheti el:
Szálak létrehozása, lekérése, frissítése és törlése
CRD-műveletek (létrehozás-olvasás-törlés) végrehajtása szálakon
create_chat_thread(topic, **kwargs)
list_chat_threads(**kwargs)
delete_chat_thread(thread_id, **kwargs)
Miután inicializált egy osztályt ChatThreadClient
, a következő csevegési műveleteket végezheti el:
Hozzászóláslánc frissítése
Frissítési művelet végrehajtása száltémakörön
update_topic(topic, **kwargs)
Csevegési szál tulajdonságainak lekérése
get_properties(**kwargs)
Üzenetek küldése, lekérése, frissítése és törlése
CRUD(Create-Read-Update-Delete) műveletek végrehajtása üzeneteken
send_message(content, **kwargs)
get_message(message_id, **kwargs)
list_messages(**kwargs)
update_message(message_id, content, **kwargs)
delete_message(message_id, **kwargs)
Résztvevők beolvasása, hozzáadása és eltávolítása
CRD-műveletek végrehajtása (létrehozás-olvasás-törlés) a szál résztvevőin
list_participants(**kwargs)
add_participants(thread_participants, **kwargs)
remove_participant(participant_identifier, **kwargs)
Gépelési értesítés küldése
Értesítés a szolgáltatásnak a gépelésről
send_typing_notification(**kwargs)
Olvasási visszaigazolás küldése és lekérése
Értesítse a szolgáltatást az üzenetek olvasásáról, és kérje le az olvasott üzenetek listáját.
send_read_receipt(message_id, **kwargs)
list_read_receipts(**kwargs)
Példák
A következő szakaszok számos kódrészletet biztosítanak, amelyek a leggyakoribb feladatokat fedik le, többek között az alábbiakat:
Szálműveletek
Szál létrehozása
A metódus használatával create_chat_thread
hozzon létre egy csevegési szálat.
- Tématémakör megadásához használja
topic
a kötelezőt; - A (nem kötelező) paranccsal
thread_participants
listázhatja aChatParticipant
szálhoz hozzáadni kívánt listát;user
, kötelező, aCommunicationUserIdentifier
felhasználói hozzáférési jogkivonatokból létrehozott CommunicationIdentityClient.create_user()
display_name
, nem kötelező, a szál résztvevőjének megjelenített neve.share_history_time
, nem kötelező, a csevegési előzményeknek a résztvevővel való megosztásának időpontja.
- A kérés egyedi azonosítójának megadásához használja
idempotency_token
a (nem kötelező) parancsot.
CreateChatThreadResult
a szál létrehozásakor visszaadott eredmény, a használatával lekérheti a id
létrehozott csevegési szálat. Ezzel id
a metódussal lekérhet egy ChatThreadClient
objektumot get_chat_thread_client
. ChatThreadClient
más csevegési műveletek végrehajtására is használható ehhez a csevegési szálhoz.
# 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)
Szál lekérése
A use get_properties
metódus lekéri az a-t ChatThreadProperties
a szolgáltatásból; thread_id
ez a szál egyedi azonosítója.
chat_thread_properties = chat_thread_client.get_properties()
Csevegési szálak listázása
A Use list_chat_threads
metódus lekéri a létrehozott csevegési szálak listáját
- Használja
results_per_page
a következőt: , nem kötelező, Az egy oldalonként visszaadandó üzenetek maximális száma. - Használja
start_time
a következőt: , nem kötelező, A tartomány lekérdezésének kezdő időpontja.
A iterátora [ChatThreadItem]
a listázási szálakból visszaadott válasz
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)
Tématémakör frissítése
A szál tulajdonságainak frissítéséhez használja update_topic
a metódust. topic
A tématémakör változásának leírására szolgál
- A használatával
topic
új témakört adhat a szálnak;
topic = "new topic"
chat_thread_client.update_topic(topic=topic)
chat_thread = chat_thread_client.get_properties(thread_id)
assert chat_thread.topic == topic
Szál törlése
Szál törlésére használható delete_chat_thread
módszer; thread_id
a szál egyedi azonosítója.
- A szál egyedi azonosítójának megadásához használja
thread_id
a kötelezőt.
chat_client.delete_chat_thread(thread_id=thread_id)
Üzenetműveletek
Üzenet küldése
A metódussal send_message
üzenetet küldhet a által thread_id
azonosított szálnak.
- A csevegőüzenet tartalmának megadásához használja
content
a kötelezőt. - A csevegőüzenet típusának megadásához használja
chat_message_type
a (nem kötelező) lehetőséget. A lehetséges értékek a következők:ChatMessageType.TEXT
,ChatMessageType.HTML
,'text'
;'html'
ha nincs megadva,ChatMessageType.TEXT
be lesz állítva - A (nem kötelező) használatával
sender_display_name
adja meg a feladó megjelenítendő nevét, ha nincs megadva, üres név lesz beállítva
SendChatMessageResult
az üzenet küldésekor visszaadott válasz, amely tartalmaz egy azonosítót, amely az üzenet egyedi azonosítója.
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)
Üzenet lekérése
A Use get_message
metódus lekéri az üzenetet a szolgáltatásból; message_id
ez az üzenet egyedi azonosítója.
- A (kötelező) használatával
message_id
megadhatja egy meglévő üzenetChatMessage
üzenetazonosítóját az üzenet lekérésekor visszaadott válasz, tartalmaz egy azonosítót, amely az üzenet egyedi azonosítója, és egyéb mezőket az azure.communication.chat.ChatMessage webhelyen talál.
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)
Üzenetek listázása
A Use list_messages
metódus lekéri az üzeneteket a szolgáltatásból.
- Használja
results_per_page
a következőt: , nem kötelező, Az egy oldalonként visszaadandó üzenetek maximális száma. - Használja
start_time
a következőt: , nem kötelező, A tartomány lekérdezésének kezdő időpontja.
A iterátora [ChatMessage]
az üzenetek listázása által visszaadott válasz
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)
Üzenet frissítése
A használatával update_message
frissítheti a threadId és a messageId által azonosított üzeneteket.
- A (kötelező) használata
message_id
az üzenet egyedi azonosítója. - A (nem kötelező) használatával
content
frissítendő az üzenet tartalma; ha nincs megadva, üresnek van rendelve
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
Üzenet törlése
Üzenet törléséhez használja a parancsot delete_message
.
- A (kötelező) használata
message_id
az üzenet egyedi azonosítója.
chat_thread_client.delete_message(message_id=send_message_result_id)
Szál résztvevőinek műveletei
Téma résztvevőinek listázása
A használatával list_participants
lekérheti a szál résztvevőit.
- Használja
results_per_page
a következőt: , nem kötelező, Az oldalanként visszaadható résztvevők maximális száma. - A (nem kötelező) használatával
skip
a résztvevőket egy adott pozícióba ugorhatja válaszként.
A iterátora [ChatParticipant]
a lista résztvevőitől kapott válasz
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)
Hozzászóláslánc résztvevőinek hozzáadása
A szál résztvevőinek hozzáadása a szálhoz metódus használatával add_participants
.
- A (kötelező) paranccsal
thread_participants
listázhatja aChatParticipant
szálhoz hozzáadni kívánt elemet;user
, kötelező, aCommunicationUserIdentifier
felhasználói hozzáférési jogkivonatokból létrehozott CommunicationIdentityClient.create_user()
display_name
, nem kötelező, a szál résztvevőjének megjelenített neve.share_history_time
, nem kötelező, a csevegési előzményeknek a résztvevővel való megosztásának időpontja.
A visszaadott érték list(tuple(ChatParticipant, ChatError))
. A résztvevő sikeres hozzáadása után üres lista várható. Ha hiba történt a résztvevő hozzáadása során, a rendszer feltölti a listát a sikertelen résztvevőkkel és a tapasztalt hibával.
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)
Szál résztvevőjének eltávolítása
Ezzel remove_participant
a módszerrel távolíthatja el a szál résztvevőit a threadId által azonosított szálból.
identifier
a CommunicationUserIdentifier
CommunicationIdentityClient.create_user() által létrehozott azure-communication-identity
és hozzá lett adva ehhez a csevegési szálhoz.
- A létrehozott
identifier
beállításCommunicationUserIdentifier
megadása
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))
Eseményműveletek
Gépelési értesítés küldése
A metódussal send_typing_notification
gépelési értesítési eseményt tehet közzé egy szálon egy felhasználó nevében.
chat_thread_client.send_typing_notification()
Olvasási visszaigazolás küldése
Olvasási visszaigazolási eseményt egy felhasználó nevében a metódussal send_read_receipt
tehet közzé egy hozzászólásláncban.
- Annak
message_id
az üzenetnek az azonosítóját adja meg, amelynek az olvasási visszaigazolását el szeretné küldeni
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)
Olvasási visszaigazolások listázása
A use list_read_receipts
metódus lekéri egy szál olvasási nyugtáit.
- Használja
results_per_page
a következőt: , nem kötelező, Az oldalanként visszaadandó olvasási visszaigazolások maximális száma. - A (nem kötelező) használatával
skip
az olvasási visszaigazolásokat egy adott válaszpozícióba ugorhatja.
A iterátora az olvasási [ChatMessageReadReceipt]
visszaigazolások listázásából visszaadott válasz
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éldakód
Ezek olyan kódminták, amelyek az Azure Communication Chat ügyfélkódtárával kapcsolatos gyakori forgatókönyvműveleteket mutatják be.
A minták aszinkron verziói (a python-mintafájlok, hozzáfűzve _async
) aszinkron műveleteket mutatnak.
A mintakód futtatása előtt tekintse meg az előfeltételeket
erőforrás létrehozásához, majd állítson be néhány környezeti változót
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
Hibaelhárítás
Problémákba ütközik? Ennek a szakasznak tartalmaznia kell a teendők részleteit.
Következő lépések
Itt további mintakódot, valamint a megfelelő példatesztekre mutató hivatkozásokat kell használni.
Közreműködés
Ha bármilyen hibába ütközik, vagy javaslatai vannak, jelentse be a problémát a projekt Problémák szakaszában.
Azure SDK for Python
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: