コンテンツにスキップ

連携~

ページ: 設定 -> 連携

連携ページは、AoTを外部サービスに接続します。現在対応しているのは1つの連携だけです — スケジューラーと個人のGoogleカレンダーとの双方向同期です。各ユーザーは自分自身のGoogleアカウントを接続します。管理者はまず、Google Cloud ConsoleでAoTをOAuthアプリケーションとして登録し、発行されたクライアント資格情報をこのページに入力しておく必要があります。


管理者による設定: Google OAuthクライアント~

ユーザーがアカウントを接続できるようになる前に、管理者はこのページのGoogle OAuth設定(管理者)で、インスタンス全体用のGoogle OAuthクライアントを設定しておく必要があります。これが済んでいない間、他のユーザーには次のメッセージだけが表示されます: 「Googleカレンダーはまだ設定されていません。管理者に設定を依頼してください。」

  1. Google Cloud Consoleで、プロジェクトを作成(または選択)し、Google Calendar APIを有効にします。
  2. 種類がOAuth 2.0 クライアントID、アプリケーションの種類がWeb applicationの認証情報を作成します。
  3. このページで、まず公開 Base URL(例: https://your-aot-domain)を入力します — AoTはこれを使って、コールバック用の固定アドレスを算出し、フィールドのすぐ下に<公開 Base URL>/oauth/google/callbackとして表示します。
  4. その正確なURLを、Google Cloud Console側のOAuthクライアントのAuthorized redirect URIsにコピーします。
  5. Google Cloud ConsoleからOAuth Client IDOAuth Client Secretをコピーし、このページの該当するフィールドに貼り付けたのち、保存します。
設定 説明
公開 Base URL このAoTインスタンスの、外部から到達可能なベースURL。OAuthのリダイレクトURIを組み立てるためだけに使われます — Google Cloud Consoleに登録したアドレスと完全に一致している必要があります。
OAuth Client ID / OAuth Client Secret 上で作成したWeb application用OAuthクライアントに発行された、資格情報の組。
Google Picker API Key 任意。AIライブラリでGoogle Driveソース(ファイルピッカー)を有効にする場合にのみ必要な、Picker APIを有効化した別個の非シークレットなCloud Console APIキーです。OAuth Client Secretとは別物です。

これら3つの値は、環境変数(GOOGLE_OAUTH_CLIENT_IDGOOGLE_OAUTH_CLIENT_SECRETOAUTH_PUBLIC_BASE_URL)を通じてインスタンス全体に対して指定することもでき、その場合は上記フィールドの値より優先されます — 同じクライアントを複数のサーバーで共有する場合、デプロイ設定を通じて渡せるため便利です。値が環境変数から来ている場合、ページ上でその旨が示されます。

アカウントを接続すると、次のスコープが要求されます: Calendarへのフルアクセス(イベントの読み書き用)、email(接続したアカウントにラベルを付けるため)、openid、そしてユーザーが明示的に選んだファイルに限定されたDriveアクセス(drive.file。AIライブラリのGoogle Driveソースのみで使われ、カレンダー同期では使われません)。


アカウントを接続する~

上記の設定を管理者が完了させたら、このページのGoogle カレンダーにあるGoogle カレンダーを接続をクリックします。Googleの同意画面に移動し、アクセスを許可すると、このページに接続済みとして戻り、接続したアカウントのメールアドレスが表示されます。

AoTが無人で同期を続けるためには、Googleがリフレッシュトークンを返す必要があります。もし返されない場合(以前にアクセスを許可していて、それを完全に取り消していないアカウントで起こり得ます)、AoTはエラーを表示し、Googleアカウントの外部アプリ連携からAoTを削除したうえで、あらためて接続するよう求めます。


何が、どのように同期されるか~

AoTはあなたのアカウントに、スケジューラーのジョブカテゴリーごとに1つずつ、合計3つの別々のGoogleカレンダーを作成します。これにより、個人の予定とAoTの予定が混ざることはありません。

Googleカレンダー AoTのカテゴリー Google側で作った新しいイベントはAoTのジョブになるか?
AoT · AI AIが起案したジョブ ならない — ジョブはAI自身が作成するもので、編集・キャンセルのみが同期で戻ってきます。
AoT · User 人が行うタスク なる — 通常の人間用タスク(保留中)になります。
AoT · Device デバイス制御ジョブ なる — 下書きとして作成されたデバイス制御ジョブになり、実行には通常のスケジューラーの承認が必要です。Googleのイベントがデバイスを直接動かすことは決してありません。

各イベントには、その予定の内容 — 場所、デバイス、状態、ノート — が、イベントの説明欄に、構造化された人間にも編集可能なラベル: 値形式のテキストブロックとして書き込まれ、あなたのインターフェース言語で読み書きされます。そのテキスト(またはイベントの時刻)をGoogle側で編集して同期すると、その変更は対応するAoTのジョブに反映されます。

  • AoT → Google(送信): 送信可能なすべてのジョブ(保留中・実行中・完了・失敗しました)が、それぞれのカテゴリーのカレンダーに書き込み、または更新されます。
  • Google → AoT(受信): 過去に同期したイベントに対する編集・時刻変更・キャンセルは、対応するAoTのジョブを更新またはアーカイブします。AoT · User / AoT · Deviceカレンダー上の新しいイベントは、上記のとおり新しいジョブを作成します。
  • 同期方向の切り替え: 同期方向はAoT → Google / Google → AoTとして表示され、どちらもデフォルトでオンになっており、真の双方向同期になっています。
  • 競合: 同じジョブ/イベントが両側で変更されていた場合は、より新しく更新された側が優先されます。

同期はおよそ15分ごとにバックグラウンドで自動的に実行されるほか、今すぐ同期を押すとその場ですぐに実行されます。最終同期には直近の実行時刻(UTC)が表示され、実行に失敗した場合(たとえばGoogle側でアクセスを取り消した場合など)はエラーバッジが表示されます。


連携を解除する~

Google カレンダーの連携解除は、バックグラウンド同期を停止し、Google側でのAoTのアクセスをベストエフォートで取り消し、AoT側に残っている接続の記録とイベントとの対応情報を削除します。Googleカレンダー側にすでに作成済みのイベントは削除されません — それらが不要な場合は、Googleカレンダー側で直接削除してください。


セキュリティ~

GoogleのリフレッシュトークンとアクセストークンはユーザーごとにDB上で暗号化して保存され、平文の資格情報がデータベースに現れることは一切ありません。管理者が設定するOAuthクライアントの資格情報はインスタンス全体で共有されるもので、アカウントを接続するすべてのユーザーが利用します。一方、各ユーザー自身の接続とトークンは、そのユーザー本人だけのものとして保たれます。


関連ページ~