この記事は Google Calendar API プロダクト マネージャー、Ernesta Orlovaitė、G Suite デベロッパー アドボケート、Wesley Chun(@wescpy)による G Suite Developers Blog の記事 "Hangouts Meet now available in the Google Calendar API " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
たくさんのデベロッパーが Google Calendar API を使って Google カレンダー のイベントの読み取りや作成、変更を行っています。そしてこういったイベントは、対面の会議ばかりでなく、リモート会議を表すこともよくあります。今年は(*原文公開当時)Hangouts Meet の導入 によって G Suite エンタープライズ にビデオ通話のリンクや電話番号が追加され、ユーザーが高機能なカンファレンスを体験できるようになりました。そして本日(*原文公開当時)より、Google Calendar API からすべてのカンファレンス情報にアクセスできるようになります。このアップデートによって、デベロッパーは以下のことができるようになります。
イベントに関連するカンファレンス データを読み取る
あるイベントから別のイベントにカンファレンス データをコピーする
イベントで使う新しいカンファレンスの生成をリクエストする
API は、すべてのバージョンの Hangouts をサポートしています。
カンファレンス データを読み取る
カンファレンス情報は、新しく追加された conferenceData という event の属性に保存されています。conferenceData は、カンファレンスを作成する際に使ったソリューション(Hangouts Meet など)や、一連のエントリ ポイント(ビデオ通話リンクや電話番号など)についての情報を提供します。ユーザーがカンファレンスの通話に参加するために必要な情報はすべてそろっています。
ユーザー エクスペリエンスをさらに向上させるために、アイコンやユーザーが読みやすいラベルにもアクセスして皆さんの製品で使っていただくことができます。JSON 形式の conferenceData は次のようになります(もちろん、実際のミーティング ID や電話番号は異なります)。
"conferenceData": {
"entryPoints": [
{
"entryPointType": "video",
"uri": "https://meet.google.com/wix-pvpt-njj",
"label": "meet.google.com/wix-pvpt-njj"
},
{
"entryPointType": "more",
"uri": "https://tel.meet/wix-pvpt-njj?pin=1701789652855",
"pin": "1701789652855"
},
{
"entryPointType": "phone",
"uri": "tel:+44-20-3873-7654",
"label": "+44 20 3873 7654",
"pin": "6054226"
}
],
"conferenceSolution": {
"key": {
"type": "hangoutsMeet"
},
"name": "Hangouts Meet",
"iconUri": "https://blogger.googleusercontent.com/img/proxy/AVvXsEiUIHz-NgXI9vIyWFw_i4SRScmLsO5A8HsaewAv9vcquXYaJl8_3Nf0FfGqPh5lG_VF5QrL977jukLkCrHHWe7nFq1rL550o7YFE8t4Ssm0veyIJsXhlSa6AVg1IZlwt_ABhCTkERtnFNe32jNkMFfEIF4ZadjPxlaFd78ZpDYhJM-7Ym26aPfRijHe_KIEiyemAn7xEsQuhqWoOuM="
},
"conferenceId": "wix-pvpt-njj",
"signature": "ADwwud9tLfjGQPpT7bdP8f3bq3DS"
}
次のように、カンファレンスのソリューション名やアイコンを取得して表示できます。
var solution = event.conferenceData.conferenceSolution;
var content = document.getElementById("content");
var text = document.createTextNode("Join " + solution.name);
var icon = document.createElement("img");
icon.src = solution.iconUri;
content.appendChild(icon);
content.appendChild(text);
上のコードの結果は、次のようなユーザー インターフェースになります。
イベント間でカンファレンスをコピーする
情報を表示するだけでは不十分で、情報を更新したい場合もあります。複数のカレンダー イベントでカンファレンスの詳細が同じである場合は特に、これがあてはまります。たとえば、応募者と面接者向けに個別のイベントを設定する採用アプリを開発しているとします。その場合、面接者が特定されないようにしつつ、すべての参加者が確実に同じカンファレンスの通話に参加できるようにする必要があります。これを実現するには、あるイベントから別のイベントにカンファレンス情報をコピーします。具体的には、conferenceData に書き込みを行うだけです。
既存の Hangouts カンファレンスのみがコピーされるようにして、ユーザーを悪意のある人物から保護するため、Google Calendar API は signature フィールドを使ってコピーされたカンファレンス データを毎回検証しています。そのため、signature フィールドも忘れずにコピーするようにしてください。
イベントで使う新しいカンファレンスを作成する
デベロッパーは、API を使ってカンファレンスの作成をリクエストすることもできます。これは、イベントを作成または更新する際に、conferenceDataVersion リクエスト パラメータを 1 に設定して conferenceData.createRequest を提供するだけで実行できます。カンファレンスは非同期的に作成されますが、リクエストのステータスはいつでも確認できるので、何が起こっているかをユーザーに知らせることができます。たとえば、既存のイベントで使うカンファレンスの生成をリクエストする場合は、次のようにします(ここでも、リクエストやイベントの ID は異なります)。
var eventPatch = {
conferenceData: {
createRequest: {requestId: "7qxalsvy0e"}
}
};
gapi.client.calendar.events.patch({
calendarId: "primary",
eventId: "7cbh8rpc10lrc0ckih9tafss99",
resource: eventPatch,
sendNotifications: true,
conferenceDataVersion: 1
}).execute(function(event) {
console.log("Conference created for event: %s", event.htmlLink);
});
この呼び出しの直後に返されるレスポンスには、まだ完全な conferenceData が含まれていない場合があります。これは、status が pending になっていることからわかります。
"conferenceData": {
"createRequest": {
"requestId": "7qxalsvy0e",
"conferenceSolutionKey": {
"type": "hangoutsMeet"
},
"status": {
"statusCode": "pending"
}
}
}
statusCode が success に変わると、カンファレンス情報が設定されます。最後に、Google カレンダー クライアントを開発している場合、3 つの Hangouts ソリューション(コンシューマー Hangouts、クラシック Hangouts、Hangouts Meet)のうち、カンファレンスの作成にはどれが使われるか、あらかじめ知りたい場合もあるかもしれません。この情報は、calendar の conferenceProperties の中にある allowedConferenceSolutionTypes を確認するとわかります。
この機能を使ってみたい方は、カンファレンス データの管理について記載されているドキュメント ページ をご覧ください。今回の Google Calendar API の新機能を使って皆さんが作るアプリを楽しみにしています。
Reviewed by Eiji Kitamura - Developer Relations Team