Google 日历 API:无法设置 AllowedConferenceSolutionTypes 以在创建活动时包含 hangoutsMeet

Google Calendar API: Unable to setAllowedConferenceSolutionTypes to include hangoutsMeet when creating event

使用 Google APIs Client Library for PHP,我正在尝试创建一个新的日历事件并附加一个 hangoutsMeet 会议。当我尝试这样做时,我收到一条错误消息,指出 Invalid conference type value.

使用相同的代码,我可以创建一个新活动并附加一个 eventHangout 会议。

我明白为什么我会收到错误消息:根据 API,我的日历仅支持 eventHangout 会议类型。

<<<< 2020 年 4 月 3 日编辑 #1

Andres Duarte 回答后的澄清:这仅在我尝试通过 API 创建事件时显示为限制。当我使用 Google 日历界面手动创建活动时,我 能够添加 Google 会议。事实上,这是下拉列表中显示的唯一会议选项。

>>>>

我的问题是,如何更新我的日历设置(带或不带 API)以便我可以使用 API 创建带有附加 hangoutsMeet 会议?

下面是一些示例代码来演示我的尝试:

<<<< 2020 年 4 月 3 日编辑 #2

hooman182 回答后的澄清:我更新了我的代码示例以证明我使用字符串正确设置了 requestId

>>>>

try {


    // fetch the calendar
    $calendar = 'myCalendar';
    $calendarObject = $service->calendars->get($calendar);
    echo "<pre>";
    echo "\nORIGINAL *******************************************************\n\n";
    var_dump($calendarObject->getConferenceProperties()->getAllowedConferenceSolutionTypes());


    // set the allowed conferences solutions type
    $calendarObject->getConferenceProperties()->setAllowedConferenceSolutionTypes(
        array(
            "hangoutsMeet",
            "eventHangout",
            "eventNamedHangout",
        )
    );
    echo "\nUPDATED *******************************************************\n\n";
    var_dump($calendarObject->getConferenceProperties()->getAllowedConferenceSolutionTypes());


    // save the changes to the calendar
    $calendarObject = $service->calendars->patch($calendar, $calendarObject);;
    echo "\nSAVED *********************************************************\n\n";
    var_dump($calendarObject->getConferenceProperties()->getAllowedConferenceSolutionTypes());


    // add a createRequest to my event
    $event->setConferenceData(new Google_Service_Calendar_ConferenceData(array(
        'createRequest' => array(
            'requestId' => md5(time()),
            'conferenceSolutionKey' => array(
                'type' => 'hangoutsMeet',
            )
        )
    )));


    // save the event
    $event = $service->events->insert($calendar, $event, array(
        'conferenceDataVersion' => 1
    ));


} catch (Google_Service_Exception $e) {

    echo "\nERRORS ********************************************************\n\n";
    var_dump($e->getErrors());
    die;

}

这是上面的输出:

ORIGINAL *******************************************************

array(1) {
  [0]=>
  string(12) "eventHangout"
}

UPDATED *******************************************************

array(3) {
  [0]=>
  string(12) "hangoutsMeet"
  [1]=>
  string(12) "eventHangout"
  [2]=>
  string(17) "eventNamedHangout"
}

SAVED *********************************************************

array(1) {
  [0]=>
  string(12) "eventHangout"
}

ERRORS ********************************************************

array(1) {
  [0]=>
  array(3) {
    ["domain"]=>
    string(6) "global"
    ["reason"]=>
    string(7) "invalid"
    ["message"]=>
    string(30) "Invalid conference type value."
  }
}

其他详细信息:

在创建活动之前,您需要使用服务帐户凭据模拟您 G Suite 域中的用户,这样您就可以创建具有 hangoutsMeet 会议类型的活动,该类型仅可用G Suite 用户。

即使您的服务帐户有 domain-wide 授权,它也没有与 G Suite 用户相同的权限,来自 documentation:

Service accounts are not members of your G Suite domain, unlike user accounts.

在您的情况下,这就是为什么您只能使用 eventHangout 会议类型创建事件,如 event 资源文档中所述,该会议类型适用于消费者:

The possible values are:

"eventHangout" for Hangouts for consumers (http://hangouts.google.com)

"eventNamedHangout" for classic Hangouts for G Suite users (http://hangouts.google.com)

"hangoutsMeet" for Hangouts Meet (http://meet.google.com)

"addOn" for 3P conference providers

显然您忘记了在请求中添加 requestID。

资源:Add video and phone conferences to events

 "conferenceData": {
    "createRequest": {
      "conferenceSolutionKey": {
        "type": "eventHangout"
      },
      "requestId": "yourcodehere"
    }
  }

You can create a new conference for an event by providing a createRequest with a newly generated requestId which can be a random string. Conferences are created asynchronously, but you can always check the status of your request to let your users know what’s happening.

希望对您有所帮助。