エムオーテックス株式会社が運営するテックブログです。

Google Apps Script(GAS)で WebAPI を構築して Chatwork に通知する

Google Apps Script(GAS)で WebAPI を構築して Chatwork に通知する

はじめに

こんにちは。アプリケーションチームの栗田です。

外部サービスから Webhook などのリクエストを受信して何か処理させたいとき、一からサーバーを構築するのは大変ですよね。 この記事では Google Apps Script(GAS)で WebAPI を公開し、リクエストを処理する方法を紹介します。
今回は cURL コマンドで POST リクエストを GAS に送信して、リクエストの値を Chatwork にメッセージ通知してみたいと思います。

事前準備

以下を使いますので、お持ちでない場合は準備しておきましょう。

GAS で WebAPI を公開する

Google スクリプトエディタを開き、新しいプロジェクトを作成する

Google ドライブを開き、[+新規]>[その他]>[Google Apps Script]を選択します。

GAS の新規作成

ファイル名が「無題のプロジェクト」になっていますので、適当に変更しておきます。
「無題のプロジェクト」をクリックすると変更できます。(今回は、"WebAPI_Sample" としました)

新規のスクリプトエディタ

doPost 関数を作成する

POST リクエストを受け取るために、doPost 関数を実装します。
(GET を受け取りたい場合は、doGet 関数で実装できます)

POST リクエストでは、シンプルに {"content": "こんにちは!\nテストです!"} という JSON データを送信することにします。 メニューから[エディタ]>[コード.gs]を選択して、以下のサンプルソースを貼り付けてください。 ファイル名は変更していただいて構いません。

function doPost(e){

  // データ取得
  const data = JSON.parse(e.postData.contents);
  const content = data.content;

  // プロパティスクリプトから値を取得
  const properties = PropertiesService.getScriptProperties();
  const token = properties.getProperty("CHATWORK_APITOKEN");
  const room_id = properties.getProperty("CHATWORK_ROOM_ID");

  // Chatworkにチャット通知
  const message = content;
  const client = ChatWorkClient.factory({token: token});
  client.sendMessage({
    room_id: room_id,
    body: message,
    self_unread: "1" //自分が通知に気づきたい場合のみ設定する
  });
}

PropertiesServiceChatWorkClient を利用していますが、後ほど設定しますのでスルーしてください。

プロパティサービスに秘密情報を保存する

パスワードや API キーなどの秘密情報はコードに直書きするのは避けたいですよね。プロパティサービスを利用しましょう。メニューの[歯車(プロジェクトの設定)]>[スクリプト プロパティ]から設定できます。

ここでは、Chatwork の API トークンとルーム ID を保存しています。環境に合わせて設定してください。
ルーム ID を定義しておくと、デプロイ不要で値を変更できるので便利です。

プロパティ
CHATWORK_APITOKEN Chatwork の API トークンを入力
CHATWORK_ROOM_ID Chatwork で通知したいルーム ID *1 を入力

GAS スクリプトプロパティ

ライブラリに「ChatworkClient」を追加する

Chatwork へメッセージ送信するのに便利なライブラリがありますので利用しましょう。メニューの[エディタ]>[ライブラリ]>[+ボタン]から設定できます。

GAS ライブラリの追加 1

以下の ID で検索して追加してください。

入力項目
スクリプト ID 1nf253qsOnZ-RcdcFu1Y2v4pGwTuuDxN5EbuvKEZprBWg764tjwA5fLav

GAS ライブラリの追加 2

スクリプトを「ウェブアプリ」として公開する

デプロイすると、WebAPI として公開できます。 画面上部の[デプロイ]>[新しいデプロイ]を選択します。

GAS 新しいデプロイ

「歯車(種類の選択)」から「ウェブアプリ」を選択します。

GAS 種類の選択

画面には、以下の通り入力します。 特に「アクセスできるユーザー」は「全員」を選択するようにしてください。

入力項目
説明 任意で構いません。(例:POST リクエストを受け取るサンプルです)
ウェブアプリ - 次のユーザーとして実行 自分
ウェブアプリ - アクセスできるユーザー 全員

GAS ウェブアプリの設定

アクセスの許可を聞かれるので承認します。

GAS アクセスを承認

ログインしている Google アカウントを選択します。
(GAS の名称を英語にしたからか、表示内容が英語になっていますが気にしないでください)

Googleアカウントの選択

続けて、承認しましょう。 [詳細(Advanced)]をクリックして、一番下のリンクをクリックします。

GAS ウェブアプリの承認

[許可(Allow)]をクリックすると、デプロイ完了です!

GAS アクセス許可

表示されているウェブアプリ URL(https://script.google.com/macros/s/xxxxxxxxxxx/exec)に POST リクエストすると、Chatwork へ通知してくれます。
ウェブアプリ URL は後ほど利用するのでコピーしておきましょう。
(コピーし忘れた場合は、画面上部の[デプロイ]>[デプロイを管理]からコピーできます)

GAS ウェブアプリの公開

cURLでPOSTリクエストを送信する

GAS が正しく動作するか cURL で POST リクエストを送信してみましょう。

cURL コマンドを実行して POST リクエストを送信する

ターミナルを開き、以下のコマンドを実行します。
https://script.google.com/macros/s/xxxxxxxxxxxxxxxxxxxxx/exec の部分は、コピーしておいたウェブアプリ URL に置き換えてください。

curl --header "Content-Type: application/json" \
     --request POST \
     --data '{"content": "こんにちは!\nテストです!"}' \
     https://script.google.com/macros/s/xxxxxxxxxxxxxxxxxxxxx/exec

ちゃんと通知されましたね!

Chatwork メッセージ通知

注意事項

Google Apps Script、Chatwork にはサービスクォータ(制限)があります。 安定稼働が必要なサービスで利用される際はご注意ください。

終わりに

Google Apps Script(GAS)を利用することで、無料でお手軽にリクエストの受信環境をすぐに構築することができます。
今回は cURL を利用した Chatwork 通知でしたが、 SaaS 製品の Webhook イベントを処理したり、Google スプレッドシートにデータ追加したり、もちろん Chatwork 以外のチャットサービスにも通知できます。ぜひ活用してみてください!

*1:ルーム ID はグループチャット URL 末尾の数字と同様の番号です。(例:/#!ridxxxx の「xxxx」の数字)