Chatwork - メッセージの送信

にメンテナンス済み

kintone は社員同士のコミュニケーションを円滑にするための機能を備えていますが、kintone とは別に、チャットツールを利用している企業も多いのではないでしょうか。

今回はチャットツールの一つである Chatwork に、kintone からメッセージを送る方法をご紹介します。

使用するコード

/**
 * ChatworkのAPIを使用して、指定されたチャットルームにメッセージを送信します。
 * @param params { { apiToken: string; chatroomId: number | string; message: string; alreadyRead?: boolean } }
 * @param params.apiToken - Chatwork APIのトークン
 * @param params.chatroomId - メッセージを送信するチャットルームのID
 * @param params.message - 送信するメッセージの本文
 * @param params.alreadyRead - 既読フラグ。trueの場合は既読にしない。
 * @returns Chatwork APIのレスポンス
 */
const sendChatworkMessage = (params) => {
  const { apiToken, chatroomId, message, alreadyRead = true } = params;
  const uri = `https://api.chatwork.com/v2/rooms/${chatroomId}/messages`;

  const header = {
    'X-ChatWorkToken': apiToken,
    'Content-Type': 'application/x-www-form-urlencoded',
  };

  const payload = {
    body: message,
    self_unread: alreadyRead ? '0' : '1',
  };

  const body = new URLSearchParams(payload).toString();

  return kintone.proxy(uri, 'POST', header, body);
};

解説

引数に各パラメータを設定することで利用できます。

返り値が Promise オブジェクトなので、送信を確認してから処理したい場合は以下のような記述が必要です。

sendChatworkMessage({
  apiToken: '_______________',
  chatroomId: '0000000',
  message: 'メッセージ',
})
  .then((responses) => {
    console.log('Chatworkにメッセージを送信しました。', responses);
    // ここに取得後の処理を書く
  })
  .catch((error) => {
    console.log('Chatworkにメッセージを送信できませんでした。', error);
  });

// もしくは
(async () => {
  const response = await sendChatworkMessage({
    apiToken: '_______________',
    chatroomId: '0000000',
    message: 'メッセージ',
  });

  console.log('Chatworkにメッセージを送信しました。', response);
})();

Content-Type について

POST メソッドや PUT メソッドを使用するエンドポイントのリクエストボディはContent-Type: application/x-www-form-urlencodedである必要があります。

Chatwork API ドキュメント | エンドポイント

今回はメッセージを送りたいだけなので、POST を使用します。

ですので Content-Type は上記の通り記述が必要になります。

レスポンスの内容

今回の目的はメッセージを送信することなので、結果を確認する必要のない場合は 受けとったパラメータについて知る必要はありません。

Chatwork から受け取るデータ(上記コードの response の部分)は、配列で取得されます

  • HTTP ボディ(ほしいデータの部分、JSON 形式)
  • HTTP ヘッダー(受信に成功したかどうかなどのステータスコード
  • ゲートウェイ情報(基本的には使いません。Chatwork は Amazon のゲートウェイを利用しているため、その情報が取得されます)

また、HTTP ボディは JSON 形式となっているので、JSON.parse をかませてやる必要があります。以下は、今回のケースの、parse 後のオブジェクト内容の例です。

{
	"message_id": "5",
}

エラーが発生した際の対処法

HTTP ヘッダーが’400’や’401’など、エラーが発生している場合。HTTP ボディは以下のようになります。

{
  "errors": ["Invalid API token"]
}

正常終了した場合の HTTP ヘッダーは’200’ですので、正常終了した場合のみ処理をしたい場合は、以下のようなエラーチェックを入れた方が良いかもしれません。

if (response[1] !== '200') {
  console.log('データを取得しましたが、エラーが返却されました。', response[1]);
  return;
}

応用

kintone 側に別のキー情報(名前やアカウント ID など)がある場合は、下記の記事と組み合わせることで、送りたい相手を動的にすることができます。

#JavaScript