Hızlı Başlangıç: Uygulamanıza Sohbet Ekleme

Kullanmaya başlayın Azure İletişim Hizmetleri sohbeti eklemek için İletişim Hizmetleri Sohbet SDK'sı'sı kullanarak bu sdk'yı kullanın. Bu hızlı başlangıçta, kullanıcıların karşılıklı konuşmalar oluşturmasına olanak sağlayan sohbet iş parçacıkları oluşturmak için Sohbet SDK'sı kullan kullanılaz. Sohbet kavramları hakkında daha fazla bilgi edinmek için sohbet kavramsal belgelerine bakın.

Örnek Kod

bu hızlı başlangıç için son kodu GitHub.

Önkoşullar

Başlamadan önce şunların doğru olduğundan emin olun:

  • Etkin aboneliğe sahip bir Azure hesabı oluşturun. Ayrıntılar için bkz. Ücretsiz hesap oluşturma.
  • Active LTSNode.js Bakım LTS sürümlerini yükleyin.
  • Bir Azure İletişim Hizmetleri oluşturun. Ayrıntılar için bkz. Kaynak Azure İletişim Hizmetleri oluşturma. Bu hızlı başlangıç için kaynak uç noktanızı kaydetmeniz gerekir.
  • Üç ACS Kullanıcısı oluşturun ve onlara bir kullanıcı erişim belirteci Kullanıcı Erişim Belirteci verin. kapsamı sohbet olarak ayar olduğundan emin olun ve hem belirteç dizesini hem de userId dizesini not edin. Tam tanıtım, iki başlangıç katılımcısı olan bir iş parçacığı oluşturur ve ardından iş parçacığına üçüncü bir katılımcı ekler.

Ayarlama

Yeni bir web uygulaması oluşturma

İlk olarak, terminal veya komut pencerenizi açın, uygulama için yeni bir dizin oluşturun ve bu dizine gidin.

mkdir chat-quickstart && cd chat-quickstart

Varsayılan npm init -y ayarlarla dosyadapackage.jsoluşturmak için çalıştırın.

npm init -y

Paketleri yükleme

JavaScript npm install için aşağıdaki Communication Services SDK'larını yüklemek üzere komutunu kullanın.

npm install @azure/communication-common --save

npm install @azure/communication-identity --save

npm install @azure/communication-signaling --save

npm install @azure/communication-chat --save

seçeneği, --save kitaplığı dosyanıza bağımlılık olarak package.jslisteler.

Uygulama çerçevesini ayarlama

Bu hızlı başlangıçta, uygulama varlıklarını paketlemek için webpack 2. Webpack, webpack-cli ve webpack-dev-server npm paketlerini yüklemek için aşağıdaki komutu çalıştırın ve bu paketleri üzerindepackage.js olarak listelenin:

npm install webpack webpack-cli webpack-dev-server --save-dev

Kök webpack.config.js dizinde bir dosya oluşturun. Aşağıdaki yapılandırmayı bu dosyaya kopyalayın:

module.exports = {
  entry: "./client.js",
  output: {
    filename: "bundle.js"
  },
  devtool: "inline-source-map",
  mode: "development"
}

dosyanıza start bir package.json betik ekleyin, biz bunu uygulamayı çalıştıracak şekilde kullanılarız. bölümünün scripts içine package.json şunları ekleyin:

"scripts": {
  "start": "webpack serve --config ./webpack.config.js"
}

Projenizin index.htmdizininde birindex.html dosyası oluşturun. JavaScript için Azure İletişim Sohbeti SDK'sı kullanarak sohbet özelliği eklemek için bu dosyayı şablon olarak kullan kullanırsınız.

<!DOCTYPE html>
<html>
  <head>
    <title>Communication Client - Chat Sample</title>
  </head>
  <body>
    <h4>Azure Communication Services</h4>
    <h1>Chat Quickstart</h1>
    <script src="./bundle.js"></script>
  </body>
</html>

Bu hızlı başlangıç için uygulama mantığını içermek için projenizinclient.js dizinindeclient.jsadlı bir dosya oluşturun.

Sohbet istemcisi oluşturma

Web uygulamanıza sohbet istemcisi oluşturmak için, önkoşul adımlarının bir parçası olarak oluşturulan İletişim Hizmeti uç noktasını ve erişim belirteci kullanacağız.

Kullanıcı erişim belirteçleri, doğrudan kullanıcı kimlik doğrulaması Azure İletişim Hizmetleri. Bu hızlı başlangıç, sohbet uygulamanıza belirteçleri yönetmek için bir hizmet katmanı oluşturmayı kapsamıyor. Erişim belirteçleri hakkında daha fazla bilgi için sohbet mimarisi ve kullanıcı erişim belirteçleri hakkında daha fazla bilgi için sohbet kavramlarına bakın.

Bu client.js JavaScript için Azure İletişim Sohbeti SDK'sı kullanarak sohbet özelliği eklemek için aşağıdaki kodda yer alan uç noktayı ve erişim belirteci kullanın.


import { ChatClient } from '@azure/communication-chat';
import { AzureCommunicationTokenCredential } from '@azure/communication-common';

// Your unique Azure Communication service endpoint
let endpointUrl = 'https://<RESOURCE_NAME>.communication.azure.com';
// The user access token generated as part of the pre-requisites
let userAccessToken = '<USER_ACCESS_TOKEN>';

let chatClient = new ChatClient(endpointUrl, new AzureCommunicationTokenCredential(userAccessToken));
console.log('Azure Communication Chat client created!');
  • endpointUrl'i Communication Services kaynak uç noktasıyla değiştirin. Azure İletişim Hizmetleri kaynak oluşturma.
  • userAccessToken'i, size verilen belirteçle değiştirin.

Kodu çalıştırma

Uygulama ana bilgisayarlarını yerel bir web sunucusu üzerinde paketi için aşağıdaki komutu çalıştırın:

npm run start

Tarayıcınızı açın ve 'a http://localhost:8080/ gidin. Tarayıcınızın içindeki geliştirici araçları konsolunda şunları görüyor olun:

Azure Communication Chat client created!

Nesne modeli

Aşağıdaki sınıflar ve arabirimler, JavaScript için Azure İletişim Hizmetleri Sohbet SDK'sı'nın önemli özelliklerinden bazılarını ele almaktadır.

Ad Açıklama
ChatClient Bu sınıf Sohbet işlevselliği için gereklidir. Abonelik bilgileriyle örneği oluşturabilir ve iş parçacıklarını oluşturmak, almak, silmek ve sohbet olaylarına abone olmak için kullanabilirsiniz.
ChatThreadClient Bu sınıf Sohbet İş Parçacığı işlevselliği için gereklidir. ChatClient aracılığıyla bir örneği alır ve iletileri göndermek/almak/güncelleştirmek/silmek, kullanıcı eklemek/kaldırmak/almak, yazma bildirimleri göndermek ve makbuzları okumak için kullanırsınız.

Sohbet iş parçacığı başlatma

Sohbet iş createThread parçacığı oluşturmak için yöntemini kullanın.

createThreadRequest , iş parçacığı isteğini açıklamak için kullanılır:

  • Bu topic sohbete bir konu vermek için kullanın. Konu başlıkları, işlevi kullanılarak sohbet iş parçacığı oluşturulduktan sonra UpdateThread güncelleştirilebilir.
  • Sohbet participants iş parçacığına eklenecek katılımcıları listeleyebilirsiniz.

Çözümlense yöntem createChatThread bir CreateChatThreadResult döndürür. Bu model, chatThread yeni oluşturulan iş parçacığının id özelliğine erişebilirsiniz. Daha sonra bir örneğini id almak için ChatThreadClient kullanabilirsiniz. Daha ChatThreadClient sonra, ileti gönderme veya katılımcı listeleme gibi iş parçacığı içinde işlem gerçekleştirmek için kullanılabilir.

async function createChatThread() {
  const createChatThreadRequest = {
    topic: "Hello, World!"
  };
  const createChatThreadOptions = {
    participants: [
      {
        id: { communicationUserId: '<USER_ID>' },
        displayName: '<USER_DISPLAY_NAME>'
      }
    ]
  };
  const createChatThreadResult = await chatClient.createChatThread(
    createChatThreadRequest,
    createChatThreadOptions
  );
  const threadId = createChatThreadResult.chatThread.id;
  return threadId;
}

createChatThread().then(async threadId => {
  console.log(`Thread created:${threadId}`);
  // PLACEHOLDERS
  // <CREATE CHAT THREAD CLIENT>
  // <RECEIVE A CHAT MESSAGE FROM A CHAT THREAD>
  // <SEND MESSAGE TO A CHAT THREAD>
  // <LIST MESSAGES IN A CHAT THREAD>
  // <ADD NEW PARTICIPANT TO THREAD>
  // <LIST PARTICIPANTS IN A THREAD>
  // <REMOVE PARTICIPANT FROM THREAD>
  });

Tarayıcı sekmenizi yenilerken konsolda şunları görüyor olun:

Thread created: <thread_id>

Sohbet iş parçacığı istemcisi al

yöntemi, getChatThreadClient zaten var olan bir iş parçacığı için bir chatThreadClient döndürür. Oluşturulan iş parçacığında işlemler gerçekleştirmek için kullanılabilir: katılımcı ekleme, ileti gönderme vb. threadId, mevcut sohbet iş parçacığının benzersiz kimliğidir.

let chatThreadClient = chatClient.getChatThreadClient(threadId);
console.log(`Chat Thread client for threadId:${threadId}`);

komutuna açıklamanın yerine <CREATE CHAT THREAD CLIENT> bu koduclient.js, tarayıcınızın sekmesini yenileyin ve konsolunu kontrol edin; şunları görüyorsanız:

Chat Thread client for threadId: <threadId>

Tüm sohbet iş parçacıklarını listele

yöntemi listChatThreads türünde bir PagedAsyncIterableIterator ChatThreadItem döndürür. Tüm sohbet iş parçacıklarını listelemek için kullanılabilir. bir tekrarlayıcı, [ChatThreadItem] iş parçacıklarını listelemekten döndürülen yanıttır

const threads = chatClient.listChatThreads();
for await (const thread of threads) {
   // your code here
}

Sohbet iş parçacığına ileti gönderme

sendMessagethreadId tarafından tanımlanan bir iş parçacığına ileti gönderirken yöntemini kullanın.

sendMessageRequest , ileti isteğini açıklamak için kullanılır:

  • Sohbet content iletisi içeriğini sağlamak için kullanın;

sendMessageOptions , isteğe bağlı parametrelerin işlemi tanımlamak için kullanılır:

  • Gönderenin senderDisplayName görünen adını belirtmek için kullanın;
  • type'text' veya 'html' gibi ileti türünü belirtmek için kullanın;
  • İletiyle metadata birlikte göndermek istediğiniz ek verileri eklemek için isteğe bağlı olarak kullanın. Bu alan, geliştiricilerin sohbet iletisi işlevselliğini genişletmesi ve kullanım örneğiniz için özel bilgiler eklemesi için bir mekanizma sağlar. Örneğin, iletide bir dosya bağlantısını paylaştığınızda, alıcının uygulamasının bunu ayrıştırarak uygun şekilde görüntüleyemelerini için meta verilere 'hasAttachment:true' eklemek iyi olabilir.

SendChatMessageResult , ileti göndermeden döndürülen yanıttır ve iletinin benzersiz kimliği olan bir kimlik içerir.

