【问题标题】:How get textinput value on gmail addon如何在gmail插件上获取文本输入值
【发布时间】:2019-06-21 12:46:52
【问题描述】:

我使用表单创建了一个 Gmail 插件。 在这种形式中,我有输入,但在我的脚本中,我找不到如何检索变量中输入的值。 当您单击电子邮件并使用邮件的元数据和联系信息填写表单输入时,以下代码会在 Gmail 收件箱中打开一个侧边栏。如果联系人不存在,用户可以通过输入发件人的姓名和名字来创建它(从电子邮件中检索电子邮件地址)。 但是我不知道如何恢复用户输入的信息。

这是我的脚本:

function buildAddOn(e) {
  // Activer les extensions complémentaires de Gmail
  var accessToken = e.messageMetadata.accessToken;
  GmailApp.setCurrentMessageAccessToken(accessToken);
  
  var messageId = e.messageMetadata.messageId;
  var message = GmailApp.getMessageById(messageId);
  var emailAddress = recupEmail(message.getFrom(), '<', '>'); // Dans le message, l'adresse mail de l'expéditeur se trouve entre les balises '<' et '>'
  var objet = message.getSubject();

  var contact = ContactsApp.getContact(emailAddress);
  var contactNom;
  var contactPrenom;
  
  if(contact != null){
    contactPrenom = contact.getFamilyName();
    contactNom = contact.getFullName().replace(contactPrenom, '');
  }else{
    contactNom = '';
    contactPrenom = '';
  }// if-else
  
  var head = 'Expediteur';
  var labelNom = 'Nom';
  var labelPrenom = 'Prenom';
  var labelEmail = 'Adresse e-mail';
  var labelObjet = 'Objet';
  var labelMessage = 'Message';
  
  var action = CardService.newAction().setFunctionName('creatContact');
  var section = CardService.newCardSection();
  section.setHeader(head);
  section.addWidget(CardService.newTextInput().setFieldName('nom').setTitle(labelNom).setValue(contactPrenom));
  section.addWidget(CardService.newTextInput().setFieldName('prenom').setTitle(labelPrenom).setValue(contactNom));
  if(contact == null){
    section.addWidget(CardService.newTextButton().setText('Ajouter au contacts').setOnClickAction(action));
  }
  section.addWidget(CardService.newTextInput().setFieldName('mail').setTitle(labelEmail).setValue(emailAddress));
  section.addWidget(CardService.newTextInput().setFieldName('objet').setTitle(labelObjet).setValue(objet));

  var card = CardService.newCardBuilder()
  .addSection(section)
  .build();
  
  return [card];
}

function recupEmail(from, debut, fin){
  var result = from.split(debut)[1].split(fin)[0];
  return result;
}

function creatContact(){
  /*
  var givenName = ??;
  var familyName = ??;
  var email = ??;
  */
  ContactsApp.createContact(givenName, familyName, email)
}

提前谢谢你。 对不起我的英语不好。

【问题讨论】:

标签: javascript google-apps-script gmail-api google-contacts-api gmail-addons


【解决方案1】:

我没有广泛使用 Gmail 插件,但这里有一部分用于将笔记保存在电子表格中,另一个 Web 应用程序将其用作个人助理。它允许用户选择一种笔记类型,其中有很多,然后输入 cmets 并将其加载到电子表格中。

function buildAddOn(e) {
  var accessToken = e.messageMetadata.accessToken;
  GmailApp.setCurrentMessageAccessToken(accessToken);
  var messageId = e.messageMetadata.messageId;
  var cards = [];
  cards.push(buildGetNotesTypesSelectionInput());
  return cards;
}

function buildGetNotesTypesSelectionInput(){
  var card=CardService.newCardBuilder();
  card.setHeader(CardService.newCardHeader().setTitle('Don\'t Forget - Notes'));
  var section=CardService.newCardSection().setHeader('Notes');
  var typeSelect=CardService.newSelectionInput()
  .setType(CardService.SelectionInputType.DROPDOWN)
  .setTitle('Select Note Type')
  .setFieldName('Note_Type');
  typeSelect.addItem('', '', true);
  var optsA=getNoteTypes();
  Logger.log('\nselect1 optsA:\n');
  for(var i=0;i<optsA.length;i++){
    typeSelect.addItem(optsA[i], optsA[i],false);
    Logger.log('\noptsA[%s]=%s',i,optsA[i]);
  }
  //typeSelect.setOnChangeAction(CardService.newAction().setFunctionName('select1Change'));
  section.addWidget(typeSelect);
  var commentText=CardService.newTextInput()
  .setFieldName('Comments')
  .setMultiline(true)
  .setTitle('Comments');
  section.addWidget(commentText);
  var action=CardService.newAction().setFunctionName('saveNote');
  var saveButton=CardService.newTextButton()
  .setText('Save')
  .setOnClickAction(action);
  section.addWidget(saveButton);
  card.addSection(section);
  return card.build();
}

function saveNote(e){
  var row=[];
  var ts=Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "E MMM dd,yyyy HH:mm:ss");
  row.push(ts,e.formInput.Note_Type,e.formInput.Comments,Session.getActiveUser().getEmail());
  var ss=SpreadsheetApp.openById(gDefault.DontForgetId);
  var sh=ss.getSheetByName('Notes');
  sh.appendRow(row);
  return CardService.newCardBuilder()
  .setHeader(CardService.newCardHeader().setTitle('Note Saved'))
  .addSection(CardService.newCardSection().addWidget(CardService.newTextParagraph().setText(Utilities.formatString('TimeStamp: %s\nNote Type: %s\nNote: %s\nEmail: %s\n', ts,e.formInput.Note_Type,e.formInput.Comments,Session.getActiveUser().getEmail()))))
  .build();
}


function getNoteTypes(){
  var ss=SpreadsheetApp.openById(gDefault.DontForgetId);
  var sh=ss.getSheetByName('Options');
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  var oA=[];
  for(var i=1;i<vA.length;i++){
    oA.push(vA[i][0]);
  }
  return oA;
}

我知道这不是您要求的确切答案,但希望它能帮助您深入了解您的问题。

【讨论】:

    【解决方案2】:

    将您的联系函数签名更改为

    createContact(e) { 
    .. 
    }
    

    e 参数将填充您需要的所有好东西。消息元数据、表单输入等...

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-12
    • 2012-08-02
    • 2015-06-17
    • 2014-09-27
    • 2018-06-23
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    相关资源
    最近更新 更多