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:
- 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ę.
- 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.
- 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ącyConferenceError
W przeciwnym razie wykonaj następne kroki.- Zainicjuj synchronizację konferencji.
- 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; }