const sendMessageRequest =
{
  content: 'Please take a look at the attachment'
};
let sendMessageOptions =
{
  senderDisplayName : 'Jack',
  type: 'text',
  metadata: {
    'hasAttachment': 'true',
    'attachmentUrl': 'https://contoso.com/files/attachment.docx'
  }
};
const sendChatMessageResult = await chatThreadClient.sendMessage(sendMessageRequest, sendMessageOptions);
const messageId = sendChatMessageResult.id;
console.log(`Message sent!, message id:${messageId}`);

komutuna açıklamanın yerine <SEND MESSAGE TO A CHAT THREAD> bu kodu client.js, tarayıcınızın sekmesini yenileyin ve konsolunu kontrol edin.

Message sent!, message id:<number>

Sohbet iş parçacığından sohbet iletileri alma

Gerçek zamanlı sinyal ile yeni gelen iletileri dinlemek ve geçerli iletileri bellekte uygun şekilde güncelleştirmek için abone olabilirsiniz. Azure İletişim Hizmetleri abone olabilirsiniz olayların listesini destekler.

// open notifications channel
await chatClient.startRealtimeNotifications();
// subscribe to new notification
chatClient.on("chatMessageReceived", (e) => {
  console.log("Notification chatMessageReceived!");
  // your code here
});

Bu kodu açıklamanın yerine <RECEIVE A CHAT MESSAGE FROM A CHAT THREAD>client.js. **** Tarayıcı sekmenizi yenileyin; konsolda bir ileti Notification chatMessageReceived görüyorsanız;

Alternatif olarak, yöntemi belirtilen aralıklarla yoklayarak listMessages sohbet iletilerini alabilirsiniz.


const messages = chatThreadClient.listMessages();
for await (const message of messages) {
   // your code here
}

Bu kodu açıklamanın yerine <LIST MESSAGES IN A CHAT THREAD>client.js. **** Sekmenizi yenileyin; konsolda bu sohbet iş parçacığında gönderilen iletilerin listesini bulmanız gerekir.

listMessages tarafından belirlenemeyen farklı ileti türlerini chatMessage.type döndürür.

Diğer ayrıntılar için bkz. İleti Türleri.

Sohbet iş parçacığına katılımcı olarak kullanıcı ekleme

Bir sohbet iş parçacığı oluşturulduktan sonra kullanıcıları ekleyebilir ve bu iş parçacığından kaldırabilirsiniz. Kullanıcı ekleyerek, onlara sohbet iş parçacığına ileti gönderme ve diğer katılımcıları ekleme/kaldırma erişimi sağlarsınız.

yöntemini addParticipants çağırmadan önce, bu kullanıcı için yeni bir erişim belirteci ve kimliği edinilmiş olduğundan emin olur. Kullanıcının sohbet istemcisini başlatmak için bu erişim belirtecinin olması gerekir.

addParticipantsRequest``participantssohbet iş parçacığına eklenecek katılımcıları listeleyen istek nesnesini açıklar;

  • id, gerekli, sohbet iş parçacığına eklenecek olan iletişim tanımlayıcısıdır.
  • displayName, isteğe bağlı, iş parçacığı katılımcısı için görünen addır.
  • shareHistoryTime, isteğe bağlı, sohbet geçmişinin katılımcının paylaştığı süredir. Sohbet iş parçacığının başlatılmasından bu yana geçmişi paylaşmak için, bu özelliği, iş parçacığı oluşturma zamanından daha küçük veya ona eşit bir tarih olarak ayarlayın. Katılımcının eklendiği tarihten önce geçmiş paylaşmak için, geçerli tarih olarak ayarlayın. Kısmi geçmişi paylaşmak için, bunu tercih ettiğiniz tarihe ayarlayın.

const addParticipantsRequest =
{
  participants: [
    {
      id: { communicationUserId: '<NEW_PARTICIPANT_USER_ID>' },
      displayName: 'Jane'
    }
  ]
};

await chatThreadClient.addParticipants(addParticipantsRequest);

NEW_PARTICIPANT_USER_ID yenı bir kullanıcı kimliğiyle değiştirin <ADD NEW PARTICIPANT TO THREAD> client.js yorum yerine bu kodu ekleyin

Sohbet iş parçacığında kullanıcıları listeleme

const participants = chatThreadClient.listParticipants();
for await (const participant of participants) {
   // your code here
}

client.jsaçıklama yerine bu kodu ekleyin <LIST PARTICIPANTS IN A THREAD> , tarayıcı sekmesini **** yenileyin ve konsolu kontrol edin, bir iş parçacığında kullanıcılar hakkında bilgi görmeniz gerekir.

Kullanıcı sohbet iş parçacığından kaldır

Katılımcı eklemeye benzer şekilde, bir sohbet iş parçacığından katılımcıları kaldırabilirsiniz. ' I kaldırmak için, eklediğiniz katılımcıların kimliklerini izlemeniz gerekir.

removeParticipant participant İş parçacığından kaldırılacak iletişim kullanıcısının olduğu yöntemi kullanın.


await chatThreadClient.removeParticipant({ communicationUserId: <PARTICIPANT_ID> });
await listParticipants();

PARTICIPANT_ID , önceki adımda kullanılan BIR kullanıcı kimliğiyle değiştirin (<NEW_PARTICIPANT_USER_ID>). Bu kodu <REMOVE PARTICIPANT FROM THREAD> client.js açıklamanın yerine ekleyin,

Örnek Kod

Bu hızlı başlangıçta GitHubiçin son kodu bulun.

Önkoşullar

Başlamadan önce şunları yaptığınızdan emin olun:

Ayarlanıyor

Yeni Python uygulaması oluşturma

Terminal veya komut pencerenizi açın, uygulamanız için yeni bir dizin oluşturun ve bu uygulamaya gidin.

mkdir chat-quickstart && cd chat-quickstart

Proje kök dizininde Start-chat.py adlı bir dosya oluşturmak için bir metin düzenleyici kullanın. Temel özel durum işleme dahil olmak üzere programın yapısını ekleyin. Aşağıdaki bölümlerde bu hızlı başlangıç için tüm kaynak kodları bu dosyaya ekleyeceksiniz.

import os
# Add required SDK components from quickstart here

try:
    print('Azure Communication Services - Chat Quickstart')
    # Quickstart code goes here
except Exception as ex:
    print('Exception:')
    print(ex)

SDK yükleme

SDK 'Yı yüklemek için aşağıdaki komutu kullanın:


pip install azure-communication-chat

Nesne modeli

Aşağıdaki sınıflar ve arabirimler, Python için Azure Communication Services sohbet SDK 'sının önemli özelliklerinden bazılarını idare edebilir.

Ad Açıklama
ChatClient Bu sınıf, sohbet işlevselliği için gereklidir. Bunu Abonelik bilgileriniz ile birlikte başlatır ve iş parçacıklarını oluşturmak, almak ve silmek için kullanın.
ChatThreadClient Bu sınıf, sohbet iş parçacığı işlevselliği için gereklidir. Aracılığıyla bir örnek elde edersiniz ChatClient ve iletileri göndermek, almak, güncelleştirmek ve silmek için kullanın. Ayrıca, kullanıcıları eklemek, kaldırmak ve almak ve yazma bildirimleri ve okundu bilgisi göndermek için de kullanabilirsiniz.

Sohbet istemcisi oluşturma

Bir sohbet istemcisi oluşturmak için, Iletişim Hizmetleri uç noktasını ve önkoşul adımlarının bir parçası olarak oluşturduğunuz erişim belirtecini kullanın.

pip install azure-communication-identity
from azure.communication.chat import ChatClient, CommunicationTokenCredential

endpoint = "https://<RESOURCE_NAME>.communication.azure.com"
chat_client = ChatClient(endpoint, CommunicationTokenCredential("<Access Token>"))

Bu hızlı başlangıç, sohbet uygulamanız için belirteçleri yönetmek üzere bir hizmet katmanı oluşturmayı kapsamaz, ancak bu önerilir. Daha fazla bilgi için sohbet kavramlarının"sohbet mimarisi" bölümüne bakın.

Sohbet iş parçacığı başlatma

create_chat_threadBir sohbet iş parçacığı oluşturmak için yöntemini kullanın.

  • topicİş parçacığına bir konu vermek için kullanın. ' İ kullanarak sohbet iş parçacığı oluşturulduktan sonra konuyu güncelleştirebilirsiniz update_thread .
  • thread_participants ChatParticipant Sohbet iş parçacığına eklenecek öğesini listelemek için kullanın. , ChatParticipant CommunicationUserIdentifier Türü olarak alır user .

CreateChatThreadResult Sonuç, iş parçacığı oluşturma işleminden döndü. idOluşturulan sohbet iş parçacığını getirmek için kullanabilirsiniz. Bu id , daha sonra yöntemi kullanılarak bir nesne getirmek için kullanılabilir ChatThreadClient get_chat_thread_client . ChatThreadClientBu sohbet iş parçacığına başka sohbet işlemleri gerçekleştirmek için kullanabilirsiniz.

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)

Sohbet iş parçacığı istemcisi al

get_chat_thread_clientYöntemi, zaten var olan bir iş parçacığı için bir iş parçacığı istemcisi döndürür. Oluşturulan iş parçacığında işlemleri gerçekleştirmek için kullanabilirsiniz. Örneğin, katılımcı ekleyebilir ve ileti gönderebilirsiniz. thread_id , mevcut sohbet iş parçacığının benzersiz KIMLIĞIDIR.

ChatThreadClientBu sohbet iş parçacığına başka sohbet işlemleri gerçekleştirmek için kullanabilirsiniz.

thread_id = create_chat_thread_result.chat_thread.id
chat_thread_client = chat_client.get_chat_thread_client(thread_id)

Tüm sohbet iş parçacıklarını Listele

list_chat_threadsYöntemi türünde bir yineleyici döndürür ChatThreadItem .

  • start_timeSohbet iş parçacıklarını almak için en erken zaman noktasını belirtmek üzere kullanın.
  • results_per_pageSayfa başına döndürülen en fazla sohbet iş parçacığı sayısını belirtmek için kullanın.

Yineleyici, [ChatThreadItem] liste iş parçacıklarından döndürülen yanıttır.

from datetime import datetime, timedelta

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(chat_thread_item)
        print('Chat Thread Id: ', chat_thread_item.id)

Sohbet iş parçacığına ileti gönderin

send_messageYeni oluşturduğunuz ve tarafından tanımlanan bir sohbet iş parçacığına ileti göndermek için yöntemini kullanın thread_id .

  • contentSohbet iletisi içeriğini sağlamak için kullanın.
  • chat_message_typeİleti içerik türünü belirtmek için kullanın. Olası değerler şunlardır text html . Bir değer belirtmezseniz, varsayılan olarak olur text .
  • sender_display_nameGönderenin görünen adını belirtmek için kullanın.
  • metadataİleti ile birlikte göndermek istediğiniz ek verileri dahil etmek için isteğe bağlı olarak kullanın. Bu alan, geliştiricilerin sohbet iletisi işlevselliğini genişletmesi ve kullanım örneği için özel bilgiler eklemesi için bir mekanizma sağlar. Örneğin, iletide bir dosya bağlantısı paylaşırken, alıcının uygulamasının bunu ayrıştırabilmesi ve uygun şekilde görüntülemesi için meta verilerde ' hasAttachment: true ' eklemek isteyebilirsiniz.

SendChatMessageResult Yanıt bir ileti gönderdikten sonra döndürüldü. İletinin benzersiz KIMLIĞI olan bir KIMLIK içerir.

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='Please take a look at the attachment'
sender_display_name='sender name'
metadata={
    'hasAttachment': 'true',
    'attachmentUrl': 'https://contoso.com/files/attachment.docx'
}

