כתיבת טיוטות של הודעות

בתוסף ל-Google Workspace אפשר ליצור ווידג'טים עם פעולות מקושרות. אפשר להשתמש בפעולה כדי לכתוב טיוטות אימייל חדשות, ולמלא אותן באמצעות מידע שהוזן בממשק המשתמש של התוסף או מידע מהודעה פתוחה. לדוגמה, אפשר להוסיף לחצן לממשק המשתמש של ההודעה בתוסף שיוצר תשובה להודעה הפתוחה כרגע, עם מידע שמולא מראש מהתוסף.

כשמתבצעת פעולה שמאפשרת ליצור הודעות, Gmail מפעיל פונקציית קריאה חוזרת כדי ליצור את הטיוטה ולהחזיר אותה. לאחר מכן, טיוטת האימייל תוצג ב-Gmail בממשק המשתמש בחלון כתיבה רגיל של אימייל, והמשתמש יוכל לערוך ולשלוח אותה לפי הצורך.

הגדרת פעולה ליצירת טיוטת הודעה

כדי להגדיר ווידג'ט שיתחיל פעולת יצירת טיוטה כשבוחרים בו, צריך לבצע את הפעולות הבאות:

  1. מוודאים שהמניפסט כולל את ההיקף action.compose:

    https://www.googleapis.com/auth/gmail.addons.current.action.compose

    במקום זאת, אפשר להשתמש בהיקף מורשה יותר, אבל כדאי לעשות זאת רק אם ההיקף הזה הכרחי באופן מוחלט.

  2. יוצרים אובייקט Action ומשייכים אותו לפונקציית קריאה חוזרת שאתם מגדירים.

  3. קוראים לפונקציה widget handler של הווידג'ט setComposeAction(), ומספקים לה את האובייקט Action ומציינים את ComposeEmailType.

  4. מטמיעים את פונקציית הקריאה החוזרת שמפעילה את הפעולה של יצירת טיוטה. הפונקציה הזו מקבלת אובייקט אירוע כארגומנט. פונקציית הקריאה החוזרת צריכה לבצע את הפעולות הבאות:

    1. יוצרים אובייקט GmailDraft.
    2. יוצרים אובייקט ComposeActionResponse באמצעות הכיתה ComposeActionResponseBuilder והאובייקט GmailDraft.
    3. מחזירים את קובץ ה-build ComposeActionResponse.

אפשר למלא מראש את GmailDraft שיוצרים בפונקציית ה-callback, עם נמענים, נושא, תוכן הודעה וקבצים מצורפים. כדי למלא את הטיוטה, הנתונים יכולים להגיע מכל מקור, אבל בדרך כלל הם נובעים ממידע שסופק לתוסף עצמו, ממידע בהודעה הפתוחה או ממידע שנאסף משירות של צד שלישי. אובייקט האירוע שמוענק לפונקציית הקריאה החוזרת מכיל את מזהה ההודעה הפתוחה ומידע נוסף שאפשר להשתמש בו כדי למלא מראש את הטיוטה.

אפשר ליצור את הטיוטה כהודעה עצמאית חדשה או כתגובה להודעה קיימת. האפשרות הזו נשלטת על ידי המאפיין מסוג enum‏ ComposeEmailType שמוקצה ל-setComposeAction(). אתם יכולים ליצור טיוטות של תשובות כתשובה יחידה או כהודעה 'תשובה לכולם'.

טיוטות עצמאיות

טיוטה עצמאית מתחילה שרשור חדש ולא היא לא תשובה להודעה קיימת. אפשר ליצור טיוטה עצמאית באמצעות אחת מהפונקציות הבאות של שירות Gmail:

טיוטות של תשובות

טיוטת תשובה היא חלק משרשור הודעות קיים. טיוטות של תשובות יכולות להיות תשובות בודדות שנשלחות רק לשולח ההודעה, או טיוטות של 'תשובה לכולם' שנשלחות לכל מי שקיבל את ההודעה. אפשר ליצור טיוטה של תשובה באמצעות אחת מהפונקציות הבאות של שירות Gmail:

דוגמה

בקטע הקוד הבא מוסבר איך להקצות לחצן פעולה שיוצרת טיוטת תשובה.

  var composeAction = CardService.newAction()
      .setFunctionName('createReplyDraft');
  var composeButton = CardService.newTextButton()
      .setText('Compose Reply')
      .setComposeAction(
          composeAction,
          CardService.ComposedEmailType.REPLY_AS_DRAFT);

  // ...

  /**
   *  Creates a draft email (with an attachment and inline image)
   *  as a reply to an existing message.
   *  @param {Object} e An event object passed by the action.
   *  @return {ComposeActionResponse}
   */
  function createReplyDraft(e) {
    // Activate temporary Gmail scopes, in this case to allow
    // a reply to be drafted.
    var accessToken = e.gmail.accessToken;
    GmailApp.setCurrentMessageAccessToken(accessToken);

    // Creates a draft reply.
    var messageId = e.gmail.messageId;
    var message = GmailApp.getMessageById(messageId);
    var draft = message.createDraftReply('',
        {
            htmlBody: "Kitten! <img src='cid:kitten'/>",
            attachments: [
              UrlFetchApp.fetch('https://example.com/images/myDog.jpg')
                  .getBlob()
            ],
            inlineImages: {
              "kitten": UrlFetchApp.fetch('https://example.com/images/myKitten.jpg')
                           .getBlob()
            }
        }
    );

    // Return a built draft response. This causes Gmail to present a
    // compose window to the user, pre-filled with the content specified
    // above.
    return CardService.newComposeActionResponseBuilder()
        .setGmailDraft(draft).build();
  }