BLOG

ブログ

QiitaとZennのトレンドをGASでLarkに通知してみた!

マーベリックスでは、今年度から社内ツールをLarkに統合しています。

社内のコミュニケーションツールとして利用しているLarkメッセージは、ボットを利用することでLark内のアプリケーションだけでなく、外部アプリケーションとも連携することが可能です。

今回は、Lark APIとGoogle Apps Script(GAS)を使用して、グループチャットに技術トレンド情報を通知してみたので、その方法をご紹介します!

Larkにカスタムボットを追加する

グループチャットを開き、画面右上にある アイコンより、設定 > ボット をクリックします。

一覧からカスタムボットを選択し、ボットの詳細画面で 次へ をクリックして追加します。

追加完了後、Webhook URLが生成されるので保存しておきましょう!

Google Apps Script(GAS)を作成する

トレンド情報をLarkのチャットグループに通知するための関数を作成します。

今回はQiitaとZennからそれぞれのトレンド情報を取得して通知します。
(トレンド情報の取得方法については割愛します!)

// トレンド情報を取得してPOSTする
function todayTrend() {
  // コンテンツ配列の初期化
  const contentArray = [];

  // Zennのトレンド情報を取得
  const zennTrends = fetchZennTrends();

  // Qiitaのトレンド情報を取得
  const qiitaTrends = fetchQiitaTrends();

  // コンテンツ配列にZennとQiitaのトレンド情報を追加
  contentArray.push(
    ...zennTrends,
    [
      {
        tag: "text",
        text: "\n", // ZennとQiitaのトレンド情報の間に改行を追加
      },
    ],
    ...qiitaTrends
  );

  // JSONデータの構築
  const data = {
    msg_type: "post",
    content: {
      post: {
        en_us: {
          content: contentArray,
        },
      },
    },
  };

  // POST処理
  post("ここにカスタムボットのWebhook URLを設定する", data);
}

// POST処理
function post(url, data) {
  // POSTリクエストのオプションを設定
  const options = {
    method: "post",
    contentType: "application/json",
    payload: JSON.stringify(data),
  };

  // POSTリクエストを送信
  UrlFetchApp.fetch(url, options);
}

次にトリガーの追加処理です。
指定した時間に通知が飛ぶようにトリガーを設定します。

土日に通知が飛ぶと困るので、平日のみ実行するようにしています。
(とりあえず祝日の対応はしてません…!)

// Googleのトリガーを作成する
function setTime(app, hour, minutes) {
  const now = new Date();
  const dayOfWeek = now.getDay();

  // 平日のみ実行
  if (dayOfWeek !== 0 && dayOfWeek !== 6) {
    now.setHours(hour);
    now.setMinutes(minutes);
    ScriptApp.newTrigger(app).timeBased().at(now).create();
  }
}

トリガー設定用の関数です。
ここに関数を追加することで、他の通知処理も定時実行出来るようになります。

平日の10時に実行されるよう設定しました。

// トリガーを設定
function setTrigger() {
  // 実行するファンクションとPOSTしたい時分を設定
  setTime("todayTrend", "10", "00");
}

最後にトリガーの削除処理です。
一度実行したトリガーは不要になるため、都度削除します。

// トリガーを削除
function delTrigger(target) {
  const triggers = ScriptApp.getProjectTriggers();
  for (let i = 0; i < triggers.length; i++) {
    if (triggers[i].getHandlerFunction() == target) {
      ScriptApp.deleteTrigger(triggers[i]);
    }
  }
}

トレンド取得関数の最初で呼び出すようにします。

// トレンド情報を取得してPOSTする
function todayTrend() {
  // トリガー削除(無駄なトリガーが増えていくので、実行されたら登録したトリガーを消します)
  delTrigger("todayTrend");

これで準備が完了しました。
トリガーに作成した関数「setTrigger」を追加します。

以下のように設定しました。

通知された!

ちゃんと通知されるか心配でしたが、翌日の10時にグループチャットに通知されました!

メンバー間で記事の感想を共有したり、関連する情報をおすすめし合ったりすることで、グループチャットがより活発になったように感じます!

こうして定期的に面白い記事が目に入ることで、新しい知識や視点を得るきっかけが増えるのではないでしょうか。

Larkを導入している場合は、ぜひ活用してみてください!

RELATED ARTICLE