Как вызвать функцию в сценарии на стороне сервера: Google App Script, когда я нажимаю гиперссылку в теле Gmail (на стороне клиента)? - PullRequest
0 голосов
/ 02 мая 2019
  1. Я отправляю запрос на утверждение в Gmail, отправляя гиперссылку в виде типа тела HTML. - Успешно
  2. Вместо того, чтобы вызывать страницу, я ссылался на ссылку для вызова функции внутри скрипта на стороне сервера. -Successful
  3. Вызывает функцию автоматически, как только электронная почта достигает получателя. - Неудача. Предположительно, когда получатель нажимает гиперссылку «Утвердить», запускается только та функция, которая должна быть запущена.

  4. Я создал index.html, использовал HTMLService.createoutputfromfile и другие функции HTMLService, но это не удалось. Я не знаю, как мне установить связь от клиентской стороны к серверному сценарию; из Gmail в Google App Script.

Google App Script

function sendEmailToApproverOne(emailAdd, action, trackSheet,rowNumber){
  
    var form_Name = FormApp.getActiveForm().getTitle();//Get the Name of this specific Form
  
    var btnAction = "";//---gets the button name(Approve/Acknowledge) when the recipient receives the email ----
    if(action ==  "Approval"){ 
        btnAction = "Approve";
    }
    else if(action ==  "Acknowledgement"){
        btnAction = "Acknowledge";
    }
  
    var message = getMessage(btnAction,trackSheet,rowNumber);//----calls a function to create the email body----
    GmailApp.sendEmail(emailAdd, form_Name +': For your perusal to '+ btnAction , '', {htmlBody:message});
    
}

function getMessage(buttonLabel,trackSheet,rowNumber) {
  var htmlOutput = HtmlService.createHtmlOutputFromFile('emailBody');
  
  var message = htmlOutput.getContent()
  message = message.replace("##LINK##", pressedApprove(trackSheet,rowNumber));
  message = message.replace('##BUTTONLABEL##',buttonLabel);
  
  return message;
}

//This function: pressedApprove() is triggered when the Approver presses approve in Email button
function pressedApprove(trackSheet,rowNumber){
  
  Logger.log("This button is clicked");
  
  //====some code to do with tracksheet and rownumber. 
}

<a href="##LINK##" id="myLink" >##BUTTONLABEL##</a>
           

Ожидается, что функция увидит: selectedApprove () срабатывает только при нажатии на гиперссылку внутри Gmail. Не ожидая автоматических звонков каждый раз, когда я запускаю код для отправки Gmail.

Как установить ограничение, которое функция срабатывает только при нажатии гиперссылки в теле Gmail.

1 Ответ

0 голосов
/ 02 мая 2019
  • Опубликуйте свое веб-приложение:

    • Беги как "я"
    • Доступ: любой, вкл. Anonymous
  • Используйте параметры запроса, чтобы открыть ваше веб-приложение

message = message.replace(
  '##LINK##',
  ScriptApp.getService().getUrl() +
    encodeURI(
      '?func=pressedApprove&trackSheet=' +
        trackSheet.getId() + //use a unique id string of sheet
        '&rowNumber=' +
        rowNumber
    )
);
  • Используйте doGet(), чтобы получить гиперссылку и запустить требуемую функцию:
function doGet(e){
  var params = e.parameter;
  if(params.func === 'pressedApprove'){
    return pressedApprove(params.trackSheet, params.rowNumber);
  } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...