如何从 javascript 捕获 Calendly iframe 重新安排事件

How to capture Calendly iframe reschedule event from javascript

我正在做一个医疗预约申请并使用 calendly 进行预约。我能够通过 js 事件成功地将第一次计划的事件保存到数据库中,但无法捕获重新计划的事件。

 function isCalendlyEvent(e) {
return e.data.event && e.data.event.indexOf('calendly') === 0;
};
window.addEventListener(
  'message',
  function(e) {
    if (isCalendlyEvent(e)) {
      console.log(e.data);
    }
  }
);

我能够通过“calendly.event_scheduled”事件捕获预定事件,但无法捕获重新安排的事件数据。

您好,这是calendly的一个非常恼人的问题,并且没有为此提供官方解决方案。没有这样的侦听器捕获重新安排事件。

可能有两种解决方法:

  1. 使用 webhooks,当重新安排事件命中时,它会触发取消和创建的挂钩。

  2. 对我有用的解决方案是,创建一个新事件并通过 calendly api 删除前一个事件,您可以在网络选项卡中删除 api通过 iframe 取消事件。以下是我在 laravel 中的实现,在通过 js 调用和 ajax 向您的控制器请求创建事件后,如果您正在保存 db:

             $scheduleDelete = ScheduledCall::where('id', $request->scheduleId)->first();
             $cancelUrl = $scheduleDelete->calendly_cancel_url;
             $cancelUrl = substr($cancelUrl, strrpos($cancelUrl, '/') + 1);
             $cancelUrl = 'https://calendly.com/api/booking/cancellations/' . $cancelUrl;
             $data = [
                 'cancellation' => [
                     'cancel_reason' => '',
                     'canceled_by'   => 'Nonsulin'
                 ]
             ];
             $payload = json_encode($data);
             Helper::apiCurlRequest($cancelUrl, 'PUT', config('app.CALENDLY_API_KEY'), $payload);
             $scheduleDelete->delete();