需要帮助为 SpreadsheetApp 创建 GMAIL Pub/Sub 通知服务(Google Apps 脚本)

2024-01-21

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

1)来自 Spencer Easton 的伟大的 Github 项目 https://github.com/Spencer-Easton/Apps-Script-Gmail-Push-Notifications-v2

2) GMAIL 的 pubsub API https://stackoverflow.com/questions/40099785/generic3-push-into-an-endpoint-url-pubsub-api-for-gmail

3) 通知帮助 https://stackoverflow.com/questions/42017690/i-want-to-get-new-gmail-notify-by-google-cloud-pub-sub-api

4) 实时通知 https://stackoverflow.com/questions/30733806/how-to-real-time-monitor-the-emails/30735808#30735808

5)端点文档 https://stackoverflow.com/questions/30584533/unable-to-create-subscription-with-a-push-end-point-on-app-script-script-google/30598935#30598935

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

这是我的代码:

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 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('[email protected] /cdn-cgi/l/email-protection'))&&(*/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 运行,但如果开发人员想要记录对原始问题的响应,我将保持此线程打开。多谢你们!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

需要帮助为 SpreadsheetApp 创建 GMAIL Pub/Sub 通知服务(Google Apps 脚本) 的相关文章

随机推荐

  • 自定义 uitableViewCell 内的 NSTimer

    我正在从 viewController 激活自定义单元类中的函数 自定义单元格类如下所示 import UIKit class TableViewCell UITableViewCell var counter 10 class func
  • 如何对非 ASCII 字符使用 tolower 函数

    我正在尝试对非 ASCII 字符应用较低的函数 以下代码在Linux Ubuntu 环境中不起作用 但在Windows中有效 int main std string data std transform data begin data en
  • Java:来自 class.getResource( ... ) 的 NullPointerException

    我正在编写一个小型应用程序 当我尝试创建 ImageIcon 时 我总是遇到异常 异常是由这行代码引起的 prayerLevel setIcon new ImageIcon getClass getResource icons icon p
  • 使用原始文件的共享外部包?

    我们有一些项目依赖共享类型进行通信 团队决定使用这些类型的共享包 并希望使用协议缓冲区来实现此实现 如果重要的话 语言是 Go 并且所有这些项目都不是公开的 我们如何使用项目中未定义的协议缓冲区类型 我似乎无法找到一种在应用程序之间共享完全
  • 在 C 扩展中定义 Python 枚举 - 我这样做对吗?

    我正在开发一个 Python C 扩展 我想公开一个完全在 C 中定义的自定义枚举 如 继承自 enum Enum 的类 事实证明这不是一个简单的任务 并且使用常规的继承机制 tp base不起作用 很可能是由于 Enum 的元类没有被引入
  • 在 C 中更改 .bin 文件的数据

    我有很多数据以 bin 格式存储为结构序列 我希望能够随机读取任何结构并在 C 中修改它 我正在尝试使用以下代码 但它不起作用 有人可以帮我解决吗 另外 是否可以从中间的文件中删除中间结构 代码如下 include
  • 从静态域提供 CSS

    我想从静态无 cookie 域提供我的 CSS 和图像 现在我的问题是如何指向 css 文件中的图像 我不想在 css 文件中对我的域进行硬编程 例如 http static com image png http static com im
  • 在搅拌机 2.76 中将装备重量从一个网格转移到另一个网格

    我最近开始使用搅拌机来创建我自己的游戏模型等 我创建了一个模型 对其进行了装备 单独创建了衣服 现在我想将这些衣服添加到我的模型中 以便它随装备移动而不会刺穿皮肤 因此 有很多使用重量转移工具的解决方案 但我似乎无法在 Blender 2
  • 如果设计师可以使用@font-face,为什么还要使用 sIFR?

    如果设计师可以使用 font face 为什么还要使用 sIFR font face 有什么问题吗 font face font family Hacen Tehran eot src url Hacen Tehran eot font f
  • 查询执行速度非常慢,有什么办法可以进一步改进它吗?

    我有以下查询 并且由于很多SUM函数调用 我的查询运行太慢 我的数据库中有很多记录 我想为每条记录获取今年和去年 过去 30 天 过去 90 天和过去 365 天 的报告 SELECT b id as ID d Title as Title
  • 如何在 R 中将字符串转换为日期

    有什么方法可以将下面的字符串转换为标准 R 日期类对象吗 Date String 19th January 2020 任何指针表示赞赏 Lubridate 可以处理它 gt Date String lt 19th January 2020
  • 在 mysql 查询中列出 null 和 not null

    假设我有桌子 NAME ID REF foo1 1 NULL foo2 2 1234 foo2 3 567 foo1 4 NULL foo3 5 89 我想在一个查询中计算 NULL 和 NOT NULL 的所有实例 这样我就可以说 NAM
  • Python 如何从 .egg 文件导入模块?

    我怎样才能打开 init pyc here gt gt gt import stompservice
  • 如何使用 php Excel 生成漂亮的 PDF?

    我正在使用最新的 PHPExcel 版本 我认为是 7 7 我能够生成我的Excel 我必须使用 tcpdf 生成 pdf 版本 这里别无选择 但结果是丑陋且过大 请参阅 2012 000012 的巨大字体大小 在 Excel 中为 11
  • PHP next() 不工作

    我正在尝试使用 PHP 制作一个画廊 图像加载正确 但下一个和上一个按钮似乎不起作用 单击图片 1 下的 下一步 您将看到图片 3 但是单击 图片 3 将您带到图片 2 这是正确的 我应该如何更改我的代码以使两者都按顺序进行
  • 在 Play 2.4 with DI 中,如何在“Secured”特征中使用服务类?

    这是一个Play 文档中的授权示例 https www playframework com documentation 2 0 4 ScalaSecurity Authorization 版本 2 0 4 我试图找到此文档的更新版本 但找不
  • 在 IntelliJ 中使用 Scala 工作表很困难

    我正在学习 Scala 函数式编程原理课程 但我在 IntelliJ 中使用 Scala Worksheets 进行快速测试时遇到了很多问题 例如 我建立了一个新的 Scala 项目 在其中创建了一个名为的包对象lecture5 它在文件中
  • 在 R 中下载 Kaggle zip 文件

    我正在尝试直接从 R 代码本身的 Kaggle 空间下载 zip 文件 不幸的是 它的效果并不好 这是发生的事情 对于旧金山犯罪数据集 请访问https www kaggle com c sf crime data https www ka
  • Xcode pbxstrings 文件的用途是什么?

    我有一个 Xcode 项目 需要更改它构建的产品的名称 我仔细地浏览了项目文件 并认为我已经做出了所有可能的更改 最后一步是 grep 项目文件夹中的所有文件以查找旧名称的出现 结果很干净 但是在构建之后 grep 发现一个文件包含多次出现
  • 需要帮助为 SpreadsheetApp 创建 GMAIL Pub/Sub 通知服务(Google Apps 脚本)

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