# specify chat message type with pre-built enumerations
send_message_result_w_enum = chat_thread_client.send_message(content=content, sender_display_name=sender_display_name, chat_message_type=ChatMessageType.TEXT, metadata=metadata)
print("Message sent: id: ", send_message_result_w_enum.id)

Sohbet iş parçacığından sohbet iletileri alma

Belirtilen aralıklarda yöntemi yoklayarak sohbet iletileri alabilirsiniz list_messages .

  • results_per_pageSayfa başına döndürülecek en fazla ileti sayısını belirtmek için kullanın.
  • start_timeİletileri almak için en erken zaman noktasını belirtmek üzere kullanın.

Bir yineleyici, [ChatMessage] Listeleme iletilerinden döndürülen yanıttır.

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)

list_messages ve kullanarak iletiye gerçekleşen tüm düzenleme veya silme işlemleri dahil olmak üzere iletinin en son sürümünü döndürür update_message delete_message . Silinen iletiler için, ChatMessage.deleted_on datetime iletinin silindiğini gösteren bir değer döndürür. Düzenlenen iletilerde, ChatMessage.edited_on datetime iletinin ne zaman düzenlendiğini gösteren bir değer döndürür. İleti oluşturma sırasında ChatMessage.created_on , iletileri sıralamak için kullanılabilen ' yi kullanarak özgün saate erişebilirsiniz.

list_messages tarafından tanımlanabilecek farklı ileti türlerini döndürür ChatMessage.type .

Daha fazla bilgi için bkz. ileti türleri.

Okundu bilgisi gönder

Bir send_read_receipt Kullanıcı adına bir iş parçacığına okundu bilgisi olayı göndermek için yöntemini kullanın.

  • message_idGeçerli Kullanıcı tarafından okunan en son ILETI kimliğini belirtmek için kullanın.
content='hello world'

send_message_result = chat_thread_client.send_message(content)
chat_thread_client.send_read_receipt(message_id=send_message_result.id)

Sohbet iş parçacığına katılımcı olarak Kullanıcı ekleme

Bir sohbet iş parçacığı oluştururken, bundan sonra kullanıcıları ekleyebilir ve kaldırabilirsiniz. Kullanıcıları ekleyerek, sohbet iş parçacığına ileti gönderebilmeleri ve başka katılımcılar eklemek veya kaldırmak için onlara erişim izni verirsiniz. Yöntemi çağırmadan önce add_participants , bu kullanıcı için yeni bir erişim belirteci ve kimliği aldığınızdan emin olun. Kullanıcının sohbet istemcisini başlatması için erişim belirtecinin olması gerekir.

Yöntemini kullanarak sohbet iş parçacığına bir veya daha fazla kullanıcı ekleyebilirsiniz add_participants , bu, tüm kullanıcılar için yeni bir erişim belirtecinin ve kimliğin kullanılabilir olmasını sağlar.

Bir list(tuple(ChatParticipant, CommunicationError)) döndürülür. Katılımcı başarıyla eklendiğinde boş bir liste beklenmektedir. Katılımcı eklerken bir hata yaşarsanız, liste başarısız katılımcılar ile birlikte, karşılaşılan hata ile doldurulur.

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.identity 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_thread_participant = ChatParticipant(
    identifier=_user,
    display_name='Fred Flinstone',
    share_history_time=datetime.utcnow()
  ) 
  participants.append(chat_thread_participant) 

response = chat_thread_client.add_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)

Sohbet iş parçacığında iş parçacığı katılımcıları listeleme

Katılımcı eklemeye benzer şekilde, bir iş parçacığından katılımcıları de listeleyebilirsiniz.

list_participantsİş parçacığının katılımcılarını almak için kullanın. Aşağıdaki komutlardan her ikisi de isteğe bağlıdır:

  • results_per_pageSayfa başına döndürülecek en fazla katılımcı sayısını belirtmek için kullanın.
  • skipYanıtta belirtilen konuma kadar katılımcıları atlamak için kullanın.

Yineleyici, [ChatParticipant] liste katılımcılarından döndürülen yanıttır.

chat_thread_participants = chat_thread_client.list_participants()
for chat_thread_participant_page in chat_thread_participants.by_page():
    for chat_thread_participant in chat_thread_participant_page:
        print("ChatParticipant: ", chat_thread_participant)

Kodu çalıştırma

Uygulamayı komut ile uygulama dizininizden çalıştırın python .

python start-chat.py

Örnek Kod

bu hızlı başlangıç için son kodu GitHub.

Önkoşullar

Ayarlama

Yeni bir Java uygulaması oluşturma

Terminal veya komut pencerenizi açın ve Java uygulamanızı oluşturmak istediğiniz dizine gidin. Maven-archetype-quickstart şablonundan Java projesini oluşturmak için aşağıdaki komutu çalıştırın.

mvn archetype:generate -DgroupId=com.communication.quickstart -DartifactId=communication-quickstart -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false

'Oluştur' hedefinin artifactId ile aynı adla bir dizin oluşturduğuna dikkatisiniz. Bu dizinin altında, proje kaynak kodunu içerir, dizin test kaynağını içerir ve pom.xml dosyası projenin nesne src/main/java directory src/test/java Project veya POM'dır.

Java 8 veya daha yüksek bir sürümü kullanmak için uygulamanın POM dosyasını güncelleştirin:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>

Sohbet SDK'sı için paket başvurularını ekleme

POM dosyanız içinde Sohbet azure-communication-chat API'leri ile pakete bakın:

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-communication-chat</artifactId>
    <version><!-- Please refer to https://search.maven.org/artifact/com.azure/azure-communication-chat for the latest version --></version>
</dependency>

Kimlik doğrulaması için istemcinizin pakete başvurusu azure-communication-common gerekir:

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-communication-common</artifactId>
    <version><!-- Please refer to https://search.maven.org/artifact/com.azure/azure-communication-common for the latest version --></version>
</dependency>

Nesne modeli

Aşağıdaki sınıflar ve arabirimler Java için Sohbet SDK'sı Azure İletişim Hizmetleri bazı önemli özellikleri ele almaktadır.

Ad Açıklama
ChatClient Bu sınıf Sohbet işlevselliği için gereklidir. Abonelik bilgileriyle örneği oluşturabilir ve iş parçacıklarını oluşturmak, almak ve silmek için kullanabilirsiniz.
ChatAsyncClient Bu sınıf, zaman uyumsuz Sohbet işlevselliği için gereklidir. Abonelik bilgileriyle örneği oluşturabilir ve iş parçacıklarını oluşturmak, almak ve silmek için kullanabilirsiniz.
ChatThreadClient Bu sınıf Sohbet İş Parçacığı işlevselliği için gereklidir. ChatClient aracılığıyla bir örneği alır ve iletileri göndermek/almak/güncelleştirmek/silmek, kullanıcı eklemek/kaldırmak/almak, yazma bildirimleri göndermek ve makbuzları okumak için kullanırsınız.
ChatThreadAsyncClient Bu sınıf, zaman uyumsuz Sohbet İş Parçacığı işlevselliği için gereklidir. ChatAsyncClient aracılığıyla bir örneği alır ve iletileri göndermek/almak/güncelleştirmek/silmek, kullanıcı eklemek/kaldırmak/almak, yazma bildirimleri göndermek ve makbuzları okumak için kullanırsınız.

Sohbet istemcisi oluşturma

Sohbet istemcisi oluşturmak için, önküreli adımların bir parçası olarak oluşturulan İletişim Hizmeti uç noktasını ve erişim belirteci kullanacağız. Kullanıcı erişim belirteçleri, doğrudan kullanıcı kimlik doğrulaması Azure İletişim Hizmetleri. Bu belirteçleri sunucunuzda üretilen bir istemci cihazına geri iletirsiniz. Belirteci sohbet istemcinize geçmek için Common SDK'dan CommunicationTokenCredential sınıfını kullanabilirsiniz.

Sohbet Mimarisi hakkında daha fazla bilgi

İçeri aktarma deyimlerini eklerken, com.azure.communication.chat.implementation ad alanı değil yalnızca com.azure.communication.chat ve com.azure.communication.chat.models ad alanlarından içeri aktarmalar eklemeyin. Maven aracılığıyla oluşturulan App.java dosyasında, başlamak için aşağıdaki kodu kullanabilirsiniz:

package com.communication.quickstart;

import com.azure.communication.chat.*;
import com.azure.communication.chat.models.*;
import com.azure.communication.common.*;
import com.azure.core.http.rest.PagedIterable;

import java.io.*;
import java.util.*;

public class App
{
    public static void main( String[] args ) throws IOException
    {
        System.out.println("Azure Communication Services - Chat Quickstart");

        // Your unique Azure Communication service endpoint
        String endpoint = "https://<RESOURCE_NAME>.communication.azure.com";

        // User access token fetched from your trusted service
        String userAccessToken = "<USER_ACCESS_TOKEN>";

        // Create a CommunicationTokenCredential with the given access token, which is only valid until the token is valid
        CommunicationTokenCredential userCredential = new CommunicationTokenCredential(userAccessToken);

        // Initialize the chat client
        final ChatClientBuilder builder = new ChatClientBuilder();
        builder.endpoint(endpoint)
            .credential(userCredential);
        ChatClient chatClient = builder.buildClient();
    }
}

Sohbet iş parçacığı başlatma

Sohbet iş createChatThread parçacığı oluşturmak için yöntemini kullanın. createChatThreadOptions , iş parçacığı isteğini açıklamak için kullanılır.

  • Bu topic sohbete bir konu vermek için oluşturucu parametresini kullanın; Konu başlığı, işlevi kullanılarak sohbet iş parçacığı oluşturulduktan sonra UpdateThread güncelleştirilebilir.
  • İş participants parçacığına eklenecek iş parçacığı katılımcılarını listele için kullanın. ChatParticipant , Kullanıcı Erişim Belirteci hızlı başlangıçta oluşturduğunuz kullanıcıya sahip olur.

CreateChatThreadResult , bir sohbet iş parçacığı oluşturmanın yanıtıdır. Oluşturulan iş parçacığında işlem gerçekleştirme için alabilirsiniz iş parçacığı istemcisini almak için kullanılan nesnesini döndüren bir yöntem içerir: katılımcı ekleme, ileti getChatThread() ChatThread ChatThreadClient gönderme, vb. nesnesi ChatThread ayrıca iş getId() parçacığının benzersiz kimliğini alan yöntemini içerir.

CommunicationUserIdentifier identity1 = new CommunicationUserIdentifier("<USER_1_ID>");
CommunicationUserIdentifier identity2 = new CommunicationUserIdentifier("<USER_2_ID>");

ChatParticipant firstThreadParticipant = new ChatParticipant()
    .setCommunicationIdentifier(identity1)
    .setDisplayName("Participant Display Name 1");

ChatParticipant secondThreadParticipant = new ChatParticipant()
    .setCommunicationIdentifier(identity2)
    .setDisplayName("Participant Display Name 2");

CreateChatThreadOptions createChatThreadOptions = new CreateChatThreadOptions("Topic")
    .addParticipant(firstThreadParticipant)
    .addParticipant(secondThreadParticipant);

CreateChatThreadResult result = chatClient.createChatThread(createChatThreadOptions);
String chatThreadId = result.getChatThread().getId();

Sohbet iş parçacıklarını listele

Mevcut sohbet listChatThreads iş parçacıklarının listesini almak için yöntemini kullanın.

PagedIterable<ChatThreadItem> chatThreads = chatClient.listChatThreads();

chatThreads.forEach(chatThread -> {
    System.out.printf("ChatThread id is %s.\n", chatThread.getId());
});

Sohbet iş parçacığı istemcisi al

