[GAS/Chat]GoogleChatでLINE Notifyから移行しよう

GoogleChat1Chat

どうも。ケニー(tsujikenzo)です。あくまでノンプログラマーです。今日は単発で 「GoogleChatでLINE Notifyから移行しよう」をお送りします。

はじめに

今まで、LINE Notifyさんに大変お世話になった、という業務改善チャレンジャーの方は多いと思います。

LINE Notifyは、2025年4月1日に、本当にサ終しました。 

そして、半年間、大変お待たせいたしました。LINE Notifyの代替えとして、ケニーはGoogle Chatを推したいと思います。

対象となる読者

  • GAS初級講座を終えた程度
  • GWSのBussiness以上のアカウントがある(個人アカウントは検証していません。できるかもしれません。)
  • JSONを書いたり触ったりしたことがある

Google Chatを推す3つの理由(ユーザー編)

ケニーがGoogle Chatを推す理由は3つです。

まずは、ユーザーとしての利点です。

  1. 無料で使える
    Google ChatはGoogleアカウントさえあれば、追加費用なしで利用できます。個人利用はもちろん、Google Workspaceの無料プランでも基本的な機能が使えるため、コストを抑えて導入できます。(後述しますが、Bot作成には、Business以上のWorkspaceアカウントが必要です)
  2. スマホアプリがある
    Google ChatはiOS・Android向けの公式アプリが提供されており、外出先や移動中でも手軽に通知を受け取ったり、メッセージのやりとりが可能です。LINE Notifyのような手軽さをそのまま引き継げます。
  3. 仕事とプライベートを分けたい
    LINEの普及により、仕事もプライベートもLINEだらけ、という状態にも陥りがちでした。そこで、仕事関係はGoogle Chatに通知が来る、というのもユーザー側には利点があると考えます。あとGoogle Chatは、しばらくサ終しないと思います。
‎Google Chat
‎Google Chat は、Workspace を使用するチームがつながり、協力し、作業を効率化するための最適な手段です。 Gemini が変革する AI ファーストのメッセージングとコラボレーション • 会話の要約機能を使用して状況を把握 • メッセージを 120 以上の言語に自動で翻訳 • AI を活用した検索...
Google Chat - Apps on Google Play
Collaborate seamlessly with Google Chat, part of Google Workspace

Google Chatを推す3つの理由(開発者編)

つぎに、開発や運営側としてGoogle Chatを推す理由です。

  1. Google Workspaceとの親和性が高い
    Google ChatはGmailやGoogleカレンダー、Googleドライブなど、日常的に使うGoogleサービスとシームレスに連携できます。通知やファイル共有、会議の調整などがスムーズに行え、業務効率が大幅に向上します。
  2. Botや自動化が簡単にできる
    Google Apps ScriptやWebhookを使って、通知やリマインダー、レポート配信などの自動化が簡単に実現できます。LINE Notifyのような「通知専用」だけでなく、双方向のやりとりや複雑なワークフローも構築可能です。(この機能は次のブログでお届けします)
  3. セキュリティと管理機能が充実している
    Google Workspaceの管理コンソールから、ユーザーやグループの権限管理、監査ログの取得などが一元的に行えます。企業や組織での利用にも安心して導入できます。

と、いうことで、まずはGASを使いながら、Google Chatへ自動通知をしてみましょう。

Google Chatへの通知、3つの選択肢

GASを使ってGoogle Chatへ自動送信する方法は、役割によって、以下の3種類があります。

1. Incoming Webhook(送信専用の使い捨て送信機)

  • 概要:特定のスペースにだけメッセージを送信する、最もシンプルな役割。
  • 誰として振る舞う?:「Webhook作成時に決めた名前」として。Bot自身に知能はなく、ただの送信機。
  • 動かし方:Webhook URLという「住所」に、UrlFetchAppでメッセージを送る。
  • GCP/API: 不要。

2. スクリプト(APIクライアントとしてのあなた自身)

  • 概要:GASエディタで実行ボタンを押したり、時間トリガーを設定したりすることで、あなたの代わりにメッセージを送信する、自動化スクリプト。
  • 誰として振る舞う?:「GCPのChat API構成画面で設定したアプリ名」として投稿するが、その行動の実行者(トリガー)は、あなた(のGWSアカウント)です。
  • 動かし方:Chat.Spaces.Messages.create()を、GASの関数として直接呼び出す。
  • GCP/API: 必要。(APIを道具として使うため)

