Google 캘린더에 ChatWork에서 일정을 등록하는 봇을 만들었습니다.

최근 GAS를 사용하여 다양한 업무를 효율적으로 하는 것을 가늘게 만들고 있는 계 SE입니다.
첫 투고 왜 긴장하고 있습니다.

동기



"Google 캘린더를 일일이 열어 약속을 등록하는 데 귀찮은 세이, 차츰 ChatWork에 투고하면 Google 캘린더에 등록하는 봇이나 뭔가 만들자!"
그래서 Google 캘린더에 ChatWork에서 일정을 등록하는 봇을 만들려고 결심했습니다.
(굉장히 간단해서, 이제 하고 있으니 분은 살짝 오른쪽 위의 닫는 버튼을 클릭!!)!!

또, 아래의 기사를 읽고, GAS를 타입 스크립트로 거는다는 것을 최근 했으므로,
Google Apps Scripts에서 Typescript를 매우 쉽게 사용할 수 있습니다.

이번에는
【GAS를 Typescript처럼 쓰고, Google 캘린더에 ChatWork로부터 예정을 등록하는 봇을 만들어 보았습니다. 】

절차는
1.TypeScript를 사용할 수 있도록 준비
2. 구현
3.ChatWork Webhook에 작성한 소스의 URL을 등록.
세 가지입니다.

1단계: TypeScript를 사용할 수 있도록 준비



이것은
Google Apps Scripts에서 Typescript를 매우 쉽게 사용할 수 있습니다.
이 기사에 대단히 감사합니다.
(알기 쉽고, 나와 같은 초보자도 할 수있었습니다)

이 기사를 참고하면,
· 로컬 GAS 구현 가능
· GAS를 관리하기 위해 CLI 도구 google/clasp를 사용할 수 있습니다.
・GAS를 Typescript처럼 구현할 수 있게 된다.
이러한 일을 할 수 있습니다.

2단계: 구현



아래는 실제 코드입니다.
//ChatWorkのAPIトークン
const API_TOKEN: string = 'チャットワークのAPIキー';

//Googleカレンダーのパラメータ
const MY_CAL: Object = CalendarApp.getCalendarById("自分のカレンダーID");

function doPost(e) {
    try {
        //チャットワークからメッセージをjsonにparseする
        let json: any = JSON.parse(e.postData.contents);
        let roomId: any = json.webhook_event.room_id;
        let jsonBody: any = json.webhook_event.body;

        if (jsonBody.slice(0, 1) !== "[") {
            let accountId: any = json.webhook_event.account_id;
            let messagesId: any = json.webhook_event.message_id;

            //メッセージを配列に
            let bodyArray: any = jsonBody.split(',');

            //カレンダーにイベントを登録する際に使用するパラメータ
            let title:string = bodyArray[0];
            let startDay:string = bodyArray[1];
            let endDay:string = bodyArray[2];
            let place:string = bodyArray[3];

            //カレンダーにイベントを登録するためのオブジェクを生成
            let myCal = new Calender(MY_CAL);

            myCal.createSchedule(title, startDay, endDay, place);

            let chatwork = new ChatWork(roomId);
            chatwork.sendMessege(accountId, messagesId, '正常に登録できました');

        }
    } catch (ex) {
        console.log('error');
    }
}

//カレンダークラス(googleカレンダーでできる機能をここに詰め込む)
class Calender {
    constructor(private calId: any) {
        this.calId = calId;
    }
    public createSchedule(title: string, SDay: string, EDay: string, place: string) {
        //開始日の再定義GMT -04:00になってしまっていた。
        let startday = new Date(SDay);
        let startYear = startday.getFullYear();
        let startDate = startday.getDate();
        let startMonth = startday.getMonth();
        let startHour = startday.getHours() - 13;
        let startMinute = startday.getMinutes()
        let startSecond = startday.getSeconds();
        let startDay = new Date(startYear,startMonth,startDate,startHour,startMinute,startSecond);
        console.log(startDay);

        //終了日の再定義GMT -04:00になってしまっていた。
        let endday = new Date(EDay);
        let endYear = endday.getFullYear();
        let endDate = endday.getDate();
        let endMonth = endday.getMonth();
        let endHour = endday.getHours() - 13;
        let endMinute = endday.getMinutes()
        let endSecond = endday.getSeconds();
        let endDay = new Date(endYear,endMonth,endDate,endHour,endMinute,endSecond);
        console.log(endDay);

        let option = {
            location: place
        };
        this.calId.createEvent(title, startDay, endDay, option);
    }
}

//チャットワーククラス(チャットワークでできる機能をここに詰め込む)
class ChatWork {
    static url: string = "https://api.chatwork.com/v2";
    constructor(private roomID: string) {
        this.roomID = roomID;
    }
    public createUrl() {
        let chatWorkUrl: string = "";
        let sendBody: string = "";
        chatWorkUrl = `${ChatWork.url}/rooms/${this.roomID}/messages`;
        return chatWorkUrl;
    }
    public sendMessege(accountid: string, messageid: string, str: string): void {
        let chatWorkUrl: string = this.createUrl();
        let sendBody: string = "";
        let options = {
            'method': 'post',
            'headers': { 'X-ChatWorkToken': API_TOKEN },
            'payload': { 'body': str }
        };
        sendBody = `[rp aid=${accountid} to=${this.roomID}-${messageid}][info]${str}[/info]`;
        options.payload = { body: sendBody }
        UrlFetchApp.fetch(chatWorkUrl, options);
    }
}

※좀 더 이렇게, 너의 코드 빌어 먹을거야 지적 기다리고 있습니다.

Google Apps Script의 첫 걸음, 초보자도 채팅에 메시지를 보낼 수 있습니다.
GAS에서 기본 Google 캘린더에 일정을 추가하는 간단한 스크립트
를 참고로 했습니다.

1.doPost에서 채팅 워크에서 포스트 데이터를 받아 JSON으로 퍼스
2. 캘린더 클래스의 createSchedule에서 사용하기 위해 파라미터 설정
3. 캘린더 클래스의 객체를 만들어 createSchedule을 실행하여 캘린더에 등록.
적인 흐름.

절차 3. ChatWork의 Webhook에 작성한 소스의 URL을 등록.



작성한 코드의 웹 어플리케이션의 URL을 취득해, ChatWork의 Webhook에 등록.
※Webhook? ? 뭐가 맛있어? 쪽은 Webhook이란? 를 참조.

채팅 워크 Webhook을 사용하여 메시지 전송을 트리거로 GAS를 시작하는 방법 의 기사가 바리바리 참고가 됩니다.

실제로 움직여 보았습니다.



채팅 워크에 게시



실제로 등록해 보았다. (제목, 시작 시간, 끝 시간, 장소)를 게시.


캘린더에 등록





끝에



이제 Google 캘린더를 열지 않고 ChatWork에 게시하기만 하면 Googke 캘린더에 등록할 수 있습니다. 최&고, 진짜 행복! ! ! !

GAS는 멋지 네요, 소스에 안되게 기다리고 있습니다! ! !

좋은 웹페이지 즐겨찾기