2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

チャットワークからGoogleカレンダーの登録を行う

Last updated at Posted at 2017-09-25

前提

会議などの連絡はチャットだけじゃなくてカレンダーにも登録しておいてほしいと言われたことありませんか。
またはその逆。その他にはカレンダーを登録する時、登録する人のメールアドレスを毎回検索するのも面倒ですよね。

できること

チャットワークで以下のテンプレートに沿った発言を行うと、その発言をトリガーとしてカレンダー登録を行います。

[info][title]今月末の予算について[/title]■参加予定メンバー
[To:1956584] AAA[To:1956582] BBB

■日時
2017/9/26 10:00 ~ 10:30

■場所
ほげほげ

■備考
http://www.hogehogeeeeeeeeeeeeeeeeeeeeee.co.jp
[/info]

準備

  1. A列に名前、B列にチャットワークID、C列にメールアドレスを記載したスプレッドシートを用意する
  2. そのスプレッドシートのシート名を「メールリスト」にする
  3. 下のソースコードを5分単位で実行する

ソースコード

function SetGoogleCalendar()
{
    // チャットワークから発言を取得するためのデータを設定
    var params = {
        headers: {
            "X-ChatWorkToken": "チャットワークのトークンID"
        },
        method: "get",
    };
    var url = "https://api.chatwork.com/v2/rooms/" + "該当の発言が行われるルームID" + "/messages";
    var response = UrlFetchApp.fetch(url, params);

    // 取得する発言がなかったら何も行わない
    if (response == "") {
        return 0;
    }

    // JSONにデータを直す
    var jsonList = JSON.parse(response.getContentText("UTF-8"));

    // チャット1件、1件ずつに分けて処理を行う
    for each(json in jsonList) {
        // チャット本文の中身を今回使う内容に合わせて分割する
        json = json["body"].replace(/\r?\n/g, "");

        json = json.replace("[info][title]", "[")
            .replace("[/title]", "]")
            .replace("■日時", "][")
            .replace("■場所", "][")
            .replace("■備考", "][")
            .replace("[/info]", "]");

        json = json.match(/\[.+?\]/g)
            .toString()
            .replace(/\[/g, "")
            .replace(/\]/g, "");

        var text = json.split(",");

        // 参加メンバーのカレンダーにもスケジュールを登録するためにスプレと連携してメールアドレスを取得する
        var menberNum = 0;
        var members = [];
        while (true) {
            if (text[1 + menberNum].match(/To:/)) {
                members.push(GetMailAddress(text[1 + menberNum]));
                menberNum++;
            } else {
                break;
            }
        }

        // カンレダーに登録するための内容に分割する
        var date = text[1 + menberNum].split("~");
        var startDay = date[0].split(" ");

        // カンレダーへチャットワークの内容を登録する
        createEvent(text[0], startDay[0], startDay[1], date[1], text[2 + menberNum], text[3 + menberNum], members);
    }
}

function GetMailAddress(userId)
{
    var url = "スプレッドシートのURL";
    var spreadsheet = SpreadsheetApp.openByUrl(url);
    var sheet = spreadsheet.getSheetByName("メールリスト");

    //シートの最終行番号、最終列番号を取得
    var startRow = 1;
    var startColumn = 1;
    var lastRow = sheet.getLastRow();
    var lastColumn = sheet.getLastColumn();

    // シートの縦横すべてを取得
    var sheetData = sheet.getSheetValues(startRow, startColumn, lastRow, lastColumn);

    for (var i = 0; i < lastRow; i++) {
        if (sheetData[i][1] == userId) {
            return sheetData[i][2];
        }
    }

    return null;
}

function createEvent(title, day, startTime, endTime, location, agenda, members)
{
    var memberList = "";
    for each(member in members){
        memberList += member + ",";
    }

    var calendar = CalendarApp.getCalendarById('カレンダー登録者のメールアドレス');
    calendar.createEvent(title,
        new Date(day + " " + startTime),
        new Date(day + " " + endTime),
        {
            description: agenda,
            location: location,
            guests: memberList
        }
    );
}

参考

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?