In einem Add-on können Sie Widgets mit verknüpften Aktionen erstellen. Mit einer Aktion können Sie neue E‑Mail-Entwürfe erstellen und sie optional mit Informationen füllen, die in die Add-on-UI eingegeben wurden, oder mit Informationen aus einer geöffneten Nachricht. Sie können beispielsweise eine Schaltfläche in der Nachrichten-UI Ihres Add-ons einfügen, mit der eine Antwort auf die aktuell geöffnete Nachricht erstellt wird, die mit Informationen aus dem Add-on vorausgefüllt ist.
Wenn eine Aktion ausgelöst wird, die Nachrichten erstellt, führt Gmail eine Callback-Funktion aus, um den Entwurf zu erstellen und zurückzugeben. Gmail zeigt diesen Entwurf dann in der UI in einem Standardfenster zum Verfassen von E‑Mails an, das der Nutzer nach Bedarf bearbeiten und senden kann.
Aktion zum Erstellen eines Entwurfs konfigurieren
Wenn Sie ein Widget so konfigurieren möchten, dass beim Auswählen eine Aktion zum Erstellen eines Entwurfs gestartet wird, müssen Sie Folgendes tun:
Achten Sie darauf, dass Ihr Manifest den
action.composeBereich enthält:https://www.googleapis.com/auth/gmail.addons.current.action.composeSie können stattdessen einen permissiveren Bereich verwenden, sollten dies aber nur tun, wenn dieser Bereich unbedingt erforderlich ist.
Erstellen Sie ein
ActionObjekt und verknüpfen Sie es mit einer Callback-Funktion die Sie definieren.Rufen Sie die Widget-Handler-Funktion
setComposeActiondes Widgets auf, geben Sie dasActionObjekt an und legen Sie denComposeEmailTypefest.Implementieren Sie die Callback-Funktion, die die Aktion zum Erstellen des Entwurfs ausführt. Diese Funktion erhält ein Ereignisobjekt als Argument. Die Callback-Funktion muss Folgendes tun:
- Erstellen Sie ein
GmailDraftObjekt. - Erstellen Sie ein
ComposeActionResponseObjekt mit derComposeActionResponseBuilderKlasse und demGmailDraftObjekt. - Geben Sie das erstellte
ComposeActionResponse-Objekt zurück.
- Erstellen Sie ein
Sie können den GmailDraft
in der Callback-Funktion erstellten
mit Empfängern, einem Betreff, einem Nachrichtentext und Anhängen vorausfüllen. Die Daten können aus einer beliebigen Quelle stammen, in der Regel aber aus Informationen, die dem Add-on selbst zur Verfügung gestellt werden, aus Informationen in der geöffneten Nachricht oder aus Informationen, die von einem Drittanbieterdienst erfasst wurden. Das
Ereignisobjekt, das an die Callback-
Funktion übergeben wird, enthält die ID der geöffneten Nachricht und andere Add-on-
Informationen, mit denen Sie den Entwurf vorausfüllen können.
Sie können den Entwurf als neue eigenständige Nachricht oder als Antwort auf eine vorhandene Nachricht erstellen. Dies wird durch die
ComposeEmailType
-Enum gesteuert, die an die
setComposeAction übergeben wird.
Sie können Entwürfe für Antworten als einzelne Antworten oder als „Allen antworten“-Nachrichten erstellen.
Eigenständige Entwürfe
Ein eigenständiger Entwurf startet einen neuen Thread und ist keine Antwort auf eine vorhandene Nachricht. Sie können einen eigenständigen Entwurf mit einer der folgenden Gmail-Dienst Funktionen erstellen:
GmailApp.createDraft(recipient, subject, body)GmailApp.createDraft(recipient, subject, body, options)
Entwürfe für Antworten
Ein Entwurf für eine Antwort ist Teil eines vorhandenen Nachrichtenthreads. Entwürfe für Antworten sind entweder einzelne Antworten, die nur an den Absender einer Nachricht gesendet werden, oder „Allen antworten“-Entwürfe, die an alle Empfänger dieser Nachricht gesendet werden. Sie können einen Entwurf für eine Antwort mit einer der folgenden Gmail-Dienst funktionen erstellen:
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)
Beispiel
Das folgende Code-Snippet zeigt, wie Sie einer Schaltfläche eine Aktion zuweisen, die einen Entwurf für eine Antwort erstellt.
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();
}