如何通过Google Apps Script创建带自定义字段的Trello卡片?
解决Trello创建卡片时自定义字段值不生效的问题
你的代码中设置自定义字段的参数格式不符合Trello API要求,导致字段值无法被正确设置。Trello API不支持在创建卡片的URL中通过idCustomField/{id}=value这种格式传递自定义字段值,需要改用以下两种正确方式之一:
方式一:先创建卡片,再单独更新自定义字段
先完成卡片创建,再调用专门的API接口设置自定义字段值,步骤清晰且兼容性强:
function addCard() { var key = '---------------'; var token = 'xxxxxxxxxxxx'; var listId = 'yyyyyyyyyyy'; var boardId = 'zzzzzzzzzzz'; var cardName = 'Card nou 11'; var cardDesc = 'Card description'; var customFieldName = 'Cantitate'; var customFieldValue = '8'; // 若字段是数字类型,可直接传入数字8 // 1. 获取目标自定义字段的ID和类型 var urlCustomFields = 'https://api.trello.com/1/boards/' + boardId + '/customFields?key=' + key + '&token=' + token; var customFieldsResponse = UrlFetchApp.fetch(urlCustomFields); var customFields = JSON.parse(customFieldsResponse.getContentText()); var customFieldId = ''; var customFieldType = ''; for (var i = 0; i < customFields.length; i++) { if (customFields[i].name == customFieldName) { customFieldId = customFields[i].id; customFieldType = customFields[i].type; break; } } if (!customFieldId) { Logger.log('未找到指定的自定义字段'); return; } // 2. 创建基础卡片 var createCardUrl = 'https://api.trello.com/1/cards?key=' + key + '&token=' + token + '&idList=' + listId + '&name=' + encodeURIComponent(cardName) + '&desc=' + encodeURIComponent(cardDesc); var createOptions = { method: 'post' }; var createResponse = UrlFetchApp.fetch(createCardUrl, createOptions); var newCard = JSON.parse(createResponse.getContentText()); var cardId = newCard.id; // 3. 根据字段类型设置自定义字段值 var updateFieldUrl = 'https://api.trello.com/1/cards/' + cardId + '/customField/' + customFieldId + '/item?key=' + key + '&token=' + token; var valuePayload; if (customFieldType === 'number') { valuePayload = { value: { number: customFieldValue } }; } else if (customFieldType === 'text') { valuePayload = { value: { text: customFieldValue } }; } else { // 若字段是日期、复选框等类型,需对应调整value结构 valuePayload = { value: { text: customFieldValue } }; } var updateOptions = { method: 'put', contentType: 'application/json', payload: JSON.stringify(valuePayload) }; UrlFetchApp.fetch(updateFieldUrl, updateOptions); }
方式二:创建卡片时直接传入自定义字段参数
通过customFieldItems参数一次性传递自定义字段配置,需注意参数格式为JSON字符串:
function addCardWithCustomField() { var key = '---------------'; var token = 'xxxxxxxxxxxx'; var listId = 'yyyyyyyyyyy'; var boardId = 'zzzzzzzzzzz'; var cardName = 'Card nou 11'; var cardDesc = 'Card description'; var customFieldName = 'Cantitate'; var customFieldValue = '8'; // 获取自定义字段ID和类型 var urlCustomFields = 'https://api.trello.com/1/boards/' + boardId + '/customFields?key=' + key + '&token=' + token; var customFieldsResponse = UrlFetchApp.fetch(urlCustomFields); var customFields = JSON.parse(customFieldsResponse.getContentText()); var customFieldId = ''; var customFieldType = ''; for (var i = 0; i < customFields.length; i++) { if (customFields[i].name == customFieldName) { customFieldId = customFields[i].id; customFieldType = customFields[i].type; break; } } if (!customFieldId) { Logger.log('未找到指定的自定义字段'); return; } // 构造自定义字段配置项 var customFieldItem = { idCustomField: customFieldId, value: {} }; if (customFieldType === 'number') { customFieldItem.value.number = customFieldValue; } else if (customFieldType === 'text') { customFieldItem.value.text = customFieldValue; } // 发送创建卡片请求 var createCardUrl = 'https://api.trello.com/1/cards?key=' + key + '&token=' + token; var payload = { idList: listId, name: cardName, desc: cardDesc, customFieldItems: JSON.stringify([customFieldItem]) // 必须用数组包裹,转成JSON字符串 }; var options = { method: 'post', payload: payload }; UrlFetchApp.fetch(createCardUrl, options); }
注意事项
- 必须匹配自定义字段的类型(如
number/text/date)构造value结构,否则API会忽略该值 - 确保你的API密钥和令牌拥有
write权限,能修改卡片和自定义字段 - 方式二中的
customFieldItems参数必须是JSON数组格式,即使只有一个字段也要用数组包裹
内容的提问来源于stack exchange,提问作者Mircea F
相关产品推荐
相关产品推荐

