Azure Communication Services では、Azure Event Grid と統合することで、信頼性、拡張性、安全性の高い方法でリアルタイムのイベント通知を受け取ることができます。 この統合を使用して、モバイル デバイス上のユーザーにプッシュ通知を送信する通知システムを構築できます。 これを実現するには、 Azure Functions または Webhook をトリガーする Event Grid サブスクリプションを作成します。
このチュートリアルでは、ネイティブ プラットフォームでプッシュ通知を受け取るために、Azure Event Grid を使用して Azure Communication Services Calling を実装する方法について説明します。 Azure Event Grid は、イベントドリブン アプリケーションを簡単に構築できるサーバーレス イベント ルーティング サービスです。 このチュートリアルでは、着信のプッシュ通知を受け取る方法を設定し、理解するのに役立ちます。
Event Grid を使用して、音声通話イベントとビデオ通話イベントを確認できます。
プッシュ通知モデルに関する現在の制限事項
Native Calling SDK とプッシュ通知の使用には現在、次の制限事項があります。
- TTL の最大値は 180 日 (15,552,000 秒) で、最小値は 5 分 (300 秒) です。 CTE (カスタム Teams エンドポイント) の場合、最大 TTL 値は 24 時間 (86,400 秒) です。
- Baidu など、Azure Notification Hub でサポートされていても Calling SDK ではまだサポートされていない通知の種類を使用してプッシュ通知を配信することはできません。
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
- デプロイ済みの Communication Services リソース。 Communication Services リソースを作成します。
- 通話クライアントを有効にするための
User Access Token
。User Access Token
を取得する方法についての詳細 - Azure Event Grid トピック: Azure サブスクリプションで Azure Event Grid トピックを作成します。これは、着信を受信したときにイベントを送信するために使用されます。
- 省略可能: アプリケーションへの通話の追加の概要に関するクイックスタートを完了します
- 独自のサーバーレス アプリケーションを構築するための Azure Functions 拡張機能 (オプション)。 たとえば、Azure Functions で認証アプリケーションをホストすることができます。
- オプションで、クイックスタートを確認して、 音声通話とビデオ通話のイベントの処理方法について説明します。
Azure Communication Services を介して着信を受信したときに、モバイル デバイス (iOS および Android) でユーザーに通知するシナリオを考えてみましょう。 Azure Event Grid を使用して実現します。
実装の手順
Event Grid へのイベントの登録のセットアップ
デバイス情報を処理するための Azure Functions
デバイス登録データを処理するには、Azure Functions を使用する必要があります。 登録タスクごとに 3 つの個別の Webhook エンドポイントを作成します。
- デバイス エンドポイント情報を格納します。
- デバイス エンドポイント情報を削除します。
- 特定の
CommunicationIdentifier
に関するデバイス エンドポイント情報を取得します。
デバイス情報を格納するためにデータベースを使用する必要があります。 この例では、わかりやすくするために MongoDB を使用しています。 ただし、使い慣れたデータベースを自由に使用できます。
このクラスのコードを使用できます。
通知を配信する Azure Functions
// Read all the required settings.
var anhHubConnectionString = Environment.GetEnvironmentVariable("ANH_Hub_Connection_String");
var anhHubName = Environment.GetEnvironmentVariable("ANH_Hub_Name");
var anhHubUrl = Environment.GetEnvironmentVariable("ANH_Hub_URL");
var anhHubApiVersion = Environment.GetEnvironmentVariable("ANH_Hub_Api_Version") ?? Defaults.ANH_DEFAULT_REST_API_VERSION;
// Generate the SAS token for making the REST API to Azure Notification Hub
var authorization = GenerateToken(anhHubConnectionString, anhHubName);
// Create the payload to sent to ANH.
PushNotificationInfo? pushNotificationInfo = Helpers.ConvertToPNInfo(input, logger) ?? throw new Exception("Could not extract PN info");
var body = new RootPayloadBody(pushNotificationInfo);
// Send the payload to all the devices registered.
// You can get the device info data from the database
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Accept", "application/json");
client.DefaultRequestHeaders.Add("Authorization", authorization);
client.DefaultRequestHeaders.Add("ServiceBusNotification-Format", deviceInfo.platform);
client.DefaultRequestHeaders.Add("ServiceBusNotification-Type", deviceInfo.platform);
client.DefaultRequestHeaders.Add("ServiceBusNotification-DeviceHandle", deviceInfo.deviceToken);
if (deviceInfo.platform.Equals(Platform.apple.ToString()))
{
client.DefaultRequestHeaders.Add("ServiceBusNotification-Apns-Push-Type", "voip");
}
var payload = JsonConvert.SerializeObject(The Event Grid payload model);
using var httpContent = new StringContent(payload, Encoding.UTF8, "application/json");
var httpResponse = await client.PostAsync(new Uri(anhHubUrl), httpContent).ConfigureAwait(false);
このクラスのコードを使用できます。
Event Grid トリガーを処理する Azure Functions
Azure Functions をデプロイした後、Event Grid と Azure Communication Services リソースを構成して IncomingCall
イベントをリッスンします。 次の手順に従って、リソースを簡単に構成できます。
プッシュ通知に登録する
Calling のネイティブ アプリで、アプリケーションの起動時にデバイス トークンを使用して API CallAgent.registerPushNotifications
(iOS SDK) を呼び出す代わりに、デバイス トークンを Azure Functions アプリに送信し、POST 要求を AddDeviceToken
関数に送信します (エンドポイント 1 を登録します)。
実装をテストする
Azure Communication Services アプリケーションを呼び出して実装をテストします。 着信を受信したときに、iOS デバイスと Android デバイスでプッシュ通知が受信されていることを確認します。
ワークフローの概要
- Azure Communication Services ユーザーへの着信を受信した場合、Azure Communication の呼び出し元リソースは
EventGridTrigger
、および着信呼び出しのペイロードを含む Azure Functions をトリガーします。 - Azure Functions は、データベースからデバイス トークン情報を取得します。
- ペイロードを VOIP プッシュ通知ペイロードに変換するには、
PushNotificationInfo.fromDictionary
(iOS SDK) が必要です。 - Azure Functions は、Azure Notification Hub の REST API を使用して、プッシュ ペイロードを送信します。
- プッシュがデバイスへと配信され、正常であれば
CallAgent.handlePush
API が呼び出されます。
このチュートリアルでは、プッシュ通知の Azure Event Grid を使用して、Azure Communication Services Calling を実装する方法について説明しました。 Calling と Event Grid を統合し、ネイティブ プラットフォーム アプリでイベントを処理することで、着信をユーザーにリアルタイムで通知できます。 Azure Event Grid は、ユーザー エクスペリエンスを向上させ、アプリケーション内のコミュニケーションを向上させることができます。
サンプル
次に示すサンプルは、任意のネイティブ プラットフォーム (iOS、Android、Windows) で動作します。 コードサンプルはこちらにあります。
次のステップ
- 詳細は、「Azure Communication Services でのイベント処理」を参照してください。
- 詳細は、「Azure Communication Services の通知の代替手段」を参照してください。
- 詳細は、「Azure Communication Services で従来のプッシュ通知を追加する」を参照してください。