Cronofy changelog
Cronofy changelog
www.cronofy.com

Developer Management

A much-requested feature has been allowing you to manage user access to your Applications in the Developer Dashboard. Well, it's here 🎉.

To do this we've introduced the concept of Organizational Units (OU) that you can invite people to. All of our existing users have been added to one of these based on their existing application access and billing relationships.

You'll see the ones you have access to in the left hand navigation. Each one is called 'xxxx Settings'.

org-unit-menu-item.d3a5d4ee6d889fe027f7ae318a9dadcecfe7d26900b514ab396adec6e2bedf34.png

At least one user, generally the creator of your primary Application, has been made the Owner of the OU. All other users have been given Developer or Support permissions according to what access they had in place.

Owners can change the permissions of existing users, including making them Owners as well. They can also invite new users to the OU with the set of permissions that they need.

We recommend that you log in and check what has been setup and confirm that it meets your requirements.

If you need any help with configuration, just let us know through the Support Widget or via email: support@cronofy.com.

More in the Application Management section of our documentation.

Conference detail templates

Templating introduces the option to take control over the appearance of Conferencing details by adding templates into your event description and location description, which are rendered with the best available information.

This feature launches with two template variables:

  • {{ cronofy.conferencing.join_url }} which represents the join URL for your conference
  • {{ cronofy.conferencing.invite_block }} which represents the full dial-in details block generated by your conferencing provider.

Fallback values are used if conferencing details are not yet available. These values are localized using the new locale parameter and currently only support en (English).

An event can now be generated using this content:

{
  "event_id": "templating-001",
  "summary": "Board meeting",
  "description": "We'll be discussing the next set of milestones.\\n{{ cronofy.conferencing.invite_block }}",
  "location": {
    "description": "{{ cronofy.conferencing.join_url }}"
  },
  "start": "2021-01-31T15:30:00Z",
  "end": "2021-01-31T17:00:00Z",
  "conferencing": {
    "profile_id": "default"
  },
  "locale": "en"
}

This will be rendered into the calendar with the conferencing details, or if conferencing cannot be immediately generated (if, for example, the user's profile needs to be relinked) then they evaluate to "(Details to follow)", being updated when conferencing details are created.

You can find out more in our Templating documentation

Additional Enterprise Connect delegated authorization request errors

Enterprise Connect delegated authorization requests errors have been extended to report back on some additional, rare error cases.

Two additional cases are now reported:

  • When access has been granted but the initial calendar synchronization has been unable to complete, a callback will now fire to report a sync_failing error.
  • Requests which fail after multiple attempts are now reported with a request_expired error when they will no longer be retried.

Full details can be found in the Request User/Resource Access documentation.

Availability Query Sync Statuses

The latest addition to the API helps you make scheduling decisions with greater confidence.

We now support returning a summary of participants' synchronization statuses when you are making an Availability Query.

This allows you to handle cases where stale or incomplete data (caused by authorization issues or calendar provider downtime, for example) means we can't guarantee the query has been done using a completely up-to-date view of participants' calendars.

Opt-in to this by setting the new include_member_statuses flag to true on the request:

POST /v1/availability HTTP/1.1
Host: api.cronofy.com
Authorization: Bearer {API_KEY}
Content-Type: application/json; charset=utf-8

{
  ...your availability query...
  "include_member_statuses": true
}

And you'll get the new member_statuses field in the Availability Query response:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

{
  ...availability query results...
  "member_statuses": [
    {
      "sub": "acc_678347111010113",
      "sync_status": "active"
    },
    {
      "sub": "acc_545665722612031",
      "sync_status": "pending"
    },
    {
      "sub": "acc_126865445645615",
      "sync_status": "disconnected"
    }
  ]
}

As a reminder, this information is already available in a more granular form by querying accounts' Profile Information, or you may handle this case by subscribing to the profile_disconnected Push Notification; However, we expect for many workflows, this single summarized view will be more convenient.

Integrated Conferencing: explicit Google Meet

We support many providers as part of our Conferencing Services featureset. One conferencing provider that differs from most is Google Meet. It's effectively a feature of Google Calendar itself, which has benefits (no additional authentication needed!) and drawbacks (it's not calendar agnostic). As a result, up to now, it's only been possible to get Google Meet conferencing on an event by relying on our default conferencing behaviour, which is dependent on user preferences; requesting Google Meet explicitly hasn't been possible.

We've added the concept of integrated conferencing to solve this. When creating an event, you can use this new keyword to explicitly ask for the conferencing service built into the destination calendar. Currently, we support Google Meet for Google Calendar events, but the model allows for supporting additional similar services in the future.

On calendars, we now expose a new property of calendar_integrated_conferencing_available:

