Google App脚本/ Gmail插件:如何在Gmail上显示带有文本和按钮的窗口?

时间:2019-10-03 07:43:45

标签: google-app-engine google-apps-script gmail-api google-apps gmail-addons

我制作了一个Google App脚本来自动回复我的电子邮件(一种聪明的电子邮件机器人助手)。不过,我想在发送之前检查机器人的每个答案。

因此,我希望在Gmail上有一个窗口,其中显示用户电子邮件和机器人应答,以及两个按钮“发送”“跳过”。这样,我可以检查机器人准备的答案,然后发送或跳过它(或可能对其进行编辑)。

如何通过Google App脚本在GMail上显示包含文本,editText和按钮的窗口?

谢谢!

致谢。

2 个答案:

答案 0 :(得分:2)

您必须检查Gmail加载项:https://developers.google.com/gsuite/add-ons/gmail

首先,您可以从Google检查代码实验室,它会为您提供在5分钟内设置第一个附加组件的代码,然后您可以根据需要进行调整:https://codelabs.developers.google.com/codelabs/apps-script-intro/

史蒂芬(Stéphane)

答案 1 :(得分:1)

一个简单的解决方案是让机器人将电子邮件另存为“草稿”。这样,您可以在手动发送之前轻松检查电子邮件。

如果您仍然对创建gmail附件(可以显示原始电子邮件,回复以及用于发送或编辑的按钮)感兴趣,则可能对构建card-based interfaces感兴趣。这些将显示在您的Gmail Web客户端的右侧,并且如下所示:

Gmail addon sample

用于显示这种界面的代码(带有两个按钮,一个自动发送电子邮件,另一个打开其上的编辑器)如下:

function buildAddOn(e) {
  // Activate temporary Gmail add-on scopes.
  var accessToken = e.messageMetadata.accessToken;
  GmailApp.setCurrentMessageAccessToken(accessToken);

  return buildDraftCard(getNextDraft());
}

function buildDraftCard(draft) {
  if (!draft) {
    var header = CardService.newCardHeader().setTitle('Nothing to see here');
    return CardService.newCardBuilder().setHeader(header).build();
  } else {
    var header = CardService.newCardHeader()
      .setTitle(draft.getMessage().getSubject());
    var section = CardService.newCardSection();
    var messageViewer = CardService.newTextParagraph()
      .setText(draft.getMessage().getBody());
    var sendButton = CardService.newTextButton()
      .setText('Send')
      .setOnClickAction(CardService.newAction()
                        .setFunctionName('sendMessage')
                        .setParameters({'draftId': draft.getId()})
                       );
    var editButton = CardService.newTextButton()
      .setText('Edit')
      .setOnClickAction(CardService.newAction()
                        .setFunctionName('editMessage')
                        .setParameters({'draftId': draft.getId()})
                       );
    var buttonSet = CardService.newButtonSet()
      .addButton(sendButton)
      .addButton(editButton);

    section.addWidget(messageViewer);
    section.addWidget(buttonSet)

    return CardService.newCardBuilder()
    .setHeader(header)
    .addSection(section)
    .build();
  }
}

function sendMessage(e) {
  GmailApp.getDraft(e.parameters.draftId).send();
  return CardService.newActionResponseBuilder().setNavigation(
    CardService.newNavigation()
    .popToRoot()
    .updateCard(buildDraftCard(getNextDraft()))
  ).build(); 
}

function editMessage(e) {
  var messageId = GmailApp.getDraft(e.parameters.draftId).getMessageId();
  var link = "https://mail.google.com/mail/#all/" + messageId;
  return CardService.newActionResponseBuilder().setOpenLink(
    CardService.newOpenLink()
    .setUrl(link)
    .setOnClose(CardService.OnClose.RELOAD_ADD_ON)
  ).build();
}

function getNextDraft() {
  return GmailApp.getDrafts().pop()
}

appsscript.json配置如下:

{
  "oauthScopes": [ 
    "https://www.googleapis.com/auth/gmail.addons.execute",        
    "https://mail.google.com/"
  ],
  "gmail": {
    "name": "Gmail Add-on Draft Autoresponse UI",
    "logoUrl": "https://www.gstatic.com/images/icons/material/system/1x/label_googblue_24dp.png",
    "contextualTriggers": [{
      "unconditional": {
      },
      "onTriggerFunction": "buildAddOn"
    }],
    "openLinkUrlPrefixes": [
      "https://mail.google.com/"
    ],
    "primaryColor": "#4285F4",
    "secondaryColor": "#4285F4"
  }
}

但是请记住,目前这些接口仍然有一些限制。当邮件打开时,它们只能显示 ,电子邮件的HTML格式可能看起来有些偏离。您可以按照this link找到有关如何测试和运行上述代码的更多信息。