Creazione di conferenze di terze parti

Ogni soluzione per la conferenza che hai definito nel progetto di script manifest ha un elemento onCreateFunction associato. Il componente aggiuntivo chiama questa funzione per creare una conferenza ogni volta che un utente tenta di selezionare quella soluzione .

Devi implementare ogni onCreateFunction descritto nel file manifest dei componenti aggiuntivi. In generale, queste funzioni devono:

  1. Recupera tutte le informazioni sugli eventi di Google Calendar, come l'ID evento o l'elenco dei partecipanti che il sistema di conferenza di terze parti potrebbe aver bisogno per creare la conferenza.
  2. Collegarsi al servizio di conferenza di terze parti e creare una nuova conferenza utilizzando le informazioni sugli eventi di Google Calendar.
  3. Se per qualche motivo la richiesta di creazione della conferenza non è andata a buon fine, utilizza l'errore informazioni per creare e restituire un ConferenceData contenente un ConferenceError. In caso contrario, completa i passaggi successivi.
    1. Inizializza la sincronizzazione della conferenza.
    2. Utilizzare le informazioni restituite dal servizio di conferenza di terze parti per per creare e restituire un nuovo ConferenceData .

Recupero delle informazioni sull'evento in corso...

Per creare una conferenza di terze parti, determinate informazioni sull'evento È necessario un evento di Google Calendar. Le informazioni esatte richieste sugli eventi variano tra diversi sistemi di videoconferenza di terze parti, ma spesso includono ora di inizio, ora di fine, riepilogo, elenco dei partecipanti e ID.

Quando viene chiamato, a ogni onCreateFunction che definisci viene passato un argomento che contiene gli ID del calendario e dell'evento. Puoi utilizzare questi ID per recuperare le informazioni complete sull'evento utilizzando Servizio avanzato di Google Calendar.

Google Calendar può aggiungere i dettagli della conferenza a un evento prima se esiste. In questi casi, Google Calendar trasmette a onCreateFunction un valido eventId, ma le chiamate successive a Calendar.Events.get() possono comportare un risposta di errore che indica che l'evento non esiste. In questi casi, è meglio creare la conferenza di terze parti utilizzando dati segnaposto; questi dati vengono sostituiti la prossima volta che l'evento sincronizzazioni.

Creazione della conferenza di terze parti

Una volta che onCreateFunction ha recuperato i dati necessari sugli eventi, deve connettersi al sistema di conferenza di terze parti per creare la conferenza. In genere, ciò si ottiene rendendo le richieste API supportate dalla sistema di videoconferenza di terze parti. Consulta la documentazione della terza parte soluzione di videoconferenza per stabilire quali richieste API puoi utilizzare per creare conferenze.

In Apps Script, il modo più semplice per gestire le richieste API esterne è Con OAuth2 per Apps Script oppure OAuth1 per Apps Script librerie open source. Puoi anche connettersi ad API esterne tramite il servizio UrlFetch, ma per farlo devi gestire i dettagli dell'autorizzazione in modo esplicito.

Dopo aver richiesto la creazione della conferenza, potrebbe essere necessario eseguire altre per recuperare i dettagli della nuova conferenza.

Inizializza la sincronizzazione delle conferenze

Dopo che il componente aggiuntivo ha creato una conferenza su un sistema di terze parti, dovrebbero essere necessari alcuni passaggi sincronizzazione per far sì che l'evento di Google Calendar si riflette nella conferenza.

Vedi Sincronizzare le modifiche di Calendar. per maggiori dettagli sulla configurazione della sincronizzazione dopo la creazione della conferenza.

Creazione di una risposta ai dati di una conferenza

Utilizzando le informazioni sulla conferenza restituite dal servizio di terze parti, onCreateFunction deve quindi creare e restituire un ConferenceData oggetto; il Dati della conferenza vengono descritti i contenuti di questo oggetto. Google Calendar utilizza questo utilizza queste informazioni per indirizzare gli utenti alla conferenza una volta avviata.

Quando crei una ConferenceData tieni presente che ci sono alcune limitazioni sulla lunghezza dei campi, sui formati gli URI dei punti di ingresso e le combinazioni consentite di punti di ingresso. Ad esempio: può esserci al massimo un punto di ingresso VIDEO in un ConferenceData. Queste limitazioni sono identiche a quelle descritte nell'evento dell'API Calendar per la query conferenceData, sebbene non tutti i campi evento API descritti qui sono disponibili in Apps Script.

Gestione degli errori

In alcuni casi non è possibile completare la creazione della conferenza perché di un errore restituito dal sistema di conferenza di terze parti. In questi casi, il componente aggiuntivo deve gestire in modo affidabile la condizione di errore creando che restituisce un ConferenceData un oggetto contenente ConferenceError dettagli, in modo che Google Calendar possa agire di conseguenza.

Quando crei un oggetto ConferenceData per segnalare un errore, non devi devi includere tutti i componenti ConferenceData oltre a Oggetto ConferenceError. ConferenceErrors può avere un ConferenceErrorType, un messaggio di errore e, in caso di problemi di autenticazione, un URL che consentire agli utenti di accedere al sistema di videoconferenza di terze parti.

Esempio

Di seguito è riportato un esempio di onCreateFunction (tieni presente che il nome del può essere qualsiasi cosa: devi solo definirla nel progetto ).

La funzione create3rdPartyConference() contatta il sistema di terze parti per creare la conferenza e la funzione getAuthenticationUrl() crea un URL di autenticazione del sistema di terze parti. Questi non sono implementati completamente qui, in quanto dipendono molto dai dettagli del sistema di terze parti.

La funzione initializeSyncing() non viene mostrata qui; gestisce tutte le operazioni preliminari per eseguire la sincronizzazione. Vedi Sincronizzare le modifiche al calendario. per maggiori dettagli.

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