בתוסף אפשר ליצור ווידג'טים שמקושרים לפעולות. אתם יכולים להשתמש בפעולה כדי לכתוב טיוטות חדשות של אימיילים, ואם רוצים, למלא אותן באמצעות מידע שהוזן בממשק המשתמש של התוסף או מידע מהודעה פתוחה. לדוגמה, אפשר להוסיף לחצן לממשק המשתמש של ההודעות בתוסף, שיצור תשובה להודעה שפתוחה כרגע וימלא אותה מראש במידע מהתוסף.
כשמופעלת פעולה שיוצרת הודעות, Gmail מפעיל פונקציית קריאה חוזרת כדי ליצור את הטיוטה ולהחזיר אותה. אחרי כן, Gmail מציג את הטיוטה בממשק המשתמש שלו בחלון כתיבת אימייל רגיל, והמשתמש יכול לערוך ולשלוח אותה לפי הצורך.
הגדרת פעולה ליצירת טיוטה של הודעה
כדי להגדיר ווידג'ט שיפעיל פעולה של יצירת טיוטה כשבוחרים אותו, צריך לבצע את הפעולות הבאות:
מוודאים שהמניפסט כולל את ההיקף
action.compose:https://www.googleapis.com/auth/gmail.addons.current.action.composeאפשר להשתמש בהיקף פחות מגביל, אבל רק אם ההיקף הזה נחוץ לחלוטין.
יוצרים אובייקט
Actionומשייכים אותו לפונקציית קריאה חוזרת שאתם מגדירים.קוראים לפונקציית הטיפול בווידג'ט של הווידג'ט
setComposeAction, מעבירים לה את האובייקטActionומציינים אתComposeEmailType.מטמיעים את פונקציית הקריאה החוזרת שמבצעת את פעולת בניית הטיוטה. הפונקציה הזו מקבלת אובייקט אירוע כארגומנט. פונקציית הקריאה החוזרת צריכה לבצע את הפעולות הבאות:
- יוצרים אובייקט
GmailDraft. - יוצרים אובייקט
ComposeActionResponseבאמצעות המחלקהComposeActionResponseBuilderוהאובייקטGmailDraft. - מחזירה את
ComposeActionResponseשנבנה.
- יוצרים אובייקט
אפשר למלא מראש את GmailDraft שיוצרים בפונקציית קריאה חוזרת עם נמענים, נושא, גוף ההודעה וקבצים מצורפים. כדי למלא את הטיוטה, הנתונים יכולים להגיע מכל מקור, אבל בדרך כלל הם נגזרים ממידע שסופק לתוסף עצמו, ממידע בהודעה הפתוחה או ממידע שנאסף משירות צד שלישי. אובייקט האירוע שמועבר לפונקציית הקריאה החוזרת מכיל את מזהה ההודעה הפתוחה ומידע נוסף על התוסף שאפשר להשתמש בו כדי למלא מראש את הטיוטה.
אפשר ליצור את הטיוטה כהודעה עצמאית חדשה או כתשובה להודעה קיימת. הערך הזה נקבע על ידי
ה-enum ComposeEmailType שמועבר אל
setComposeAction.
אתם יכולים ליצור טיוטות של תשובות כהודעות בודדות או כהודעות 'השב לכולם'.
טיוטות עצמאיות
טיוטה עצמאית מתחילה שרשור חדש ולא מהווה תשובה להודעה קיימת. אפשר ליצור טיוטה עצמאית באמצעות אחת מהפונקציות הבאות של שירות Gmail:
GmailApp.createDraft(recipient, subject, body)GmailApp.createDraft(recipient, subject, body, options)
טיוטות של תשובות
טיוטת תשובה היא חלק משרשור הודעות קיים. טיוטות של תשובות הן תשובות בודדות שנשלחות רק לשולח ההודעה, או טיוטות של תשובות לכולם שנשלחות לכל מי שקיבל את ההודעה. אפשר ליצור טיוטה של תשובה באמצעות אחת מהפונקציות הבאות של שירות Gmail:
GmailMessage.createDraftReply(body)GmailMessage.createDraftReply(body, options)GmailMessage.createDraftReplyAll(body)GmailMessage.createDraftReplyAll(body, options)GmailThread.createDraftReply(body)GmailThread.createDraftReply(body, options)GmailThread.createDraftReplyAll(body)GmailThread.createDraftReplyAll(body, options)
דוגמה
בקטע הקוד הבא מוצג איך להקצות לחצן לפעולה שיוצרת טיוטה של תשובה.
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 previously
// specified.
return CardService.newComposeActionResponseBuilder()
.setGmailDraft(draft).build();
}