gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 17:52:59 25 4
gpt4 key购买 nike

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

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 方法永远不会像我希望的那样触发在电子表格上写入的事件。有人可以帮我找出为什么这段代码在我的域上不起作用吗?我没有明确的错误消息,因为我正在尝试运行邮寄服务。

这是我的代码:

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('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,但如果开发人员想要记录对原始问题的响应,我将让这个线程保持打开状态。谢谢,伙计们!

关于google-apps-script - 需要帮助为 SpreadsheetApp(Google Apps 脚本)创建 GMAIL Pub/Sub 通知服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43010915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com