Tworzenie rozmów wideo innych firm

Każde rozwiązanie do obsługi rozmów wideo zdefiniowane w projekcie skryptu wyświetlaj ma powiązany identyfikator onCreateFunction. Dodatek wywołuje tę funkcję, aby utworzyć za każdym razem, gdy użytkownik próbuje wybrać dane rozwiązanie. .

Musisz zaimplementować wszystkie onCreateFunction opisane w pliku manifestu dodatku. Ogólnie funkcje te muszą wykonywać te czynności:

  1. Pobieranie informacji o wydarzeniach z Kalendarza Google, takich jak identyfikator wydarzenia czy listę uczestników, których może wymagać zewnętrzny system do obsługi rozmów wideo aby utworzyć konferencję.
  2. Połącz się z zewnętrzną usługą rozmów wideo i utwórz nową rozmowę wideo za pomocą informacji o wydarzeniach z Kalendarza Google.
  3. Jeśli z jakiegoś powodu prośba o utworzenie konferencji nie uda się, użyj błędu aby utworzyć i zwrócić ConferenceData obiekt zawierający ConferenceError W przeciwnym razie wykonaj następne kroki.
    1. Zainicjuj synchronizację konferencji.
    2. Użyj informacji zwróconych przez zewnętrzną usługę do rozmów wideo, aby: utworzyć i zwrócić nowy ConferenceData obiektu.

Pobieram informacje o wydarzeniu

Aby utworzyć konferencję zewnętrzną, podaj określone informacje na temat danej Wymagane jest wydarzenie w Kalendarzu Google. Dokładne informacje o zdarzeniu są różne między różnymi systemami konferencyjnymi innych firm. Często obejmuje to również czasu rozpoczęcia, zakończenia, podsumowania, listy uczestników i identyfikatora.

Po wywołaniu każde zdefiniowane przez Ciebie pole onCreateFunction przekazuje argument, który zawiera identyfikatory kalendarza i wydarzeń. Za pomocą tych identyfikatorów możesz pobrać pełne informacje o zdarzeniu za pomocą Zaawansowana usługa Kalendarza Google.

Kalendarz Google może dodać szczegóły konferencji do wydarzenia przed że istnieje. W takich przypadkach Kalendarz Google przekazuje onCreateFunction prawidłową eventId, ale kolejne wywołania funkcji Calendar.Events.get() mogą spowodować wyświetlenie komunikatu komunikat o błędzie informujący, że zdarzenie nie istnieje. W takim przypadku najlepiej jest: utworzyć konferencję zewnętrzną za pomocą danych zastępczych; te dane zostały zastąpione następnym razem synchronizacji.

Tworzenie rozmowy wideo innej firmy

Gdy onCreateFunction pobierze niezbędne dane zdarzenia, musi: połączyć się z systemem do rozmów wideo innej firmy, aby utworzyć konferencję. Zwykle osiąga się to przez wykonywanie żądań do interfejsu API obsługiwanych przez systemu do obsługi rozmów wideo innej firmy. Zapoznaj się z dokumentacją firmy zewnętrznej do obsługi rozmów wideo w celu określenia, których żądań do interfejsu API można używać konferencji.

Najłatwiejszym sposobem wykonywania zewnętrznych żądań do interfejsu API w Apps Script jest za pomocą OAuth2 for Apps Script. lub OAuth1 w Apps Script biblioteki open source. Możesz też połączysz się z zewnętrznymi interfejsami API za pomocą usługi UrlFetch, ale wymaga to jednoznacznego obsłużenia szczegółów autoryzacji.

Po wysłaniu prośby o utworzenie rozmowy wideo może być konieczne dodatkowe żądań pobrania nowych szczegółów rozmowy wideo.

Zainicjuj synchronizację rozmów wideo

Gdy dodatek utworzy konferencję w systemie innej firmy, włączenie funkcji synchronizacji, tak aby zmieniała się na wydarzenie z Kalendarza Google zostanie odzwierciedlone w konferencji.

Zobacz Synchronizowanie zmian w Kalendarzu .

Tworzenie odpowiedzi dotyczącej danych rozmowy wideo

Korzystając z informacji o konferencji otrzymanych przez usługę innej firmy, onCreateFunction musi następnie utworzyć i zwrócić ConferenceData. obiektu; Dane konferencji opisuje zawartość tego obiektu. Kalendarz Google używa tej funkcji wykorzystuje te informacje do skierowania użytkowników do rozmowy wideo po jej rozpoczęciu.

Podczas tworzenia ConferenceData pamiętaj, że istnieją pewne ograniczenia dotyczące długości pól, formatów identyfikatory URI punktów wejścia i dozwolone kombinacje punktów wejścia. Przykład: w pojedynczym punkcie wejścia może być maksymalnie jeden VIDEO ConferenceData Ograniczenia te są identyczne z opisanymi ograniczeniami. w interfejsie Calendar API Event dla odpowiednich conferenceData, ale nie wszystkie opisane tam pola zdarzenia interfejsu API są dostępne w Apps Script.

Obsługa błędów

W niektórych przypadkach nie można dokończyć tworzenia rozmowy wideo, ponieważ zwracany przez system do obsługi rozmów wideo innej firmy. W takich przypadkach powinien dobrze radzić sobie ze stanem błędu, tworząc zwracanie ConferenceData obiekt zawierający ConferenceError Dzięki temu Kalendarz Google będzie mógł podjąć odpowiednie działania.

Gdy tworzysz obiekt ConferenceData do zgłaszania błędu, musi zawierać wszystkie komponenty ConferenceData oprócz ConferenceError obiekt. ConferenceErrors może mieć ConferenceErrorType, komunikat o błędzie, a w przypadku problemów z uwierzytelnianiem – adres URL, który na logowanie się do systemu do obsługi rozmów wideo innej firmy.

