Toplantılar için ajanda oluşturma

Kodlama seviyesi:
başlangıç düzeyi Süre: 15 dakika
Proje türü: Etkinliğe dayalı tetikleyici ile otomasyon

Hedefler

  • Çözümün ne işe yaradığını anlayın.
  • Apps Komut Dosyası hizmetlerinin çözümüne geçelim.
  • Komut dosyasını ayarlayın.
  • Komut dosyasını çalıştırın.

Bu çözüm hakkında

Google Dokümanlar'da otomatik olarak gündem dokümanları oluşturun ve bunları Google Takvim toplantıları.

Takvim etkinliğine eklenen gündemin ekran görüntüsü

İşleyiş şekli

Komut dosyası, gündem için bir doküman şablonu oluşturur. komut dosyası, sahip olduğunuz etkinliklerin "#agenda" ifadesini içerip içermediğini kontrol eder. bir listesini oluştur: girin. Etiket mevcutsa komut dosyası şablonun bir kopyasını oluşturur, ekler ve etkinlik katılımcılarıyla paylaşır.

Apps Komut Dosyası hizmetleri

Bu çözüm aşağıdaki hizmetleri kullanır:

  • Drive hizmeti: Şablonun doküman var; yoksa şablon için yeni bir klasör oluşturur uygulayacaksınız. Her yeni gündem için şablon dokümanının bir kopyasını oluşturur.
  • Doküman hizmeti: Gündemi oluşturur tıklayın.
  • Takvim hizmeti: Aşağıdakileri içeren etkinlikleri kontrol eder: "#günde" etiketini ekler ve etkinlik açıklamasını gündemin bağlantısıyla günceller. dokümanı.
  • Temel hizmet: Aşağıdakileri almak için Session sınıfını kullanır: Kullanıcının e-postası. Bu, geçerli kullanıcı için tetikleyicinin oluşturulmasına yardımcı olur.
  • Komut dosyası hizmeti: Etkinleştiren bir tetikleyici oluşturur kullanıcının takviminde değişiklik olduğunda.

Ön koşullar