3. インタラクティブなアプリ(常駐する受付係)

  • 概要:Chatの部屋に常駐し、ユーザーからの呼びかけ(メンション)を待って、それに対して応答する、本格的なBot。
  • 誰として振る舞う?:部屋のメンバーとして追加された、「知能を持つアプリ」として。
  • 動かし方:Chatからのイベントをきっかけに、Google側から自動的にonMessage(e)関数が呼び出される。
  • GCP/API: 必要。 さらに、「デプロイID」の紐付けという最難関の設定が必須。

表にまとめてみました。 

Incoming Webhookからはじめよう

それでは、Incoming Webhook(通知専用の使い捨て発信機)を使って、特定のスペースに、メッセージを自動送信してみます。

Incoming Webhookとは?

Incoming Webhook(インカミング・ウェブフック)とは、外部のサービスやプログラムから、Google Chatの特定のスペース(部屋)にメッセージを送るための「専用のURL(入り口)」です。

たとえば、GASやPythonなどのプログラムから、Webhook用のURLに対して決められた形式(JSON)でリクエストを送るだけで、Google Chatに自動で通知を投稿できます。

  • Incoming=「外から入ってくる」
  • Webhook=「決まったURLにデータを投げる仕組み」

LINE Notifyの「通知用トークン」と似ていますね。

Google ChatではスペースごとにWebhook URLを発行し、そのURLにPOSTリクエストを送ることで、チャットに自動送信できます。

Webhook URLを手に入れよう

まずは、メッセージを投げ込むための「住所」となるWebhook URLを取得します。

通知を送りたいGoogle Chatのスペースを開き(なければ新規作成)、左上のスペース名横の▼から「アプリと統合」をクリックします。 

つぎに、「+Webhookを追加」をクリックします。 

Webhookの名前を入力して、保存をクリックします。※Bot(アバター)のアイコンの設定も可能ですが割愛します。 

Webnookの欄に、Incoming Webhook URLが表示されます。右側のコピーアイコンをクリックして、URLをコピーしましょう。 

※このURLは、パスワードと同じくらい大切な情報です。外部に漏れないよう、厳重に管理してください。

準備は以上です。かんたんです。

GASから最初のメッセージを送信する

取得したIncoming Webhook URLを使って、GASからメッセージを送ってみましょう。

スタンドアロンスクリプトを新規作成します。※割愛します

URLに何かを送信する、と言えば、おなじみのUrlFetchApp.fetch()ですね。

/**
 * Incoming Webhookを使って、Google Chatにシンプルなメッセージを送信する関数
 */
function sendFirstWebhookMessage() {
  //あなたのWebhook URLをここに貼り付ける
  const webhookUrl = 'https://chat.googleapis.com/v1/spaces/....';

  const message = {
    'text': 'こんにちは!これはGASから送信されたメッセージです!'
  };

  const options = {
    'method': 'post',
    'contentType': 'application/json; charset=UTF-8',
    'payload': JSON.stringify(message)
  };

  // この一文で、メッセージがChatに送信されます!
  UrlFetchApp.fetch(webhookUrl, options);
}

それでは、sendFirstWebhookMessage()関数を実行してみましょう。

以下のように、Chatにメッセージが届けば、成功です! 

カードメッセージを送ろう!

Incoming Webhookでのメッセージ送信は、あまりにかんたんだったので、「カードメッセージ」の送信をやって、終わりたいと思います。

カードメッセージとは?

読んで字のごとく、カード型のメッセージで、情報を構造化したり、視覚的な効果の高まりを期待できます。

さらに、カードには「ボタン」や「リンク」や「日付選択」などを埋め込むことができますので、メッセージを受信したユーザーの、次の行動を期待できます。

公式Referenceはこちらです。

Cards v2  |  Google Chat  |  Google for Developers

カードの作り方

カードメッセージの正体は、その構造を定義したJSONです。

公式には、JSONをプレビューしながらカードを作れるサービスがありますので、どのような構造にすればよいか、視覚的にいろいろ試せるのも楽ですね。

Card Builder

カードの送り方

