イベントの予約などを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時間でサクッと実装できる。他にもいろいろできることがありそう!
コメント