[日本語Alexa] Google会議室予約スキルを作ってみました

2018.03.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

1 はじめに

前回、Office365による会議室予約のスキルを作ってみたのですが、非常に好評を頂いたので、調子に乗ってG Suiteでも作ってみました。

最初に、今回作成したものを御覧ください。

2 会議室リソース

会議室のリソースは、G Suiteの管理者コンソールからアプリ -> G Suite -> カレンダー -> リソースと辿ることで設定できます。

試験用に、501〜505の5つの会議室を作成しました。また、それぞれには、認識しやすいように動物の名前がつけられています。会議室を予約する場合は、部屋の番号だけでなく、この名前でも予約や削除が行えるよにしました。

次の図は、ユーザーが予定表から会議室を選択する画面です。作成したリソースが有効になっていることを確認できます。

3 プロジェクト

Google APIsでプロジェクトを作成し、以下の作業を行います。

  • プロジェクト作成
  • アプリケーションの有効化
  • 認証情報の追加

(1) プロジェクト作成

アカウントリンクのためにGoogle APIsでプロジェクトを作成します。

(2) アプリケーションの有効化

作成したプロジェクトで利用するアプリケーションを設定します。ここではカレンダーのAPIを使用できるようにGoogle Calendar APIを追加しました。

ブロジェクト選択  -> ダッシュボード -> APIとサービスの有効化

Calendarで検索してGoogle Calendar APIを選択します。

有効にするを選択することで、このプロジェクトでカレンダーAPIにアクセスすることができるようになります。

(3) 認証情報の追加

続いて、プロジェクトに認証情報を追加します。Alexaのアカウントリンクで使用するのはOAuth2です。開発者コンソールのメニューではOAuthクライアントIDを追加することになります。

アプリケーションの種類は、ウェブアプリケーションとし、Alexa開発者コンソールでスキルのアカウントリンクを有効にした際に表示されるリダイレクトURLを設定しておきます。

作成が終わったら、アカウントリンクの設定に使用するために、クライアントIDクライアントシークレットを保存しておきます。

参考: 管理者便利ツール用 - GoogleAPI、OAuth2.0の有効化の手順

4 スコープ設定

プロジェクトに対して許可するパーミッションをスコープとして設定します。 G Suite 管理コンソールから「セキュリティ」→「詳細設定」→「認証」→「API クライアント アクセスを管理する」で設定するページを開きます。

クライアント名には、プロジェクトのクライアントID、そしてスコープには、https://www.googleapis.com/auth/calendar を設定します。

なお、スコープは、カレンダーへのアクセスの他に、次のようなものがあります。

内容 scope
Gmail API https://mail.google.com/
Google Analytics API https://www.googleapis.com/auth/analytics
Calendar API https://www.googleapis.com/auth/calendar
YouTube Data API https://www.googleapis.com/auth/youtube
Sites API https://sites.google.com/feeds/
プロフィール情報 profile
メールアドレス email


参考: スコープの詳細:OAuth 2.0 Scopes for Google APIs

5 アカウントリンク

アカウントリンクで設定する内容は以下のとおりです。

  • 認証URL https://accounts.google.com/o/oauth2/auth?access_type=offline
  • クライアントID xxxxxxxx.apps.googleusercontent.com 認証情報(OAuthクライアント)のクライアントID
  • スコープ https://www.googleapis.com/auth/calendar
  • 認可タイプ Auth Code Arant
  • アクセストークンURL https://accounts.google.com/o/oauth2/token
  • クライアントシークレット ******** 認証情報(OAuthクライアント)のクライアントシークレット
  • クライアント認証スキームH HTTPベーシック認証(推奨)

6 スキル

(1)会議室予約インテント

会議室予約のインテントは、つぎのような感じです。開始日時、使用時間、会議室を必須のスロットとしてダイアログモデルで定義しています。

そして、このインテントのスロットのタイプです。

(2) 会議室のカスタムリスト

会議室は、番号だけでなく、名称でも指定が可能なようにカスタムリストにしました。

(3) 言葉の揺れを吸収

予約の発話の揺れを全てサンプル発話に列挙すると、実はすごい量になってしまいます。今回も、予約をキャンセルする言い回しが結構いろいろあるようなので、これをカスタムスロットで定義して、1行のサンプル発話に対応するようにしました。

詳しくは、下記をご参照下さい。

(4) 会議室番号のお任せする

部屋の予約は、特に場所にこだわらない場合もあると思います。会議室を予約する場合、部屋の番号や部屋の名前で会議室を指定しますが、これに加えて、「どこでもいいです」を受け付けるようにします。

今回は、会議室をカスタムとしましたの、「どこでもいい」というようなスロットを追加すればい良いですが、もし、会議室スロットを部屋番号(AMAZON.NUMBER)などで受けている場合は、下記の手法が使えるでしょう。

7 最後に

今回は、Office365に続いて、G Suiteの会議室予約スキルを作成してみました。

作って見て分かったのですが、Office365G Suiteも、リソース(会議室)を排他的に扱う仕様はほとんど同じでした。このため、違なる部分だけを低いレイヤに押し込むことで、かなりのコードを流用することができました。

まだ、日本では利用できませんが、AWSのAlexa for Businessが上陸すると、きっと、Alexaのオフィスでの活用も広まると思います。しかし、Alexa for Businessを導入しても、実は、それぞれの会社のニーズにあったスキルは、やはり開発の必要があります。

今のうちに、オフィスの中で活用できそうな、便利スキルをどんどん作ってみたいと思います。