PHP用のGoogle APIクライアントライブラリ を使用して、新しいカレンダーイベントを作成し、hangoutsMeet
会議を添付しようとしています。そうしようとすると、Invalid conference type value
。
同じコードを使用して、新しいイベントを作成し、eventHangout
会議を添付できます。
エラーが発生する理由を理解しています。APIによると、私のカレンダーはeventHangout
会議タイプのみをサポートしています。
<<<<編集#1 2020年4月3日
Andres Duarte の回答に続く説明:これは、APIを介してイベントを作成しようとしたときにのみ制限として表示されます。 Googleカレンダーインターフェースを使用して手動でイベントを作成すると、amでGoogle Meetを追加できます。実際、それがドロップダウンに表示される唯一の会議オプションです。
>>>>
私の質問は、APIを使用して、hangoutsMeet
会議を含むイベントを作成できるように、カレンダー設定を(APIの有無にかかわらず)更新するにはどうすればよいですか?
これが私が試したことを示すサンプルコードです:
<<<<編集#2 2020年4月3日
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ユーザーのみが利用できます。 。
サービスアカウントにドメイン全体の委任がある場合でも、 documentation のG Suiteユーザーと同じ権限はありません。
ユーザーアカウントとは異なり、サービスアカウントはG Suiteドメインのメンバーではありません。
あなたのケースでは、それがeventHangout
会議タイプでのみイベントを作成できる理由です。これは event リソースのドキュメントで述べられているように、消費者向けです:
可能な値は次のとおりです。
消費者向けハングアウトの「eventHangout」( http://hangouts.google.com )
G Suiteユーザー向けの従来のハングアウトの場合は「eventNamedHangout」( http://hangouts.google.com )
Hangouts Meetの「hangoutsMeet」( http://meet.google.com )
3P会議プロバイダーの「addOn」
見たところ、リクエストにrequestIDを追加するのを忘れていました。
リソース: ビデオおよび電話会議をイベントに追加
"conferenceData": {
"createRequest": {
"conferenceSolutionKey": {
"type": "eventHangout"
},
"requestId": "yourcodehere"
}
}
createRequestに新しく生成されたrequestIdを提供することで、イベントの新しい会議を作成できます。これはランダムstring。会議は非同期に作成されますが、いつでもリクエストのステータスを確認して、何が起こっているのかをユーザーに知らせることができます。
これがお役に立てば幸いです。