Przykład

Poniżej znajdziesz przykład pola onCreateFunction (zwróć uwagę, że nazwa funkcja może być dowolna; wystarczy zdefiniować go tylko w projekcie dodatku plik manifestu).

Funkcja create3rdPartyConference() kontaktuje się z systemem innej firmy aby utworzyć tam konferencję oraz funkcję getAuthenticationUrl() tworzy adres URL uwierzytelniania systemu innej firmy. Nie są one zaimplementowane ponieważ są one w dużym stopniu zależne od szczegółów systemu firmy zewnętrznej.

Funkcja initializeSyncing() nie jest tu wyświetlana; i przeprowadza wszystkie pracy wymaganej do synchronizacji. Zobacz Synchronizowanie zmian w kalendarzu .

/**
 *  Creates a conference, then builds and returns a ConferenceData object
 *  with the corresponding conference information. This method is called
 *  when a user selects a conference solution defined by the add-on that
 *  uses this function as its 'onCreateFunction' in the add-on manifest.
 *
 *  @param {Object} arg The default argument passed to a 'onCreateFunction';
 *      it carries information about the Google Calendar event.
 *  @return {ConferenceData}
 */
function createConference(arg) {
  const eventData = arg.eventData;
  const calendarId = eventData.calendarId;
  const eventId = eventData.eventId;

  // Retrieve the Calendar event information using the Calendar
  // Advanced service.
  var calendarEvent;
  try {
    calendarEvent = Calendar.Events.get(calendarId, eventId);
  } catch (err) {
    // The calendar event does not exist just yet; just proceed with the
    // given event ID and allow the event details to sync later.
    console.log(err);
    calendarEvent = {
      id: eventId,
    };
  }

  // Create a conference on the third-party service and return the
  // conference data or errors in a custom JSON object.
  var conferenceInfo = create3rdPartyConference(calendarEvent);

  // Build and return a ConferenceData object, either with conference or
  // error information.
  var dataBuilder = ConferenceDataService.newConferenceDataBuilder();

  if (!conferenceInfo.error) {
    // No error, so build the ConferenceData object from the
    // returned conference info.

    var phoneEntryPoint = ConferenceDataService.newEntryPoint()
        .setEntryPointType(ConferenceDataService.EntryPointType.PHONE)
        .setUri('tel:+' + conferenceInfo.phoneNumber)
        .setPin(conferenceInfo.phonePin);

    var adminEmailParameter = ConferenceDataService.newConferenceParameter()
        .setKey('adminEmail')
        .setValue(conferenceInfo.adminEmail);

    dataBuilder.setConferenceId(conferenceInfo.id)
        .addEntryPoint(phoneEntryPoint)
        .addConferenceParameter(adminEmailParameter)
        .setNotes(conferenceInfo.conferenceLegalNotice);

    if (conferenceInfo.videoUri) {
      var videoEntryPoint = ConferenceDataService.newEntryPoint()
          .setEntryPointType(ConferenceDataService.EntryPointType.VIDEO)
          .setUri(conferenceInfo.videoUri)
          .setPasscode(conferenceInfo.videoPasscode);
      dataBuilder.addEntryPoint(videoEntryPoint);
    }

    // Since the conference creation request succeeded, make sure that
    // syncing has been enabled.
    initializeSyncing(calendarId, eventId, conferenceInfo.id);

  } else if (conferenceInfo.error === 'AUTH') {
    // Authenentication error. Implement a function to build the correct
    // authenication URL for the third-party conferencing system.
    var authenticationUrl = getAuthenticationUrl();
    var error = ConferenceDataService.newConferenceError()
        .setConferenceErrorType(
            ConferenceDataService.ConferenceErrorType.AUTHENTICATION)
        .setAuthenticationUrl(authenticationUrl);
    dataBuilder.setError(error);

  } else {
    // Other error type;
    var error = ConferenceDataService.newConferenceError()
        .setConferenceErrorType(
            ConferenceDataService.ConferenceErrorType.TEMPORARY);
    dataBuilder.setError(error);
  }

  // Don't forget to build the ConferenceData object.
  return dataBuilder.build();
}


/**
 *  Contact the third-party conferencing system to create a conference there,
 *  using the provided calendar event information. Collects and retuns the
 *  conference data returned by the third-party system in a custom JSON object
 *  with the following fields:
 *
 *    data.adminEmail - the conference administrator's email
 *    data.conferenceLegalNotice - the conference legal notice text
 *    data.error - Only present if there was an error during
 *         conference creation. Equal to 'AUTH' if the add-on user needs to
 *         authorize on the third-party system.
 *    data.id - the conference ID
 *    data.phoneNumber - the conference phone entry point phone number
 *    data.phonePin - the conference phone entry point PIN
 *    data.videoPasscode - the conference video entry point passcode
 *    data.videoUri - the conference video entry point URI
 *
 *  The above fields are specific to this example; which conference information
 *  your add-on needs is dependent on the third-party conferencing system
 *  requirements.
 *
 * @param {Object} calendarEvent A Calendar Event resource object returned by
 *     the Google Calendar API.
 * @return {Object}
 */
function create3rdPartyConference(calendarEvent) {
  var data = {};

  // Implementation details dependent on the third-party system API.
  // Typically one or more API calls are made to create the conference and
  // acquire its relevant data, which is then put in to the returned JSON
  // object.

  return data;
}

/**
 *  Return the URL used to authenticate the user with the third-party
 *  conferencing system.
 *
 *  @return {String}
 */
function getAuthenticationUrl() {
  var url;
  // Implementation details dependent on the third-party system.

  return url;
}