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(既定値)で既読、falseで未読として送信される。
 * @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: 0 = 自分の既読扱い、1 = 自分の未読扱い
    self_unread: alreadyRead ? '0' : '1',
  };

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

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

解説

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

kintone.proxyはコールバックを渡さない場合 Promise を返すので、送信結果を確認してから処理したい場合は、以下のように then もしくは await を使用します。

チェック
API トークンをコードに直接書くと、kintone を閲覧できるユーザーに見えてしまいます。kintone.plugin.app.setProxyConfig などを使い、kintone 側にトークンを保持してプロキシ経由で渡す方法も検討してください。
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 は上記の通り記述が必要になります。

レスポンスの内容

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

kintone.proxyが返す値は、以下の 3 要素の配列です([body, status, headers])。

  • body: レスポンスボディ(文字列の JSON)
  • status: HTTP ステータスコード(数値)
  • headers: レスポンスヘッダー(オブジェクト)

ボディは JSON 文字列なので、JSON.parseで変換して使用します。以下は、今回のケースの、parse 後のオブジェクト内容の例です。

{
  "message_id": "1234567890"
}

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

ステータスコードが 400 や 401 などの場合、ボディは以下のようになります。

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

正常終了時のステータスは 200 です。成功時のみ処理を続けたい場合は、以下のようなチェックを入れると安全です。

const [body, status] = response;
if (status !== 200) {
  console.log('エラーが返却されました。', status, body);
  return;
}

応用

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

#kintone #JavaScript