yöntemi, getChatThreadClient zaten var olan bir iş parçacığı için bir iş parçacığı istemcisi döndürür. Oluşturulan iş parçacığında işlemler gerçekleştirmek için kullanılabilir: katılımcı ekleme, ileti gönderme vb. chatThreadId , mevcut sohbet iş parçacığının benzersiz kimliğidir.

ChatThreadClient chatThreadClient = chatClient.getChatThreadClient(chatThreadId);

Sohbet iş parçacığına ileti gönderme

yeni sendMessage oluşturduğunuz iş parçacığına chatThreadId ile tanımlanan bir ileti göndermek için yöntemini kullanın. sendChatMessageOptions sohbet iletisi isteğini açıklamak için kullanılır.

  • Sohbet content iletisi içeriğini sağlamak için kullanın.
  • Sohbet type iletisi içerik türünü, TEXT veya HTML'yi belirtmek için kullanın.
  • Gönderenin senderDisplayName görünen adını belirtmek için kullanın.
  • İletiyle metadata birlikte göndermek istediğiniz ek verileri eklemek için isteğe bağlı olarak kullanın. Bu alan, geliştiricilerin sohbet iletisi işlevselliğini genişletmesi ve kullanım örneğiniz için özel bilgiler eklemesi için bir mekanizma sağlar. Örneğin, iletide bir dosya bağlantısını paylaştığınızda, alıcının uygulamasının bunu ayrıştırarak uygun şekilde görüntüleyemelerini için meta verilere 'hasAttachment:true' eklemek iyi olabilir.

Yanıt, sendChatMessageResult id iletinin benzersiz kimliği olan bir içerir.

Map<String, String> metadata = new HashMap<String, String>();
metadata.put("hasAttachment", "true");
metadata.put("attachmentUrl", "https://contoso.com/files/attachment.docx");

SendChatMessageOptions sendChatMessageOptions = new SendChatMessageOptions()
    .setContent("Please take a look at the attachment")
    .setType(ChatMessageType.TEXT)
    .setSenderDisplayName("Sender Display Name")
    .setMetadata(metadata);

SendChatMessageResult sendChatMessageResult = chatThreadClient.sendMessage(sendChatMessageOptions);
String chatMessageId = sendChatMessageResult.getId();

Sohbet iş parçacığından sohbet iletileri alma

Sohbet iş parçacığı istemcisini belirtilen aralıklarla listMessages yöntemini yoklama ile sohbet iletilerini alabilirsiniz.

chatThreadClient.listMessages().forEach(message -> {
    System.out.printf("Message id is %s.\n", message.getId());
});

listMessages , .editMessage() ve .deleteMessage() kullanılarak iletiye yapılan tüm düzenlemeler veya silmeler dahil olmak üzere iletinin en son sürümünü döndürür. Silinen iletiler chatMessage.getDeletedOn() için, iletinin ne zaman silindi olduğunu belirten bir tarih saat değeri döndürür. Düzenlenen iletiler için, chatMessage.getEditedOn() iletinin ne zaman düzen gerektiğini belirten bir tarih saat döndürür. İleti oluşturmanın ilk zamanlarına kullanılarak erişilebilir chatMessage.getCreatedOn() ve iletileri sıralamak için kullanılabilir.

İleti türleri hakkında daha fazla bilgi için buraya tıklayın: İleti Türleri.

Okundu alındısı gönderme

Okuma sendReadReceipt makbuzu olayı bir kullanıcı adına bir sohbet iş parçacığına gönderi yapmak için yöntemini kullanın. chatMessageId , okunan sohbet iletinin benzersiz kimliğidir.

String chatMessageId = message.getId();
chatThreadClient.sendReadReceipt(chatMessageId);

Sohbet katılımcılarını listele

listParticipantschatThreadId ile tanımlanan sohbet iş parçacığının katılımcılarını içeren sayfalı bir koleksiyon almak için kullanın.

PagedIterable<ChatParticipant> chatParticipantsResponse = chatThreadClient.listParticipants();
chatParticipantsResponse.forEach(chatParticipant -> {
    System.out.printf("Participant id is %s.\n", ((CommunicationUserIdentifier) chatParticipant.getCommunicationIdentifier()).getId());
});

Sohbet iş parçacığına katılımcı olarak bir kullanıcı ekleme

Bir sohbet iş parçacığı oluşturulduktan sonra kullanıcıları ekleyebilir ve bu iş parçacığından kaldırabilirsiniz. Kullanıcı ekleyerek, onlara sohbet iş parçacığına ileti gönderme ve diğer katılımcıları ekleme/kaldırma erişimi sağlarsınız. Bu kullanıcı için yeni bir erişim belirteci ve kimliği alınarak başlamalısiniz. addParticipants yöntemini çağırmadan önce, bu kullanıcı için yeni bir erişim belirteci ve kimliği edintiğinize emin olur. Kullanıcının sohbet istemcisini başlatmak için bu erişim belirtecinin olması gerekir.

İş addParticipants parçacığına katılımcı eklemek için yöntemini kullanın.

  • communicationIdentifier, gerekli, Kullanıcı Erişim Belirteci hızlı başlangıçta CommunicationIdentityClient tarafından oluşturduğunuz CommunicationIdentifier'dır.
  • displayName, isteğe bağlı, iş parçacığı katılımcısı için görünen addır.
  • shareHistoryTime, isteğe bağlı olarak, sohbet geçmişinin katılımcıyla paylaşılacak zamanıdır. Sohbet iş parçacığının oluşturulmasından bu yana geçmişi paylaşmak için, bu özelliği iş parçacığı oluşturma süresine eşit veya iş parçacığı oluşturma zamanından daha kısa bir tarihe ayarlayın. Katılımcının eklenme tarihiyle önceki bir geçmişi paylaşmak için bunu geçerli tarihe ayarlayın. Kısmi geçmişi paylaşmak için gerekli tarihe ayarlayın.
List<ChatParticipant> participants = new ArrayList<ChatParticipant>();

CommunicationUserIdentifier identity3 = new CommunicationUserIdentifier("<USER_3_ID>");
CommunicationUserIdentifier identity4 = new CommunicationUserIdentifier("<USER_4_ID>");

ChatParticipant thirdThreadParticipant = new ChatParticipant()
    .setCommunicationIdentifier(identity3)
    .setDisplayName("Display Name 3");

ChatParticipant fourthThreadParticipant = new ChatParticipant()
    .setCommunicationIdentifier(identity4)
    .setDisplayName("Display Name 4");

participants.add(thirdThreadParticipant);
participants.add(fourthThreadParticipant);

chatThreadClient.addParticipants(participants);

Kodu çalıştırma

Aşağıdaki komutu kullanarak pom.xml dosyasını içeren dizine gidin ve projeyi mvn derle.

mvn compile

Ardından paketi derlemeniz gerekir.

mvn package

Uygulamayı yürütmek mvn için aşağıdaki komutu çalıştırın.

mvn exec:java -Dexec.mainClass="com.communication.quickstart.App" -Dexec.cleanupDaemonThreads=false

Örnek Kod

bu hızlı başlangıç için son kodu GitHub.

Önkoşullar

Başlamadan önce şunların doğru olduğundan emin olun:

  • Etkin aboneliğe sahip bir Azure hesabı oluşturun. Ayrıntılar için bkz. Ücretsiz hesap oluşturma.
  • yükleme Android Studio,bağımlılıkları yükleme Android Studio hızlı başlangıç için bir Android uygulaması oluşturmak için Android Studio'i kullanıyoruz.
  • Bir Azure İletişim Hizmetleri oluşturun. Ayrıntılar için bkz. Kaynak Azure İletişim Hizmetleri oluşturma. Bu hızlı başlangıç için kaynak uç noktanızı kaydetmeniz gerekir.
  • İki İletişim Hizmeti Kullanıcısı oluşturun ve kullanıcılara bir kullanıcı erişim belirteci Kullanıcı Erişim Belirteci verin. Kapsamı sohbet etmek için ayarlamayı unutmayın ve belirteç dizesini ve userId dizesini not edin. Bu hızlı başlangıçta, ilk katılımcısı olan bir iş parçacığı oluşturacak ve ardından iş parçacığına ikinci bir katılımcı ekleyelim.

Ayarlama

Yeni android uygulaması oluşturma

  1. Dosyayı Android Studio ve öğesini Create a new project seçin.
  2. Sonraki pencerede proje şablonu Empty Activity olarak öğesini seçin.
  3. Seçenekleri seçerken proje ChatQuickstart adı olarak girin.
  4. Ardından seçeneğine tıklayın ve projenin oluşturulacak dizini seçin.

Kitaplıkları yükleme

Gerekli İletişim Hizmetleri bağımlılıklarını yüklemek için Gradle'i kullanacağız. Komut satırına gidin ve projenin kök dizinine ChatQuickstart gidin. Uygulamanın build.gradle dosyasını açın ve hedefe aşağıdaki bağımlılıkları ChatQuickstart ekleyin:

implementation 'com.azure.android:azure-communication-common:' + $azureCommunicationCommonVersion
implementation 'com.azure.android:azure-communication-chat:' + $azureCommunicationChatVersion
implementation 'org.slf4j:slf4j-log4j12:1.7.29'

En son sürüm https://search.maven.org/artifact/com.azure.android/azure-communication-common numaraları https://search.maven.org/artifact/com.azure.android/azure-communication-chat için ve 'ye bakın.

Root build.gradle'daki paketleme seçeneklerinde meta dosyaları hariç tut

android {
   ...
    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/license'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/notice'
        exclude 'META-INF/ASL2.0'
        exclude("META-INF/*.md")
        exclude("META-INF/*.txt")
        exclude("META-INF/*.kotlin_module")
    }
}

(Alternatif) Kitaplıkları Maven aracılığıyla yüklemek için

Maven derleme sistemini kullanarak kitaplığı projenize içeri aktarmanız için, yapıt kimliğini ve kullanmak istediğiniz sürümü belirterek kitaplığı uygulama dependencies pom.xml dosyanın bölümüne ekleyin:

<dependency>
  <groupId>com.azure.android</groupId>
  <artifactId>azure-communication-chat</artifactId>
  <version><!-- Please refer to https://search.maven.org/artifact/com.azure.android/azure-communication-chat for the latest version --></version>
</dependency>

Yer tutucuları ayarlama

dosyasını açın ve MainActivity.java düzenleyin. Bu Hızlı Başlangıçta kodumuz 'a ekleniyor MainActivity ve konsolda çıktıyı görüntüleniyor. Bu hızlı başlangıç, kullanıcı arabirimini geliştirmeyle ilgili değildir. Dosyanın en üstünde , ve diğer Communication common Communication chat sistem kitaplıklarını içeri aktarın:

import com.azure.android.communication.chat.*;
import com.azure.android.communication.chat.models.*;
import com.azure.android.communication.common.*;

import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

import com.jakewharton.threetenabp.AndroidThreeTen;

import java.util.ArrayList;
import java.util.List;