{
    "calendars": [
        {
            "provider_name": "google",
            "profile_id": "pro_XpiPsafvvQBklzIg",
            "profile_name": "marty.mcfly@gmail.com",
            "calendar_id": "cal_XpiEasdgfBklzIg_ePxSn6rdfxdLHU-Q",
            "calendar_name": "marty.mcfly@gmail.com",
            "calendar_readonly": false,
            "calendar_deleted": false,
            "calendar_primary": true,
            "calendar_integrated_conferencing_available": true,
            "permission_level": "sandbox"
        }
    ]
}

When it's available, you can create events with the new conferencing profile keyword of integrated:

{
    "event_id": "ns5gua3jcb8",
    "start": "2020-11-22T12:00:00Z",
    "end": "2020-11-22T13:00:00Z",
    "summary": "Second stage interview",
    "conferencing": {
        "profile_id": "integrated"
    }
}

Read more in our Conferencing Services documentation.

Explicit Conferencing details

We've added the ability to explicitly set conferencing join details on events.

This expands the use cases where you can take advantage of Cronofy's and calendar providers' native understanding of conferencing. You may need to integrate with a conferencing service that we don't yet support conferencing creation for, or perhaps you have an existing integration that you wish to leverage.

This API call:

{
    "event_id": "i5ndr7orehwwyh",
    "summary": "One-to-one check-in",
    "start": "2020-07-23T09:00:00Z",
    "end": "2020-07-23T10:00:00Z",
    "tzid": "Etc/UTC",
    "conferencing": {
        "profile_id": "explicit",
        "provider_description": "Videotech virtual meeting",
        "join_url": "https://videotech.com/join-call/xyz"
    }
}

will give the following results in Google Calendar, for example:

Screenshot 2020-07-22 at 10.21.15.png

Read the Conferencing Services API documentation for more details.

Conferencing Services now in Beta

The Conferencing Services extensions to events have been moved into Beta today. This means that it moves into a monitoring phase as it is adopted more widely.

See the Conferencing Services documentation for more information on how to auto-generate conferencing for your calendar events.

Thank you to all of our customers who were early testers of this capability.

Availability API - query_periods

We've recently updated our Availability API to support query_periods as well as available_periods as a root attribute.

A new-style example API query looks like this:

{
  "participants": [
    {
      "members": [
        { "sub": "acc_567236000909002" },
        { "sub": "acc_678347111010113" }
      ],
      "required": "all"
    }
  ],
  "required_duration": { "minutes": 60 },
  "query_periods": [
    {
      "start": "2020-06-17T09:00:00Z",
      "end": "2020-06-17T18:00:00Z"
    },
    {
      "start": "2020-06-18T09:00:00Z",
      "end": "2020-06-18T18:00:00Z"
    }
  ]
}

After working with the API for a few years now and discussing with customers, we concluded that the term available_periods wasn't expressing the intent of the syntax explicitly enough. query_periods is a far clear description of the purpose of that parameter at that level in the query structure. We recommend using query_periods going forward.

This change will also be supported in anywhere an availability query is used, eg: Real Time Scheduling, Sequenced Availability and UI Elements like the Availability Viewer and Slot Picker.

We will continue to support available_periods so no existing implementations need to change.

Naming remains, as ever, one of the hard problems. However, not one to shy away from when we recognize the need to change.

See the updated Availability API documentation for more details.

Conferencing push notifications

Our Conferencing Services feature has been updated to add the ability to subscribe to notifications when conferencing details are created on an event.

Conferencing creation is an asyncronous process that happens after the initial API call to create or update the calendar event, and by using these notifications, you can avoid having to poll our API waiting for the conferencing URL to be generated.

By adding a new subscriptions attribute to an event, you can subscribe your webhook URL to events by referencing a new interaction type of conferencing_assigned.

{
  "event_id": "qwhpaprqzzgklulmpxsb",
  "summary": "Virtual interview",
  "start": "2020-07-21T15:30:00Z",
  "end": "2020-07-21T16:00:00Z",
  "conferencing": {
    "profile_id": "default"
  },
  "subscriptions": [
    {
      "type": "webhook",
      "uri": "https://example.com/notification",
      "interactions": [
        {
          "type": "conferencing_assigned"
        }
      ]
    }
  ]
}

As soon as conferencing details have been created for your event, we'll POST to your URL with the full event details, so you don't need to make follow-up requests to our API at all.

Read more in the Push Notifications documentation.

Your Profile

We've released a series of improvements recently focused around the management of your Cronofy account.

Your Profile

Your_Profile___Cronofy.png

From here you can update your account email, name, time zone and other settings.

Calendar Services

Calendar_Services___Cronofy.png

This allows you to see all the calendar services connected to your Cronofy account. You can also add and remove. Especially useful if you during testing you end up connecting calendars you don't want to.

Conferencing Services

Similarly to calendar services, this section allows you to manage the conferencing services linked to your account. You can choose which one is the default to use for API interactions.

Account Security

Here is where you can change your password. You can also set up multi-factor authentication to protect your account from unauthorized access.

Go to Your Profile to manage your account.