Üçüncü taraf konferansları oluşturma

{/0}

Komut dosyası projeniz manifest'inizde tanımladığınız her konferans çözümü ile ilişkili bir onCreateFunction bulunur. Eklenti, kullanıcı ilgili konferans çözümünü bir etkinlik seçmeye çalıştığında bir konferans oluşturmak için bu işlevi çağırır.

Eklenti manifestinizde açıklanan her onCreateFunction öğesini uygulamanız gerekir. Genel olarak bu işlevlerin şunları yapması gerekir:

  1. Üçüncü taraf konferans sisteminin konferansı oluşturmak için ihtiyaç duyabileceği etkinlik kimliği veya katılımcı listesi gibi Google Takvim etkinlik bilgilerini alın.
  2. Üçüncü taraf konferans hizmetine bağlanın ve Google Takvim etkinlik bilgilerini kullanarak orada yeni bir konferans oluşturun.
  3. Konferans oluşturma isteği herhangi bir nedenle başarısız olduysa ConferenceError içeren bir ConferenceData nesnesi oluşturmak ve döndürmek için hata bilgilerini kullanın. Aksi takdirde, sonraki adımları tamamlayın.
    1. Konferans senkronizasyonunu başlatın.
    2. Yeni bir ConferenceData nesnesi oluşturmak ve döndürmek için üçüncü taraf konferans hizmeti tarafından döndürülen bilgileri kullanın.

Etkinlik bilgileri alınıyor

Üçüncü taraf konferansı oluşturmak için ilgili Google Takvim etkinliğiyle ilgili belirli bilgiler gereklidir. Gerekli tam etkinlik bilgileri, farklı üçüncü taraf konferans sistemleri arasında değişiklik gösterir ancak genellikle etkinlik başlangıç zamanı, bitiş zamanı, özet, katılımcı listesi ve kimliği içerir.

Çağrı yapıldığında, tanımladığınız her onCreateFunction, takvim ve etkinlik kimliklerini içeren bir bağımsız değişkenden geçirilir. Google Takvim gelişmiş hizmetini kullanarak tüm etkinlik bilgilerini almak için bu kimlikleri kullanabilirsiniz.

Google Takvim, konferans ayrıntılarını bir etkinlik gerçekleşmeden önce ekleyebilir. Bu tür durumlarda Google Takvim, onCreateFunction öğesine geçerli bir eventId iletir ancak Calendar.Events.get() için yapılan sonraki çağrılar, etkinliğin mevcut olmadığını belirten bir hata yanıtına neden olabilir. Bu gibi durumlarda, en iyi yöntem üçüncü taraf konferansını yer tutucu verileri kullanarak oluşturmaktır. Bu veriler, bir sonraki etkinlik senkronize ettiğinde değiştirilir.

Üçüncü taraf konferansı oluşturma

onCreateFunction gerekli etkinlik verilerini aldıktan sonra, konferansın oluşturulması için üçüncü taraf konferans sistemine bağlanmalıdır. Bu genellikle üçüncü taraf konferans sistemi tarafından desteklenen API istekleri yapılarak gerçekleştirilir. Konferanslar oluşturmak üzere kullanabileceğiniz API isteklerini belirlemek için üçüncü taraf konferans çözümünüzün dokümanlarına bakın.

Apps Komut Dosyası'nda harici API isteklerinde bulunmanın en kolay yolu, Apps Komut Dosyası için OAuth2 veya Apps Komut Dosyası için OAuth1 açık kaynak kitaplıklarını kullanmaktır. UrlFetch hizmetini kullanarak harici API'lere de bağlanabilirsiniz ancak bunun için yetkilendirme ayrıntılarını açık bir şekilde işlemeniz gerekir.

Konferans oluşturma isteğinde bulunduktan sonra yeni konferans ayrıntılarını almak için başka isteklerde bulunmanız gerekebilir.

Konferans senkronizasyonunu başlat

Eklenti, üçüncü taraf sisteminde başarıyla konferans oluşturduktan sonra, Google Takvim etkinliğinde yapılan değişikliklerin konferansa yansıtılması için senkronizasyon özelliğini etkinleştirmek üzere birkaç adım uygulamalıdır.

Konferans oluşturulduktan sonra senkronizasyonun ayarlanmasıyla ilgili ayrıntılar için Takvim değişikliklerini senkronize etme bölümüne bakın.

Konferans veri yanıtı oluşturma

Ardından onCreateFunction, üçüncü taraf hizmeti tarafından döndürülen konferans bilgilerini kullanarak bir ConferenceData nesnesi oluşturmalı ve döndürmelidir. Konferans verileri bölümünde bu nesnenin içeriği açıklanmaktadır. Google Takvim bu bilgiyi kullanarak, başladığında kullanıcıları konferansa yönlendirir.

Bir ConferenceData nesnesi oluştururken alan uzunlukları, giriş noktası URI'lerinin biçimleri ve izin verilen giriş noktası kombinasyonlarıyla ilgili bazı sınırlamalar olduğunu unutmayın. Örneğin, tek bir ConferenceData içinde en fazla bir VIDEO giriş noktası olabilir. Bu sınırlamalar, ilgili conferenceData alanı için Calendar API Etkinliği bölümünde açıklanan sınırlamalarla aynıdır. Bununla birlikte, burada açıklanan API etkinlik alanlarının tümü Apps Komut Dosyası'nda mevcut değildir.

Hataları işleme

Bazı durumlarda, üçüncü taraf konferans sistemi tarafından döndürülen bir hata nedeniyle konferans oluşturma işlemi tamamlanamaz. Bu gibi durumlarda, eklentinizin ConferenceError ayrıntılarını içeren bir ConferenceData nesnesi oluşturup döndürerek hata durumunu sağlam bir şekilde ele alması gerekir. Böylece Google Takvim bu doğrultuda hareket edebilir.

Hata bildirmek için ConferenceData nesnesi oluştururken ConferenceError nesnesinin dışında herhangi bir ConferenceData bileşeni eklemeniz gerekmez. ConferenceErrors alanında ConferenceErrorType ile bir hata mesajı ve kimlik doğrulama sorunları olması durumunda kullanıcıların üçüncü taraf konferans sistemine giriş yapmasına izin veren bir URL bulunabilir.

Örnek

Aşağıda bir onCreateFunction örneği gösterilmektedir (işlev adının herhangi bir şey olabileceğini unutmayın. Bunu yalnızca eklenti projesi manifestinizde tanımlamanız gerekir).

create3rdPartyConference() işlevi konferansı oluşturmak için üçüncü taraf sistemle iletişim kurar ve getAuthenticationUrl() işlevi bir üçüncü taraf sistem kimlik doğrulama URL'si oluşturur. Büyük ölçüde üçüncü taraf sistem ayrıntılarına bağlı olduğundan, bunlar burada tamamen uygulanmaz.

initializeSyncing() işlevi burada gösterilmez; senkronizasyon için gereken tüm ön işleri kapsar. Ayrıntılar için Takvim değişikliklerini senkronize etme başlıklı makaleye bakın.

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