Aşağıdaki kodu dosyasındaki MainActivity sınıfına MainActivity.java kopyalayın:

    private String endpoint = "https://<resource>.communication.azure.com";
    private String firstUserId = "<first_user_id>";
    private String secondUserId = "<second_user_id>";
    private String firstUserAccessToken = "<first_user_access_token>";
    private String threadId = "<thread_id>";
    private String chatMessageId = "<chat_message_id>";
    private final String sdkVersion = "<chat_sdk_version>";
    private static final String APPLICATION_ID = "Chat Quickstart App";
    private static final String SDK_NAME = "azure-communication-com.azure.android.communication.chat";
    private static final String TAG = "Chat Quickstart App";
    private ChatAsyncClient chatAsyncClient;

    private void log(String msg) {
        Log.i(TAG, msg);
        Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
    }
    
   @Override
    protected void onStart() {
        super.onStart();
        try {
            AndroidThreeTen.init(this);

            // <CREATE A CHAT CLIENT>

            // <CREATE A CHAT THREAD>

            // <CREATE A CHAT THREAD CLIENT>

            // <SEND A MESSAGE>
            
            // <RECEIVE CHAT MESSAGES>

            // <ADD A USER>

            // <LIST USERS>

            // <REMOVE A USER>
            
            // <<SEND A TYPING NOTIFICATION>>
            
            // <<SEND A READ RECEIPT>>
               
            // <<LIST READ RECEIPTS>>
        } catch (Exception e){
            System.out.println("Quickstart failed: " + e.getMessage());
        }
    }
  1. yerine <resource> İletişim Hizmetleri kaynağınızı seçin.
  2. ve <first_user_id> <second_user_id> yerine önkoşul adımlarının parçası olarak oluşturulan geçerli İletişim Hizmetleri kullanıcı kimliklerini uygulayın.
  3. yerine <first_user_access_token> önkoşul adımlarının <first_user_id> bir parçası olarak oluşturulan İletişim Hizmetleri erişim belirteci ile değiştirin.
  4. yerine <chat_sdk_version> Azure İletişim Sohbeti SDK'sı sürümünü kullanın.

Aşağıdaki adımlarda, Azure İletişim Hizmetleri Chat kitaplığını kullanarak yer tutucuları örnek kodla değiştiracağız.

Sohbet istemcisi oluşturma

açıklamasını aşağıdaki <CREATE A CHAT CLIENT> kodla değiştirin (içeri aktarma deyimlerini dosyanın en üstüne girin):

import com.azure.android.core.http.policy.UserAgentPolicy;

chatAsyncClient = new ChatClientBuilder()
    .endpoint(endpoint)
    .credential(new CommunicationTokenCredential(firstUserAccessToken))
    .addPolicy(new UserAgentPolicy(APPLICATION_ID, SDK_NAME, sdkVersion))
    .buildAsyncClient();

Nesne modeli

Aşağıdaki sınıflar ve arabirimler JavaScript için Azure İletişim Hizmetleri Sohbet SDK'sı'nın önemli özelliklerinden bazılarını ele almaktadır.

Ad Açıklama
ChatClient/ChatAsyncClient Bu sınıf Sohbet işlevselliği için gereklidir. Abonelik bilgileriyle örneği oluşturabilir ve iş parçacıklarını oluşturmak, almak, silmek ve sohbet olaylarına abone olmak için kullanabilirsiniz.
ChatThreadClient/ChatThreadAsyncClient Bu sınıf Sohbet İş Parçacığı işlevselliği için gereklidir. ChatClient aracılığıyla bir örneği alır ve iletileri göndermek/almak/güncelleştirmek/silmek, kullanıcı eklemek/kaldırmak/almak, yazma bildirimleri göndermek ve makbuzları okumak için kullanırsınız.

Sohbet iş parçacığı başlatma

İlk kullanıcıyla yeni ChatAsyncClient bir iş parçacığı oluşturmak için kendi iş parçacığımızı kullan kullanıruz.

<CREATE A CHAT THREAD> açıklamasını aşağıdaki kodla değiştirin:

// A list of ChatParticipant to start the thread with.
List<ChatParticipant> participants = new ArrayList<>();
// The display name for the thread participant.
String displayName = "initial participant";
participants.add(new ChatParticipant()
    .setCommunicationIdentifier(new CommunicationUserIdentifier(firstUserId))
    .setDisplayName(displayName));

// The topic for the thread.
final String topic = "General";
// Optional, set a repeat request ID.
final String repeatabilityRequestID = "";
// Options to pass to the create method.
CreateChatThreadOptions createChatThreadOptions = new CreateChatThreadOptions()
    .setTopic(topic)
    .setParticipants(participants)
    .setIdempotencyToken(repeatabilityRequestID);

CreateChatThreadResult createChatThreadResult =
    chatAsyncClient.createChatThread(createChatThreadOptions).get();
ChatThreadProperties chatThreadProperties = createChatThreadResult.getChatThreadProperties();
threadId = chatThreadProperties.getId();

Sohbet iş parçacığı istemcisi al

Artık bir Sohbet iş parçacığı oluşturduğuna göre, iş parçacığında işlem ChatThreadAsyncClient gerçekleştirmek için bir elde edilir. <CREATE A CHAT THREAD CLIENT> açıklamasını aşağıdaki kodla değiştirin:

ChatThreadAsyncClient chatThreadAsyncClient = new ChatThreadClientBuilder()
    .endpoint(endpoint)
    .credential(new CommunicationTokenCredential(firstUserAccessToken))
    .addPolicy(new UserAgentPolicy(APPLICATION_ID, SDK_NAME, sdkVersion))
    .chatThreadId(threadId)
    .buildAsyncClient();

Sohbet iş parçacığına ileti gönderme

Şimdi bu iş parçacığına ileti göndeririz.

<SEND A MESSAGE> açıklamasını aşağıdaki kodla değiştirin:

// The chat message content, required.
final String content = "Please take a look at the attachment";

// The display name of the sender, if null (i.e. not specified), an empty name will be set.
final String senderDisplayName = "An important person";

// Use metadata optionally to include any additional data you want to send along with the message.
// This field provides a mechanism for developers to extend chat message functionality and add
// custom information for your use case. For example, when sharing a file link in the message, you
// might want to add 'hasAttachment:true' in metadata so that recipient's application can parse
// that and display accordingly.
final Map<String, String> metadata = new HashMap<String, String>();
metadata.put("hasAttachment", "true");
metadata.put("attachmentUrl", "https://contoso.com/files/attachment.docx");

SendChatMessageOptions chatMessageOptions = new SendChatMessageOptions()
    .setType(ChatMessageType.TEXT)
    .setContent(content)
    .setSenderDisplayName(senderDisplayName)
    .setMetadata(metadata);

// A string is the response returned from sending a message, it is an id, which is the unique ID
// of the message.
chatMessageId = chatThreadAsyncClient.sendMessage(chatMessageOptions).get().getId();

Sohbet iş parçacığından sohbet iletileri alma

Gerçek zamanlı bildirimler

Gerçek zamanlı sinyal ile yeni gelen iletilere abone olabilir ve geçerli iletileri bellekte uygun şekilde güncelleştirebilirsiniz. Azure İletişim Hizmetleri abone olabilirsiniz olayların listesini destekler.

açıklamasını aşağıdaki <RECEIVE CHAT MESSAGES> kodla değiştirin (içeri aktarma deyimlerini dosyanın en üstüne girin):


// Start real time notification
chatAsyncClient.startRealtimeNotifications(firstUserAccessToken, getApplicationContext());

// Register a listener for chatMessageReceived event
chatAsyncClient.addEventHandler(ChatEventType.CHAT_MESSAGE_RECEIVED, (ChatEvent payload) -> {
    ChatMessageReceivedEvent chatMessageReceivedEvent = (ChatMessageReceivedEvent) payload;
    // You code to handle chatMessageReceived event
    
});

Önemli

Bilinen sorun: Android Sohbet ve Arama SDK'sı aynı uygulamada birlikte kullanırken Sohbet SDK'sı gerçek zamanlı bildirimler özelliği çalışmıyor. Bir bağımlılık çözme sorunuyla karşı karşılasıyor olabilir. Bir çözüm üzerinde çalışırken, uygulamanın build.gradle dosyasına aşağıdaki bağımlılık bilgilerini ekleyerek ve kullanıcılara gelen iletileri görüntülemek için GetMessages API'sini yoklamayla gerçek zamanlı bildirimler özelliğini kapatabilirsiniz.

implementation ("com.azure.android:azure-communication-chat:1.0.0") {
    exclude group: 'com.microsoft', module: 'trouter-client-android'
}
implementation 'com.azure.android:azure-communication-calling:1.0.0'

Yukarıdaki güncelleştirmede, uygulama veya gibi herhangi bir bildirim API'sini dokunmaya çalışırsa chatAsyncClient.startRealtimeNotifications() çalışma zamanı hatası olacağını chatAsyncClient.addEventHandler() unutmayın.

Anında iletme bildirimleri

Not

Şu anda sohbet anında Android SDK bildirimleri yalnızca 1.1.0-beta.4 sürümündeki sürümler için de destek almaktadır.

Anında İlerlerken, mobil uygulamanın ön planda çalışmama durumuyla ilgili olarak, bir sohbet iş parçacığında oluşan gelen iletiler ve diğer işlemler için istemcilere bildirim verilmesini sağlar. Azure İletişim Hizmetleri abone olabilirsiniz olayların listesini destekler.

  1. ChatQuickstart projesiyle Firebase Cloud Messaging'i ayarlayın. Create a Firebase project Register your app with Firebase Add a Firebase configuration file Firebase Belgelerinde Add Firebase SDKs to your app , ve Edit your app manifest adımlarını tamamlayın.

  2. İletişim Hizmetleri kaynağınız ile aynı abonelikte bir Bildirim Hub'ı oluşturun, hub için Firebase Cloud Messaging ayarlarınızı yapılandırın ve Bildirim Hub'ını İletişim Hizmetleri kaynağınıza bağlayın. Bkz. Bildirim Hub'ı sağlama.

  3. dosyasının aynı MyFirebaseMessagingService.java yolunda yeni bir dosya MainActivity.java oluşturun. Aşağıdaki kodu dosyasına MyFirebaseMessagingService.java kopyalayın. yerine içinde kullanılan <your_package_name> paket adını değiştirmeniz MainActivity.java gerekir. için kendi değerinizi <your_intent_name> kullanabilirsiniz. Bu değer aşağıdaki 6. adımda kullanılabilir.

       package <your_package_name>;
    
       import android.content.Intent;
       import android.util.Log;
    
       import androidx.localbroadcastmanager.content.LocalBroadcastManager;
    
       import com.azure.android.communication.chat.models.ChatPushNotification;
       import com.google.firebase.messaging.FirebaseMessagingService;
       import com.google.firebase.messaging.RemoteMessage;
    
       import java.util.concurrent.Semaphore;
    
       public class MyFirebaseMessagingService extends FirebaseMessagingService {
           private static final String TAG = "MyFirebaseMsgService";
           public static Semaphore initCompleted = new Semaphore(1);
    
           @Override
           public void onMessageReceived(RemoteMessage remoteMessage) {
               try {
                   Log.d(TAG, "Incoming push notification.");
    
                   initCompleted.acquire();
    
                   if (remoteMessage.getData().size() > 0) {
                       ChatPushNotification chatPushNotification =
                           new ChatPushNotification().setPayload(remoteMessage.getData());
                       sendPushNotificationToActivity(chatPushNotification);
                   }
    
                   initCompleted.release();
               } catch (InterruptedException e) {
                   Log.e(TAG, "Error receiving push notification.");
               }
           }
    
           private void sendPushNotificationToActivity(ChatPushNotification chatPushNotification) {
               Log.d(TAG, "Passing push notification to Activity: " + chatPushNotification.getPayload());
               Intent intent = new Intent("<your_intent_name>");
               intent.putExtra("PushNotificationPayload", chatPushNotification);
               LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
           }
       }
    
    
  4. dosyasının en üstüne MainActivity.java aşağıdaki içeri aktarmayı ekleyin:

       import android.content.BroadcastReceiver;
       import android.content.Context;
       import android.content.Intent;
       import android.content.IntentFilter;
    
       import androidx.localbroadcastmanager.content.LocalBroadcastManager;
       import com.azure.android.communication.chat.models.ChatPushNotification;
       import com.google.android.gms.tasks.OnCompleteListener;
       import com.google.android.gms.tasks.Task;
       import com.google.firebase.messaging.FirebaseMessaging;
    
  5. Sınıfına aşağıdaki kodu MainActivity ekleyin:

       private BroadcastReceiver firebaseMessagingReceiver = new BroadcastReceiver() {
           @Override
           public void onReceive(Context context, Intent intent) {
               ChatPushNotification pushNotification =
                   (ChatPushNotification) intent.getParcelableExtra("PushNotificationPayload");
    
               Log.d(TAG, "Push Notification received in MainActivity: " + pushNotification.getPayload());
    
               boolean isHandled = chatAsyncClient.handlePushNotification(pushNotification);
               if (!isHandled) {
                   Log.d(TAG, "No listener registered for incoming push notification!");
               }
           }
       };
    
    
       private void startFcmPushNotification() {
           FirebaseMessaging.getInstance().getToken()
               .addOnCompleteListener(new OnCompleteListener<String>() {
                   @Override
                   public void onComplete(@NonNull Task<String> task) {
                       if (!task.isSuccessful()) {
                           Log.w(TAG, "Fetching FCM registration token failed", task.getException());
                           return;
                       }
    
                       // Get new FCM registration token
                       String token = task.getResult();
    
                       // Log and toast
                       Log.d(TAG, "Fcm push token generated:" + token);
                       Toast.makeText(MainActivity.this, token, Toast.LENGTH_SHORT).show();
    
                       chatAsyncClient.startPushNotifications(token, new Consumer<Throwable>() {
                           @Override
                           public void accept(Throwable throwable) {
                               Log.w(TAG, "Registration failed for push notifications!", throwable);
                           }
                       });
                   }
               });
       }
    
    
  6. sınıfında update onCreate MainActivity işlevi.

       @Override
       protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_main);
    
           LocalBroadcastManager
               .getInstance(this)
               .registerReceiver(
                   firebaseMessagingReceiver,
                   new IntentFilter("<your_intent_name>"));
       }
    
  7. Aşağıdaki kodu açıklamanın altına <RECEIVE CHAT MESSAGES> girin:

   startFcmPushNotification();

   chatAsyncClient.addPushNotificationHandler(CHAT_MESSAGE_RECEIVED, (ChatEvent payload) -> {
       Log.i(TAG, "Push Notification CHAT_MESSAGE_RECEIVED.");
       ChatMessageReceivedEvent event = (ChatMessageReceivedEvent) payload;
       // You code to handle ChatMessageReceived event
   });

