将CardService与HtmlService一起使用

时间:2018-05-15 18:00:43

标签: google-apps-script google-apps-script-addon

Google Add-Ons已转向使用CardService小部件。我正在尝试创建一个下拉菜单,但不推荐使用ListBox类。文档将我转发给HTML服务,但是没有关于如何在CardServices上下文中使用它们的文档。这是我的代码:

GetContextualAddOn.gs

function createReply(e) {
  var accessToken = e.messageMetadata.accessToken;
    GmailApp.setCurrentMessageAccessToken(accessToken);

  var messageId = e.messageMetadata.messageId;
    var message = GmailApp.getMessageById(messageId);
    var draft = message.createDraftReply("Got your message");

    return CardService.newComposeActionResponseBuilder()
        .setGmailDraft(draft).build();
}



function getContextualAddOn() {
  var card = CardService.newCardBuilder();
  card.setHeader(CardService.newCardHeader().setTitle('Respond to Email'));
  var section = CardService.newCardSection();
  var action = CardService.newAction().setFunctionName('createReply');

  function doGet() {
    return HtmlService.createHtmlOutputFromFile('dropdown');
  }

  section.addWidget(CardService
                    .newTextButton()
                    .setText('Respond')
                    .setComposeAction(action, CardService.ComposedEmailType.REPLY_AS_DRAFT));

  card.addSection(section);

  return [card.build()];
}

上面显示的doGet()方法正在尝试访问我创建的dropdown.html文件:

**dropdown.html**
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <p>test</p>
  </body>
</html>

如何将HTML集成到我当前的card.build中?我是否应该采用不同的方式,如果是这样,有人可以提供代码示例吗?

2 个答案:

答案 0 :(得分:0)

CardService服务只能与Gmail附加组件一起使用。它们不适用于使用Apps脚本构建的Google文档插件或网络应用。

答案 1 :(得分:0)

在我看来,您还无法在Gmail附加组件中使用自定义HTML。您可以使用HTML服务在Google文档/表格插件中使用它们。

在Gmail加载项中,您可以使用卡片服务中的正确选择输入来创建下拉字段。 官方文件:https://developers.google.com/apps-script/reference/card-service/selection-input

将选择输入类型用作 CardService.SelectionInputType.DROPDOWN

以下是一个代码示例,可帮助您入门:

var card = CardService.newCardBuilder();
card.setHeader(CardService.newCardHeader().setTitle('Dropdown Sample Card'));
var dropdownSection = CardService.newCardSection();
var dropdown = CardService.newSelectionInput()
   .setType(CardService.SelectionInputType.DROPDOWN)
   .setTitle("A Dropdown. Only a single selection is allowed.")
   .setFieldName("dropdown_field")
   .addItem("option one title", "option_one_value", true)
   .addItem("option  two title", "option_two_value", false)
   .addItem("option  three title", "option_three_value", false);

dropdownSection.addWidget(dropdown);
card.addSection(dropdownSection);
return [card.build()];