どうも。ケニー(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つです。
まずは、ユーザーとしての利点です。
- 無料で使える
Google ChatはGoogleアカウントさえあれば、追加費用なしで利用できます。個人利用はもちろん、Google Workspaceの無料プランでも基本的な機能が使えるため、コストを抑えて導入できます。(後述しますが、Bot作成には、Business以上のWorkspaceアカウントが必要です) - スマホアプリがある
Google ChatはiOS・Android向けの公式アプリが提供されており、外出先や移動中でも手軽に通知を受け取ったり、メッセージのやりとりが可能です。LINE Notifyのような手軽さをそのまま引き継げます。 - 仕事とプライベートを分けたい
LINEの普及により、仕事もプライベートもLINEだらけ、という状態にも陥りがちでした。そこで、仕事関係はGoogle Chatに通知が来る、というのもユーザー側には利点があると考えます。あとGoogle Chatは、しばらくサ終しないと思います。

Google Chatを推す3つの理由(開発者編)
つぎに、開発や運営側としてGoogle Chatを推す理由です。
- Google Workspaceとの親和性が高い
Google ChatはGmailやGoogleカレンダー、Googleドライブなど、日常的に使うGoogleサービスとシームレスに連携できます。通知やファイル共有、会議の調整などがスムーズに行え、業務効率が大幅に向上します。 - Botや自動化が簡単にできる
Google Apps ScriptやWebhookを使って、通知やリマインダー、レポート配信などの自動化が簡単に実現できます。LINE Notifyのような「通知専用」だけでなく、双方向のやりとりや複雑なワークフローも構築可能です。(この機能は次のブログでお届けします) - セキュリティと管理機能が充実している
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はこちらです。

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

カードの送り方
カード(JSON)をGASで送信するときは、先ほど作成したメッセージの中身を書き換えるだけです。
ただし、カードとして認識できるように、3つのお作法があります。
- トップレベルのキーは “cardsV2” (複数形)
- 配列の中に、”CardWithId” オブジェクトを入れる
- カード本体は、”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」をお届けします。お楽しみに。