Sohbet iş parçacığına katılımcı olarak kullanıcı ekleme

<ADD A USER> açıklamasını aşağıdaki kodla değiştirin:

// The display name for the thread participant.
String secondUserDisplayName = "a new participant";
ChatParticipant participant = new ChatParticipant()
    .setCommunicationIdentifier(new CommunicationUserIdentifier(secondUserId))
    .setDisplayName(secondUserDisplayName);
        
chatThreadAsyncClient.addParticipant(participant);

Bir iş parçacığında kullanıcıları listele

açıklamasını <LIST USERS> aşağıdaki kodla değiştirin (içeri aktarma deyimlerini dosyanın en üstüne girin):

import com.azure.android.core.rest.util.paging.PagedAsyncStream;
import com.azure.android.core.util.RequestContext;

// The maximum number of participants to be returned per page, optional.
int maxPageSize = 10;

// Skips participants up to a specified position in response.
int skip = 0;

// Options to pass to the list method.
ListParticipantsOptions listParticipantsOptions = new ListParticipantsOptions()
    .setMaxPageSize(maxPageSize)
    .setSkip(skip);

PagedAsyncStream<ChatParticipant> participantsPagedAsyncStream =
      chatThreadAsyncClient.listParticipants(listParticipantsOptions, RequestContext.NONE);

participantsPagedAsyncStream.forEach(chatParticipant -> {
    // You code to handle participant
});

Sohbet iş parçacığından kullanıcı kaldırma

Şimdi iş parçacığından ikinci kullanıcı kaldıracak.

<REMOVE A USER> açıklamasını aşağıdaki kodla değiştirin:

// Using the unique ID of the participant.
chatThreadAsyncClient.removeParticipant(new CommunicationUserIdentifier(secondUserId)).get();

Yazma bildirimi gönderme

<SEND A TYPING NOTIFICATION> açıklamasını aşağıdaki kodla değiştirin:

chatThreadAsyncClient.sendTypingNotification().get();

Okundu makbuzu gönderme

Yukarıda gönderilen ileti için okuma makbuzu göndeririz.

<SEND A READ RECEIPT> açıklamasını aşağıdaki kodla değiştirin:

chatThreadAsyncClient.sendReadReceipt(chatMessageId).get();

Okunan makbuzları listele

<READ RECEIPTS> açıklamasını aşağıdaki kodla değiştirin:

// The maximum number of participants to be returned per page, optional.
maxPageSize = 10;
// Skips participants up to a specified position in response.
skip = 0;
// Options to pass to the list method.
ListReadReceiptOptions listReadReceiptOptions = new ListReadReceiptOptions()
    .setMaxPageSize(maxPageSize)
    .setSkip(skip);

PagedAsyncStream<ChatMessageReadReceipt> readReceiptsPagedAsyncStream =
      chatThreadAsyncClient.listReadReceipts(listReadReceiptOptions, RequestContext.NONE);

readReceiptsPagedAsyncStream.forEach(readReceipt -> {
    // You code to handle readReceipt
});

Kodu çalıştırma

Proje Android Studio oluşturmak ve çalıştırmak için Çalıştır düğmesine basın. konsolunda, koddan çıkışı ve ChatClient'dan günlükleyici çıktısını görüntüebilirsiniz.

Örnek Kod

Bu hızlı başlangıçta GitHubiçin son kodu bulun.

Önkoşullar

Başlamadan önce şunları yaptığınızdan emin olun:

Ayarlanıyor

Yeni bir C# uygulaması oluşturma

Konsol penceresinde (cmd, PowerShell veya Bash gibi), dotnet new adıyla yeni bir konsol uygulaması oluşturmak için komutunu kullanın ChatQuickstart . Bu komut, tek bir kaynak dosyası olan basit bir "Merhaba Dünya" C# projesi oluşturur: program. cs.

dotnet new console -o ChatQuickstart

Dizininizi yeni oluşturulan uygulama klasörüyle değiştirin ve dotnet build uygulamanızı derlemek için komutunu kullanın.

cd ChatQuickstart
dotnet build

Paketi yükler

.NET için Azure Iletişimi sohbet SDK 'sını yükler

dotnet add package Azure.Communication.Chat

Nesne modeli

Aşağıdaki sınıflar, C# için Azure Communication Services sohbet SDK 'sının önemli özelliklerinden bazılarını idare edebilir.

Ad Açıklama
ChatClient Bu sınıf, sohbet işlevselliği için gereklidir. Bunu Abonelik bilgileriniz ile birlikte başlatır ve iş parçacıklarını oluşturmak, almak ve silmek için kullanın.
ChatThreadClient Bu sınıf, sohbet Iş parçacığı işlevselliği için gereklidir. ChatClient aracılığıyla bir örnek elde edersiniz ve bu örneği kullanarak ileti gönderme/alma/güncelleştirme/silme, katılımcıları ekleme/kaldırma/alma, yazma bildirimleri gönderme ve okundu bilgisi gönderme.

Sohbet istemcisi oluşturma

Bir sohbet istemcisi oluşturmak için, Iletişim Hizmetleri uç noktanızı ve önkoşul adımlarının bir parçası olarak oluşturulan erişim belirtecini kullanacaksınız. CommunicationIdentityClientKullanıcı oluşturmak ve sohbet istemcinize geçirilecek bir belirteç vermek Için kimlik SDK 'sının sınıfını kullanmanız gerekir.

Kullanıcı erişim belirteçlerihakkında daha fazla bilgi edinin.

Bu hızlı başlangıç, sohbet uygulamanız için belirteçleri yönetmek üzere bir hizmet katmanı oluşturmayı kapsamaz, ancak önerilir. Sohbet mimarisi hakkında daha fazla bilgi edinin

Aşağıdaki kod parçacıklarını kopyalayın ve kaynak dosyasına yapıştırın: program. cs

using Azure;
using Azure.Communication;
using Azure.Communication.Chat;
using System;

namespace ChatQuickstart
{
    class Program
    {
        static async System.Threading.Tasks.Task Main(string[] args)
        {
            // Your unique Azure Communication service endpoint
            Uri endpoint = new Uri("https://<RESOURCE_NAME>.communication.azure.com");

            CommunicationTokenCredential communicationTokenCredential = new CommunicationTokenCredential(<Access_Token>);
            ChatClient chatClient = new ChatClient(endpoint, communicationTokenCredential);
        }
    }
}

Sohbet iş parçacığı başlatma

createChatThreadSohbet iş parçacığı oluşturmak Için chatClient üzerindeki yöntemi kullanın

  • topicBu sohbete bir konu vermek için kullanın; Konu, işlevi kullanılarak sohbet iş parçacığı oluşturulduktan sonra güncelleştirilemeyebilir UpdateTopic .
  • participants ChatParticipant Sohbet iş parçacığına eklenecek nesne listesini geçirmek için özelliğini kullanın. ChatParticipantNesne bir nesne ile başlatılır CommunicationIdentifier . CommunicationIdentifier , veya türünde olabilir CommunicationUserIdentifier MicrosoftTeamsUserIdentifier PhoneNumberIdentifier . Örneğin, bir nesneyi almak için CommunicationIdentifier , bir Kullanıcı oluşturmak için aşağıdaki yönergeyi uygulayarak oluşturduğunuz bir erişim kimliği geçirmeniz gerekir

Yönteminden yanıt nesnesi createChatThread chatThread ayrıntıları içerir. Katılımcı ekleme, ileti gönderme, ileti silme, vb. gibi sohbet iş parçacığı işlemleriyle etkileşimde bulunmak için istemci chatThreadClient örneğinin, GetChatThreadClient istemci üzerindeki yöntemi kullanılarak örneği oluşturulması gerekir ChatClient .

var chatParticipant = new ChatParticipant(identifier: new CommunicationUserIdentifier(id: "<Access_ID>"))
{
    DisplayName = "UserDisplayName"
};
CreateChatThreadResult createChatThreadResult = await chatClient.CreateChatThreadAsync(topic: "Hello world!", participants: new[] { chatParticipant });
ChatThreadClient chatThreadClient = chatClient.GetChatThreadClient(threadId: createChatThreadResult.ChatThread.Id);
string threadId = chatThreadClient.Id;

Sohbet iş parçacığı istemcisi al

GetChatThreadClientYöntemi, zaten var olan bir iş parçacığı için bir iş parçacığı istemcisi döndürür. Oluşturulan iş parçacığında işlem gerçekleştirmek için kullanılabilir: üye ekleme, ileti gönderme vb. ThreadId, mevcut sohbet iş parçacığının benzersiz KIMLIĞIDIR.

string threadId = "<THREAD_ID>";
ChatThreadClient chatThreadClient = chatClient.GetChatThreadClient(threadId: threadId);

Tüm sohbet iş parçacıklarını Listele

GetChatThreadsKullanıcının parçası olduğu tüm sohbet iş parçacıklarını almak için kullanın.

