You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 02:43:17