'Google Calendar API drops "conferenceData" nested object

EDIT: This is has been identified as a bug here.

I am trying to make a Google Meet along with a new calendar event. However, for some reason the returning event does not include any conferenceData, not even one with status fail.

Here is my code. I have omitted the authentication step as I do not get an authentication error.

def generateMeet(emails=None, fake=False):
    if emails is None:
        emails = []

    if fake:
        return "https://www.google.com", get_random_string(10)

    now = datetime.utcnow().isoformat() + 'Z'  # 'Z' indicates UTC time
    inonehour = (datetime.utcnow() + timedelta(hours=1)).isoformat() + 'Z'

    event = {
        'summary': 'Orb Meeting',
        'start': {
            'dateTime': now,
            'timeZone': 'America/New_York',
        },
        'end': {
            'dateTime': inonehour,
            'timeZone': 'America/New_York',
        },
        'sendUpdates': "none",
        'reminders': {
            'useDefault': False,
        },
        'attendees': [{'email': x} for x in emails],
        'conferenceDataVersion': 1,
        'conferenceData': {
            'createRequest': {
                'requestID': get_random_string(10),
                'conferenceSolutionKey': {
                    'type': 'hangoutsMeet'
                },

            }
        }
    }

    ret = service.events().insert(calendarId='primary', body=event).execute()
    return ret['conferenceData']['entryPoints'], ret['id']

This returns a key error, as conference data does not exist. Here is the full 'ret' object before I run the return:

{'kind': 'calendar#event', 'etag': '"3197938620273000"', 'id': '5fb6epfe93sceba9scjt1nevsk', 'status': 'confirmed',
     'htmlLink': 'https://www.google.com/calendar/event?eid=NWZiNmVwZmU5M3NjZWJhOXNjanQxbmV2c2sgZm9ycmVzdG1pbG5lckBt',
     'created': '2020-09-01T14:08:30.000Z', 'updated': '2020-09-01T14:08:30.162Z', 'summary': 'Orb Meeting',
     'creator': {'email': '[my email]', 'self': True},
     'organizer': {'email': '[my email]', 'self': True},
     'start': {'dateTime': '2020-09-01T10:08:28-04:00', 'timeZone': 'America/New_York'},
     'end': {'dateTime': '2020-09-01T11:08:28-04:00', 'timeZone': 'America/New_York'},
     'iCalUID': '[email protected]', 'sequence': 0,
     'attendees': [{'email': '[my other email]', 'displayName': 'Forrest Milner', 'responseStatus': 'needsAction'}],
     'reminders': {'useDefault': False}}

Can anyone tell me why the conferenceData part of my request might be dropped? I am setting the conferenceDataVersion to 1, and using a random string.

I have tried adding dummy "invitees". In this trial, I invited my second gmail account, and in other trials I have invited several dummy accounts with domain "example.com". This updates the attendees, but does not make the conference data appear.

I have also tried waiting a few minutes and then listing all my events. Even after waiting, the conference data was not filled in. When I check my calendar on the GUI (https://calendar.google.com/calendar/r) it also does not have a Google Meet attached.

Thank you for any help.



Solution 1:[1]

The conferenceDataVersion It's not a part of requestBody anymore. Must be passed inside your insert method. On NodeJS it's something like this:

calendar.events.insert({
    calendarId: 'calendarIdHere',
    requestBody: yourOldRequestBodyObject,
    conferenceDataVersion: 1
});

Solution 2:[2]

@André Eccel is correct. Here's a working Python example of how to add a google meet link to your event:

import uuid

request_id = str(uuid.uuid1())

event = {'summary': "My Birthday Party",
         'description': "There will be flamingos.",
         'start': start,
         'end': end,
         'recurrence':recurrence,
         'attendees': attendees,
         'conferenceData': {'createRequest': {
               'requestId': request_id,
               "conferenceSolutionKey": {"type": "hangoutsMeet"}}}
        }

service.events().insert(calendarId=cal_id,body=event,conferenceDataVersion=1).execute()

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 André Eccel
Solution 2 UxPy