Google Chat APIを使ってダイレクトメッセージを送信してみた


はじめに


弊社ではGoogle Workspaceを導入しており、社内でのコミュニケーションチャットツールとしてGoogle Chatが主に使用されています。

そして、2023年7月からGoogle Chat APIのバージョンアップにより、機能が大幅に増えたことで、スペースを作成しメンバーを追加したり、1対1のダイレクトメッセージを送信できるようにになりました。

今回はその新機能である1対1のダイレクトメッセージ送信をやってみたのでご紹介します。


準備

1. Google Cloudプロジェクトを作成

APIを使用するには、Google Cloudプロジェクトが必要なので、まず初めに、Cloudプロジェクトを新規作成します。
そして、後ほど「プロジェクト番号」が必要になるので、ダッシュボード→プロジェクト情報から記録しておきます。

2. Google Chat APIの有効化

APIライブラリから「Google Chat API」を有効にします。

3. OAuth同意画面の構成

OAuth同意画面から、以下の情報を入力していきます。

  • OAuth同意画面
    • User Type
      • 今回は社内用なので「内部」を選択
    • アプリ情報
      • アプリ名:適当なアプリ名を入力
    • ユーザーサポートメール
      • 自分のメールアドレスを入力
    • アプリのロゴ
      • 空欄でOK
    • アプリのドメイン
      • 空欄でOK
    • 承認済みドメイン
      • 空欄でOK
    • ベロッパーの連絡先情報
      • 自分のメールアドレスを入力
  • スコープ
    • 空欄でOK

以上でOAuth同意画面の設定は終了です。

4. Google Chat APIの設定

有効なAPIとサービスの一覧から、有効化した「Google Chat API」を選択します。そして「構成」タブから情報を入力していきます。
  • アプリケーション情報
    • アプリ名
      • 適当なアプリ名を入力(下記画像では「アプリ名」として表示
      • アプリ名を変更したい場合は、アプリ名を変更した後にChatアプリの再起動をすれば反映されますが、過去のメッセージにも全て反映されます
    • アバターのURL
      • アプリのアバター画像。正方形(アスペクト比 1:1)のPNG画像をホストするHTTPS URLを指定
    • 説明
      • アプリの説明文を入力
    • インタラクティブ機能
      • 「無効」を選択
    • ログ
      • 「エラーをLoggingに記録する」にチェック
最後に保存ボタンを押します。

5. Google Apps Scriptの設定

まずは、Google Apps Script(GAS)をスタンドアロン型で新規作成します。そして、左メニュー欄の「プロジェクトの設定」から下記2つの設定を行っていきます。
  • 「appsscript.json」マニフェストファイルをエディタで表示する、にチェックを入れます
    • appsscript.jsonにはGoogle Chat APIを使用するために必要となる以下の3つのスコープを追加
      • https://www.googleapis.com/auth/script.external_request
      • https://www.googleapis.com/auth/chat.spaces
      • https://www.googleapis.com/auth/chat.messages.create
追記後の「appsscript.json」は以下のようになります。
{
  "timeZone": "Asia/Tokyo",
  "dependencies": {},
  "exceptionLogging": "STACKDRIVER",
  "oauthScopes": [
    "https://www.googleapis.com/auth/script.external_request",
    "https://www.googleapis.com/auth/chat.spaces",
    "https://www.googleapis.com/auth/chat.messages.create"
  ],
  "runtimeVersion": "V8"
}

  • Google Cloud Platform(GCP)プロジェクトを設定
    • 準備1で記録しておいた「プロジェクト番号」を入力し、GASプロジェクトとGCPプロジェクトの連携を行います

ダイレクトメッセージを送ってみる

ここまでの準備ができたら、実際にダイレクトメッセージを送信してみます。
ただし、今回の検証において自分宛にはダイレクトメッセージを送信することはできないため、受信側と送信側として2つGoogleアカウントを使用して下さい。

GASのスクリプトエディターには次のコードを記述します。
/**
 * Google Chat にダイレクトメッセージを送信する関数
 */
function sendDirectMessage() {

  // 送信先のGoogleメールアドレスとメッセージ内容を定数として定義
  const EMAIL = '<送信先のGoogleメールアドレス>';
  const MESSAGE_TEXT = '<メッセージ内容>';
  const CHAT_API_URL = 'https://chat.googleapis.com/v1/';

  // OAuthトークンの取得
  const token = ScriptApp.getOAuthToken();

  // ダイレクトメッセージのスペースを設定するためのペイロード
  const setupPayload = {
    space: {
      spaceType: 'DIRECT_MESSAGE', // ダイレクトメッセージ用のスペースタイプを指定
      singleUserBotDm: false // ボットとの1対1のダイレクトメッセージではないため、falseを設定
    },
    memberships: [{
      member: {
        name: 'users/' + EMAIL, // 送信先のユーザーを指定
        type: 'HUMAN' // 送信先のユーザータイプは人間
      }
    }]
  };

  // APIリクエストのオプションを定義
  const requestOptions = {
    method: 'post',
    headers: {
      'Authorization': `Bearer ${token}`
    },
    contentType: 'application/json',
    payload: JSON.stringify(setupPayload)
  };

  // スペース設定のAPIを呼び出し
  const spaceResponse = UrlFetchApp.fetch(CHAT_API_URL + 'spaces:setup', requestOptions).getContentText();
  const spaceName = JSON.parse(spaceResponse).name;

  // メッセージ送信のペイロードを定義
  const messagePayload = {
    text: MESSAGE_TEXT // 送信するメッセージの内容
  };
  requestOptions.payload = JSON.stringify(messagePayload);

  // メッセージ送信のAPIを呼び出し
  UrlFetchApp.fetch(CHAT_API_URL + spaceName + '/messages', requestOptions);
}


最後に、「sendDirectMessage」を実行します。
※初回実行時は権限付与を許可するか尋ねられるので、許可ボタンを押して下さい。

実行が完了すると、Google Chatアプリ上でダイレクトメッセージが送信されていることを確認できます。

また、Markdown記法を使って書式を設定することも可能です。

まとめ

今回はGoogle Chat APIの新機能である1対1のダイレクトメッセージ送信をやってみました。
今後は、WebアプリやAppSheetと連携させてダイレクトメッセージ送信をやってみたいと思います。

Next Post Previous Post