Open24

「Notion のタスクを GAS で API 使って Google Calendar へ (逆反映のおまけ付き)」の読者サポート

やりたいこととしては、Notionのdateの終了日時をGoogle Calenderのイベント終了日時と同期するというものです!

  if ((hoursProp in props)) {
    let extent = getExtentOfHours(props[dateProp].date.start, props[hoursProp].number);

上記を下記のように修正すると期待した動作になりそうです。

  if (("endDate" in props)) {
    let extent = getExtentOfHours(props[dateProp].date.start, props["endDate"].date.start);

endDate は Notion での終了日時プロパティー名に変更してみてください。

nobuhito様。はじめまして。
非エンジニアでコードはよくわからないですがNotionとGoogleCalendarの連携がしたく、
コードを手動実行のところまでいったのですが、以下の画像ようなエラーが出てしまいました。

コードは公開していただいているものをコピペしたのですが、
原因おわかりになられますでしょうか?
よろしくお願い致します。

このエラーからは、NotionデータベースのIDが間違ってるように見えます。「変数関係の準備 - 1」の notionDbId の値を見直してみると良いかと思います。

ご対応ありがとうございます!
ご指摘の部分をやり直してみたところ実行できました!
助かりました。

質問失礼します。

イベントにかかる時間を自動算出するため、Number型(#)ではなくFormula型(Σ)でイベントの終了時刻から開始時刻を引き算する演算を組みました(プロパティ名はHoursにしています)。それで実行したところ、以下のようなエラー文が出てしまいました。

Number型ではなくFormula型のプロパティに変更した場合は、コードのどこを変更すればよいでしょうか?
ご教授いただけましたら幸いです。

返事遅くなりました。NotionのAPIではFomula型の場合は式としてAPIからデータが帰って来ると思います。具体的にはどのような式になっているでしょうか?
式が分かれば具体的なやり方が分かると思うのですが、とりあえずは getExtentOfHours 関数を調整することになると思います。

初めまして。nobuhitoさんのnotionとgoogle calender連携に関する本を購入させていただいたものです。
私はGoogleカレンダーのイベントをnotionのデータベースに登録したいと考えており、有料版で紹介されていたコードを試してみました。
一旦無料版でも公開されていたコードをコピペして、その下に有料版で公開されていたコードを入力し、Googleカレンダーに予定を新規作成して実行してみたところ、以下のようなエラーが出ました。
コードに関しては、トークンなどの入力事項以外は全く触っておりません。
こちらの対処法などわかりましたら教えていただけると幸いです。

返事遅くなりました。公開している内容ですが、GoogleカレンダーからNotionへデータ連携されるのはNotionからGoogleカレンダーに登録したイベントだけという想定です。
NotionからGoogleカレンダーへイベントを登録すると、Notion側にもGoogleカレンダーのイベントIDが登録されます。Googleカレンダー側でイベントを変更すると、そのイベントIDをキーとしてNotion側でもデータを変更するという動きです。

はじめまして、星子と申します。
大変参考になりました、ありがとうございます!

いきなりで恐縮なのですが、一点伺いたいことがございます。
この度Notion初心者向けのオンラインイベントを主催するのですが、
その際にこちらの記事を紹介させていただいてもよろしいでしょうか?

もしよろしければ、お手すきの際にお返事いただけると幸いです。
よろしくお願いいたします。

返事遅くなりました。こちらこそ是非是非でお願いします。
ただ、本業のほうが忙しく、もし問い合わせがあってもすぐには返事できない可能性もあります。
そこだけご了承いただけたらと思います。

ご返信ありがとうございます!
それではご紹介させていただきます。
お問い合わせの件承知しました!

夜分に失礼いたします.
以下のエラーの原因についてアドバイスをいただけないでしょうか?

記事内のオリジナルコード74行目のremoveEvent(event, pageId)で使用される、postNotion(endpoint, payload, method)内のUrlFetchApp.fetchで以下のエラーが発生してしまいます.

(一部コードを追記しているため、オリジナルコードと画像の行数は一致しておりません.)

createEvent(props, pageId)など、他の関数内でpostNotion(endpoint, payload, method)を使用するときは問題なく動いているのですが、removeEvent(event, pageId)の場合のみ notion API 400エラーが発生します.

エラーは

  • "code" = "validation_error"
  • "message" = "body failed validation: body.properties.eventId[0].text.content should be popul... "
    です.

参考

https://developers.notion.com/reference/errors#request-limits

このエラーだけだと確かなところが言えないのですが、↓のページに有る eventId 列はテキスト型になってますでしょうか?あとはプロパティ名が eventId になっているか?とか。
(すいません、ここだけ先頭の e が小文字になってますね。今気づきました。)

何度も申し訳ありません.
上記について解決いたしました.

トリガーの設定について質問なのですが、
Google カレンダーの更新を検知するトリガーを動かすためには、事前にGCPでのプロジェクト設定等はされていますでしょうか?
(09:おまけ1のトリガー設定を試しているのですが、トリガーがうまく動いていない状況です.)

始めの問題は解決したようで良かったです!

で、トリガの設定ですが特にGCP周りは関係ないはずです。差し支えなかったらトリガの設定画面を見せてもらえるとなにかわかるかも知れません。

早速のご返信ありがとうございます.
トリガ設定画面は以下の通りです.


オーナーメールアドレスはカレンダーIDにしてあります.

よろしくお願いいたします.

(ちなみに、nobuhitoさんのコードを参考に、Notion ↔ Google tasksの相互同期を実装してみました.関数が正常に動くことは確認済みで、トリガー設定で躓いてしまっています.)

設定は大丈夫そうに見えますね。あとは、Googleカレンダーには複数のカレンダーを追加できますがそのカレンダー指定が間違っていないか?と実行する関数の選択が間違ってないか?という感じですかね。

アドバイスをいただきありがとうございました.
ご指摘の通り、別のカレンダーIDを指定しておりました...(解決いたしました)

(また、今回実装したGoogle ToDoリストはカレンダー上の更新イベントとして検知されないため、カレンダー更新トリガを適用できないことがわかりました.)

nobuhitoさんの記事と読者サポートの手厚いフォローにより、目標にしていた機能を実装することができました.
この度はありがとうございました.

何度も申し訳ありません.
nobuhitoさんの記事・コードを参考に作成したNotion←→Google Todo連携の実装内容を、
Zenn記事として公開したいのですがよろしいでしょうか?
不都合がありましたらお申し付けください.
よろしくお願いいたします.

全然問題ないですよ!紹介入れていただけるなら逆にありがたいです!

ありがとうございます!
もちろん引用元として紹介させていただきます!!!

ログインするとコメントできます