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.
希望对您有所帮助。
使用 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.
希望对您有所帮助。