Calendly と Slack を連携して予約を自動で通知する方法|二重通知を防ぐ

商談や面談を Calendly で受けていると、予約の連絡が担当者のメールに届くだけで、チームからは見えないことがあります。担当者が不在の日のキャンセルに誰も気づかない、ということも起きます。

この記事では、予約とキャンセルをチームの Slack チャンネルへ送る手順を説明します。

結論

Samurai App のワークフローに「サービス連携」で Calendly をつなぎ、次の 2 つの出来事で起動します。Calendly 側から届く方式です。

  • 予約: 「Meeting Scheduled」(CALENDLY_MEETING_SCHEDULED)
  • キャンセル: 「Meeting Canceled」(CALENDLY_MEETING_CANCELED)

日程変更では両方が 1 回ずつ届きます。 そのままだと、同じ変更で「キャンセル」と「予約」の 2 通が Slack に出ます。この記事では、キャンセル側で日程変更を除きます。

Calendly には Slack 用の公式アプリもあり、予約や更新の通知を受け取れます。本文の項目を自分で決めたいときや、通知の前に処理を足したいときは、この記事の方法を使います。

できること・できないこと

  • Calendly の有料プランが必要です。 Calendly のヘルプでは、Webhook の対象は Professional、Standard、Standard Plus、Teams、Teams Plus、Enterprise です。無料プランでは登録できません
  • 受ける範囲を scope で指定します。 user は接続した本人の予約だけです。organization は組織全体、group は 1 つのグループです。後の 2 つは、接続した人が Calendly のオーナーか管理者でないと断られます
  • 参加者 1 人につき 1 件届きます。 グループ予約で 3 人が申し込むと 3 件になります。通知も費用も 3 件分です
  • 時刻は UTC で届きます。 scheduled_event.start_time は UTC なので、そのまま本文に入れると日本時間より 9 時間前の時刻が表示されます
  • 費用は 1 件受けるごとに約 0.5 円かかります。 有効にできるサービス連携は 20 個までです
  • 参加者の名前とメールアドレスが届きます。 本文に入れるとチャンネルの全員に見えるので、載せる項目を先に決めます

用意するもの

  • Calendly の有料プランのアカウント(組織全体を受けるならオーナーか管理者)
  • 投稿先チャンネルの Slack の Incoming Webhook の URL
  • Samurai App のマネージャー以上の権限(ワークフローにサービス連携を付けるために必要です)

手順

完成すると、次のようなワークフローになります。

Calendly の予約を Slack へ送るワークフローの編集画面

ワークフローは、予約用とキャンセル用の 2 本に分けます。届く項目と通知の条件が違うためです。

1. 通知先を登録する

「設定」の「通知」にある通知先の登録画面

Slack のアプリ設定で「Incoming Webhooks」を有効にし、「Add New Webhook to Workspace」からチャンネルを選んで URL を作ります。Samurai App の「設定」→「通知」の「通知先」に名前と URL を登録し、「テスト送信」で確認します。

2. Calendly を接続する

「コネクタ」画面の「コネクタ」タブで Calendly の「追加」を押し、「標準連携アプリで追加」を選んでサインインします。

3. 予約用のワークフローを作る

「ワークフロー」の「作成」から「新規作成」を選びます。ステップを選んでいない状態の「設定」にある「ワークフローの入力」で「入力の項目を追加」を押し、名前を event、種類を「項目の組」にします。

最初に「コード」のステップを置いて、時刻を日本時間にします。「渡す値」に start として input.event.scheduled_event.start_time を渡し、次を書きます。

return new Date(inputs.start).toLocaleString("ja-JP", { timeZone: "Asia/Tokyo" });

次に「通知先へ送る」のステップを置いて通知先を選び、「本文」を書きます。日時の行は「/」からコードのステップの値を入れます。

予約が入りました: {{input.event.scheduled_event.name}}
参加者: {{input.event.name}}
日時: (コードのステップの値)

「保存」のあと、「バージョン」タブで「バージョン N を公開」を押します。

4. 予約の出来事を付ける

「トリガー」タブの「サービス連携を追加」を押します。「どのサービスを監視するか」で Calendly の接続を選び、「どうなったら動かすか」で「Meeting Scheduled」を選びます。「絞り込み」の scope で user か organization を選んで登録します。group を選ぶときは group_uri も入れます。

5. キャンセル用のワークフローを作る

手順 3 と同じように event の入力と「コード」のステップを置きます。その次に「条件分岐」を置き、条件を input.event.rescheduled が false のときにします。日程変更によるキャンセルでは rescheduled が true になるので、この条件で除けます。条件に合う側に「通知先へ送る」を置きます。

キャンセルがありました: {{input.event.scheduled_event.name}}
参加者: {{input.event.name}}
日時: (コードのステップの値)

公開したら、手順 4 と同じ手順で「Meeting Canceled」を付けます。

6. 予約して確認する

テスト用の予約を 1 件入れ、Slack に届くことを確認します。そのあと日程を変更して、「予約」の通知だけが届くこと、キャンセルして「キャンセル」の通知が届くことを確認します。「実行」タブの「最近の実行」に「出来事で起動」の行が増え、開くと届いた入力を確認できます。

動かないとき

登録するときに権限やプランで断られる

Calendly は、対応していないプランでは Webhook の作成を断ります。公式の API 資料には「Please upgrade your Calendly account to Standard」という断りの文があります。scope が organization か group なら、接続した人がオーナーか管理者かも確認します。

実行が失敗し、「$ref '…' の値がありません」と出る

本文の項目が、届いた内容にありません。任意の項目に注意してください。たとえば cancellation.reason は、キャンセルの理由の項目です。本文に足す前に、「最近の実行」の入力で実際に届いていることを確認します。値が null の項目は空欄で送られ、項目そのものが無いときはステップが失敗します。

同じ予約の通知が 2 通届く

グループ予約なら、参加者ごとに届く仕様です。日程変更なら、手順 5 の「条件分岐」が公開したバージョンに入っているかを確認します。

時刻がずれている

「コード」を通さず start_time を本文に入れていると、UTC のまま表示されます。手順 3 の「コード」の値を使います。

よくある質問

予約フォームの回答も載せられますか

載せられます。{{input.event.questions_and_answers}} と書くと、質問と回答の一覧が JSON の形で入ります。読みやすくするときは「コード」のステップで question と answer を組み合わせます。

日程変更と新規予約を文面で分けられますか

分けられます。新規予約では old_invitee が空です。予約用のワークフローに「条件分岐」を足し、「最近の実行」で届いた値を確認してから条件にします。

関連する使い方

出典

関連する機能AIでワークフロー自動化 —— 定型業務を決めた順にSamurai App のワークフローは、書いたとおりの順に必ず動くステップの並びです。AI の判断、承認待ち、外部サービスの操作を 1 本にまとめ、定期実行や外部からの起動で定型業務を自動化します。

ほかの自動化の例

Slack の連携と自動化の方法をすべて見る

活用術の記事一覧へ

日々の仕事が集まり、つながり、会社の力になる。

資料請求Samurai App を開く

デモを見る資料請求