2014-10-19 57 views
0

我正在尝试使用Gmail API的节点库为自定义标识创建一个标签。该API提供了设置自己的ID的请求参数,但是当我尝试创建标签,我得到错误:通过Google Gmail API创建带有标识的标签

{ 
"error": { 
    "errors": [ 
    { 
    "domain": "global", 
    "reason": "invalidArgument", 
    "message": "Invalid request" 
    } 
    ], 
    "code": 400, 
    "message": "Invalid request" 
} 
} 

标签是没有问题时创建的,我不给一个id。然而,为了我的目的,我需要有一套标准的标签ID。任何人都知道这里发生了什么,或者它只是api的错误/错误? 您可以尝试创建自己的标签,为您的帐户,看看更多的什么,我这里所说的:https://developers.google.com/apis-explorer/#p/gmail/v1/gmail.users.labels.create

代码来创建标签:

var service = Google.gmail({version : 'v1', auth : oauth2Client}); 
service.users.labels.create({ 
    userId : 'user address here', 
    labelListVisibility : 'labelShow', 
    messageListVisibility : 'show', 
    name : 'label name here', 
    id : 'label id here' 
}, function (err) { 
    if (err) { 
     throw err; 
    } else { 
     callback(); 
    } 
}); 

谢谢!

回答

5

您说“API具有设置您自己的ID的请求参数”,但https://developers.google.com/gmail/api/v1/reference/users/labels/create的文档没有显示任何此类字段作为users.labels.create端点的一部分。

如果你看https://developers.google.com/gmail/api/v1/reference/users/labels,你会看到一个不可变的id字段,但这是不可写的,所以这个值由系统而不是你设置。

users.labels.create的文档还指出将返回完全填充的Users对象,因此您将能够知道刚刚创建的标签的ID是什么。要使用node.js库执行此操作,请将回调函数设置为具有第二个参数,该参数将包含调用的结果。因此,它可能是这个样子:


var service = Google.gmail({version : 'v1', auth : oauth2Client}); 
service.users.labels.create({ 
    userId : 'user address here', 
    labelListVisibility : 'labelShow', 
    messageListVisibility : 'show', 
    name : 'label name here' 
}, function (err, result) { 
    if (err) { 
     throw err; 
    } else { 
     console.log(result); 
     callback(result); 
    } 
}); 

正如评论指出的那样,你也可以使用users.labels.list获得标签的完整列表此用户。

+0

如果您转到此链接,请执行以下操作:https://developers.google.com/apis-explorer/#p/gmail/v1/gmail.users.labels.create 然后单击请求正文,其中显示“添加财产“和id字段在那里列出。如果你不能写信给它,为什么有这个选项?我一直认为这是不可变的,否则不知道标签的ID使它们几乎无用。 – ewein 2014-10-19 14:24:52

+0

您需要使用labels.list()来确定标签ID <-->名称映射(尽管系统标签具有一致的ID)。 API Explorer无法确定哪些字段是只读的,哪些是可读写的。您需要检查该信息的文档。 – 2014-10-19 15:30:59

+0

从我能找到的文档中,只能通过给出标签ID来将标签应用于消息。我在另一个论坛上阅读过,也可以使用标签名称,但我找不到任何支持的文档。 – ewein 2014-10-20 03:11:18