LoginSignup
5
6

More than 5 years have passed since last update.

Node.jsからChatworkのタスクを追加するメモその2

Posted at

前回記事の続きです。

タスク追加にあたり、メンバーのリストを取得してきてから追加します。

APIドキュメントはこちらです。

[JavaScript] 非同期処理のコールバック地獄から抜け出す方法を参考にasync/awaitのaaを使って同期的に処理を書いてみます。

$ npm i aa request
chtask.js
'use strict';

if (!process.env.chtoken) {
    console.log('Error: Specify token in environment');
    process.exit(1);
}

let aa = require('aa');
let request = require('request');
const ROOM_ID = '43484166';

//タスク追加
function addTask(text, userList){
  let task = {
    body: text,
    limit: 0,
    to_ids: userList,
  };

  let options = {
      url: `https://api.chatwork.com/v1/rooms/${ROOM_ID}/tasks`,
      headers: {
          'X-ChatWorkToken': process.env.chtoken
      },
      form: task,
      json: true
  };

  return new Promise((resolve,reject) => {
    request.post(options, (error, response, body) => {
      if(error) reject('error: '+ response.statusCode);
      resolve(body);
    });
  });

}

//メンバー取得
function getMember(){
  let options = {
      url: `https://api.chatwork.com/v1/rooms/${ROOM_ID}/members`,
      headers: {
          'X-ChatWorkToken': process.env.chtoken
      },
      json: true
  };

  return new Promise((resolve,reject) => {
    request.get(options, (error, response, users) => {
      if(error) reject('error: '+ response.statusCode);
      let userList = '';
      for (let i = 0, len = users.length; i < len; i++) {
        userList += users[i].account_id;
        if(len !== i+1) userList += ',';
      }
      resolve(userList);
    });
  });
}

//同期実行
aa(function*() {
  let userList = yield getMember();
  let res = yield addTask('message', userList);
  return res;
}).then(
  function (val) { console.info('ok: ',val); },
  function (err) { console.error('ng: ',err); }
);

実行してみます。

$ chtoken=xxxxxxxxx node chtask.js

こんな感じでタスク追加できました。

APIを二回投げるあたりは非同期処理の練習になりますね〜

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6