カード(JSON)をGASで送信するときは、先ほど作成したメッセージの中身を書き換えるだけです。

ただし、カードとして認識できるように、3つのお作法があります。

  1. トップレベルのキーは “cardsV2” (複数形)
  2. 配列の中に、”CardWithId” オブジェクトを入れる
  3. カード本体は、”card” キーの中にネスト(ラップ)する

お作法を取り入れた、以下がサンプルコードです。

//単純なメッセージを送信するばあい
const message = {
  'text': 'こんにちは!これはGASから送信されたメッセージです!'
};

//カードメッセージを送信するばあい(お作法①~③付き)
const message = {
  // ① トップレベルのキーは "cardsV2" (複数形)
  "cardsV2": [
    // ② 配列の中に、"CardWithId" オブジェクトを入れる
    {
      "cardId": "unique-card-id", // カードを識別するための一意のID
      // ③ カード本体は、"card" キーの中にネスト(ラップ)する
      "card": {
        "header": { /* ... */ },
        "sections": [ /* ... */ ]
      }
    }
  ]
};

送信する

実際に、ソースコードを貼りつけて、sendCorrectWebhookCardMessage()関数を実行してみましょう。

/**
 * Incoming Webhookを使って、Google Chatに「正しい形式」でカードメッセージを送信する関数
 */
function sendCorrectWebhookCardMessage() {
  // あなたのWebhook URLをここに貼り付けます
  const webhookUrl = 'https://chat.googleapis.com/v1/spaces/AAQAZ9lAS2Y/messages?key=AIzaSy***';

  // ------------------------------------------
  // ▼ Webhook用の正しいメッセージオブジェクト ▼
  // ------------------------------------------
  const message = {
    // 1. キーは "cardsV2" (複数形)
    "cardsV2": [
      {
        "cardId": "unique-card-id-for-webhook", // ほぼおまじないですが、入れておくのが作法です
        // 2. カード本体を "card": { ... } でラップする
        "card": {
          "header": {
            "title": "ケニーさんへのお知らせ",
            "subtitle": "カードメッセージの世界へようこそ!",
            "imageUrl": "https://source.unsplash.com/featured/320x180?nature&sig=8",
            "imageType": "CIRCLE"
          },
          "sections": [
            {
              "widgets": [
                {
                  "textParagraph": {
                    "text": "これは、最もシンプルなカードメッセージです。<b>太字</b>や<i>斜体</i>も使えます。"
                  }
                },
                {
                  "buttonList": {
                    "buttons": [
                      {
                        "text": "リンクを踏ませることも",
                        "onClick": {
                          "openLink": {
                            "url": "https://developers.google.com/workspace/chat/api/guides/message-formats/cards"
                          }
                        }
                      }
                    ]
                  }
                }
                // ※注: Webhook経由のカードでは、textInputのようなインタラクティブな
                //      ウィジェットは表示されますが、入力しても何も起きません。
                //      なぜなら、Webhookには「受信」する能力がないからです。
              ]
            }
          ]
        }
      }
    ]
  };
  // -----------------------
  // ▲ ここまで ▲
  // -----------------------

  const options = {
    'method': 'post',
    'contentType': 'application/json; charset=UTF-8',
    'payload': JSON.stringify(message)
  };

  // この一文で、メッセージがChatに送信されます!
  UrlFetchApp.fetch(webhookUrl, options);
}

無事、カード型のメッセージが受信できていれば、成功です。 

まとめ

以上です。LINE Notifyからの移行先として、Google ChatのIncoming Webhookを使い、自動通知を送る方法をお届けしました。

後半では、カード型メッセージの送信にもチャレンジしてみました。

GCPの難しい設定もなく、数クリックと数行のコードだけで、あっという間にメッセージが送れましたね。

さて、こうなってくると、LINEのMessaging APIを操作したように、「オウム返しBot」にチャレンジしたくなります。

次回は、「GoogleChat API」をお届けします。お楽しみに。

このシリーズの目次

  1. [GAS/Chat]GoogleChatでLINE Notifyから移行しよう
  2. [GAS/Chat]GoogleChatAPIで高度なメッセージを送信しよう
  3. [GAS/Chat]【ハンズオン】「カスタムアプリ」でオウム返しBotを作ろう!
タイトルとURLをコピーしました