【GAS】スプレットシートの内容をChatworkに複数のタスクとして追加する

※投稿内容は個人の学習目的の記事であり、所属組織とは一切関係ありません。
　Chatwork公式ドキュメントではございませんので、自己責任でご利用ください。

こんにちわ、さかぐち（[@sakaguchi_mamii](https://twitter.com/sakaguchi_mamii)）です。

ChatworkにはTODOを管理する「タスク」機能があります。

[タスクの基本的な使い方 – サポート | Chatwork](https://help.chatwork.com/hc/ja/articles/203354180)

タスクをまとめて追加したい場面がありますが、標準機能では準備されていません。
そこで、今回はGASを利用して、スプレットシートの内容をまとめてタスク登録しようと思います。

#APIトークンを取得する

右上のメニューから「API設定」を選択する。
<img width="210" alt="API設定.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136275/4ef9404f-037d-c32d-0db9-0109164b6be5.png">

パスワードを入力し、APIトークンを取得する。
<img width="978" alt="スクリーンショット 2020-04-29 20.30.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136275/b8b05005-c099-bfc5-e43a-1138192bac9b.png">

#ルームIDを取得する

タスクを登録するグループチャットのルームIDを取得する。
<img width="222" alt="スクリーンショット_2020-04-29_20_32_05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136275/8dc413d1-6fc6-a200-a3a5-c06be7312a43.png">
グループチャットのURL末尾の数字がルームIDとなります。

#タスク担当者のアカウントIDを取得する

タスクを担当する担当者のアカウントIDを取得する。
<img width="224" alt="スクリーンショット_2020-04-29_20_35_56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136275/0eda690d-d620-5361-d4a9-6fefc3c103dc.png">

Toの後ろの数字がアカウントIDとなります。

#ライブラリを読み込む

Chatworkにタスクを登録する部分は「Chatwork Client for Google Apps Script」を利用します。
https://github.com/cw-shibuya/chatwork-client-gas

プロジェクトキー: M6TcEyniCs1xb3sdXFF_FhI-MNonZQ_sT

<img width="704" alt="スクリーンショット 2020-04-23 11.54.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136275/de7d0248-c75a-5c67-399f-b6cf300ccdfa.png">


#スプレットシートを準備する

タスクを登録する用のシート（シート名：タスク）
※スクリプト内でシート名と情報が記載されているセルの場所を指定し情報を取得します。
<img width="466" alt="スクリーンショット 2020-04-29 20.41.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136275/368e722b-469f-aac3-0ff6-0882afe4be9d.png">

アカウントID等、固定の情報を記載するシート（シート名：基本情報）
※スクリプト内でシート名と情報が記載されているセルの場所を指定し情報を取得します。
<img width="409" alt="スクリーンショット_2020-04-29_20_59_24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136275/ee532ef9-1fd7-896b-8a8e-e8c69ce2f0e3.png">
※スクリプト内でシート名を指定し、情報を取得します。

#スクリプト作成

```Javascript
const token = 'APIトークン';

function myFunction() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();

  // 基本情報を取得
  const basic_info = ss.getSheetByName('基本情報');
  var room_id = basic_info.getRange(2, 1).getValue();
  var account_id = basic_info.getRange(2, 2).getValue();

  // タスク情報を取得
  const task_list = ss.getSheetByName('タスク');
  const lastRow = task_list.getLastRow();

  // 記載がある分だけ繰り返し
  for(let i = 2; i <= lastRow; i++) {

    // 内容
    var body = task_list.getRange(i, 1).getValue();　
    // 期日
    var limit = new Date(task_list.getRange(i, 2).getValue());
    limit = (new Number(limit.getTime() / 1000)).toFixed();
    // タスク追加
    var param = {
      limit: limit,
      body: body,
      room_id: room_id,
      account_id: account_id
    }
    addTask(param);

  }
}

// タスク追加処理
function addTask(param) {

  var client = ChatWorkClient.factory({token: token});
  client.sendTask({
    limit: param.limit,
    to_id_list:[param.account_id],
    body: param.body,
    room_id: param.room_id
  });

}
```

#テスト

スクリプト実行！
<img width="777" alt="スクリーンショット 2020-04-29 21.01.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136275/14e59a28-7057-532b-87dd-313d205b6cae.png">
スプレットシートに記載したタスクが登録されました！

#最後に

無事にタスクを登録することができました。（よかった）

久々にコードを書いて公開しているので、間違っている場所や分かりづらい点があればご指摘ください！

今後やりたいこと！

- 指定のキーワードをグループチャットに投稿すると自動でタスクが登録される仕組み
　（前提条件：該当のグループチャットにタスク登録BOTが存在していること）