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 を使用します。
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である必要があります。
今回はメッセージを送りたいだけなので、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 など)がある場合は、下記の記事と組み合わせることで、送りたい相手を動的にすることができます。