Google Formsの回答をChatworkに通知する

Google Formsの回答をChatworkに通知する

公開日: 2022-12-30

はじめに

Google Formsは標準で回答をスプレッドシートに記載する機能があります。
しかし、フォームを問い合わせなどに使用する場合は、回答があった際に使用しているチャットツールやメールに通知したいと思う時があると思います。
今回はGoogle Formsの回答をChatworkに通知する方法を紹介します。

Googleフォームのスクリプトエディタを開く

まずGoogleフォームの編集画面からGoogle Apps Scriptのエディタを開きます。
フォーム右上の縦の三点リーダーをクリックし、「スクリプト エディタ」をクリックします。
以降のコードはここに書いていきます。

フォームの回答を取得する

まずフォームの回答を取得します。
フォームの回答は送信時に起動する関数にeとして関数に渡されます。
そしてeからgetItemResponses()を使用して、質問順にデータを受け取ります。

function onSubmit(e) {
  const formResponses = e.response.getItemResponses();

  for (let i = 0; i < formResponses.length; i++) {
    let response = formResponses[i];
    // 質問のタイトル
    let question = response.getItem().getTitle();
    // 質問の回答
    let answer = response.getResponse();
  }
}

Chatworkに通知する

次にChatworkに投稿するコードを書いていきます。
APIトークンを取得していない場合は、ドキュメント(Chatwork APIへようこそ!)を参考に取得してください。
APIでパラメータにAPIトークン、投稿本文を設定して、https://api.chatwork.com/v2/rooms/[投稿する部屋のroomId]/messagesにポストすると投稿できます。
投稿する部屋のroomIdは投稿したい部屋のURLのrid以降の番号になります。

// 投稿する部屋のRoomId
const roomId = 00000;
// チャット本文
const body = "APIのtest";

// APIトークン
const apiToken = "";

const params = {
  headers : {"X-ChatWorkToken": apiToken},
  method : "post",
  muteHttpExceptions: true,
  payload : {"body": body}
};

// url生成
const url = "https://api.chatwork.com/v2/rooms/" + roomId + "/messages";
// chatworkに投稿
UrlFetchApp.fetch(url, params);

回答時に起動するトリガーを設定する

回答を投稿するスクリプトを作成したら、それをフォームの回答時に起動するようにします。
スクリプト編集画面の左メニューのトリガーを選択、トリガーを追加ボタンからトリガーを追加します。
起動させたい関数を選択し、イベントのソースを選択をフォームから、イベントの種類を選択をフォーム送信時に設定します。

まとめたコード

まとめると以下のようになります。

function postChatwork(roomId, body) {
  /* 
  roomId: 投げる部屋のRoomId
  body: チャット本文
  */
  // APIトークン
  const apiToken = "";

  const params = {
    headers : {"X-ChatWorkToken": apiToken},
    method : "post",
    muteHttpExceptions: true,
    payload : {"body": body}
  };
  
  // url生成
  const url = "https://api.chatwork.com/v2/rooms/" + roomId + "/messages";
  // chatworkに投稿
  let response = UrlFetchApp.fetch(url, params);
  
  return response[1];
}

function onSubmit(e) {
  const formResponses = e.response.getItemResponses();
  let message = "フォームに回答がありました。\n"

  for (let i = 0; i < formResponses.length; i++) {
    let response = formResponses[i];
    // 質問のタイトル
    let question = response.getItem().getTitle();
    // 質問の回答
    let answer = response.getResponse();

    message += `質問: ${question}\n回答: ${answer}\n`
  }

  const roomId = 00000;
  postChatwork(roomId, message);
}

(おまけ) Gmailでメールを送信する

Gmailで送信するにはGmailApp.sendEmailを使うと簡単に送信できます。

// 送信先アドレス
const to = "";
const subject = "メールタイトル";
const body = "メール本文";
GmailApp.sendEmail(to, subject, body);

参考記事


カテゴリ: