A ogni soluzione per conferenza che hai definito nel tuo progetto di script manifest è associata una onCreateFunction
. Il componente aggiuntivo chiama questa funzione per creare una conferenza ogni volta che un utente tenta di selezionare una soluzione per la conferenza come evento.
Devi implementare ogni onCreateFunction
descritto nel manifest del componente aggiuntivo.
In generale, queste funzioni devono eseguire le seguenti operazioni:
- Recuperare informazioni su qualsiasi evento di Google Calendar, ad esempio l'ID evento o l'elenco dei partecipanti, di cui il sistema di conferenza di terze parti potrebbe avere bisogno per creare la conferenza.
- Connettiti al servizio di conferenza di terze parti e crea una nuova conferenza utilizzando le informazioni sugli eventi di Google Calendar.
- Se per qualche motivo la richiesta di creazione della conferenza non ha esito positivo, utilizza le informazioni sull'errore per creare e restituire un oggetto
ConferenceData
contenente unConferenceError
. In caso contrario, completa i passaggi successivi.- Inizializza la sincronizzazione della conferenza.
- Utilizza le informazioni restituite dal servizio di conferenza di terze parti per creare e restituire un nuovo oggetto
ConferenceData
.
Recupero delle informazioni sugli eventi in corso...
Per creare una conferenza di terze parti, sono necessarie alcune informazioni sull'evento di Google Calendar corrispondente. Le informazioni esatte sugli eventi richieste variano da un sistema di conferenza di terze parti all'altro, ma spesso includono ora di inizio, ora di fine, riepilogo, elenco dei partecipanti e ID.
Quando viene chiamato, ogni elemento onCreateFunction
che definisci viene trasmesso a un argomento che contiene gli ID del calendario e dell'evento. Puoi utilizzare questi ID per recuperare le informazioni complete sugli eventi utilizzando il servizio avanzato di Google Calendar.
È possibile che Google Calendar aggiunga i dettagli della conferenza a un evento prima che esista. In questi casi, Google Calendar trasmette al onCreateFunction
un eventId
valido, ma le chiamate successive a Calendar.Events.get()
possono restituire una risposta di errore secondo cui l'evento non esiste. In questi casi, è preferibile creare una conferenza di terze parti utilizzando i dati segnaposto; questi dati verranno sostituiti alla successiva sincronizzazione dell'evento.sincronizzazione.
Creazione della conferenza di terze parti
Una volta che onCreateFunction
ha recuperato i dati sugli eventi necessari, deve connettersi al sistema di conferenza di terze parti per creare la conferenza.
In genere, questa richiesta viene eseguita rendendo le richieste API supportate dal sistema di conferenza di terze parti. Controlla la documentazione della tua soluzione di conferenza di terze parti per determinare quali richieste API puoi utilizzare per creare conferenze.
In Apps Script, il modo più semplice per gestire le richieste API esterne è utilizzare OAuth2 per Apps Script o OAuth1 per Apps Script. Puoi anche connetterti ad API esterne utilizzando il servizio UrlFetch, ma questo richiede la gestione esplicita dei dettagli dell'autorizzazione.
Dopo aver richiesto la creazione della conferenza, potresti dover inviare ulteriori richieste per recuperare i nuovi dettagli della conferenza.
Inizializza sincronizzazione conferenze
Dopo che il componente aggiuntivo ha creato correttamente una conferenza su un sistema di terze parti, devono essere eseguiti alcuni passaggi per attivare la sincronizzazione in modo che le modifiche all'evento di Google Calendar vengano riportate nella conferenza.
Per maggiori dettagli sulla configurazione della sincronizzazione dopo la creazione della conferenza, vedi Sincronizzazione delle modifiche di Calendar.
Creazione di una risposta dati per conferenze
Utilizzando le informazioni sulla conferenza restituite dal servizio di terze parti, onCreateFunction
deve poi creare e restituire un oggetto ConferenceData
; la sezione Dati conferenza descrive il contenuto di questo oggetto. Google Calendar utilizza queste informazioni per indirizzare gli utenti alla conferenza una volta avviata.
Quando crei un oggetto ConferenceData
, tieni presente che esistono alcune limitazioni relative alla lunghezza dei campi, ai formati degli URI dei punti di ingresso e alle combinazioni di punti di ingresso consentite. Ad esempio, può esserci al massimo un punto di accesso VIDEO
in un singolo
ConferenceData
. Queste limitazioni sono identiche a quelle descritte in Evento API Calendar per il campo conferenceData
corrispondente, anche se non tutti i campi evento API descritti sono disponibili in Apps Script.
Gestione degli errori
In alcuni casi, non è possibile completare la creazione della conferenza a causa 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 e restituendo un oggetto ConferenceData
contenente dettagli ConferenceError
, in modo che Google Calendar possa agire di conseguenza.
Quando crei un oggetto ConferenceData
per segnalare un errore, non è necessario includere i componenti ConferenceData
a parte l'oggetto ConferenceError
. ConferenceErrors
può avere un messaggio ConferenceErrorType
, un messaggio di errore e, in caso di autenticazione, un URL che consente agli utenti di accedere al sistema di conferenza di terze parti.
Esempio
Di seguito è riportato un esempio di onCreateFunction
(tieni presente che il nome della funzione può essere qualsiasi; devi solo definirla nel manifest del progetto del componente aggiuntivo).
La funzione create3rdPartyConference()
contatta il sistema di terze parti per creare la conferenza lì, mentre la funzione getAuthenticationUrl()
crea un URL di autenticazione del sistema di terze parti. non vengono implementate completamente in quanto dipendono dai dettagli di sistema di terze parti.
La funzione initializeSyncing()
non viene mostrata qui; gestisce tutti i lavori preliminari necessari per la sincronizzazione.
Per i dettagli, consulta Sincronizzare le modifiche del calendario.
/** * 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; }