【问题标题】:Need Help creating GMAIL Pub/Sub Notification service to SpreadsheetApp (Google Appscript)需要帮助为 SpreadsheetApp (Google Appscript) 创建 GMAIL Pub/Sub 通知服务
【发布时间】:2017-03-24 23:49:53
【问题描述】:

我希望我不必重新发布这个问题,但我的老板将这个问题推到了最高优先级,我需要帮助来解决这个问题。我正在尝试使用 GAS 脚本从我的 GSuite 域上的地址中提取发布/订阅通知(目前,我正在测试我的)。基本上,我正在尝试完成所有这些材料中描述的内容:

1)Great Github Project from Spencer Easton(Instructional Video)

2) pubsub API for GMAIL

3) Notification Help

4) Real-time notifications

5)Endpoint documentation

我在 Google Drive 中的工作域上创建了参考 1 中记录的 GAS 项目,作为草稿发布到 chrome 商店,添加了 PUB/SUB API 和库,连接到具有 Gmail 服务帐户权限的 Pub/Sub Cloud 服务,并创建了必要的主题/订阅。我运行了enrollEmail 并取回了一个有效的history_Id,我可以使用API​​ 资源管理器查找它,并确认该文件可以写入Drive 上的指定电子表格。但是 doPost 方法永远不会像我希望的那样触发要在电子表格上写入的事件。有人可以帮我找出为什么此代码不适用于我的域吗?我没有明确的错误消息,因为我正在尝试运行 post 服务。

这是我的代码:

function doPost(e) {
  var ss = SpreadsheetApp.open(DriveApp.getFilesByName('Episode_Log').next()).getSheets()[0];
  ss.appendRow(['Push was recieved'+ new Date()]); 
  try{
 var message = JSON.parse(e.postData.getDataAsString()).message;
    var data = Utilities.newBlob(Utilities.base64Decode(message.data)).getDataAsString();
    ss.appendRow([new Date(), message.message_id, data]);
  }
  catch(e){ss.appendRow(['failure', e]); }
  
  return 200;
 }



function enrollEmail() {
  var EMAIL = Session.getActiveUser().toString();
  var watchRes = Gmail.newWatchRequest();
  watchRes.labelIds = ["INBOX"];
  watchRes.labelFilterAction = 'include';
  watchRes.topicName = 'projects/project-id-3596301251382091354/topics/eWarning';
  
  var response = Gmail.Users.watch(watchRes, EMAIL);
  
  Logger.log(response);
  
    var ss = SpreadsheetApp.open(DriveApp.getFilesByName('Episode_Log').next()).getSheets()[0];
 ss.appendRow(['Manual Test']); //This works 
}

function checkHistory(){
 var EMAIL = Session.getActiveUser().toString();
 Logger.log(Gmail.Users.History.list(EMAIL, {startHistoryId: '****'})); //works with a valid ID
}

非常感谢你们!

*PS 我没有在谷歌云账户上明确启用计费。有谁知道我是否需要为此功能付费?

【问题讨论】:

    标签: google-apps-script google-cloud-pubsub


    【解决方案1】:

    对于像我这样需要在 Google Appscript 中创建监控服务并需要快速操作的人,我想出了一个快速脚本来按特定标签检查电子邮件。使用 GmailApp,您也可以按主题查看邮件。下面是代码:

    var EMAILID = Session.getActiveUser().getEmail();
    function getMessages() {
      var expLabel = GmailApp.getUserLabelByName('Episode Expiration');
      var threads = expLabel.getThreads();
      
      for(var t = 0; t < threads.length; t++)
      {
        var messages = threads[t].getMessages();
        for(var m = 0; m < messages.length; m++)
        {
          var email = {from: messages[m].getFrom().toString(),
                       body: messages[m].getPlainBody().toString(),
                       subject: messages[m].getSubject().toString()};
          
          Logger.log(email.subject.indexOf('Expiration'));
          if(/*(email.from.toString().includes('info@mydomain.com'))&&(*/email.subject.indexOf('Expiration') > 0)//)
          {
            var startInd = email.body.indexOf('Start')+12;
            var endInd = email.body.indexOf('End')+12;
            var pasInd = email.body.indexOf('Number')+8;
            var qualInd = email.subject.indexOf('Q');
            
            var qualco = email.subject.substring(qualInd, qualInd+17);
            var warning = email.body.substring(email.body.indexOf('Episode Expires in'),email.body.indexOf('days')+4);
            var startDate = email.body.substring(startInd, startInd+12);
            var endDate = email.body.substring(endInd , endInd+11);
            var priorAuthNumber = email.body.substring(pasInd , pasInd+13);
            
            var ss = SpreadsheetApp.openById('mysheetID').getSheets()[0];
            ss.appendRow([qualco, priorAuthNumber, startDate, endDate, warning]);  
          }
          messages[m].moveToTrash();
        }
      }
    }

    此时,我实际上不再需要 PubSub 来运行,但如果开发人员想要记录对原始问题的响应,我将保持此线程处于打开状态。谢谢各位!

    【讨论】:

    • 我不知道您是否还检查旧问题,但是在这里的这个人上,您提到这是您的解决方法。此设置是否适用于应用程序打开时扫描?或者这是一个 GAS 版本的发布/订阅?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 1970-01-01
    • 2017-06-20
    • 2015-08-26
    • 2011-08-30
    • 1970-01-01
    • 2019-02-05
    相关资源
    最近更新 更多