Bu örneği kullanmak için aşağıdaki ön koşullara sahip olmanız gerekir:

  • Google Hesabı (Google Workspace hesapları (yönetici onayı gerektirir).
  • İnternete erişimi olan bir web tarayıcısı.

Komut dosyasını ayarlama

  1. Aşağıdaki düğmeyi tıklayarak Toplantılar için gündem oluşturma örneğini açın Apps Komut Dosyası projesi.
    Projeyi açın
  2. Genel Bakış tıklayın.
  3. Genel bakış sayfasında Kopya oluştur'u Kopya oluşturma simgesi tıklayın.
  4. Kopyalanan projenizde, işlev açılır menüsünden setUp'ı seçin.
  5. Çalıştır'ı tıklayın.
  6. İstendiğinde komut dosyasını yetkilendirin. OAuth izin ekranında Bu uygulama doğrulanmadı uyarısı gösteriliyorsa Gelişmiş'i > seçerek devam edin {Project Name} adlı projeye (güvenli değil) gidin.

Komut dosyasını çalıştırma

  1. Google Takvim'i açın.
  2. Yeni bir etkinlik oluşturun veya mevcut bir etkinliği düzenleyin.
  3. Açıklamaya #agenda adlı kullanıcıyı ekleyip etkinliği kaydedin.
  4. Bir dokümanın paylaşıldığına dair e-posta bildirimi için e-postanızı kontrol edin veya Takvim'i yenileyip etkinliği tekrar kontrol edin.

Tüm katılımcılar, gündemi görüntülemeleri için e-posta bildirimi alır. İlgili içeriği oluşturmak için kullanılan komut dosyası, katılımcılara düzenleme izni verir, ancak dosyayı güncelleyip düzenlemek için gündem belgesi izinlerini kontrol edin.

Kodu inceleyin

Bu çözüm için Apps Komut Dosyası kodunu incelemek üzere Aşağıdaki kaynak kodu görüntüleyin:

Kaynak kodu göster

Code.gs

solutions/automations/agenda-maker/Code.js
// To learn how to use this script, refer to the documentation:
// https://developers.google.com/apps-script/samples/automations/agenda-maker

/*
Copyright 2022 Google LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

/**
 * Checks if the folder for Agenda docs exists, and creates it if it doesn't.
 *
 * @return {*} Drive folder ID for the app.
 */
function checkFolder() {
  const folders = DriveApp.getFoldersByName('Agenda Maker - App');
  // Finds the folder if it exists
  while (folders.hasNext()) {
    let folder = folders.next();
    if (
      folder.getDescription() ==
        'Apps Script App - Do not change this description' &&
      folder.getOwner().getEmail() == Session.getActiveUser().getEmail()
    ) {
      return folder.getId();
    }
  }
  // If the folder doesn't exist, creates one
  let folder = DriveApp.createFolder('Agenda Maker - App');
  folder.setDescription('Apps Script App - Do not change this description');
  return folder.getId();
}

/**
 * Finds the template agenda doc, or creates one if it doesn't exist.
 */
function getTemplateId(folderId) {
  const folder = DriveApp.getFolderById(folderId);
  const files = folder.getFilesByName('Agenda TEMPLATE##');

  // If there is a file, returns the ID.
  while (files.hasNext()) {
    const file = files.next();
    return file.getId();
  }

  // Otherwise, creates the agenda template.
  // You can adjust the default template here
  const doc = DocumentApp.create('Agenda TEMPLATE##');
  const body = doc.getBody();

  body
      .appendParagraph('##Attendees##')
      .setHeading(DocumentApp.ParagraphHeading.HEADING1)
      .editAsText()
      .setBold(true);
  body.appendParagraph(' ').editAsText().setBold(false);

  body
      .appendParagraph('Overview')
      .setHeading(DocumentApp.ParagraphHeading.HEADING1)
      .editAsText()
      .setBold(true);
  body.appendParagraph(' ');
  body.appendParagraph('- Topic 1: ').editAsText().setBold(true);
  body.appendParagraph(' ').editAsText().setBold(false);
  body.appendParagraph('- Topic 2: ').editAsText().setBold(true);
  body.appendParagraph(' ').editAsText().setBold(false);
  body.appendParagraph('- Topic 3: ').editAsText().setBold(true);
  body.appendParagraph(' ').editAsText().setBold(false);

  body
      .appendParagraph('Next Steps')
      .setHeading(DocumentApp.ParagraphHeading.HEADING1)
      .editAsText()
      .setBold(true);
  body.appendParagraph('- Takeaway 1: ').editAsText().setBold(true);
  body.appendParagraph('- Responsible: ').editAsText().setBold(false);
  body.appendParagraph('- Accountable: ');
  body.appendParagraph('- Consult: ');
  body.appendParagraph('- Inform: ');
  body.appendParagraph(' ');
  body.appendParagraph('- Takeaway 2: ').editAsText().setBold(true);
  body.appendParagraph('- Responsible: ').editAsText().setBold(false);
  body.appendParagraph('- Accountable: ');
  body.appendParagraph('- Consult: ');
  body.appendParagraph('- Inform: ');
  body.appendParagraph(' ');
  body.appendParagraph('- Takeaway 3: ').editAsText().setBold(true);
  body.appendParagraph('- Responsible: ').editAsText().setBold(false);
  body.appendParagraph('- Accountable: ');
  body.appendParagraph('- Consult: ');
  body.appendParagraph('- Inform: ');

  doc.saveAndClose();

  folder.addFile(DriveApp.getFileById(doc.getId()));

  return doc.getId();
}

/**
 * When there is a change to the calendar, searches for events that include "#agenda"
 * in the decrisption.
 *
 */
function onCalendarChange() {
  // Gets recent events with the #agenda tag
  const now = new Date();
  const events = CalendarApp.getEvents(
      now,
      new Date(now.getTime() + 2 * 60 * 60 * 1000000),
      {search: '#agenda'},
  );

  const folderId = checkFolder();
  const templateId = getTemplateId(folderId);

  const folder = DriveApp.getFolderById(folderId);

  // Loops through any events found
  for (i = 0; i < events.length; i++) {
    const event = events[i];

    // Confirms whether the event has the #agenda tag
    let description = event.getDescription();
    if (description.search('#agenda') == -1) continue;

    // Only works with events created by the owner of this calendar
    if (event.isOwnedByMe()) {
      // Creates a new document from the template for an agenda for this event
      const newDoc = DriveApp.getFileById(templateId).makeCopy();
      newDoc.setName('Agenda for ' + event.getTitle());

      const file = DriveApp.getFileById(newDoc.getId());
      folder.addFile(file);

      const doc = DocumentApp.openById(newDoc.getId());
      const body = doc.getBody();

      // Fills in the template with information about the attendees from the
      // calendar event
      const conf = body.findText('##Attendees##');
      if (conf) {
        const ref = conf.getStartOffset();

        for (let i in event.getGuestList()) {
          let guest = event.getGuestList()[i];

          body.insertParagraph(ref + 2, guest.getEmail());
        }
        body.replaceText('##Attendees##', 'Attendees');
      }

      // Replaces the tag with a link to the agenda document
      const agendaUrl = 'https://docs.google.com/document/d/' + newDoc.getId();
      description = description.replace(
          '#agenda',
          '<a href=' + agendaUrl + '>Agenda Doc</a>',
      );
      event.setDescription(description);

      // Invites attendees to the Google doc so they automatically receive access to the agenda
      newDoc.addEditor(newDoc.getOwner());

      for (let i in event.getGuestList()) {
        let guest = event.getGuestList()[i];

        newDoc.addEditor(guest.getEmail());
      }
    }
  }
  return;
}

/**
 * Creates an event-driven trigger that fires whenever there's a change to the calendar.
 */
function setUp() {
  let email = Session.getActiveUser().getEmail();
  ScriptApp.newTrigger("onCalendarChange").forUserCalendar(email).onEventUpdated().create();
}

Değişiklikler

Örneği ihtiyaçlarınıza göre istediğiniz kadar düzenleyebilirsiniz. Aşağıdakiler isteğe bağlı olarak yapabileceğiniz birkaç değişiklik var.

Katılımcılar için gündem dokümanı izinlerini güncelleyin

Komut dosyası, katılımcılara düzenleme izni verir. Şunu istiyorsanız: izinleri salt görüntüleme olarak sınırla, addEditor yöntemini değiştirin addViewer yöntemini kullanarak kodun aşağıdaki bölümünde kullanabilirsiniz:

     for (let i in event.getGuestList()) {
       let guest = event.getGuestList()[i];

       newDoc.addEditor(guest.getEmail());

Gündem dokümanı şablonunu düzenle

Gündem dokümanı şablonunu güncellemek için aşağıdaki adımları uygulayın:

  1. Bir takvim etkinliğinde ilk ajandanızı oluşturduktan sonra Google Drive'ı açın.
  2. Ajanda Oluşturucu - Uygulama adlı klasörü açın.
  3. Ajanda TEMPLATE## dokümanını açın ve düzenlemelerinizi yapın.

Katkıda bulunanlar

Bu örnek, Ürün Yönetimi ve Platform departmanından Jeremy Glassenberg tarafından oluşturuldu Strateji Danışmanı. @jglassenberg Twitter'da Jeremy'yi bulun.

Bu örnek, Google Geliştirici Uzmanları'nın yardımıyla Google tarafından yönetilir.

Sonraki adımlar