Google Calendar API - Создать событие + Google Meet LinkPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Google Calendar API - Создать событие + Google Meet Link

Сообщение Anonymous »

Я знаю, что есть много запросов по этому вопросу; Но ни один из них, кажется, не отвечает на мой вопрос. Чтобы автоматизировать создание назначений календаря Google, включая автоматическую генерацию ссылки на Google Meet, я сделал следующее: < /p>
  • Создал Google Cloud Project < /li>
    включенная Api Google Calendar для заинтересованной учетной записи < /li>
    . the Google Calendar's Settings, to allow for the privileges Make changes / Manage access for that e-mail.
  • downloaded the most recent version of the google api client (https://packagist.org/packages/google/apiclient).
  • Went to Google Service Accounts > Keys > Generated new key file as JSON, let's say access.json.
  • Implement code for generation of calendar API appointment, including recent patches (https://developers.google.com/calendar/ ... er_07_2020), within PHP:

Код: Выделить всё

putenv('GOOGLE_APPLICATION_CREDENTIALS=my/key/data/directoy/access.json');
$client = new Client();
$client->useApplicationDefaultCredentials();
$client->addScope(Google_Service_Calendar::CALENDAR);
$client->setSubject("{address_explained_below}");

// Set up the Calendar API service
$service = new Google_Service_Calendar($client);

// Create a new event on Google Calendar
$event = new Google_Service_Calendar_Event(
[
'summary'        => 'Meeting',
'start'          => [
'dateTime' => '2023-04-07T10:00:00-07:00',
// Replace with your desired start time
'timeZone' => 'America/Los_Angeles',
// Replace with your desired timezone
],
'end'            => [
'dateTime' => '2023-04-07T11:00:00-07:00',
// Replace with your desired end time
'timeZone' => 'America/Los_Angeles',
// Replace with your desired timezone
]
]
);

// Set the event's conference data to use Google Meet
$conferenceRequest = new Google_Service_Calendar_CreateConferenceRequest();

$conferenceRequest->setRequestId(uniqid());

$solution_key = new Google_Service_Calendar_ConferenceSolutionKey();
$solution_key->setType("hangoutsMeet");
$conferenceRequest->setConferenceSolutionKey($solution_key);

$conference = new Google_Service_Calendar_ConferenceData();

$conference->setCreateRequest($conferenceRequest);

$event->setConferenceData($conference);

// Insert the event into the user's calendar
$calendarId = 'myCalendarsID';
$event = $service->events->insert(
$calendarId,
$event,
[ 'conferenceDataVersion' => 1 ]
);

var_dump($event);

// Retrieve the generated Google Meet link from the event's conference data
$meetLink = $event->getHangoutLink();
< /code>
Я действительно пытался следовать советам всех других сообщений по этому вопросу на этом форуме; Но ничего не сделало трюк, и теперь я получаю ошибку 400 плохой запроса 
, независимо от типа я установил (

Код: Выделить всё

hangoutsMeet
или что -то еще), сказав неверное значение типа конференции. . Что мне не хватает? Я наткнулся на это; Возможно, это может быть конкретно библиотека, и довольно лучше реализовать необработанные вызовы API HTTP REST без использования библиотеки?

Код: Выделить всё

GET https://www.googleapis.com/calendar/v3/calendars/{calendarId}

Я действительно могу подтвердить, что Hangoutsmeet находится в пределах AltingConferenceOltionTypes .

Код: Выделить всё

{
"kind": "calendar#calendar",
"etag": "secret",
"id": "secret",
"summary": "secret",
"timeZone": "secret",
"conferenceProperties": {
"allowedConferenceSolutionTypes": [
"hangoutsMeet"
]
}
}
< /code>
Поэтому я полагаю, что, согласно @lorena gomez (спасибо!) Комментарий, что я должен «предоставить делегирование по всей домену своей учетной записи службы и выдать за пользователя права на этот календарь», хотя я не совсем ясно в том, что это на самом деле означает /делает.  Похоже, что это сработало, хотя я не вижу никакой разницы в панели услуг на экране «IAM и Management» в рамках соответствующей учетной записи обслуживания. Это делегирование может занять некоторое время, чтобы оказать влияние?$client->setSubject($user_to_impersonate);

служит для того, чтобы выдать себя за пользователя правами на этот календарь. Но каково значение $ user_to_impersonate здесь? Я предоставил адрес электронной почты учетной записи службы, для которой я предоставил делегирование по всей области для https://www.googleapis.com/auth/calendar , и в этом случае я все еще получаю:

Код: Выделить всё

Google_Service_Exception: {
"error": {
"errors": [
{
"domain": "global",
"reason": "invalid",
"message": "Invalid conference type value."
}
],
"code": 400,
"message": "Invalid conference type value."
}
}
< /code>
Тогда я попробовал его с адресом электронной почты учетной записи Google, которая фактически владеет календарем, что привело к: < /p>
Google_Service_Exception: {
"error": "unauthorized_client",
"error_description": "Client is unauthorized to retrieve access tokens using this method, or client not authorized for any of the scopes requested."
}

Error code: 401
< /code>
Я затем попробовал его с идентификатором пользователя учетной записи службы, которая была предоставлена ​​делегированием по всей домену, которая, когда я получаю: < /p>
Caught Google_Service_Exception: {
"error": "invalid_request",
"error_description": "Invalid principal"
}

Error code: 400
< /code>
Значит, я не понимаю, что мне все еще не хватает? Я обновил свой код выше в состоянии, как и сейчас (string address_expliend_below 
заменяется тремя вышеупомянутыми попытками).
Я теперь сделал последнюю попытку, когда я создал новую учетную запись, включил в доменную делегацию для него, сгенерировал ключи доступа и загрузил их на сервер. Когда затем запустил приведенный выше код с адресом электронной почты этой недавно созданной учетной записи службы, я получил 404, не найденную ошибку. Затем я пошел в настройки календаря Google в соответствующем календаре и добавил адрес электронной почты учетной записи услуги в разделе «Общие с конкретными людьми или группами» (я перевел эту часть; это часть, где вы можете предоставить доступ к вашему календарю для других). После этого и повторного разъединения приведенного выше сценария, я снова получаю неверное значение типа конференции 400 .
Единственное, о чем я могу придумать, это то, что Putenv вызов устанавливает значение переменной (проверяется с getenv ) к абсолютному пути к .json , с учета сервера. Это намерение? Как учетные данные читаются/доступны? Просто спросите, потому что файл .json находится в каталоге 0500 , а сам файл .json также является 0500 , но это должно быть в порядке? И ну, я застрял. Потому что в настоящее время это не так ...

Подробнее здесь: https://stackoverflow.com/questions/759 ... -meet-link
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»