kintoneからChatworkにメッセージを送る

記事のトップ画像

使用したコード

/**
 * Chatworkにメッセージを送ります.
 *
 * @param apiToken 送り主のAPIトークン
 * @param chatroomId 送り先のチャットルームID
 * @param message 送信メッセージ
 * @param alreadyRead 送り主から見て、送信メッセージを既読にする場合はTrue
 * @return Promiseオブジェクト
 */
function sendChatworkMessage(apiToken, chatroomId, message, alreadyRead) {
  const uri = `https://api.chatwork.com/v2/rooms/${chatroomId}/messages`;

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

  const body = `body=${message}&self_unread=${alreadyRead ? '0' : '1'}`;

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

解説

引数に各パラメータを設定することで利用できます。
返り値が Promise オブジェクトなので、送信を確認してから処理したい場合は以下のような記述が必要です。

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

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 など)がある場合は、下記の記事と組み合わせることで、送りたい相手を動的にすることができます。

<a href='https://localbias.work/423/' target='_blank' rel='noopener noreferrer' data-blogcard='1'