参考
https://developers.google.com/meet/api/guides/quickstart/nodejs?hl=ja
https://dev.to/arindam_1729/i-built-an-event-scheduler-in-nodejs-using-google-calendar-api-4c5b
準備
- Google Cloud アカウントが必要
- Google Workspaceの管理者アカウントが必要
注意
- Google meetの生成(conferenceDataVersion: 1)は生成に失敗する
- Invalid conference type valueエラーが発生、あきらめてGoogle Meet APIを試す
手順
Google Calendar APIを有効にする
サービスアカウントの作成
- サービスアカウントを作成し、IdとEmailを取得する
- 秘密鍵を作成する
- jsonタイプで作成
Google Workspace管理者による権限付与
- Google Workspace >「セキュリティ」→「APIの制御」→「ドメイン全体の権限」
- 以下を、新規登録する
- サービスアカウントのClientID(数字)を入力
- スコープとして「https://www.googleapis.com/auth/calendar,https://www.googleapis.com/auth/calendar.events」を入力
- デフォルトのカレンダーの共有設定が必要な場合もあり
カレンダーで共有設定
共有するカレンダーのドットメニューから共有設定メニューを開く
- 以下の権限を付与する
- サービスアカウントのEmailを入力する
- 「予定の変更および共有の管理ができる」を選択する
ソース
パッケージインストール
npm install googleapis
export const action: ActionFunction = async ({ request }) => {
const { summary, description, start_date, end_date } = await request.json();
const auth = new google.auth.GoogleAuth({
credentials: {
client_email: process.env.GOOGLE_CLIENT_EMAIL,
private_key: process.env.GOOGLE_PRIVATE_KEY?.replace(/\\n/g, "\n"),
},
scopes: [
"https://www.googleapis.com/auth/calendar",
"https://www.googleapis.com/auth/calendar.events"
],
});
const calendar = google.calendar({ version: "v3", auth });
const startDate = new Date();
const endDate = new Date(startDate.getTime() + 15 * 60 * 1000);
try {
const calendarId = process.env.GOOGLE_CALENDAR_OWNER_EMAIL;
const event = {
summary: summary,
description: description,
start: {
dateTime: start_date,
timeZone: "Africa/Nairobi",
},
end: {
dateTime: end_date,
timeZone: "Africa/Nairobi",
},
conferenceData: {
createRequest: {
requestId: `sample-meet-link-${Date.now()}`,
conferenceSolutionKey: {
type: "hangoutsMeet"
},
},
},
};
const result = await calendar.events.insert({
calendarId: calendarId,
resource: event,
auth: auth,
conferenceDataVersion: 0);
console.log(result)
//console.log("Event created successfully:", result);
return json({
event: result
});
} catch (err) {
console.error("Error creating event:", err);
}
};
GOOGLE_CALENDAR_OWNER_EMAIL={カレンダーID、プライマリーではGoogleユーザーのメアド}
GOOGLE_CLIENT_EMAIL={サービスアカウントのEmail}
GOOGLE_PRIVATE_KEY={秘密鍵}