En un complemento de Google Workspace, puedes crear widgets que tengan acciones vinculadas. Puedes usar una acción para redactar nuevos borradores de correo electrónico y, de forma opcional, completarlos con información que se ingresa en la IU del complemento o información de un mensaje abierto. Por ejemplo, puedes tener un botón en la IU de mensajes de tu complemento que cree una respuesta al mensaje abierto actual prepropagado con información del complemento.
Cuando se activa una acción que compila mensajes, Gmail ejecuta una función de devolución de llamada para compilar y mostrar el borrador. Luego, Gmail muestra ese borrador en su IU en una ventana de redacción de correo electrónico estándar, que el usuario puede editar y enviar según sea necesario.
Cómo configurar una acción para compilar un borrador de mensaje
Si deseas configurar un widget para que inicie una acción de compilación en borrador cuando se seleccione, debes hacer lo siguiente:
Asegúrate de que tu manifiesto incluya el alcance de
action.compose
:https://www.googleapis.com/auth/gmail.addons.current.action.compose
En su lugar, puedes usar un alcance más permisivo, pero solo debes hacerlo si ese alcance es absolutamente necesario.
Crea un objeto
Action
y asócialo con una función de devolución de llamada que definas.Llama a la función del controlador de widgets
setComposeAction()
del widget, y proporciona el objetoAction
y especifica elComposeEmailType
.Implementa la función de devolución de llamada que ejecuta la acción de compilación de borrador. A esta función se le asigna un objeto de evento como argumento. La función de devolución de llamada debe hacer lo siguiente:
- Crea un objeto
GmailDraft
. - Compila un objeto
ComposeActionResponse
con las clasesComposeActionResponseBuilder
yGmailDraft
. - Muestra el
ComposeActionResponse
compilado.
- Crea un objeto
Puedes precompletar el GmailDraft
que creas en la función de devolución de llamada con destinatarios, un asunto, un cuerpo de mensaje y archivos adjuntos. Para completar el borrador, los datos pueden provenir de cualquier fuente, pero, por lo general, derivan de información proporcionada al complemento, de la información en el mensaje abierto o de la información recopilada de un servicio de terceros. El objeto de evento que se pasa a la función de devolución de llamada contiene el ID del mensaje abierto y otros datos del complemento que puedes usar para precompletar el borrador.
Puedes crear el borrador como un mensaje independiente nuevo o como una respuesta a un mensaje existente. Esto se controla mediante el tipo enum ComposeEmailType
asignado a setComposeAction()
.
Puedes crear borradores de respuestas como respuestas individuales o mensajes de "Responder a todos".
Borradores independientes
Un borrador independiente inicia una conversación nueva y no es una respuesta a ningún mensaje existente. Puedes crear un borrador independiente con una de las siguientes funciones del servicio de Gmail:
GmailApp.createDraft(recipient, subject, body)
GmailApp.createDraft(recipient, subject, body, options)
Borradores de respuestas
Un borrador de respuesta es parte de una conversación de mensaje existente. Los borradores de respuestas son respuestas individuales que solo se envían al remitente de un mensaje o borradores de respuesta que se envían a todos los que recibieron el mensaje. Puedes crear un borrador de respuesta con una de estas funciones del servicio de 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)
Ejemplo
En el siguiente fragmento de código, se muestra cómo asignar una acción que compile un borrador de respuesta para un botón.
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();
}