AsyncPageable<ChatThreadItem> chatThreadItems = chatClient.GetChatThreadsAsync();
await foreach (ChatThreadItem chatThreadItem in chatThreadItems)
{
    Console.WriteLine($"{ chatThreadItem.Id}");
}

Sohbet iş parçacığına ileti gönderin

SendMessageBir iş parçacığına ileti göndermek için kullanın.

  • contentİleti için içerik sağlamak üzere kullanın, bu gereklidir.
  • typeİletinin içerik türü için ' text ' veya ' HTML ' gibi kullanın. Belirtilmemişse, ' text ' ayarlanır.
  • senderDisplayNameGönderenin görünen adını belirtmek için kullanın. Belirtilmemişse boş dize ayarlanır.
  • metadataİleti ile birlikte göndermek istediğiniz ek verileri dahil etmek için isteğe bağlı olarak kullanın. Bu alan, geliştiricilerin sohbet iletisi işlevselliğini genişletmesi ve kullanım örneği için özel bilgiler eklemesi için bir mekanizma sağlar. Örneğin, iletide bir dosya bağlantısı paylaşırken, alıcının uygulamasının bunu ayrıştırabilmesi ve uygun şekilde görüntülemesi için meta verilerde ' hasAttachment: true ' eklemek isteyebilirsiniz.
SendChatMessageOptions sendChatMessageOptions = new SendChatMessageOptions()
{
    Content = "Please take a look at the attachment",
    MessageType = ChatMessageType.Text
};
sendChatMessageOptions.Metadata["hasAttachment"] = "true";
sendChatMessageOptions.Metadata["attachmentUrl"] = "https://contoso.com/files/attachment.docx";

SendChatMessageResult sendChatMessageResult = await chatThreadClient.SendMessageAsync(sendChatMessageOptions);

string messageId = sendChatMessageResult.Id;

Sohbet iş parçacığından sohbet iletileri alma

Sohbet GetMessages iş parçacığı istemcisinde belirtilen aralıklarda yöntemi yoklayarak sohbet iletileri alabilirsiniz.

AsyncPageable<ChatMessage> allMessages = chatThreadClient.GetMessagesAsync();
await foreach (ChatMessage message in allMessages)
{
    Console.WriteLine($"{message.Id}:{message.Content.Message}");
}

GetMessages isteğe bağlı bir DateTimeOffset parametre alır. Bu fark belirtilmişse, sonrasında alınan, güncellenen veya silinen iletileri alırsınız. Bu iletilerin, zaman içinde geçen ancak döndürülmeden sonra düzenlendiğini veya kaldırılmadan önce alındığını unutmayın.

GetMessages ve kullanarak iletide gerçekleşen tüm düzenleme veya silme işlemleri dahil olmak üzere iletinin en son sürümünü döndürür UpdateMessage DeleteMessage . Silinen iletiler için, chatMessage.DeletedOn iletinin silindiğini gösteren bir tarih saat değeri döndürür. Düzenlenen iletiler için, chatMessage.EditedOn iletinin ne zaman düzenlendiğini gösteren bir tarih saat döndürür. İleti oluşturma özgün zamanına kullanılarak erişilebilir chatMessage.CreatedOn ve iletileri sıralamak için kullanılabilir.

GetMessages tarafından tanımlanabilecek farklı ileti türlerini döndürür chatMessage.Type . Bu türler şunlardır:

  • Text: Bir iş parçacığı üyesi tarafından gönderilen normal sohbet iletisi.

  • Html: Biçimli bir SMS mesajı. Iletişim Hizmetleri kullanıcılarının şu anda zengin metin iletileri gönderemediğini unutmayın. bu ileti türü, Teams birlikte çalışma senaryolarında Teams kullanıcılardan iletişim hizmetleri kullanıcılarına gönderilen iletiler tarafından desteklenir.

  • TopicUpdated: Konunun güncelleştirildiğini belirten sistem iletisi. özelliğinin

  • ParticipantAdded: Sohbet iş parçacığına bir veya daha fazla katılımcı eklendiğini belirten sistem iletisi. özelliğinin

  • ParticipantRemoved: Bir katılımcının sohbet iş parçacığından kaldırıldığını belirten sistem iletisi.

Daha ayrıntılı bilgi için bkz. Ileti türleri.

Sohbet iş parçacığına katılımcı olarak Kullanıcı ekleme

Bir iş parçacığı oluşturulduktan sonra, bundan sonra kullanıcı ekleyebilir ve kaldırabilirsiniz. Kullanıcıları ekleyerek, onlara iş parçacığına ileti gönderebilecek ve diğer katılımcı ekleyebilir/kaldırabilirler erişim izni verirsiniz. Çağrılmadan önce AddParticipants , bu kullanıcı için yeni bir erişim belirteci ve kimliği aldığınızdan emin olun. Kullanıcının sohbet istemcisini başlatması için bu erişim belirtecine ihtiyacı olacak.

AddParticipantsSohbet iş parçacığına bir veya daha fazla katılımcı eklemek için kullanın. Her iş parçacığı katılımcısı için desteklenen öznitelikler şunlardır:

  • communicationUser, gerekli, iş parçacığı katılımcısının kimliğidir.
  • displayName, isteğe bağlı, iş parçacığı katılımcısı için görünen addır.
  • shareHistoryTime, isteğe bağlı, sohbet geçmişinin katılımcıyla paylaştığı zaman.
var josh = new CommunicationUserIdentifier(id: "<Access_ID_For_Josh>");
var gloria = new CommunicationUserIdentifier(id: "<Access_ID_For_Gloria>");
var amy = new CommunicationUserIdentifier(id: "<Access_ID_For_Amy>");

var participants = new[]
{
    new ChatParticipant(josh) { DisplayName = "Josh" },
    new ChatParticipant(gloria) { DisplayName = "Gloria" },
    new ChatParticipant(amy) { DisplayName = "Amy" }
};

await chatThreadClient.AddParticipantsAsync(participants: participants);

İş parçacığı katılımcıları al

GetParticipantsSohbet iş parçacığının katılımcılarını almak için kullanın.

AsyncPageable<ChatParticipant> allParticipants = chatThreadClient.GetParticipantsAsync();
await foreach (ChatParticipant participant in allParticipants)
{
    Console.WriteLine($"{((CommunicationUserIdentifier)participant.User).Id}:{participant.DisplayName}:{participant.ShareHistoryTime}");
}

Okundu bilgisi gönder

SendReadReceiptİletinin Kullanıcı tarafından okunduğunu diğer katılımcılara bildirmek için kullanın.

await chatThreadClient.SendReadReceiptAsync(messageId: messageId);

Kodu çalıştırma

Uygulamayı komut ile uygulama dizininizden çalıştırın dotnet run .

dotnet run

Örnek Kod

Bu hızlı başlangıçta GitHubiçin son kodu bulun.

Önkoşullar

Başlamadan önce şunları yaptığınızdan emin olun:

  • Etkin abonelikle bir Azure hesabı oluşturun. Ayrıntılar için bkz. ücretsiz hesap oluşturma.
  • Xcode ve Cocoapods'i yükler. Xcode 'u kullanarak hızlı başlangıç için bir iOS uygulaması oluşturursunuz ve bağımlılıklarını yüklemek için CocoaPods.
  • Bir Azure Iletişim Hizmetleri kaynağı oluşturun. Ayrıntılar için bkz. hızlı başlangıç: Iletişim Hizmetleri kaynaklarını oluşturma ve yönetme. Bu hızlı başlangıçta, kaynak uç noktanızı kaydetmeniz gerekir.
  • Azure Iletişim hizmetlerinde iki kullanıcı oluşturun ve bunları bir Kullanıcı erişim belirteciolarak verin. Kapsamını olarak ayarladığınızdan emin olun ve dizeyi chat ve dizeyi de unutmayın token userId . Bu hızlı başlangıçta, ilk katılımcı içeren bir iş parçacığı oluşturun ve sonra iş parçacığına ikinci bir katılımcı ekleyin.

Ayarlanıyor

Yeni bir iOS uygulaması oluşturma

Xcode ' u açın ve Yeni bir Xcode projesi oluştur' u seçin. Ardından, şablon için platform ve uygulama olarak iOS ' u seçin.

Proje adı için ChatQuickstart girin. Ardından arabirim olarak film şeridi , yaşam döngüsü olarak Uııt uygulama temsilcisi ve dil olarak Swift ' ı seçin.

İleri' yi seçin ve projenin oluşturulmasını istediğiniz dizini seçin.

Kitaplıkları yükler

Gerekli Iletişim Hizmetleri bağımlılıklarını yüklemek için CocoaPods kullanın.

Komut satırından iOS projesinin kök dizininin içine gidin ChatQuickstart . Şu komutla bir pod dosyası oluşturun: pod init .

Pod dosyasını açın ve şu bağımlılıkları ChatQuickstart hedefe ekleyin:

pod 'AzureCommunicationCommon', '~> 1.0.2'
pod 'AzureCommunicationChat', '~> 1.1.0-beta.2'

Aşağıdaki komutla bağımlılıkları yükler: pod install . Bunun ayrıca bir Xcode çalışma alanı oluşturduğunu unutmayın.

Çalıştırdıktan sonra pod install , yeni oluşturulan ' yi seçerek projeyi Xcode 'da yeniden açın .xcworkspace .

Yer tutucuları ayarlama

Çalışma alanını ChatQuickstart.xcworkspace Xcode 'da açın ve sonra açın ViewController.swift .

Bu hızlı başlangıçta kodunuzu öğesine ekler viewController ve çıktıyı Xcode konsolunda görüntüleyebilirsiniz. Bu hızlı başlangıç, iOS 'ta bir kullanıcı arabirimi oluşturmayı gidermez.

En üstünde, viewController.swift ve kitaplıklarını içeri aktarın AzureCommunication AzureCommunicatonChat :

import AzureCommunicationCommon
import AzureCommunicationChat

Aşağıdaki kodu viewDidLoad() yöntemine kopyalayın ViewController :

override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        let semaphore = DispatchSemaphore(value: 0)
        DispatchQueue.global(qos: .background).async {
            do {
                // <CREATE A CHAT CLIENT>
                
                // <CREATE A CHAT THREAD>

                // <LIST ALL CHAT THREADS>

                // <GET A CHAT THREAD CLIENT>

                // <SEND A MESSAGE>

                // <SEND A READ RECEIPT >

                // <RECEIVE MESSAGES>

                // <ADD A USER>
                
                // <LIST USERS>
            } catch {
                print("Quickstart failed: \(error.localizedDescription)")
            }
        }
    }

Tanıtım amacıyla, kodunuzun eşitlenmesi için bir semafor kullanacağız. Aşağıdaki adımlarda, Azure Iletişim Hizmetleri sohbet kitaplığı 'nı kullanarak yer tutucuları örnek kodla değiştirirsiniz.

Sohbet istemcisi oluşturma

Bir sohbet istemcisi oluşturmak için, Iletişim Hizmetleri uç noktanızı ve önkoşul adımlarının bir parçası olarak oluşturulan erişim belirtecini kullanacaksınız.

Kullanıcı erişim belirteçlerihakkında daha fazla bilgi edinin.

Bu hızlı başlangıç, sohbet uygulamanız için belirteçleri yönetmek üzere bir hizmet katmanı oluşturmayı kapsamaz, ancak önerilir. Sohbet mimarisi hakkında daha fazla bilgi edinin

Yorumu <CREATE A CHAT CLIENT> Aşağıdaki kod parçacığı ile değiştirin:

let endpoint = "<ACS_RESOURCE_ENDPOINT>"
let credential =
try CommunicationTokenCredential(
    token: "<ACCESS_TOKEN>"
)
let options = AzureCommunicationChatClientOptions()

