Konferenzen mit Drittanbietern erstellen

Jede Konferenzlösung die Sie in Ihrem Skriptprojekt definiert haben, Manifest hat ein verknüpftes onCreateFunction. Das Add-on ruft diese Funktion auf, um wenn ein Nutzer versucht, diese Konferenzlösung auszuwählen, .

Sie müssen jeden onCreateFunction implementieren, der in Ihrem Add-on-Manifest beschrieben ist. Im Allgemeinen müssen diese Funktionen Folgendes erfüllen:

  1. alle Google Kalender-Termininformationen abrufen, z. B. die Termin-ID oder Liste der Teilnehmer, die das Drittanbietersystem möglicherweise in um die Konferenz zu erstellen.
  2. Mit dem Videokonferenzdienst des Drittanbieters verbinden und eine neue Konferenz erstellen mithilfe der Google Kalender-Termininformationen.
  3. Wenn die Anfrage zum Erstellen der Konferenz aus irgendeinem Grund fehlgeschlagen ist, verwenden Sie den Fehler Informationen zum Erstellen und Zurückgeben ConferenceData Objekt, das ein ConferenceError Andernfalls führen Sie die nächsten Schritte aus.
    1. Synchronisierung der Konferenz initialisieren
    2. Verwenden Sie die vom Drittanbieter-Konferenzdienst zurückgegebenen Informationen, um erstellen und eine neue ConferenceData -Objekt enthält.

Termininformationen abrufen

Um eine Konferenz eines Drittanbieters zu erstellen, können Sie bestimmte Informationen über die entsprechende Ein Google Kalender-Termin ist erforderlich. Welche Ereignisinformationen genau erforderlich sind, variiert Konferenzsystemen von Drittanbietern kommunizieren. Oftmals gehört dazu aber die Startzeit, das Ende, die Zusammenfassung, die Teilnehmerliste und die ID des Termins.

Beim Aufruf wird an jede von Ihnen definierte onCreateFunction ein Argument übergeben, das enthält die Kalender- und Termin-IDs. Mit diesen IDs können Sie die vollständigen Termininformationen mithilfe der Erweiterter Dienst von Google Kalender

In Google Kalender können Konferenzdetails vor einem Termin in Google Kalender eingetragen werden. dass sie existiert. In solchen Fällen übergibt Google Kalender dem onCreateFunction eine gültige eventId, aber nachfolgende Aufrufe von Calendar.Events.get() können zu einer Fehlerantwort, die besagt, dass das Ereignis nicht vorhanden ist. In diesen Fällen ist es am besten, Drittanbieter-Konferenz mithilfe von Platzhalterdaten erstellen werden diese Daten durch das nächste Mal, wenn der Termin synchronisiert.

Drittanbieter-Konferenz erstellen

Nachdem onCreateFunction die erforderlichen Ereignisdaten abgerufen hat, eine Verbindung zum Konferenzsystem des Drittanbieters herstellen, um die Konferenz zu erstellen. Dazu werden in der Regel API-Anfragen gesendet, die vom eines Drittanbieter-Konferenzsystems. Sehen Sie in der Dokumentation des Drittanbieters nach Konferenzlösung, um zu bestimmen, welche API-Anfragen Sie erstellen können Konferenzen.

In Apps Script lassen sich externe API-Anfragen am einfachsten über die mithilfe von OAuth 2.0 für Apps Script oder OAuth1 für Apps Script Open-Source-Bibliotheken. Sie können auch Verbindung zu externen APIs über den UrlFetch-Dienst herstellen Dazu müssen Sie die Autorisierungsdetails jedoch explizit bearbeiten.

Nachdem Sie die Konferenzerstellung angefordert haben, müssen Sie möglicherweise weitere -Anfragen zum Abrufen der neuen Konferenzdetails.

Konferenzsynchronisierung initialisieren

Nachdem das Add-on erfolgreich eine Konferenz auf einem Drittanbietersystem erstellt hat, sollten Sie einige Schritte ausführen, werden synchronisiert, sodass sich Google Kalender-Termin in der Konferenz widergespiegelt.

Weitere Informationen finden Sie unter Kalenderänderungen synchronisieren. finden Sie weitere Informationen zum Einrichten der Synchronisierung nach dem Erstellen einer Konferenz.

Konferenzdatenantwort erstellen

Mithilfe der vom Drittanbieterdienst zurückgegebenen Konferenzinformationen Der onCreateFunction muss dann ein ConferenceData Objekt; die Konferenzdaten Abschnitt beschreibt den Inhalt dieses Objekts. Google Kalender verwendet diese verwendet diese Informationen, um Nutzer nach Beginn der Konferenz zur Konferenz weiterzuleiten.

Beim Erstellen einer ConferenceData -Objekt enthält, beachten Sie, dass es bei Feldlängen, Formatformaten Einstiegspunkt-URIs und die zulässigen Kombinationen von Einstiegspunkten enthalten. Beispiel: kann es maximal einen VIDEO-Einstiegspunkt in einer einzelnen ConferenceData. Diese Einschränkungen sind identisch mit den im Kalender API-Ereignis für den entsprechenden conferenceData, obwohl nicht alle dort beschriebenen API-Ereignisfelder sind in Apps Script verfügbar.

Fehlerbehebung

In einigen Fällen kann die Konferenz nicht erstellt werden, weil Fehler, der vom Konferenzsystem zurückgegeben wurde. In diesen Fällen sollte Ihr Add-on die Fehlerbedingung zuverlässig handhaben, indem Sie Rückgabe eines ConferenceData Objekt mit ConferenceError damit Google Kalender entsprechend reagieren kann.

Wenn Sie ein ConferenceData-Objekt zum Melden eines Fehlers erstellen, alle ConferenceData-Komponenten außer der ConferenceError-Objekt. ConferenceErrors kann Folgendes haben: ConferenceErrorType, und bei Authentifizierungsproblemen eine URL, Nutzer können sich im Konferenzsystem des Drittanbieters anmelden.

Beispiel

Im Folgenden sehen Sie ein Beispiel für ein onCreateFunction (beachten Sie, dass der Name der -Funktion kann alles sein; müssen Sie sie nur in Ihrem Add-on-Projekt Manifests).

Die Funktion „create3rdPartyConference()“ kontaktiert das Drittanbietersystem um die Konferenz dort und die Funktion getAuthenticationUrl() zu erstellen eine Drittanbieter-Systemauthentifizierungs-URL. Sie sind nicht implementiert, da sie stark von den Details des Drittanbietersystems abhängen.

Die Funktion initializeSyncing() wird hier nicht angezeigt. alle vorläufigen für die Synchronisierung erforderlich. Weitere Informationen finden Sie unter Kalenderänderungen synchronisieren. .

/**
 *  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;
}