【GAS】Googleフォームへの回答内容をChatworkに送信する

Googleフォームに回答があった場合、Chatworkに回答内容を送信するGAS(Google Apps Script)の作り方です。

## 送信元のGoogleフォームにスクリプトを書く
Googleフォームの設定からスクリプトエディタを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128429/a33c5462-37b5-0ee1-89ee-63cbf41e6111.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128429/19241620-9045-9ba1-70b4-92e8f7c3f7a4.png)

最初のコードを消して、以下のスクリプトをコピペします。

```javascript
/** ChatworkのAPIトークン */
const CHATWORK_API_TOKEN = "ChatworkのAPIトークンを設定します";
/** ChatworkのルームID */
const CHATWORK_ROOM_ID = "送信したいChatworkのルームIDを設定します";

/**
 * Googleフォームの回答があったときに実行される関数
 */
function onFormSubmit() {
  const message = buildChatworkMessage();
  sendToChatwork(message);
}

/**
 * 最新のフォーム回答からChatwork用のメッセージを作成する
 * @return {string} Chatwork用のメッセージ
 */
function buildChatworkMessage() {
  const form = FormApp.getActiveForm();
  const latestResponse = form.getResponses().pop(); // 最後の回答のみ取得
  const items = latestResponse.getItemResponses();

  let message = "[info][title]Googleフォームに回答が届きました[/title]\n";

  items.forEach((item) => {
    const response = item.getResponse();
    const responseText = Array.isArray(response)
      ? response.join(", ")
      : String(response);
    message += `${item.getItem().getTitle()}：${responseText}\n`;
  });

  message += "[/info]";
  return message;
}

/**
 * Chatworkにメッセージを送信する
 *
 * @param {string} message 送信するメッセージ
 */
function sendToChatwork(message) {
  Logger.log(`Chatworkに送信するメッセージ：${message}`);

  const url = `https://api.chatwork.com/v2/rooms/${CHATWORK_ROOM_ID}/messages`;
  const options = {
    method: "POST",
    headers: { "X-ChatWorkToken": CHATWORK_API_TOKEN },
    payload: { body: message },
  };

  try {
    const response = UrlFetchApp.fetch(url, options);
    const statusCode = response.getResponseCode();
    const responseText = response.getContentText();
    Logger.log(`Chatwork APIのレスポンス：${statusCode} ${responseText}`);
  } catch (error) {
    Logger.log(`Chatwork APIの送信に失敗しました：${error}`);
  }
}

```

ついでにプロジェクト名やファイル名を変更しておくと後から分かりやすいです。

## スクリプトの設定を行う
Chatworkに送信するため以下の項目を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128429/083724be-a79b-71ef-5de8-01c15a4d49be.png)

- ChatworkのAPIトークン
- 送信するCahtworkのルームID


### Chatwork APIトークンの取得

APIトークン発行ページからトークンをコピーします。
https://www.chatwork.com/service/packages/chatwork/subpackages/api/token.php?fd_bridge_id=bCtCNWlFTEFtMmwvUlVzemF1R0xoQT09LS0zajV5ZklCWUVMVDYvOCtGS283a2xRPT0%3D--3be8d1a33ca615d1b72a9a1e35d9a9578d43974e&_gl=1*1pkfbkb*_ga*MTYxMDQ5ODI3Ny4xNzI4MTY2MzE5*_ga_BL4P2F670X*MTcyODc2OTIyMi4zLjEuMTcyODc3MDgyNS42MC4wLjA.


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128429/ef4736c1-5135-03eb-cb38-aba96d8a1e99.png)


### ルームIDを取得

送信したいチャットを開いて、ルームIDを取得します。
画面右上の設定マーク＞グループチャットの設定＞ルームIDから確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128429/1878a73e-ca54-d0f6-8f08-c8be14cf685b.png)




## トリガーの設定
Googleフォーム送信時にスクリプトが動くようにトリガーを設定します。



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128429/369c4acf-ae5d-851c-0292-b8bb8bb58717.png)

以下の設定で保存します。
イベントの種類は「フォーム送信時」に変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128429/9573d387-9a1e-04c2-ce41-d8c18b0a6c71.png)


## Googleフォームを送信すると、Chatworkに内容が送信される
ここまでの設定をすると、フォームに回答があった場合にChatworkへ内容が送信されるようになります。

↓フォームに回答があると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128429/256be327-0e8e-de9d-24f0-f31a6e0f4196.png)

↓Chatworkに送信される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128429/bf07f92b-4345-8166-43b8-87ede11d14f0.png)


## 参考
- https://help.chatwork.com/hc/ja/articles/115000172402-API%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%82%92%E7%99%BA%E8%A1%8C%E3%81%99%E3%82%8B
- https://developer.chatwork.com/docs/endpoints