使用谷歌邮件的谷歌脚本,我正在尝试使用API将带有某些标签的新电子邮件上传到我们的CRM。我无法检查邮件是否已上载,因此必须在邮箱中将标签应用于以前处理过的邮件。
不幸的是,谷歌脚本只允许您在线程级别添加或检查标签。由于线程在上次上传到CRM后可能会有新消息进入,因此我不知道线程的哪些消息实际上已经被处理。
下面的代码包含我想到的内容,函数getLabels不适用于消息,因此它不起作用。
希望有人有一个聪明的解决方案!
谢谢
//execute main sequence
function collecttobesend() {
var labeladd = GmailApp.getUserLabelByName("add to CRM");
var labeladded = GmailApp.getUserLabelByName("added to CRM");
//var threads = label.getThreads();
var threads = GmailApp.search('label:added-to-crm -label:add-to-crm')
for (var i = 0; i < threads.length; i++) {
thread = threads[i];
// get all messages in a given thread
var messages = thread.getMessages();
// iterate over each message
for (var j = 0; j < messages.length; j++) {
message = messages[j];
var labels = message.getLabels();
var messagehaslabeladded = false;
for (var k = 0; k < labels.length; k++) {
if (labels[k] = labeladded) {
messagehaslabeladded = true;
}
}
// if message has not been added yet
if (messagehaslabeladded = false) {
var success = false;
//add to CRM through API
success = true;
//if succesfull add label
if (success = true) {
message.addLabel(labeladded);
}
}
}
}
棘手。
在我看来,你的问题是双重的。
1) 如果线程在应用"添加到 CRM"标签后收到响应,那么该新消息甚至不会触发是否需要添加的检查,因为它永远不会应用"添加到 CRM"。
2)它将无法区分线程中已添加的消息与仍需要添加的消息之间的区别。
这不是一个特别优雅的解决方案,但关于 1),有一个繁琐但可行的解决方案。您可以使用 .getInboxThreads() 设置脚本来检查收件箱中的邮件,以检查以下内容:
// if message might have been updated
if (messageHasLabelAdded == true && messageIsInInbox == True) {
//Iterate through again to index the new messages
}
每隔几分钟运行一次应该会捕获线程中的任何新消息,但它在很大程度上依赖于用户在完成后"存档"消息。
2)您是否能够使用CRM获取/发布元数据?如果是这样,您始终可以使用 getId() 获取消息 ID。这是一个唯一的属性,因此,如果它可以与CRM中的消息相关联,则只需将ID与CRM中的ID进行比较,并检查是否已上传具有该ID的邮件即可。
一旦您将数千条消息上传到CRM,这可能会变得棘手,但这可能是您需要的开始。
我实际上找到了解决方案。正如Le Stephane评论的那样,谷歌笔记指出标签被添加到消息中,这是真的。但是,在线程级别一次向线程中的所有消息添加和删除标签。
因此,解决方案是有两个标签:"添加"和"添加"。运行第二个脚本,从线程中删除"to-add"标签(以及线程中具有标签的所有消息),并立即再次添加标签(到线程中的所有消息)。
这具有这样的效果:线程中的所有消息(无论新旧)都具有"to-add"标签,并且只有旧消息具有"已添加"标签。现在,您可以搜索标签为"待添加"的邮件,但不能搜索标签为"已添加"的邮件。在 api 将这些消息添加到 CRM 后,您将标签"已添加"添加到线程中,从而将线程中的所有消息添加到线程中。
脚本运行后传入的消息在线程中带有这些标签,但没有将标签附加到消息本身,因此上述两步方法有效。
后对味精进行了"加星标"。"已加星标"仅适用于邮件。