初めまして 😀

入社三週間目のピチピチの新卒エンジニアの和尚でございます^∀^

入社早々に技術ブログを書いてくれと頼まれまして、仕事で使えるかなーと入社してからコーディングしていた「GSuiteメンバーのスケジュールを取得するスクリプト」について簡単に書いていこうと思います!

想定する読者

・新人エンジニア

・GSuiteメンバーの情報やスケジュールを取得して何かをしたい人

・GASを使って社内を便利にしたい人

作ろうと思った経緯

新入社員お馴染みの電話応対をしていて、社内の人間のスケジュールが簡単に確認できればいいのにと思って作りはじめました 😆

現在弊社では社内の連絡手段にチャットワーク、社員のスケジュール管理にrakumoを使用しているのですが、入社ガイダンスで『rakumoはgoogleカレンダーと連動しているので、どっち使っても大丈夫です!』と人事が言っていたのをふと思い出し、GoogleのAPIとチャットワークAPIを組み合わせたら簡単にスケジュールを取得できるのでは!?と思って、作り始めました。

GASとは?

GASとはGoogle Apps Scriptの略で、Googleアカウントさえあればブラウザでコーディングできるやつです。書き方はJavaScriptと同じで(ES6非対応…早く対応してほしい笑)、JS書いたことある人なら使ったことがなくてもスイスイ書けますね。

無料で動かせるのでAPIを使って何かをしたいけど、サーバー用意するのが面倒って人にはうってつけかもしれません。

聞く話によるとGASでAPIが作れるらしぃ…

【超小ネタ】最近LINE Messaging APIをGASで動かして、友達が経営しているお店で使えるシステムを組みました! 報酬にお酒もらいました笑

使用するAPI

  • Chatwork API ‥‥ チャットワークからメッセージを送受信するのに使用
  • Admin Directory API ‥‥ GSuite内のメンバー情報を取得するのに使用
  • Calendar API ‥‥ GSuite内のカレンダー情報を取得するのに使用

実装

チャットルームの文章をおうむ返ししてみよう

まずグーグルにログインして、Google Apps Scriptを新規で作成しましょう。

Googleドライブから作成すると、作成したディレクトリに保存されるので楽ですね 😳

ではでは、早速コードを書いていきましょう!!(※ES6は対応してません)

var CHATWORK_KEY = "チャットワークAPIトークンを入力";
var roomId = "チャットワークのルームIDを入力:URLのrid以降の数字";

/**
* POSTリクエスト
* メッセージが一回送られるごとにリクエストが行われる為、ループ防止を必ず行う。
* 「メッセージ:●●●」の形式で送ると「●●●」がおうむ返しされる。
* ※matchメソッドを使用しているので、必ず上の形式で送るものとする。
*/
function doPost(e) {
  var json = JSON.parse(e.postData.contents);
  var body = json.webhook_event.body;

  if(body.match("メッセージ:")){
    returnMessage(body.slice(6));
  }
}

/**
* チャットワークへとメッセージを返す
*/
function returnMessage(message) {
  var params = {
    headers: {"X-ChatWorkToken": CHATWORK_KEY},
    method: "post",
    payload: {body: message}
  };
  var url = "https://api.chatwork.com/v2/rooms/" + roomId + "/messages";
  UrlFetchApp.fetch(url,params);
}

では次に書いたコードを実際にチャットワークで使えるようにしていきます 🙂

以下の手順でWebhook用のURLを生成してください。

1.メニューバー[公開]->[ウェブアプリケーションとして導入…]をクリック

2.設定をしていきます

❶ [プロジェクトバージョン]に変更内容を入力

❷ [次のユーザーとしてアプリケーションを実行]には自分(メールアドレス)を選択

❸ [アプリケーションにアクセスできるユーザー]に全員(匿名ユーザーを含む)を選択

3.[現在のウェブアプリケーションのURL]に表示されたURLをWebhookに使用するので覚えておく。

4.チャットワークにてWebhookの設定をします。まず[API設定]->[Webhook]でこの画面へと遷移します。

❶ 任意のWebhook名を入力

❷ GAS公開時に生成されるウェブアプリケーションのURLを入力

❸ルームイベントを選択. メッセージ作成と更新にチェックを押す. ルームIDを入力する.

❹ステータスを有効にする(新規作成時には表示されず、作成すると自動で有効になる)

 

5.チャットワークにメッセージを送ってみる。

弊社ではチャットワークAPI専用のユーザーがいるので、そのアカウント(APIトークンの所持者)からメッセージが返ってきます。

GASでGoogleのAPIを使う方法

おうむ返しをすることが出来たので、実際にGASからAdmin Directory APIとCalendar API を使う方法を見て見ましょう。

とは言っても凄く簡単で、メニューバー[リソース]->[Googoleの拡張サービス…]を選択します。

使用するAPIをONにするだけ!これでAPIのメソッドを使えます 😆

※Google API ConsoleでAPIを有効化しないと使えないので注意!!

それぞれのAPIをGASで使う時のスタートガイドがあるので記載しておきます。

GAS:Directory APIのスタートガイド

GAS:Calendar APIのスタートガイド

他にもGASでは29個のAPIが簡単に使用することができます :mrgreen:

実際に使ってみた

現在開発途中ですが、「現在のスケジュール」「今日のスケジュール」「明日のスケジュール」を検索するプログラムを作りました!

プログラムの流れとしては、

①「今日(or現在 or明日)::名前」で調べたい時間帯と人をGASに送る。

② 名前からDirectory APIを使用して、GSuite内でマッチする人のメールアドレスを取得する。

③ 取得したメールアドレスを使ってCalendar APIよりその人のスケジュールを取得する。

④ 取得したスケジュールよりチャットワークより指定した時間帯にマッチするもののみを取り出す。

⑤ チャットワークに取得したスケジュールを返す。

です。

今回は詳しいコードは書きませんが(要望があれば追記します)、社内で使用しているメッセージアプリとGASを組み合わせることで簡単に仕事を効率化するシステムを組むことができます 😈

実際に電話応対で使っていて、わざわざスケジュールアプリを開いて時間を確認しなくても一覧で出てくれるのでとても助かっています 😳

終わりに

色々と修正する部分は多いですが、社内で使ってもらえるような便利なシステム作りをこれからもしていきたいですね 😆

あーお腹空いた。。。お寿司食べたい 🙄