この記事では、既存の Twilio Conversations 実装を Azure Communication Services Chat SDK に移行する方法について説明します。 Twilio Conversations と、Azure Communication Services Chat SDK はクラウドベースのプラットフォームであり、開発者はこれらを使ってチャット機能を Web アプリケーションに追加することができます。
ただし、移行する場合には、プラットフォームの選択に影響したり、既存のコードを変更したりすることが必要になる可能性がある主な違いがいくつかあります。 Twilio では、チャットはマルチチャネル インスタンスである会話に埋め込まれます。 Azure Communication Services Chat SDK はチャット用の単一チャネルです。 この記事では、両方のプラットフォームの主な機能を比較し、既存の Twilio Conversations チャット実装を Azure Communication Services Chat SDK に移行する方法に関するガイダンスを提供します。
この記事では、チャット アプリケーションのトークンを管理するサービスレベルの作成については説明しません。 チャット アーキテクチャの詳細については、「チャットに関する概念」を参照してください。 アクセス トークンの詳細については、ユーザー アクセス トークンに関する記事を参照してください。
重要な考慮事項
認証およびセキュリティ
Azure Communication Services は、ID 管理のために Microsoft Entra ID と深く統合されます。 Twilio では、独自の ID システムが使用されます。 場合によっては、ユーザー認証の処理方法を見直す必要があります。
イベント処理
Twilio の Webhook ベースのアプローチでは、ACS のイベント駆動型モデルとは異なるアーキテクチャが場合によっては必要になります。
その他のサービス
お使いのアプリケーションが他の Twilio サービス (SMS や Voice など) に依存している場合、同等の Azure サービスを見つけるか、ハイブリッド ソリューションを維持する必要があります。
移行では、場合によっては、API 呼び出しの置換だけでなく、アプリケーションのアーキテクチャというもっと広い文脈の中でこれらの通信サービスとアプリケーションの対話方法を再考する必要があります。
Azure Communication Services Chat SDK で使用できる主な機能
機能 | JavaScript SDK | iOS SDK | Android SDK | .NET SDK | Java SDK | Python SDK |
---|---|---|---|---|---|---|
インストール | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
インポート | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
認証 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
リアルタイム メッセージング | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
送信メッセージの更新 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
グループ会話 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
直接 (一対一) の会話 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
チャット スレッドのトピックの更新 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
参加者の追加または削除 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
チャット スレッドの参加者の一覧 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
チャット スレッドの削除 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
チャット履歴の共有 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
メディア サポート (画像やファイルなど) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
メッセージ配信確認 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
入力インジケーター | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
開封確認メッセージ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
プッシュ通知 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
マルチデバイスのサポート | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
メッセージ検索 | - | - | - | - | - | - |
メッセージ編集 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
メッセージ削除 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
ユーザーのロールとアクセス許可 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
会話モデレーション | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
参加者管理 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
その他の Azure サービスとの統合 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
クライアント側暗号化 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
サーバー側メッセージ ストレージ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
ボットの統合 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
カスタム メッセージ メタデータ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
ユーザー プレゼンス状態 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
ローカライズされた多言語サポート | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
機能のグループ | 機能 | Azure CLI | JavaScript | Java | .NET | Python | iOS | Android |
---|---|---|---|---|---|---|---|---|
コア機能 | 2 人以上のユーザー間のチャット スレッドを作成する | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
チャット スレッドのトピックを更新する | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
チャット スレッドの参加者を追加または削除する | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
追加する参加者とチャット メッセージの履歴を共有するかどうかを選択する | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
チャット スレッドの参加者の一覧を取得する | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
チャット スレッドを削除する | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
Communication ユーザーを指定して、そのユーザーが属するチャット スレッドの一覧を取得する | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
特定のチャット スレッドに関する情報を取得する | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
チャット スレッドでメッセージを送受信する | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
送信したメッセージの内容を更新する | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
以前に送信したメッセージを削除する | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
チャットの他の参加者が確認済みメッセージの開封確認 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
参加者がチャット スレッドにメッセージを入力中であることを示す通知を受け取る | ❌ | ✔️ | ❌ | ❌ | ❌ | ✔️ | ✔️ | |
チャット スレッド内のすべてのメッセージを取得する | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
メッセージ コンテンツの一部として Unicode の絵文字を送信する | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
チャット メッセージにメタデータを追加する | ❌ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
入力インジケーター通知に表示名を追加する | ❌ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
リアルタイムの通知 (独自のシグナリング パッケージで対応**) | チャット クライアントは、受信メッセージや、チャット スレッドで発生しているその他の操作のリアルタイム更新を取得するためにサブスクライブできます。 リアルタイム通知でサポートされている更新の一覧を確認するには、「チャットに関する概念」をご覧ください | ❌ | ✔️ | ❌ | ❌ | ❌ | ✔️ | ✔️ |
通知ハブによるモバイル プッシュ通知 | Chat SDK には、Azure の通知ハブを Communication Services リソースに接続して、チャット スレッドで発生した受信メッセージや他の操作に対してクライアントに通知を受け取る API が提供されます。 モバイル アプリがフォアグラウンドで実行されていない状況では、ポップアップ通知を起動 ("トースト") して、エンド ユーザーに通知するというパターンを使うことができます。「チャットに関する概念」をご覧ください。 | ❌ | ❌ | ❌ | ❌ | ❌ | ✔️ | ✔️ |
レポート (この情報は、Azure portal のお使いの Communication Services リソースの [監視] タブにあります) |
Azure メトリックス エクスプローラーで公開されたメトリックを監視してチャット アプリからの API トラフィックを理解し、アラートを設定して異常を検出する | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
お使いのリソースの診断ログを有効にして、お使いの Communication Services ソリューションを監視およびデバッグする | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
前提条件
- Azure アカウント: Azure アカウントがアクティブであることを確認してください。 新しいユーザーは、Microsoft Azure で無料アカウントを作成できます。
- Node.js 18: Node.js 18 がシステムにインストールされていることを確認してください。 Node.js からダウンロードします。
- Communication Services リソース: Azure portal を使用して Communication Services リソースを設定し、接続文字列をメモします。
- Azure CLI: 指示に従って Windows に Azure CLI をインストールします。
- ユーザー アクセス トークン: チャット クライアントのインスタンスを作成するユーザー アクセス トークンを生成します。 これは Azure CLI を使用して次のように作成できます。
az communication identity token issue --scope voip --connection-string "yourConnectionString"
詳細については、「Azure CLI を使用してアクセス トークンを作成および管理する」を参照してください。
インストール
Azure Communication Services Chat SDK をインストールする
JavaScript 用の Azure Communication Services SDK をインストールするには、npm install
コマンドを使用します。
npm install @azure/communication-chat --save
--save
オプションを使用すると、--save
ファイル内の依存関係としてライブラリが追加されます。
プロジェクトから Twilio SDK を削除する
パッケージをアンインストールすることで、プロジェクトから Twilio SDK を削除できます。
npm uninstall twilio-conversations
オブジェクト モデル
JavaScript 用 Azure Communication Services Chat SDK が備える主な機能のいくつかは、以下のクラスとインターフェイスにより処理されます。
名前 | 説明 |
---|---|
ChatClient |
このクラスはチャット機能に必要です。 自分のサブスクリプション情報を使用してインスタンスを生成し、それを使用してスレッドを作成、取得、削除し、チャット イベントをサブスクライブします。 |
ChatThreadClient |
このクラスはチャット スレッド機能に必要です。
ChatClient を介してインスタンスを取得し、それを使用してメッセージの送信、受信、更新、削除、ユーザーの追加、削除、取得、入力通知の送信、開封確認を行います。 |
チャット クライアントを初期化する
Twilio
/* Initialization */
import { Client } from '@twilio/conversations';
const token = await fetch(token_url);
const client = new Client(token);
client.on('stateChanged', (state) => {
if (state === 'failed') {
// The client failed to initialize
return;
}
if (state === 'initialized') {
// Use the client
}
});
Azure Communication Services
Twilio と同様に、最初の手順は、前提条件手順の一部として生成されたアクセス トークンと Communication Service エンドポイントを取得することです。 コード内のプレースホルダーを置換します。
import { ChatClient } from '@azure/communication-chat';
import { AzureCommunicationTokenCredential } from '@azure/communication-common';
// Your unique Azure Communication service endpoint
let endpointUrl = '<replace with your resource endpoint>';
// 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!');
チャット スレッドを開始する
Twilio
Twilio Conversations でチャット スレッドを開始します。
FriendlyName
を使用し、人間が判読できる名前をこの会話に付けます。
let conversation = await client.createConversation({
friendlyName: "Testing Chat"
});
await conversation.join();
Azure Communication Services
チャット スレッドは、createThread
メソッドを使用して作成します。
createThreadRequest
を使用し、スレッド要求を記述します。
- このチャットにトピックを指定するには、
topic
を使用します。UpdateThread
関数を使用してチャット スレッドを作成した後、topic
を更新します。 - チャット スレッドに追加する参加者をリストアップするには、
participants
を使用します。
解決されると、createChatThread
メソッドから CreateChatThreadResult
が返されます。 このモデルには chatThread
プロパティが含まれており、そこから、新しく作成されたスレッドの id
にアクセスすることができます。 その後、id
を使用して ChatThreadClient
のインスタンスを取得します。 次に、ChatThreadClient
を使用し、メッセージの送信や参加者の一覧表示など、スレッド内で操作を実行します。
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;
}
チャット スレッド クライアントを取得する
Twilio
Twilio でチャット スレッド (会話) を取得します。
if (selectedConversation) {
conversationContent = (
<Conversation
conversationProxy={selectedConversation}
myIdentity={this.state.name}
/>
);
} else if (status !== "success") {
conversationContent = "Loading your conversation!";
} else {
conversationContent = "";
}
Azure Communication Services
threadId
は、既存のチャット スレッドの一意の ID です。
let chatThreadClient = chatClient.getChatThreadClient(threadId);
console.log(`Chat Thread client for threadId:${threadId}`);
client.js の <CREATE CHAT THREAD CLIENT>
コメントの代わりにこのコードを追加し、ブラウザー タブを最新の情報に更新し、コンソールを確認します。 次のような結果が表示されます。
Chat Thread client for threadId: <threadId>
チャット スレッドに参加者としてユーザーを追加する
チャット スレッドを作成した後、そこにユーザーを追加したり、削除したりできます。 追加したユーザーには、チャット スレッドにメッセージを送信したり、他の参加者を追加、削除したりできるアクセス権が与えられます。
Twilio
チャット スレッドに参加者を追加します。
// add chat participant to the conversation by its identity
await conversation.add('identity');
// adds yourself as a conversations sdk user to this conversation
// use after creating the conversation from the SDK
await conversation.join();
conversation.on('participantJoined', (participant) => {
// fired when a participant has joined the conversation
});
Azure Communication Services
addParticipants
メソッドを呼び出す前に、そのユーザーの新しいアクセス トークンと ID が取得されることを確認します。 そのアクセス トークンは、ユーザーがチャット クライアントを初期化するために必要になります。
addParticipantsRequest
は要求オブジェクトを表します。その中では、チャット スレッドに追加する参加者が participants
を使用してリストアップされます。
-
id
(必須) は、チャット スレッドに追加するコミュニケーション識別子です。 -
displayName
(省略可) は、スレッド参加者の表示名です。 -
shareHistoryTime
(省略可) は、参加者との間でチャット履歴が共有される際の起点となる時刻です。 チャット スレッドの始めから履歴を共有する場合は、スレッドの作成日時と同じかそれ以前の任意の日付にこのプロパティを設定してください。 参加者が追加された時点よりも前の履歴は共有しない場合は、現在の日付に設定します。 履歴を部分的に共有するには、目的の日付に設定します。
const addParticipantsRequest =
{
participants: [
{
id: { communicationUserId: '<NEW_PARTICIPANT_USER_ID>' },
displayName: 'Jane'
}
]
};
await chatThreadClient.addParticipants(addParticipantsRequest);
NEW_PARTICIPANT_USER_ID を新しいユーザー ID で置換する
チャット スレッドにメッセージを送信する
Twilio とは異なり、Azure Communication Services には、テキスト メッセージやメディアを送信するための個別の機能はありません。
Twilio
Twilio でテキスト メッセージを送信するには。
// Send Text Message
await conversation
.prepareMessage()
.setBody('Hello!')
.setAttributes({foo: 'bar'})
.build()
.send();
Twilio でメディアを送信するには。
const file =
await fetch("https://v.fastcdn.co/u/ed1a9b17/52533501-0-logo.svg");
const fileBlob = await file.blob();
// Send a media message
const sendMediaOptions = {
contentType: file.headers.get("Content-Type"),
filename: "twilio-logo.svg",
media: fileBlob
};
await conversation
.prepareMessage()
.setBody('Here is some media!')
.addMedia(sendMediaOptions);
Azure Communication Services
threadId で識別されるスレッドにメッセージを送信するには、sendMessage
メソッドを使用します。
メッセージ要求は、sendMessageRequest
を使用して記述します。
- チャット メッセージの内容は、
content
を使用して設定します。
sendMessageOptions
を使用し、操作の省略可能なパラメーターを記述します。
- 送信者の表示名を指定するには、
senderDisplayName
を使用します。 -
type
を使用し、text
やhtml
などのメッセージの種類を指定します。
Twilio で "Media" プロパティを再作成するには。
- 必要に応じて、
metadata
を使用して、メッセージと共に送信するその他のデータを含めます。 このフィールドによって開発者はチャット メッセージ機能を拡張したり、ユース ケースに合わせてカスタム情報を追加したりできます。 たとえば、メッセージ内でファイル リンクを共有する場合、hasAttachment: true
をメタデータに追加することで、受信者のアプリケーションがそれを解析して適切に表示できます。 詳細については、「ファイル共有」を参照してください。
SendChatMessageResult
は、メッセージの送信から返される応答です。 これには、ID (そのメッセージの一意の ID) が含まれています。
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}`);
チャット スレッドからチャット メッセージを受信する
Twilio とは異なり、Azure Communication Services には、テキスト メッセージやメディアを受信するための個別の機能はありません。 Azure Communication Services は Azure Event Grid を使用してイベントを処理します。 詳細は、イベント処理に関する記事を参照してください。
Twilio
Twilio でテキスト メッセージを受信するには。
// Receive text message
let paginator =
await conversation.getMessages(
30,0,"backwards"
);
const messages = paginator.items;
Twilio でメディアを受信するには。
// Receive media
// Return all media attachments (possibly empty array), without temporary urls
const media = message.attachedMedia;
// Get a temporary URL for the first media returned by the previous method
const mediaUrl = await media[0].getContentTemporaryUrl();
Azure Communication Services
リアルタイム シグナリングを使用すると、新しい受信メッセージをサブスクライブしてリッスンし、それに応じてメモリ内の現在のメッセージを更新することができます。 Azure Communication Services は、
// open notifications channel
await chatClient.startRealtimeNotifications();
// subscribe to new notification
chatClient.on("chatMessageReceived", (e) => {
console.log("Notification chatMessageReceived!");
// your code here
});
チャット メッセージは、特定の間隔で
const messages = chatThreadClient.listMessages();
for await (const message of messages) {
// your code here
}
listMessages
では、chatMessage.type
で識別できるさまざまな種類のメッセージが返されます。
詳細については、「メッセージの種類」を参照してください。
リアル タイム通知の接続状態をサブスクライブする
Twilio と同様に、Azure Communication Services ではイベント通知をサブスクライブできます。
イベント realTimeNotificationConnected
および realTimeNotificationDisconnected
をサブスクライブすると、呼び出しサーバーへの接続がアクティブになっている状態がわかります。
// subscribe to realTimeNotificationConnected event
chatClient.on('realTimeNotificationConnected', () => {
console.log("Real time notification is now connected!");
// your code here
});
// subscribe to realTimeNotificationDisconnected event
chatClient.on('realTimeNotificationDisconnected', () => {
console.log("Real time notification is now disconnected!");
// your code here
});
前提条件
アクティブなサブスクリプションが含まれる Azure アカウントを作成します。 詳しくは、無料でアカウントを作成する方法に関する記事をご覧ください。
Visual Studio のインストール。
Azure Communication Services リソースを作成します。 詳細については、Azure Communication Services リソースの作成に関するページを参照してください。 リソースのエンドポイントと接続文字列をメモします。
ユーザー アクセス トークン。 スコープを必ず chat に設定し、トークン文字列と user_id 文字列をメモします。 Azure CLI を使用し、接続文字列を指定して次のコマンドを実行して、ユーザーとアクセス トークンを作成することもできます。
az communication identity token issue --scope chat --connection-string "yourConnectionString"
詳細については、「Azure CLI を使用してアクセス トークンを作成および管理する」を参照してください。
概念上の相違点
Twilio Conversations と Azure Communication Services Chat はどちらも同様の機能を提供しますが、その実装は、周囲のエコシステムと基盤のプラットフォームの方針に起因して異なります。 Twilio Conversations からはマルチチャネル通信 API が提供されます。 Azure Communication Services Chat の基軸は主に Azure エコシステム内のチャットです。 この移行ガイドは Twilio の一般的な操作と Azure Communication Services Chat での同等の操作の間の基本的なマッピングを提供するものであり、.NET コードの移行に役立ちます。
ID
Twilio
Twilio Conversations では、ID 文字列が直接使用されます。
Azure Communication Services
Azure Communication Services では、CommunicationIdentityClient
を使用してユーザーを作成する必要があります。
設定
パッケージをインストールする
Twilio Conversations チャットからの移行を開始するには、最初の手順として、.NET 用の Azure Communication Services Chat SDK をプロジェクトにインストールします。
dotnet add package Azure.Communication.Chat
オブジェクト モデル
C# 用 Azure Communication Services Chat SDK が備える主な機能のいくつかは、以下のクラスにより処理されます。
名前 | 説明 |
---|---|
ChatClient |
このクラスは、チャット機能に必要となります。 サブスクリプション情報を使用してインスタンス化し、それを使用してスレッドを作成、取得、削除します。 |
ChatThreadClient |
このクラスは、チャット スレッド機能に必要となります。 ChatClient を介してインスタンスを取得し、それを使用して、メッセージの送信、受信、更新、削除、参加者の追加、削除、取得、入力通知の送信、開封確認を行います。 |
チャット クライアントを作成する
Twilio
Twilio では、アカウント資格情報を使用して Twilio クライアントを設定する必要があります。
var twilio = new TwilioRestClient(accountSid, authToken);
Azure Communication Services
Azure Communication Services でチャット クライアントを作成するには、Communication Services エンドポイントと、前提条件の手順で生成されたアクセス トークンを使用します。 ユーザーを作成し、トークンを発行して自分のチャット クライアントに渡すには、Identity SDK の CommunicationIdentityClient
クラスを使用する必要があります。
詳細については、ユーザー アクセス トークンに関するページを参照してください。
// Your unique Azure Communication service endpoint
Uri endpoint = new Uri("<replace with your resource endpoint>");
CommunicationTokenCredential communicationTokenCredential = new CommunicationTokenCredential(<Access_Token>);
ChatClient chatClient = new ChatClient(endpoint, communicationTokenCredential);
チャット スレッドを開始する
Twilio Conversations
var conversation = ConversationResource.Create(
friendlyName: "My Conversation",
messagingServiceSid: "<MessagingServiceSid>"
);
Azure Communication Services
Azure Communication Services では、Twilio での会話と同等のスレッドを作成します。
チャット スレッドを作成するには、chatClient で createChatThread
メソッドを使用します。
- このチャットにトピックを指定するには、
topic
を使用します。UpdateTopic
関数を使用してチャット スレッドを作成した後にtopic
を更新できます。 -
participants
プロパティを使用して、チャット スレッドに追加するChatParticipant
オブジェクトのリストを渡します。CommunicationIdentifier
オブジェクトを使用してChatParticipant
オブジェクトを初期化します。CommunicationIdentifier
の型には、CommunicationUserIdentifier
、MicrosoftTeamsUserIdentifier
、またはPhoneNumberIdentifier
が想定されます。 たとえば、CommunicationIdentifier
オブジェクトを取得するには、「ユーザーの作成」の手順に従って作成したアクセス ID を渡す必要があります。
createChatThread
メソッドからの応答オブジェクトには、chatThread
の詳細が含まれています。 チャット スレッドの操作 (参加者の追加、メッセージの送信、メッセージの削除など) とやり取りするには、ChatClient
クライアントで GetChatThreadClient
メソッドを使用し、chatThreadClient
クライアント インスタンスのインスタンスを作成します。
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;
チャット スレッド クライアントを取得する
Twilio
Twilio Conversations では、会話の SID (一意識別子) を使用して会話と直接やり取りします。 会話を取得して対話する方法は通常、次のようになります。
var conversationSid = "<CONVERSATION_SID>";
var conversation = ConversationResource.Fetch(pathSid: conversationSid);
// Example: Fetching all messages in the conversation
var messages = MessageResource.Read(pathConversationSid: conversationSid);
foreach (var message in messages)
{
Console.WriteLine(message.Body);
}
Azure Communication Services
GetChatThreadClient
メソッドは、既に存在するスレッドのスレッド クライアントを返します。 それを使用し、作成されたスレッド上で、メンバーの追加やメッセージの送信などの操作を実行できます。
threadId
は、既存のチャット スレッドの一意の ID です。
string threadId = "<THREAD_ID>";
ChatThreadClient chatThreadClient = chatClient.GetChatThreadClient(threadId: threadId);
すべてのチャット スレッドを一覧表示する
Twilio
Twilio Conversations では、UserConversations
リソースにクエリを実行することで、ユーザーが参加しているすべての会話を取得できます。 このリソースからは、特定のユーザーの会話の一覧が提供されます。
/ Initialize Twilio Client
string accountSid = "<YOUR_ACCOUNT_SID>";
string authToken = "<YOUR_AUTH_TOKEN>";
TwilioClient.Init(accountSid, authToken);
// The identity of the user you're querying
string userIdentity = "user@example.com";
// Retrieve all conversations the user is part of
var userConversations = UserConversationResource.Read(pathUserSid: userIdentity);
foreach (var userConversation in userConversations)
{
Console.WriteLine($"Conversation SID: {userConversation.ConversationSid}");
// You can fetch more details about the conversation if needed
var conversation = Twilio.Rest.Conversations.V1.ConversationResource.Fetch(pathSid: userConversation.ConversationSid);
Console.WriteLine($"Conversation Friendly Name: {conversation.FriendlyName}");
}
Azure Communication Services
ユーザーが属しているすべてのチャット スレッドを取得するには、GetChatThreads
を使用します。
AsyncPageable<ChatThreadItem> chatThreadItems = chatClient.GetChatThreadsAsync();
await foreach (ChatThreadItem chatThreadItem in chatThreadItems)
{
Console.WriteLine($"{ chatThreadItem.Id}");
}
チャット スレッドにメッセージを送信する
Twilio
次のコード スニペットからは、テキスト メッセージの送信方法がわかります。
var message = MessageResource.Create(
body: "Hello, world!",
from: "user@example.com",
pathConversationSid: conversation.Sid
);
次のコード スニペットからは、メディア ファイルの送信方法がわかります。
// The SID of the conversation you want to send the media message to
string conversationSid = "<CONVERSATION_SID>";
// The URL of the media file you want to send
var mediaUrl = new List<Uri>
{
new Uri("https://example.com/path/to/media/file.jpg") // Replace with your actual media URL
};
// Send the media message
var message = MessageResource.Create(
body: "Here is an image for you!",
from: "user@example.com", // Sender's identity (optional)
mediaUrl: mediaUrl,
pathConversationSid: conversationSid
);
Azure Communication Services
Twilio とは異なり、Azure Communication Services には、テキスト メッセージやメディアを送信するための個別の機能はありません。
スレッドにメッセージを送信するには、SendMessage
を使用します。
- メッセージの内容を提供するには、
content
を使用します (必須)。 -
Text
やHtml
などのメッセージのコンテンツの種類にはtype
を使用します。 指定しない場合の既定は、Text
です。 - 送信者の表示名を指定するには、
senderDisplayName
を使用します。 指定されない場合、空の文字列が既定になります。 - メッセージと共に送信するデータが他にあれば、必要に応じて
metadata
を使用してそのデータを含めます。 このフィールドは、開発者がチャット メッセージ機能を拡張し、ユース ケースに応じたカスタム情報を追加するためのメカニズムを提供します。 たとえば、メッセージ内でファイル リンクを共有する場合、hasAttachment:true
をメタデータに追加することで、受信者のアプリケーションがそれを解析して適切に表示できます。
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;
チャット スレッドからチャット メッセージを受信する
Twilio
Twilio では通常、Webhook を使用して受信メッセージをサーバーに通知します。
次のコード スニペットからは、テキスト メッセージを受信する方法がわかります。
public IActionResult ReceiveMessage()
{
var incomingMessage = Request.Form["Body"];
// Process the incoming message
return Ok();
}
次のコード スニペットからは、メディア ファイルを受信する方法がわかります。
for (var i = 0; i < numMedia; i++)
{
var mediaUrl = Request.Form[$"MediaUrl{i}"];
Trace.WriteLine(mediaUrl);
var contentType = Request.Form[$"MediaContentType{i}"];
var filePath = GetMediaFileName(mediaUrl, contentType);
await DownloadUrlToFileAsync(mediaUrl, filePath);
}
Azure Communication Services
Twilio とは異なり、Azure Communication Services には、テキスト メッセージやメディアを受信するための個別の機能はありません。
Azure Communication Services Chat を使用すると、アプリケーション内でイベントを直接サブスクライブできます。
チャット メッセージは、チャット スレッド クライアントで、特定の間隔で GetMessages
メソッドをポーリングすることによって取得できます。
AsyncPageable<ChatMessage> allMessages = chatThreadClient.GetMessagesAsync();
await foreach (ChatMessage message in allMessages)
{
Console.WriteLine($"{message.Id}:{message.Content.Message}");
}
GetMessages
には、省略可能な DateTimeOffset
パラメーターがあります。 そのオフセットが指定されている場合、その後に受信、更新、または削除されたメッセージを受信します。 オフセット時刻よりも前に受信したものの、その後で編集または削除されたメッセージも返されます。
GetMessages
は、メッセージに対して UpdateMessage
や DeleteMessage
を使用して行われた編集や削除を含む、最新バージョンのメッセージを返します。 削除されたメッセージについては、そのメッセージがいつ削除されたかを示す datetime 値が chatMessage.DeletedOn
から返されます。 編集されたメッセージについては、メッセージがいつ編集されたかを示す datetime が chatMessage.EditedOn
から返されます。 メッセージの最初の作成日時に chatMessage.CreatedOn
を使用してアクセスし、それをメッセージの並べ替えに使用できます。
GetMessages
からは、chatMessage.Type
で識別できるさまざまな種類のメッセージが返されます。 次の種類があります。
Text
:スレッド メンバーによって送信された通常のチャット メッセージ。Html
:書式設定されたテキスト メッセージ。 Communication Services ユーザーは現在、RichText
メッセージを送信できないことに注意してください。 このメッセージ型は、Teams の相互運用シナリオで、Teams ユーザーから Communication Services ユーザーに送信されるメッセージでサポートされています。TopicUpdated
:トピックが更新されたことを示すシステム メッセージ。 (読み取り専用)ParticipantAdded
: 1 人以上の参加者がチャット スレッドに追加されたことを示すシステム メッセージ。 (読み取り専用)ParticipantRemoved
:参加者がチャット スレッドから削除されたことを示すシステム メッセージ。
詳細については、「メッセージの種類」を参照してください。
チャット スレッドに参加者としてユーザーを追加する
Twilio
var participant = ParticipantResource.Create(
pathConversationSid: conversation.Sid,
identity: "user@example.com"
);
Azure Communication Services
Azure Communication Services では、チャット スレッドの作成時またはその後に参加者を追加します。
スレッドを作成した後、ユーザーを追加したり、削除したりできます。 追加したユーザーには、スレッドにメッセージを送信したり、他の参加者を追加、削除したりできるアクセス権が与えられます。
AddParticipants
を呼び出す前に、そのユーザーの新しいアクセス トークンと ID が取得されることを確認します。 アクセス トークンは、ユーザーがチャット クライアントを初期化するために必要になります。
チャット スレッドに 1 人以上の参加者を追加するには、AddParticipants
を使用します。 各スレッド参加者でサポートされている属性は次のとおりです。
`id` (必須) は、スレッド参加者の ID です。-
displayName
(省略可) は、スレッド参加者の表示名です。 -
shareHistoryTime
(省略可) は、参加者との間でチャット履歴が共有される際の起点となる時刻です。
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);
スレッド参加者を取得する
Twilio
Twilio Conversations では、ConversationResource
を使用して特定の会話の参加者を取得します。 その後、その会話に関連付けられているすべての参加者を一覧表示できます。
// The SID of the conversation you want to retrieve participants from
string conversationSid = "<CONVERSATION_SID>";
// Retrieve all participants in the conversation
var participants = ParticipantResource.Read(pathConversationSid: conversationSid);
// Output details of each participant
foreach (var participant in participants)
{
Console.WriteLine($"Participant SID: {participant.Sid}");
}
Azure Communication Services
チャット スレッドの参加者を取得するには、GetParticipants
を使用します。
AsyncPageable<ChatParticipant> allParticipants = chatThreadClient.GetParticipantsAsync();
await foreach (ChatParticipant participant in allParticipants)
{
Console.WriteLine($"{((CommunicationUserIdentifier)participant.User).Id}:{participant.DisplayName}:{participant.ShareHistoryTime}");
}
開封確認メッセージを送信する
Twilio
// Find your Account SID and Auth Token at twilio.com/console
// and set the environment variables. See http://twil.io/secure
string accountSid = Environment.GetEnvironmentVariable("TWILIO_ACCOUNT_SID");
string authToken = Environment.GetEnvironmentVariable("TWILIO_AUTH_TOKEN");
TwilioClient.Init(accountSid, authToken);
var message = await MessageResource.FetchAsync(
pathConversationSid: "CHXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
pathSid: "IMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
Console.WriteLine(message.Delivery);
}
Azure Communication Services
メッセージがユーザーに読まれたことを他の参加者に通知するには、SendReadReceipt
を使用します。
await chatThreadClient.SendReadReceiptAsync(messageId: messageId);
前提条件
- Azure アカウント: Azure アカウントがアクティブであることを確認してください。 新しいユーザーは、Microsoft Azure で無料アカウントを作成できます。
- Communication Services リソース: Azure portal を使用して Communication Services リソースを設定し、接続文字列をメモします。
- Azure CLI: 指示に従って Windows に Azure CLI をインストールします。
- ユーザー アクセス トークン: 通話クライアントのインスタンスを作成するユーザー アクセス トークンを生成します。 これは Azure CLI を使用して次のように作成できます。
az communication identity token issue --scope voip --connection-string "yourConnectionString"
詳細については、「Azure CLI を使用してアクセス トークンを作成および管理する」を参照してください。
インストール
ライブラリをインストールする
Twilio Conversations Chat からの移行を開始するには、最初の手順として、iOS 用の Azure Communication Services Chat SDK をプロジェクトにインストールします。 これらのパラメーターは、CocoaPods
を使用して構成できます。
- アプリケーションのポッドファイルを作成します。 ターミナルを開き、プロジェクト フォルダーに移動し、次を実行します。
pod init
- ポッドファイルに次のコードを追加して保存します ("target" がプロジェクトの名前と一致していることを確認してください)。
pod 'AzureCommunicationChat', '~> 1.3.5'
-
.xcworkspace
プロジェクトのセットアップします。
pod install
- Xcode の pod インストールによって作成された
.xcworkspace
を開きます。
SDK に対する認証
Azure Communication Services Chat SDK を使用するには、アクセス トークンを使用して認証する必要があります。
Twilio
次のコード スニペットは、Twilio Services 用の有効なアクセス トークンが利用できることを前提としています。
static func getTokenUrlFromDefaults(identity: String, password: String) -> URL? {
// Get token service absolute URL from settings
guard let tokenServiceUrl = UserDefaults.standard.string(forKey: "ACCESS_TOKEN_SERVICE_URL"), !tokenServiceUrl.isEmpty else {
return nil
}
return constructLoginUrl(tokenServiceUrl, identity: identity, password: password)
}
Azure Communication Services
次のコード スニペットは、CallClient
を開始するために有効なアクセス トークンが必要です。
有効なトークンが必要です。 詳細については、「アクセス トークンの作成と管理」を参照してください。
// Create an instance of CallClient
let callClient = CallClient()
// A reference to the call agent, it will be initialized later
var callAgent: CallAgent?
// Embed the token in a CommunicationTokenCredential object
let userCredential = try? CommunicationTokenCredential(token: "<USER_TOKEN>")
// Create a CallAgent that will be used later to initiate or receive calls
callClient.createCallAgent(userCredential: userCredential) { callAgent, error in
if error != nil {
// Raise the error to the user and return
}
self.callAgent = callAgent
}
チャット クライアントを初期化する
Twilio
次のコード スニペットでは、Twilio でチャット クライアントが初期化されます。
func fetchAccessTokenAndInitializeClient() {
let identity = "user_identity" // Replace with actual user identity
let urlString = "http://localhost:3000/token?identity=\(identity)"
guard let url = URL(string: urlString) else { return }
let task = URLSession.shared.dataTask(with: url) { data, response, error in
guard let data = data, error == nil else {
print("Error fetching token: \(String(describing: error))")
return
}
do {
if let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any],
let token = json["token"] as? String {
self.initializeConversationsClient(withToken: token)
}
} catch {
print("Error parsing token JSON: \(error)")
}
}
task.resume()
}
```m = TwilioVideoSDK.connect(options: connectOptions, delegate: self)
Azure Communication Services
チャット クライアントを作成するには、Communication Services エンドポイントと、前提条件の手順で生成されたアクセス トークンを使用します。
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
)
オブジェクト モデル
iOS 用 Azure Communication Services Chat SDK が備える主な機能のいくつかは、以下のクラスとインターフェイスにより処理されます。
名前 | 説明 |
---|---|
ChatClient |
このクラスはチャット機能に必要です。 サブスクリプション情報を使用してインスタンス化し、それを使用してスレッドを作成、取得、削除し、チャット イベントにサブスクライブします。 |
ChatThreadClient |
このクラスはチャット スレッド機能に必要です。
ChatClient を介してインスタンスを取得し、それを使用してメッセージを送信、受信、更新、削除します。 これを使用してユーザーの追加、削除、取得、入力通知と開封確認メッセージの送信を行うこともできます。 |
チャット スレッドを開始する
Twilio
次のコード スニペットでは、新しいチャット スレッドを作成できます。
// the unique name of the conversation you create
private let uniqueConversationName = "general"
// For the quickstart, this will be the view controller
weak var delegate: QuickstartConversationsManagerDelegate?
// MARK: Conversations variables
private var client: TwilioConversationsClient?
private var conversation: TCHConversation?
private(set) var messages: [TCHMessage] = []
private var identity: String?
func conversationsClient(_ client: TwilioConversationsClient, synchronizationStatusUpdated status: TCHClientSynchronizationStatus) {
guard status == .completed else {
return
}
checkConversationCreation { (_, conversation) in
if let conversation = conversation {
self.joinConversation(conversation)
} else {
self.createConversation { (success, conversation) in
if success, let conversation = conversation {
self.joinConversation(conversation)
}
}
}
}
Azure Communication Services
チャット スレッドの作成から返された応答が CreateChatThreadResult
です。
これには、ChatThreadProperties
オブジェクトである chatThread
プロパティが含まれています。 このオブジェクトには threadId
が含まれています。これは、作成されたスレッドに対する操作 (参加者の追加やメッセージの送信など) を実行するための ChatThreadClient
を取得するために使用できます。
コメント <CREATE A CHAT THREAD>
を次のコード スニペットに置換します。
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()
ここで、セマフォを使用して、処理を続行する前に完了ハンドラーを待機します。 後続の手順で、完了ハンドラーに返された応答の threadId
を使用します。
チャット スレッド クライアントを取得する
Twilio
次のコード スニペットからは、Twilio でチャット スレッド クライアントを取得する方法がわかります。
func conversationsClient(_ client: TwilioConversationsClient, synchronizationStatusUpdated status: TCHClientSynchronizationStatus) {
guard status == .completed else {
return
}
checkConversationCreation { (_, conversation) in
if let conversation = conversation {
self.joinConversation(conversation)
} else {
self.createConversation { (success, conversation) in
if success, let conversation = conversation {
self.joinConversation(conversation)
}
}
}
}
}
Azure Communication Services
threadId
は、既存のチャット スレッドの一意の ID です。
let chatThreadClient = try chatClient.createClient(forThread: threadId!)
チャット スレッドにメッセージを送信する
Twilio とは異なり、Azure Communication Services には、テキスト メッセージやメディアを送信するための個別の機能はありません。
Twilio
Twilio で通常のテキスト メッセージを送信します。
func sendMessage(_ messageText: String,
completion: @escaping (TCHResult, TCHMessage?) -> Void) {
let messageOptions = TCHMessageOptions().withBody(messageText)
conversation?.sendMessage(with: messageOptions, completion: { (result, message) in
completion(result, message)
})
}
Twilio でメディアを送信します。
/ The data for the image you would like to send
let data = Data()
// Prepare the message and send it
self.conversation.prepareMessage
.addMedia(data: data, contentType: "image/jpeg", filename: "image.jpg", listener: .init(onStarted: {
// Called when upload of media begins.
print("Media upload started")
}, onProgress: { bytes in
// Called as upload progresses, with the current byte count.
print("Media upload progress: \(bytes)")
}, onCompleted: { sid in
// Called when upload is completed, with the new mediaSid if successful.
// Full failure details will be provided through sendMessage's completion.
print("Media upload completed")
}, onFailed: { error in
// Called when upload is completed, with the new mediaSid if successful.
// Full failure details will be provided through sendMessage's completion.
print("Media upload failed with error: \(error)")
}))
.buildAndSend { result, message in
if !result.isSuccessful {
print("Creation failed: \(String(describing: result.error))")
} else {
print("Creation successful")
}
}
Azure Communication Services
threadId
で識別されるスレッドにメッセージを送信するには、send
メソッドを使用します。
SendChatMessageRequest
を使用し、メッセージ要求を記述します。
- チャット メッセージの内容は、
content
を使用して設定します。 - 送信者の表示名を指定するには、
senderDisplayName
を使用します。 -
type
を使用し、text
やhtml
などのメッセージの種類を指定します。 - メッセージと共に送信する情報が他にあれば、必要に応じて
metadata
を使用してその情報を含めます。 このフィールドは、開発者がチャット メッセージ機能を拡張し、ユース ケースに応じたカスタム情報を追加するためのメカニズムを提供します。 たとえば、メッセージ内でファイル リンクを共有する場合、hasAttachment:true
をメタデータに追加することで、受信者のアプリケーションがそれを解析して適切に表示できます。
メッセージの送信から返される応答は SendChatMessageResult
です。 これには、ID (そのメッセージの一意の ID) が含まれています。
コメント <SEND A MESSAGE>
を次のコード スニペットに置換します。
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()
チャット スレッドからチャット メッセージを受信する
Twilio とは異なり、Azure Communication Services には、テキスト メッセージやメディアを受信するための個別の機能はありません。
Twilio
次のコード スニペットからは、Twilio でテキスト メッセージを受信する方法がわかります。
// Called whenever a conversation we've joined receives a new message
func conversationsClient(_ client: TwilioConversationsClient, conversation: TCHConversation,
messageAdded message: TCHMessage) {
messages.append(message)
// Changes to the delegate should occur on the UI thread
DispatchQueue.main.async {
if let delegate = self.delegate {
delegate.reloadMessages()
delegate.receivedNewMessage()
}
}
}
Twilio でメディアを受信します。
conversationsClient.getTemporaryContentUrlsForMedia(message.attachedMedia) { result, mediaSidToUrlMap in
guard result.isSuccessful else {
print("Couldn't get temporary urls with error: \(String(describing: result.error))")
return
}
for (sid, url) in sidToUrlMap {
print("\(sid) -> \(url)")
}
}
Azure Communication Services
リアルタイム シグナリングを使用すると、新しい受信メッセージをサブスクライブしてリッスンし、それに応じてメモリ内の現在のメッセージを更新することができます。 Azure Communication Services は、
コメント <RECEIVE MESSAGES>
を、次のコードに置き換えます。 通知を有効にした後、新しいメッセージを送信して ChatMessageReceivedEvents
を確認してみてください。
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
}
})
チャット メッセージは、特定の間隔で 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()
プッシュ通知
Twilio と同様に、Azure Communication Services では、プッシュ通知がサポートされています。 プッシュ通知では、モバイル アプリがフォアグラウンドで動作していない場合、チャット スレッドでメッセージの着信をユーザーに通知します。
現在、Notification Hub を使用したチャット プッシュ通知の送信は、iOS SDK バージョン 1.3.0 でサポートされています。
詳細については、「チャット アプリでプッシュ通知を有効にする」を参照してください。
前提条件
アクティブなサブスクリプションが含まれる Azure アカウントを作成します。 詳細については、アカウントの無料作成に関するページを参照してください。
Visual Studio のインストール。
Azure Communication Services リソースを作成します。 詳細については、Azure Communication Services リソースの作成に関するページを参照してください。 リソースのエンドポイントと接続文字列をメモします。
ユーザー アクセス トークン。 スコープを必ず chat に設定し、トークン文字列と user_id 文字列をメモします。 Azure CLI を使用し、接続文字列を指定して次のコマンドを実行して、ユーザーとアクセス トークンを作成することもできます。
az communication identity token issue --scope chat --connection-string "yourConnectionString"
詳細については、「Azure CLI を使用してアクセス トークンを作成および管理する」を参照してください。
概念上の相違点
Twilio Conversations と Azure Communication Services Chat はどちらも同様の機能を提供しますが、その実装は、周囲のエコシステムと基盤のプラットフォームの方針に起因して異なります。 Twilio Conversations からはマルチチャネル通信 API が提供されます。 Azure Communication Services Chat の基軸は主に Azure エコシステム内のチャットです。 この移行ガイドは Twilio の一般的な操作と Azure Communication Services Chat での同等の操作の間の基本的なマッピングを提供するものであり、.NET コードの移行に役立ちます。
ID
Twilio
Twilio Conversations では、ID 文字列が直接使用されます。
Azure Communication Services
Azure Communication Services では、CommunicationIdentityClient
を使用してユーザーを作成する必要があります。
設定
パッケージをインストールする
Twilio Conversations チャットからの移行を開始するには、最初の手順として、.NET 用の Azure Communication Services Chat SDK をプロジェクトにインストールします。
dotnet add package Azure.Communication.Chat
オブジェクト モデル
C# 用 Azure Communication Services Chat SDK が備える主な機能のいくつかは、以下のクラスにより処理されます。
名前 | 説明 |
---|---|
ChatClient |
このクラスは、チャット機能に必要となります。 サブスクリプション情報を使用してインスタンス化し、それを使用してスレッドを作成、取得、削除します。 |
ChatThreadClient |
このクラスは、チャット スレッド機能に必要となります。 ChatClient を介してインスタンスを取得し、それを使用して、メッセージの送信、受信、更新、削除、参加者の追加、削除、取得、入力通知の送信、開封確認を行います。 |
チャット クライアントを作成する
Twilio
Twilio では、アカウント資格情報を使用して Twilio クライアントを設定する必要があります。
var twilio = new TwilioRestClient(accountSid, authToken);
Azure Communication Services
Azure Communication Services でチャット クライアントを作成するには、Communication Services エンドポイントと、前提条件の手順で生成されたアクセス トークンを使用します。 ユーザーを作成し、トークンを発行して自分のチャット クライアントに渡すには、Identity SDK の CommunicationIdentityClient
クラスを使用する必要があります。
詳細については、ユーザー アクセス トークンに関するページを参照してください。
// Your unique Azure Communication service endpoint
Uri endpoint = new Uri("<replace with your resource endpoint>");
CommunicationTokenCredential communicationTokenCredential = new CommunicationTokenCredential(<Access_Token>);
ChatClient chatClient = new ChatClient(endpoint, communicationTokenCredential);
チャット スレッドを開始する
Twilio Conversations
var conversation = ConversationResource.Create(
friendlyName: "My Conversation",
messagingServiceSid: "<MessagingServiceSid>"
);
Azure Communication Services
Azure Communication Services では、Twilio での会話と同等のスレッドを作成します。
チャット スレッドを作成するには、chatClient
で createChatThread
メソッドを使用します。
- このチャットにトピックを指定するには、
topic
を使用します。UpdateTopic
関数を使用してチャット スレッドを作成した後にtopic
を更新できます。 -
participants
プロパティを使用して、チャット スレッドに追加するChatParticipant
オブジェクトのリストを渡します。CommunicationIdentifier
オブジェクトを使用してChatParticipant
オブジェクトを初期化します。CommunicationIdentifier
の型には、CommunicationUserIdentifier
、MicrosoftTeamsUserIdentifier
、またはPhoneNumberIdentifier
が想定されます。 たとえば、CommunicationIdentifier
オブジェクトを取得するには、「ユーザーの作成」の手順に従って作成したアクセス ID を渡す必要があります。
createChatThread
メソッドからの応答オブジェクトには、chatThread
の詳細が含まれています。 チャット スレッドの操作 (参加者の追加、メッセージの送信、メッセージの削除など) とやり取りするには、ChatClient
クライアントで GetChatThreadClient
メソッドを使用し、chatThreadClient
クライアント インスタンスのインスタンスを作成します。
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;
チャット スレッド クライアントを取得する
Twilio
Twilio Conversations では、会話の SID (一意識別子) を使用して会話と直接やり取りします。 会話を取得して対話する方法は通常、次のようになります。
var conversationSid = "<CONVERSATION_SID>";
var conversation = ConversationResource.Fetch(pathSid: conversationSid);
// Example: Fetching all messages in the conversation
var messages = MessageResource.Read(pathConversationSid: conversationSid);
foreach (var message in messages)
{
Console.WriteLine(message.Body);
}
Azure Communication Services
GetChatThreadClient
メソッドは、既に存在するスレッドのスレッド クライアントを返します。 それを使用し、作成されたスレッド上で、メンバーの追加やメッセージの送信などの操作を実行できます。
threadId
は、既存のチャット スレッドの一意の ID です。
string threadId = "<THREAD_ID>";
ChatThreadClient chatThreadClient = chatClient.GetChatThreadClient(threadId: threadId);
すべてのチャット スレッドを一覧表示する
Twilio
Twilio Conversations では、UserConversations
リソースにクエリを実行することで、ユーザーが参加しているすべての会話を取得できます。 このリソースからは、特定のユーザーの会話の一覧が提供されます。
/ Initialize Twilio Client
string accountSid = "<YOUR_ACCOUNT_SID>";
string authToken = "<YOUR_AUTH_TOKEN>";
TwilioClient.Init(accountSid, authToken);
// The identity of the user you're querying
string userIdentity = "user@example.com";
// Retrieve all conversations the user is part of
var userConversations = UserConversationResource.Read(pathUserSid: userIdentity);
foreach (var userConversation in userConversations)
{
Console.WriteLine($"Conversation SID: {userConversation.ConversationSid}");
// You can fetch more details about the conversation if needed
var conversation = Twilio.Rest.Conversations.V1.ConversationResource.Fetch(pathSid: userConversation.ConversationSid);
Console.WriteLine($"Conversation Friendly Name: {conversation.FriendlyName}");
}
Azure Communication Services
ユーザーが属しているすべてのチャット スレッドを取得するには、GetChatThreads
を使用します。
AsyncPageable<ChatThreadItem> chatThreadItems = chatClient.GetChatThreadsAsync();
await foreach (ChatThreadItem chatThreadItem in chatThreadItems)
{
Console.WriteLine($"{ chatThreadItem.Id}");
}
チャット スレッドにメッセージを送信する
Twilio
次のコード スニペットからは、テキスト メッセージの送信方法がわかります。
var message = MessageResource.Create(
body: "Hello, world!",
from: "user@example.com",
pathConversationSid: conversation.Sid
);
次のコード スニペットからは、メディア ファイルの送信方法がわかります。
// The SID of the conversation you want to send the media message to
string conversationSid = "<CONVERSATION_SID>";
// The URL of the media file you want to send
var mediaUrl = new List<Uri>
{
new Uri("https://example.com/path/to/media/file.jpg") // Replace with your actual media URL
};
// Send the media message
var message = MessageResource.Create(
body: "Here is an image for you!",
from: "user@example.com", // Sender's identity (optional)
mediaUrl: mediaUrl,
pathConversationSid: conversationSid
);
Azure Communication Services
Twilio とは異なり、Azure Communication Services には、テキスト メッセージやメディアを送信するための個別の機能はありません。
スレッドにメッセージを送信するには、SendMessage
を使用します。
- メッセージのコンテンツは、
content
を使用して設定します (必須)。 -
Text
やHtml
などのメッセージのコンテンツの種類にはtype
を使用します。 指定しない場合の既定は、Text
です。 - 送信者の表示名を指定するには、
senderDisplayName
を使用します。 指定されない場合、空の文字列が既定になります。 - 必要に応じて、
metadata
を使用して、メッセージと共に送信するその他のデータを含めます。 このフィールドは、開発者がチャット メッセージ機能を拡張し、ユース ケースに応じたカスタム情報を追加するためのメカニズムを提供します。 たとえば、メッセージ内でファイル リンクを共有する場合、hasAttachment:true
をメタデータに追加することで、受信者のアプリケーションがそれを解析して適切に表示できます。
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;
チャット スレッドからチャット メッセージを受信する
Twilio
Twilio では通常、Webhook を使用して受信メッセージをサーバーに通知します。
次のコード スニペットからは、テキスト メッセージを受信する方法がわかります。
public IActionResult ReceiveMessage()
{
var incomingMessage = Request.Form["Body"];
// Process the incoming message
return Ok();
}
次のコード スニペットからは、メディア ファイルを受信する方法がわかります。
for (var i = 0; i < numMedia; i++)
{
var mediaUrl = Request.Form[$"MediaUrl{i}"];
Trace.WriteLine(mediaUrl);
var contentType = Request.Form[$"MediaContentType{i}"];
var filePath = GetMediaFileName(mediaUrl, contentType);
await DownloadUrlToFileAsync(mediaUrl, filePath);
}
Azure Communication Services
Twilio とは異なり、Azure Communication Services には、テキスト メッセージやメディアを受信するための個別の機能はありません。
Azure Communication Services Chat を使用すると、アプリケーション内でイベントを直接サブスクライブできます。
チャット メッセージは、チャット スレッド クライアントで、特定の間隔で GetMessages
メソッドをポーリングすることによって取得できます。
AsyncPageable<ChatMessage> allMessages = chatThreadClient.GetMessagesAsync();
await foreach (ChatMessage message in allMessages)
{
Console.WriteLine($"{message.Id}:{message.Content.Message}");
}
GetMessages
には、省略可能な DateTimeOffset
パラメーターがあります。 そのオフセットが指定されている場合、その後に受信、更新、または削除されたメッセージを受信します。 オフセット時刻よりも前に受信したものの、その後で編集または削除されたメッセージも返されます。
GetMessages
は、メッセージに対して UpdateMessage
や DeleteMessage
を使用して行われた編集や削除を含む、最新バージョンのメッセージを返します。 削除されたメッセージについては、そのメッセージがいつ削除されたかを示す datetime 値が chatMessage.DeletedOn
から返されます。 編集されたメッセージについては、メッセージがいつ編集されたかを示す datetime が chatMessage.EditedOn
から返されます。 メッセージの最初の作成日時に chatMessage.CreatedOn
を使用してアクセスし、それをメッセージの並べ替えに使用できます。
GetMessages
は、chatMessage.Type
で識別できるさまざまな種類のメッセージを返します。 次の種類があります。
Text
:スレッド メンバーによって送信された通常のチャット メッセージ。Html
:書式設定されたテキスト メッセージ。 Communication Services ユーザーは現在、RichText
メッセージを送信できません。 このメッセージ型は、Teams の相互運用シナリオで、Teams ユーザーから Communication Services ユーザーに送信されるメッセージでサポートされています。TopicUpdated
:トピックが更新されたことを示すシステム メッセージ。 (読み取り専用)ParticipantAdded
: 1 人以上の参加者がチャット スレッドに追加されたことを示すシステム メッセージ。 (読み取り専用)ParticipantRemoved
:参加者がチャット スレッドから削除されたことを示すシステム メッセージ。
詳細については、「メッセージの種類」を参照してください。
チャット スレッドに参加者としてユーザーを追加する
Twilio
var participant = ParticipantResource.Create(
pathConversationSid: conversation.Sid,
identity: "user@example.com"
);
Azure Communication Services
Azure Communication Services では、チャット スレッドの作成時またはその後に参加者を追加します。
スレッドを作成した後、ユーザーを追加したり、削除したりできます。 追加したユーザーには、スレッドにメッセージを送信したり、他の参加者を追加、削除したりできるアクセス権が与えられます。
AddParticipants
を呼び出す前に、そのユーザーの新しいアクセス トークンと ID が取得されることを確認します。 アクセス トークンは、ユーザーがチャット クライアントを初期化するために必要になります。
チャット スレッドに 1 人以上の参加者を追加するには、AddParticipants
を使用します。 各スレッド参加者でサポートされている属性は次のとおりです。
`id` (必須) は、スレッド参加者の ID です。-
displayName
(省略可) は、スレッド参加者の表示名です。 -
shareHistoryTime
(省略可) は、参加者との間でチャット履歴が共有される際の起点となる時刻です。
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);
スレッド参加者を取得する
Twilio
Twilio Conversations では、ConversationResource
を使用して特定の会話の参加者を取得します。 その後、その会話に関連付けられているすべての参加者を一覧表示できます。
// The SID of the conversation you want to retrieve participants from
string conversationSid = "<CONVERSATION_SID>";
// Retrieve all participants in the conversation
var participants = ParticipantResource.Read(pathConversationSid: conversationSid);
// Output details of each participant
foreach (var participant in participants)
{
Console.WriteLine($"Participant SID: {participant.Sid}");
}
Azure Communication Services
チャット スレッドの参加者を取得するには、GetParticipants
を使用します。
AsyncPageable<ChatParticipant> allParticipants = chatThreadClient.GetParticipantsAsync();
await foreach (ChatParticipant participant in allParticipants)
{
Console.WriteLine($"{((CommunicationUserIdentifier)participant.User).Id}:{participant.DisplayName}:{participant.ShareHistoryTime}");
}
開封確認メッセージを送信する
Twilio
// Find your Account SID and Auth Token at twilio.com/console
// and set the environment variables. See http://twil.io/secure
string accountSid = Environment.GetEnvironmentVariable("TWILIO_ACCOUNT_SID");
string authToken = Environment.GetEnvironmentVariable("TWILIO_AUTH_TOKEN");
TwilioClient.Init(accountSid, authToken);
var message = await MessageResource.FetchAsync(
pathConversationSid: "CHXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
pathSid: "IMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
Console.WriteLine(message.Delivery);
}
Azure Communication Services
メッセージがユーザーに読まれたことを他の参加者に通知するには、SendReadReceipt
を使用します。
await chatThreadClient.SendReadReceiptAsync(messageId: messageId);
前提条件
アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
Java Development Kit (JDK) バージョン 8 以降。
Azure Communication Services リソースを作成します。 詳細については、Azure Communication Services リソースの作成に関するページを参照してください。 リソースのエンドポイントと接続文字列をメモする必要があります。
ユーザー アクセス トークン。 スコープを必ず chat に設定し、トークン文字列とuser_id文字列をメモしてください。 Azure CLI を使用し、接続文字列を指定して次のコマンドを実行して、ユーザーとアクセス トークンを作成することもできます。
az communication identity token issue --scope chat --connection-string "yourConnectionString"
詳細については、「Azure CLI を使用してアクセス トークンを作成および管理する」を参照してください。
設定
Chat SDK のパッケージ参照を追加する
Twilio
Java アプリケーションで Twilio Conversations Chat API を使用するには、次の依存関係を pom.xml に追加します。
<dependencies>
<!-- Twilio Java SDK -->
<dependency>
<groupId>com.twilio.sdk</groupId>
<artifactId>twilio</artifactId>
<version>8.31.1</version>
</dependency>
</dependencies>
Azure Communication Services
POM ファイルで、チャット API を使用して azure-communication-chat
パッケージを参照します。
<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>
認証の場合、クライアントは azure-communication-common
パッケージを参照する必要があります。
<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>
オブジェクト モデル
Java 用 Azure Communication Services Chat SDK が備える主な機能のいくつかは、以下のクラスとインターフェイスにより処理されます。
名前 | 説明 |
---|---|
ChatClient |
このクラスはチャット機能に必要です。 サブスクリプション情報を使用してそのインスタンスを作成し、それを使用してスレッドを作成、取得、削除します。 |
ChatAsyncClient |
このクラスは、非同期チャット機能に必要となります。 サブスクリプション情報を使用してそのインスタンスを作成し、それを使用してスレッドを作成、取得、削除します。 |
ChatThreadClient |
このクラスはチャット スレッド機能に必要です。
ChatClient を介してインスタンスを取得し、それを使用してメッセージの送信、受信、更新、削除、ユーザーの追加、削除、取得、入力通知の送信、開封確認を行います。 |
ChatThreadAsyncClient |
このクラスは、非同期チャット スレッド機能に必要となります。
ChatAsyncClient を介してインスタンスを取得し、それを使用してメッセージの送信、受信、更新、削除、ユーザーの追加、削除、取得、入力通知の送信、開封確認を行います。 |
インポート
Twilio
import com.twilio.Twilio;
import com.twilio.rest.conversations.v1.Conversation;
Azure Communication Services
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.*;
チャット クライアントを作成する
Twilio
Twilio では、アカウント SID と認証トークンを使用してクライアントを初期化します。 クライアントを初期化する方法は通常、次のとおりです。
String accountSid = "<YOUR_ACCOUNT_SID>";
String authToken = "<YOUR_AUTH_TOKEN>";
// Initialize Twilio client
Twilio.init(accountSid, authToken);
Azure Communication Services
チャット クライアントを作成するには、Communications Service エンドポイントと、前提条件の手順で生成されたアクセス トークンを使用します。 ユーザーのアクセス トークンを使用することで、Azure Communication Services に対して直接認証を行うクライアント アプリケーションを作成できます。 サーバーでこれらのトークンを生成した後、それらをクライアント デバイスに渡します。 チャット クライアントにトークンを渡すには、Common SDK の CommunicationTokenCredential
クラスを使用する必要があります。
詳細については、
import ステートメントを追加するときは、 com.azure.communication.chat.implementation
名前空間ではなく、com.azure.communication.chat
および com.azure.communication.chat.models
名前空間からのインポートのみを必ず追加してください。 Maven を使用して生成された App.java
ファイルで、次のコードを使用して開始できます。
// Your unique Azure Communication service endpoint
String endpoint = "<replace with your resource endpoint>";
// 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();
チャット スレッドを開始する
Twilio
Twilio での会話の作成は、Conversation.creator()
メソッドを使用して簡単に行うことができます。
setFriendlyName
を使用し、このチャットにトピックを指定します。
// Create a new conversation
Conversation conversation = Conversation.creator().setFriendlyName("New Conversation").create();
System.out.println(conversation.getSid());
Azure Communication Services
チャット スレッドは、createChatThread
メソッドを使用して作成します。
-
createChatThreadOptions
を使用し、スレッド要求を記述します。 - このチャットにトピックを指定するには、コンストラクターの
topic
パラメーターを使用します。UpdateThread
関数を使用してチャット スレッドが作成された後に「トピック」を更新します。 - スレッドに追加するスレッド参加者をリストアップするには、
participants
を使用します。ChatParticipant
には、ユーザー アクセス トークンに関するクイックスタートで作成したユーザーが渡されます。
CreateChatThreadResult
は、チャット スレッドの作成から返された応答です。
これには、スレッド クライアントを取得するために使用できる ChatThread
オブジェクトを返す getChatThread()
メソッドが含まれています。そのスレッド クライアントからは、作成されたスレッドに対して参加者の追加、メッセージの送信などを含む操作を実行するための ChatThreadClient
を取得できます。
ChatThread
オブジェクトには、スレッドの一意の ID を取得する getId()
メソッドも含まれています。
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();
チャット スレッドを一覧表示する
Twilio
Java を使用して Twilio のすべての会話を一覧表示するには:
public static void main(String[] args) {
// List all conversations
ResourceSet<Conversation> conversations = Conversation.reader().read();
for (Conversation conversation : conversations) {
System.out.println("Conversation SID: " + conversation.getSid());
System.out.println("Friendly Name: " + conversation.getFriendlyName());
System.out.println("Date Created: " + conversation.getDateCreated());
}
}
Azure Communication Services
listChatThreads
メソッドを使用して、既存のチャット スレッドの一覧を取得します。
PagedIterable<ChatThreadItem> chatThreads = chatClient.listChatThreads();
chatThreads.forEach(chatThread -> {
System.out.printf("ChatThread id is %s.\n", chatThread.getId());
});
チャット スレッド クライアントを取得する
Twilio
Java を使用して Twilio で特定の会話を取得し、それと対話する方法は次のようになります。
// Retrieve a specific conversation by its SID
Conversation conversation = Conversation.fetcher(conversationSid).fetch();
System.out.println("Retrieved Conversation SID: " + conversation.getSid());
System.out.println("Friendly Name: " + conversation.getFriendlyName())
Azure Communication Services
getChatThreadClient
メソッドは、既に存在するスレッドのスレッド クライアントを返します。 それを使用し、作成されたスレッド上で、参加者の追加やメッセージの送信などの操作を実行します。
chatThreadId
は、既存のチャット スレッドの一意の ID です。
ChatThreadClient chatThreadClient = chatClient.getChatThreadClient(chatThreadId);
チャット スレッドにメッセージを送信する
Twilio
Twilio でメッセージを送信するとき、Message.creator()
メソッドが使用されます。
import com.twilio.rest.conversations.v1.conversation.Message;
Message message = Message.creator(conversationSid)
.setBody("Hello, World!")
.create();
System.out.println("Message SID: " + message.getSid());
Twilio では、メッセージの送信時にメディア URL を提供することでメディア ファイルを送信できます。
List<URI> mediaUrls = Arrays.asList(URI.create("https://example.com/image.jpg"));
Message message = Message.creator(conversationSid)
.setBody("Check out this image!")
.setMediaUrl(mediaUrls)
.create();
System.out.println("Message SID: " + message.getSid());
Azure Communication Services
Twilio とは異なり、Azure Communication Services には、メディアを送信するための個別の機能はありません。
作成したスレッド (chatThreadId
で指定) にメッセージを送信するには、sendMessage
メソッドを使用します。
sendChatMessageOptions
を使用し、チャット メッセージ要求を記述します。
- チャット メッセージの内容は、
content
を使用して設定します。 -
type
を使用し、チャット メッセージのコンテンツの種類 (TEXT
またはHTML
) を指定します。 - 送信者の表示名を指定するには、
senderDisplayName
を使用します。 - メッセージと共に送信するデータがあれば、必要に応じて
metadata
を使用してそのデータを含めます。 このフィールドによって開発者はチャット メッセージ機能を拡張したり、ユース ケースに合わせてカスタム情報を追加したりできます。 たとえば、メッセージ内でファイル リンクを共有する場合、hasAttachment:true
をメタデータに追加することで、受信者のアプリケーションがそれを解析して適切に表示できます。
応答である sendChatMessageResult
には、id
(そのメッセージの一意の ID) が含まれています。
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();
チャット スレッドからチャット メッセージを受信する
Twilio
Twilio Conversations では、Webhook を使用してメッセージを受信します。 通常、Twilio コンソールで Webhook URL を設定します。
// This would be handled by a servlet or similar in a Java web application
public void handleIncomingMessage(HttpServletRequest request, HttpServletResponse response) {
String body = request.getParameter("Body");
System.out.println("Received message: " + body);
}
Twilio でメディア ファイルを受信するには。
private static final Logger logger = Logger.getLogger(TwilioWebhookServlet.class.getName());
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Get the number of media items attached to the message
String numMedia = request.getParameter("NumMedia");
int mediaCount = Integer.parseInt(numMedia);
if (mediaCount > 0) {
// Loop through each media file received
for (int i = 0; i < mediaCount; i++) {
// Get the media URL from the request
String mediaUrl = request.getParameter("MediaUrl" + i);
String mediaContentType = request.getParameter("MediaContentType" + i);
logger.info("Received media file: " + mediaUrl + " with content type: " + mediaContentType);
// Process the media file (e.g., download, store, etc.)
// Example: Download and save the file, or send it to another service
}
} else {
// Handle a message with no media
String messageBody = request.getParameter("Body");
logger.info("Received text message: " + messageBody);
}
Azure Communication Services
チャット メッセージは、チャット スレッド クライアントで、特定の間隔で listMessages
メソッドをポーリングすることによって取得できます。
chatThreadClient.listMessages().forEach(message -> {
System.out.printf("Message id is %s.\n", message.getId());
});
listMessages
は、メッセージに対して .editMessage()
や .deleteMessage()
を使用して行われた編集や削除を含む、最新バージョンのメッセージを返します。 削除されたメッセージについては、そのメッセージがいつ削除されたかを示す datetime
値が chatMessage.getDeletedOn()
から返されます。 編集されたメッセージについては、メッセージがいつ編集されたかを示す datetime が chatMessage.getEditedOn()
から返されます。 メッセージの最初の作成日時には、chatMessage.getCreatedOn()
を使用してアクセスできます。これをメッセージの並べ替えに使用することができます。
メッセージの種類の詳細については、「メッセージの種類」をご覧ください。
開封確認メッセージを送信する
Twilio
Twilio Conversations には、開封確認メッセージを送信するための直接 API がありません。 Twilio Conversations では、開封確認メッセージが自動的に管理されます。
Azure Communication Services
chatMessageId
は、開封されたチャット メッセージの一意の ID です。
String chatMessageId = message.getId();
chatThreadClient.sendReadReceipt(chatMessageId);
チャット参加者を一覧表示する
Twilio
Twilio 会話の参加者を取得するには:
ResourceSet<Participant> participants = Participant.reader(conversationSid).read();
for (Participant participant : participants) {
System.out.println("Participant SID: " + participant.getSid());
}
Azure Communication Services
chatThreadId によって識別されるチャット スレッドの参加者を含むページ コレクションを取得するには、listParticipants
を使用します。
PagedIterable<ChatParticipant> chatParticipantsResponse = chatThreadClient.listParticipants();
chatParticipantsResponse.forEach(chatParticipant -> {
System.out.printf("Participant id is %s.\n", ((CommunicationUserIdentifier) chatParticipant.getCommunicationIdentifier()).getId());
});
チャット スレッドに参加者としてユーザーを追加する
Twilio
Participant.creator() メソッドを使用して会話に参加者を追加します。
import com.twilio.rest.conversations.v1.conversation.Participant;
Participant participant = Participant.creator(conversationSid)
.setIdentity("user@example.com")
.create();
System.out.println("Participant SID: " + participant.getSid());
Azure Communication Services
チャット スレッドの作成後、ユーザーを追加したり削除したりすることができます。 追加したユーザーには、チャット スレッドにメッセージを送信したり、他の参加者を追加、削除したりできるアクセス権が与えられます。 まず、そのユーザーの新しいアクセス トークンと ID を取得します。
addParticipants
メソッドを呼び出す前に、そのユーザーの新しいアクセス トークンと ID を取得していることを確認してください。 そのアクセス トークンは、ユーザーがチャット クライアントを初期化するために必要になります。
スレッドに参加者を追加するには、addParticipants
メソッドを使用します。
-
communicationIdentifier
(必須) は、ユーザー アクセス トークンに関するクイックスタートでCommunicationIdentityClient
を使用して作成したCommunicationIdentifier
です。 -
displayName
(省略可) は、スレッド参加者の表示名です。 -
shareHistoryTime
(省略可) は、参加者との間でチャット履歴が共有される際の起点となる時刻です。 チャット スレッドの始めから履歴を共有する場合は、スレッドの作成日時と同じかそれ以前の任意の日付にこのプロパティを設定してください。 参加者が追加された時点よりも前の履歴は共有しない場合は、現在の日付に設定します。 部分的に履歴を共有するには、必要な日付に設定します。
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);