Googleカレンダーの予定をGoogleフォームから入力する

バグと戦うエンジニア programing

イベントの予約などをGoogle Formsでお客さんにしてもらい、その結果をGoogle Calendarに自動で入力する方法。Googleカレンダーをお客さんにも見えるようにすることで埋まっている予定を伝えることもできる。

Googleカレンダーの作成

Googleカレンダーから新しいカレンダーを作成する。

一般の人もアクセスができるようにカレンダーの設定からアクセス許可を一般にする。設定のPublic URLにアクセスすれば誰でもカレンダーを見ることができる。

Googleフォームの作成

Googleフォームで新しいフォームを作成する。日付の項目は必須にしてDate型を選択する。

回答保存時にApps Scriptを使ってカレンダーに登録する

フォームの回答を保存したときにApps Scriptを発火する。Apps Scriptで回答内容を取得し、カレンダーに保存する。

回答保存しにApps Scriptを発火する

フォームの詳細からScript Editorを開く。

適当な関数を用意する。

Apps Scriptの左のメニューからTriggerを追加する。event sourceはFrom form, event typeはOn form submitにする。

定期等な回答を送信して、Apps Scriptのoverviewを見るとイベントが発火していることが確認できる。Executionsからログを確認できる。

permissionエラー

Exception: You do not have permission to call FormApp.getActiveForm. Required permissions:

のようなエラーが出ることがある。Apps Scriptの設定からShow “appsscript.json” manifest file in editorにチェックを入れる。
以下のようにoauthScopesを追記する。

{
  "timeZone": "Asia/Tokyo",
  "dependencies": {
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",
  "oauthScopes": [
    "https://www.googleapis.com/auth/forms.currentonly",
    "https://www.googleapis.com/auth/forms"
  ]
}

Apps Scriptでフォームの回答を受け取る

トリガーする関数でeventを受け取る。以下サンプルコード。

function receiveResponse(e) {
  const itemResponses = e.response.getItemResponses();
  for (const itemResponse of itemResponses) {
    // Logs the items' questions and responses to the console.
    console.log(`Response to the question '${itemResponse.getItem().getTitle()}' was
      '${itemResponse.getResponse()}'`);
  }
}

カレンダーに登録する

eventから必要な情報を抜き出してカレンダーに予定を登録する。以下サンプルコード。

function registCalenderEvent() {
  const calendarId = '****@group.calendar.google.com';
  const myCalendar = CalendarApp.getCalendarById(calendarId);
  let date = new Date();
  const options = {location: '東京', description: '詳細情報'}
  myCalendar.createAllDayEvent('新規イベント', date, options);
}

終わりに

やり方がわかれば2,3時間でサクッと実装できる。他にもいろいろできることがありそう!

参考サイト

コメント

タイトルとURLをコピーしました