let chatClient = try ChatClient(
    endpoint: endpoint,
    credential: credential,
    withOptions: options
)

<ACS_RESOURCE_ENDPOINT>Azure Communication Services kaynağınızın uç noktasıyla değiştirin. <ACCESS_TOKEN>Geçerli bir Iletişim Hizmetleri erişim belirteciyle değiştirin.

Nesne modeli

Aşağıdaki sınıflar ve arabirimler iOS için Azure Communication Services sohbet SDK 'sının önemli özelliklerinden bazılarını idare edebilir.

Ad Açıklama
ChatClient Bu sınıf, sohbet işlevselliği için gereklidir. Abonelik bilgileriniz ile birlikte örneğini oluşturur ve bunları kullanarak iş parçacıkları oluşturabilir, alabilir, silebilir ve sohbet olaylarına abone olursunuz.
ChatThreadClient Bu sınıf, sohbet iş parçacığı işlevselliği için gereklidir. Aracılığıyla bir örnek elde edersiniz ChatClient ve iletileri göndermek, almak, güncelleştirmek ve silmek için kullanın. Ayrıca, kullanıcıları eklemek, kaldırmak ve almak, yazma bildirimleri göndermek ve okundu bilgilerini okumak için de kullanabilirsiniz.

Sohbet iş parçacığı başlatma

CreateChatThreadResult Yanıt, sohbet iş parçacığı oluşturmaktan döndü. chatThreadNesnesi olan bir özelliği içerir ChatThreadProperties . Bu nesne, ChatThreadClient oluşturulan iş parçacığında işlem gerçekleştirmek için kullanılabilecek ThreadID 'yi içerir: katılımcı ekleme, ileti gönderme vb.

Yorumu <CREATE A CHAT THREAD> Aşağıdaki kod parçacığı ile değiştirin:

let request = CreateChatThreadRequest(
    topic: "Quickstart",
    participants: [
        ChatParticipant(
            id: CommunicationUserIdentifier("<USER_ID>"),
            displayName: "Jack"
        )
    ]
)

var threadId: String?
chatClient.create(thread: request) { result, _ in
    switch result {
    case let .success(result):
        threadId = result.chatThread?.id

    case .failure:
        fatalError("Failed to create thread.")
    }
    semaphore.signal()
}
semaphore.wait()

<USER_ID>Geçerli bir Iletişim Hizmetleri Kullanıcı kimliğiyle değiştirin.

Devam etmeden önce tamamlama işleyicisini beklemek için burada bir semafor kullanıyorsunuz. Sonraki adımlarda, öğesini threadId tamamlama işleyicisine döndürülen yanıttan kullanacaksınız.

Tüm sohbet iş parçacıklarını Listele

Sohbet iş parçacığı oluşturduktan sonra, üzerinde yöntemini çağırarak tüm sohbet iş parçacıklarını listeleriz listChatThreads ChatClient . <LIST ALL CHAT THREADS> açıklamasını aşağıdaki kodla değiştirin:

chatClient.listThreads { result, _ in
    switch result {
    case let .success(threads):
        guard let chatThreadItems = threads.pageItems else {
            print("No threads returned.")
            return
        }

        for chatThreadItem in chatThreadItems {
            print("Thread id: \(chatThreadItem.id)")
        }
    case .failure:
        print("Failed to list threads")
    }
    semaphore.signal()
}
semaphore.wait()

Sohbet iş parçacığı istemcisi al

createClientYöntemi, ChatThreadClient zaten var olan bir iş parçacığı için bir döndürür. Oluşturulan iş parçacığında işlem gerçekleştirmek için kullanılabilir: katılımcı ekleme, ileti gönderme vb. ThreadId, mevcut sohbet iş parçacığının benzersiz KIMLIĞIDIR.

<GET A CHAT THREAD CLIENT> açıklamasını aşağıdaki kodla değiştirin:

let chatThreadClient = try chatClient.createClient(forThread: threadId!)

Sohbet iş parçacığına ileti gönderin

sendThreadID tarafından tanımlanan bir iş parçacığına ileti göndermek için yöntemini kullanın.

SendChatMessageRequest ileti isteğini anlatmak için kullanılır:

  • contentSohbet iletisi içeriğini sağlamak için kullanın
  • senderDisplayNameGönderenin görünen adını belirtmek için kullanın
  • type' Text ' veya ' HTML ' gibi ileti türünü belirtmek için kullanın
  • metadataİleti ile birlikte göndermek istediğiniz ek verileri dahil etmek için isteğe bağlı olarak kullanın. Bu alan, geliştiricilerin sohbet iletisi işlevselliğini genişletmesi ve kullanım örneği için özel bilgiler eklemesi için bir mekanizma sağlar. Örneğin, iletide bir dosya bağlantısı paylaşırken, alıcının uygulamasının bunu ayrıştırabilmesi ve uygun şekilde görüntülemesi için meta verilerde ' hasAttachment: true ' eklemek isteyebilirsiniz.

SendChatMessageResult yanıt ileti göndermekten döndürülen yanıt, iletinin benzersiz KIMLIĞI olan bir ID içeriyor.

Yorumu <SEND A MESSAGE> Aşağıdaki kod parçacığı ile değiştirin:

let message = SendChatMessageRequest(
                        content: "Hello!",
                        senderDisplayName: "Jack",
                        type: .text,
                        metadata: [
                            "hasAttachment": "true",
                            "attachmentUrl": "https://contoso.com/files/attachment.docx"
                        ]
                    )

var messageId: String?

chatThreadClient.send(message: message) { result, _ in
    switch result {
    case let .success(result):
        print("Message sent, message id: \(result.id)")
        messageId = result.id
    case .failure:
        print("Failed to send message")
    }
    semaphore.signal()
}
semaphore.wait()

Okundu bilgisi gönder

sendReadReceiptKullanıcı adına bir sohbet iş parçacığına okundu bilgisi olayı göndermek için yöntemini kullanın. messageId okunan sohbet iletisinin benzersiz KIMLIĞIDIR.

Yorumu <SEND A READ RECEIPT> aşağıdaki kodla değiştirin:

if let id = messageId {
    chatThreadClient.sendReadReceipt(forMessage: id) { result, _ in
        switch result {
        case .success:
            print("Read receipt sent")
        case .failure:
            print("Failed to send read receipt")
        }
        semaphore.signal()
    }
    semaphore.wait()
} else {
    print("Cannot send read receipt without a message id")
}

Sohbet iş parçacığından sohbet iletileri alma

Gerçek zamanlı sinyalle, yeni gelen iletileri dinlemek ve bellekteki geçerli iletileri uygun şekilde güncelleştirmek üzere abone olabilirsiniz. Azure Iletişim Hizmetleri, abone olabileceğiniz olayların bir listesinidestekler.

Yorumu <RECEIVE MESSAGES> aşağıdaki kodla değiştirin. Bildirimleri etkinleştirdikten sonra, ChatMessageReceivedEvents görmek için yeni iletiler göndermeyi deneyin.

chatClient.startRealTimeNotifications { result in
    switch result {
    case .success:
        print("Real-time notifications started.")
    case .failure:
        print("Failed to start real-time notifications.")
    }
    semaphore.signal()
}
semaphore.wait()

chatClient.register(event: .chatMessageReceived, handler: { response in
    switch response {
    case let .chatMessageReceivedEvent(event):
        print("Received a message: \(event.message)")
    default:
        return
    }
})

Alternatif olarak, belirtilen aralıklarda yöntemi yoklayarak sohbet iletileri alabilirsiniz listMessages . İçin aşağıdaki kod parçacığına bakın listMessages

chatThreadClient.listMessages { result, _ in
    switch result {
    case let .success(messagesResult):
        guard let messages = messagesResult.pageItems else {
            print("No messages returned.")
            return
        }

        for message in messages {
            print("Received message with id: \(message.id)")
        }

    case .failure:
        print("Failed to receive messages")
    }
    semaphore.signal()
}
semaphore.wait()

Sohbet iş parçacığına katılımcı olarak Kullanıcı ekleme

Bir iş parçacığı oluşturulduktan sonra, bundan sonra kullanıcı ekleyebilir ve kaldırabilirsiniz. Kullanıcıları ekleyerek, onlara iş parçacığına ileti gönderebilecek ve diğer katılımcı ekleyebilir/kaldırabilirler erişim izni verirsiniz. Çağrılmadan önce add , bu kullanıcı için yeni bir erişim belirteci ve kimliği aldığınızdan emin olun. Kullanıcının sohbet istemcisini başlatması için bu erişim belirtecine ihtiyacı olacak.

add ChatThreadClient Sohbet iş parçacığına bir veya daha fazla katılımcı eklemek için yöntemini kullanın. Her iş parçacığı katılımcısı için desteklenen öznitelikler şunlardır:

  • id, gerekli, iş parçacığı katılımcısı kimliğidir.
  • displayName, isteğe bağlı, iş parçacığı katılımcısı için görünen addır.
  • shareHistoryTime, isteğe bağlı, sohbet geçmişinin katılımcıyla paylaşılacak zamanı.

<ADD A USER> açıklamasını aşağıdaki kodla değiştirin:

let user = ChatParticipant(
    id: CommunicationUserIdentifier("<USER_ID>"),
    displayName: "Jane"
)

chatThreadClient.add(participants: [user]) { result, _ in
    switch result {
    case let .success(result):
        (result.invalidParticipants != nil) ? print("Added participant") : print("Error adding participant")
    case .failure:
        print("Failed to add the participant")
    }
    semaphore.signal()
}
semaphore.wait()

yerine <USER_ID> eklenecek kullanıcının İletişim Hizmetleri kullanıcı kimliğini girin.

Bir iş parçacığında kullanıcıları listele

Belirli bir listParticipants sohbet parçacığına tüm katılımcıları almak için yöntemini kullanın.

<LIST USERS> açıklamasını aşağıdaki kodla değiştirin:

chatThreadClient.listParticipants { result, _ in
    switch result {
    case let .success(participantsResult):
        guard let participants = participantsResult.pageItems else {
            print("No participants returned.")
            return
        }

        for participant in participants {
            let user = participant.id as! CommunicationUserIdentifier
            print("User with id: \(user.identifier)")
        }
    case .failure:
        print("Failed to list participants")
    }
    semaphore.signal()
}
semaphore.wait()

Kodu çalıştırma

Projeyi derlemek ve çalıştırmak için Xcode'da Çalıştır düğmesine basın. konsolunda, koddan çıkışı ve ChatClient'dan günlükleyici çıktısını görüntüebilirsiniz.

Not: olarak Build Settings > Build Options > Enable Bitcode No ayarlayın. Şu anda iOS için AzureCommunicationChat SDK'sı bitcode'un etkinleştirilmesini desteklemez, aşağıdaki GitHub sorun bunu izliyor.

Kaynakları temizleme

İletişim Hizmetleri aboneliğini temizlemek ve kaldırmak için kaynağı veya kaynak grubunu silebilirsiniz. Kaynak grubunun silinmesi, kaynak grubuyla ilişkilendirilmiş diğer tüm kaynakları da siler. Kaynakları temizleme hakkında daha fazla bilgi.

Sonraki adımlar

Bu hızlı başlangıçta şunların nasıl olduğunu öğrendiniz:

  • Sohbet istemcisi oluşturma
  • İki kullanıcı ile iş parçacığı oluşturma
  • İş parçacığına ileti gönderme
  • Bir iş parçacığından ileti alma
  • Bir iş parçacığından Kullanıcıları kaldırma

Şunları da yapmak istiyor olabilir: