Google Apps Script / Programming

ライブラリを使わずチャットワークを操作(GAS)

GASでシステムを作る際にセキュリティの観点や不透明性からライブラリを使用することが好ましくない場合があると思います。またライブラリを使用することにより実行速度が遅くなる場合があります。なぜかチャットワーク公式サイトも既存のライブラリを使っており知らない方もいるかもしれないと思ったため、今回はこれを解決する関数を紹介します。

まずはroom idで指定したグループチャットにメッセージを送る関数を紹介しています。最下部には他の関数も載せているのでご参考にしてください。

解決方法

const CHATWORK_BASE_URL = 'https://api.chatwork.com/v2';
const CHATWORK_TOKEN = 'チャットワークトークン';
const ROOM_ID = 'メッセージを送りたいRoomのID';

/**
 * roomIdで指定されたchatworkのルームにmessageで指定された文章を送信する
 * @param {string} message 送る文章内容
 * @param {string} roomId 送り先chatwork room ID
 * @return {HTTPResponse} フェッチしたURLのリスポンス
 */
function sendChatworkMessage(message) {
  const headers = {
    'X-ChatWorkToken': CHATWORK_TOKEN,
  };
  const body = {
    'body': message,
  };
  const options = {
    'method': 'post',
    'headers': headers,
    'payload': body,
  };
  return UrlFetchApp.fetch(`${CHATWORK_BASE_URL}/rooms/${ROOM_ID}/messages`, options);
}

使い方

function main() {
  const response = sendChatWorkMessage('Hi!');
  if (response.getResponseCode() !== 200) {
    const errorReason = `Chatworkのメッセージ送信APIを確認してください。\nレスポンスコード: ${response.getResponseCode()}`;
    throw new Error(errorReason);
  }
}

上記の関数はRoom_IDで指定したグループチャットに対してメッセージを送ります。重要ポイントはUrlFetchAppクラスのfetch(url, params)関数のparamsに渡す引数の作成です。こちらはチャットワークの公式APIリファレンスを見て作成しました。

作り方

上部で紹介している公式ページを参考に作り方をご紹介します。

まずはUrlFetchApp.fetch(url, params)のurlの作り方です。エンドポイントの説明である「チャットにメッセージを投稿する」の下にある「(POST) https://api.chatwork.com/v2/rooms/{room_id}/messages」と「PATH PARAMS」に注目します。「PATH PARAMS」が{room_id}の説明をしたものです。とても端的に「ルームID」とだけ書いていますが、要するに{room_id}を送りたい先のroom idに変更すればurlは完成です。

次にparamsの作り方です。こちらはページ内の「FORM DATA」に注目します。required(必須)と書かれたString型のBodyと任意(requiredの表記がない)のInteger型のself_unreadがあります。必須部分のみを指定すれば良いため、options内のpayloadで指定しています。methodに関してはurlを作成する時に確認したPOSTを指定し、headersの指定内容はこの表記内容で変わらないためこのまま書いておけば大丈夫です。

このやり方を覚えておけば他エンドポイント(API操作)にも対処できると思います

その他の関数

const CHATWORK_BASE_URL = 'https://api.chatwork.com/v2';
const CHATWORK_TOKEN = 'チャットワークトークン';
const ROOM_ID = 'メッセージを送りたいRoomのID';

/**
 * 自分以外のコンタクト一覧を取得する
 * @return {HTTPResponse} フェッチしたURLのリスポンス
 */
function getChatworkContacts() {
  const headers = {
    'X-ChatWorkToken': CHATWORK_TOKEN,
  };
  const options = {
    'method': 'get',
    'headers': headers,
  };
  return UrlFetchApp.fetch(`${CHATWORK_BASE_URL}/contacts`, options);
}

/**
 * roomIdで指定されたchatworkのルームにmessageで指定された文章を送信する
 * @param {string} file 送るファイル(上限: 5MB)
 * @param {string} message 送る文章内容
 * @param {string} roomId 送り先chatwork room ID
 * @return {HTTPResponse} フェッチしたURLのリスポンス
 */
function sendFileAttachedChatworkMessage(file, message) {
  const headers = {
    'X-ChatWorkToken': CHATWORK_TOKEN,
  };
  const body = {
    'file': file,
    'message': message,
  };
  const options = {
    'method': 'post',
    'headers': headers,
    'payload': body,
  };
  return UrlFetchApp.fetch(`${CHATWORK_BASE_URL}/rooms/${ROOM_ID}/files`, options);
}

最後に

これでライブラリに頼る必要もなくなります。会社方針的にライブラリが使えない方もそうでない方も、自作した方が他APIにも対応できるようになるうえに、メンテナンスもできるため私はこのやり方をお勧めします。

他にもご要望などあればお気軽にコメントまたはContactからご連絡ください

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です