8
n8n 中文网amn8n.com

🚚 使用 Carbon Interface API 和 GPT-4o 计算货运的 CO2 排放量

中级

这是一个AI, IT Ops领域的自动化工作流,包含 10 个节点。主要使用 HttpRequest, GmailTrigger, GoogleSheets, Agent, LmChatOpenAi 等节点,结合人工智能技术实现智能自动化。 🚚 使用 Carbon Interface API 和 GPT-4o 计算货运的 CO2 排放量

前置要求
  • 可能需要目标 API 的认证凭证
  • Google 账号和 Gmail API 凭证
  • Google Sheets API 凭证
  • OpenAI API Key
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "umOZqpde6cAUTL8F",
  "meta": {
    "instanceId": "",
    "templateCredsSetupCompleted": true
  },
  "name": "🚚 使用 Carbon Interface API 和 GPT-4o 计算货运的 CO2 排放量",
  "tags": [],
  "nodes": [
    {
      "id": "dc20a34f-90ff-4f4e-a2f7-7b77abb92f4c",
      "name": "Gmail 触发器",
      "type": "n8n-nodes-base.gmailTrigger",
      "position": [
        -320,
        415
      ],
      "parameters": {
        "simple": false,
        "filters": {},
        "options": {
          "downloadAttachments": false
        },
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        }
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "",
          "name": ""
        }
      },
      "notesInFlow": true,
      "typeVersion": 1.2
    },
    {
      "id": "984a0707-919c-4c67-b070-6b1caaea2946",
      "name": "结构化输出解析器",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        140,
        600
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"shipment_number\": \"7894-PCB-654\",\n  \"pickup_location\": \"Centre de Distribution Auchan\",\n  \"pickup_address\": \"77 Rue Albert Garry, 94450 Limeil-Brévannes\",\n  \"expected_pickup_time\": \"2024-09-24T09:00:00\",\n  \"temperature_control\": \"Frozen\",\n  \"destination_store_name\": \"Auchan Store 124\",\n  \"destination_address\": \"43-45 Quai Jules Guesde, 94405 Vitry-sur-Seine\",\n  \"expected_delivery_time\": \"2024-09-24T18:00:00\",\n  \"driving_distance_km\": 9.61,\n  \"estimated_transit_min\": 16.9,\n  \"cargo_quantity\": 12,\n  \"cargo_weight_tons\": 2.79\n}\n"
      },
      "typeVersion": 1.2
    },
    {
      "id": "de58b711-25ef-42f7-a5ab-4bc1d20fd1fc",
      "name": "AI 智能体解析器",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -100,
        415
      ],
      "parameters": {
        "text": "=Extract the structured shipment details from the following email:\n\n{{ $json.text }}\n",
        "options": {
          "systemMessage": "=You are a logistics assistant. When provided with the body of a shipment confirmation email, extract the following structured JSON object:\n\n{\n  \"shipment_number\": string,\n  \"pickup_location\": string,\n  \"pickup_address\": string,\n  \"expected_pickup_time\": string (ISO 8601, e.g. \"2024-09-24T09:00:00\"),\n  \"temperature_control\": string,\n  \"destination_store_name\": string,\n  \"destination_address\": string,\n  \"expected_delivery_time\": string (ISO 8601, e.g. \"2024-09-24T18:00:00\"),\n  \"driving_distance_km\": number,\n  \"estimated_transit_min\": number,\n  \"cargo_quantity\": number,\n  \"cargo_weight_tons\": number\n}\n\n- Extract **only** what’s listed.\n- Normalize dates and times to ISO 8601 format.\n- Remove units from numbers (e.g. 9.61 km → 9.61, 2.79 tons → 2.79).\n- Return only the JSON object. No additional explanation or text."
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.9
    },
    {
      "id": "05ca643f-774c-40a5-843f-76790c42d433",
      "name": "OpenAI 聊天模型2",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -100,
        620
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "",
          "name": ""
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "fb16f384-e73f-4c3f-be72-24fede7b2760",
      "name": "收集 CO2 排放量",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        680,
        420
      ],
      "parameters": {
        "url": "https://www.carboninterface.com/api/v1/estimates",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"type\": \"shipping\",\n  \"weight_value\": {{ $('AI Agent Parser').item.json.output.cargo_weight_tons * 1000000 }},\n  \"weight_unit\": \"g\",\n  \"distance_value\": {{ $('AI Agent Parser').item.json.output.driving_distance_km }},\n  \"distance_unit\": \"km\",\n  \"transport_method\": \"truck\"\n}\n",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer YOUR_API_KEY"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.2
    },
    {
      "id": "82c2db80-9a3a-421b-ad27-097a713fc3c2",
      "name": "加载结果",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        920,
        420
      ],
      "parameters": {
        "columns": {
          "value": {
            "co2_kg": "={{ $json.data.attributes.carbon_kg }}",
            "shipment_number": "={{ $('AI Agent Parser').item.json.output.shipment_number }}",
            "co2_estimation_time": "={{ $json.data.attributes.estimated_at }}"
          },
          "schema": [
            {
              "id": "shipment_number",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "shipment_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "pickup_location",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "pickup_location",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "pickup_address",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "pickup_address",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "expected_pickup_time",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "expected_pickup_time",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "temperature_control",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "temperature_control",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "destination_store_name",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "destination_store_name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "destination_address",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "destination_address",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "expected_delivery_time",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "expected_delivery_time",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "driving_distance_km",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "driving_distance_km",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "estimated_transit_min",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "estimated_transit_min",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "cargo_quantity",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "cargo_quantity",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "cargo_weight_tons",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "cargo_weight_tons",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "co2_kg",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "co2_kg",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "co2_estimation_time",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "co2_estimation_time",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "shipment_number"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 877993777,
          "cachedResultUrl": "",
          "cachedResultName": "CO2 emissions"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1NLNviRoVMEj2z78KiueruB5sd2CnvAb80DS7J2melVs",
          "cachedResultUrl": "",
          "cachedResultName": "Open Route Service"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "",
          "name": ""
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.6
    },
    {
      "id": "94cd225d-1bc0-42b5-a466-7fad8b445e94",
      "name": "便签1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -360,
        -60
      ],
      "parameters": {
        "color": 7,
        "width": 180,
        "height": 820,
        "content": "### 1. 使用 Gmail 触发器的工作流触发器"
      },
      "typeVersion": 1
    },
    {
      "id": "3e4989f9-2ef4-4c60-98cc-d8b988162e54",
      "name": "便签2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -160,
        -60
      ],
      "parameters": {
        "color": 7,
        "width": 440,
        "height": 820,
        "content": "### 2. AI 智能体提取行程报告"
      },
      "typeVersion": 1
    },
    {
      "id": "7dc4dab6-2536-4373-b058-7487fc968c33",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        300,
        -60
      ],
      "parameters": {
        "color": 7,
        "width": 1180,
        "height": 820,
        "content": "### 3. 记录货运请求信息并使用 Carbon Interface API 获取排放量"
      },
      "typeVersion": 1
    },
    {
      "id": "a51645cd-d3fe-4c3f-a7af-9bdd31eb9242",
      "name": "记录货运信息",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        420,
        420
      ],
      "parameters": {
        "columns": {
          "value": {
            "cargo_quantity": "={{ $json.output.cargo_quantity }}",
            "pickup_address": "={{ $json.output.pickup_address }}",
            "pickup_location": "={{ $json.output.pickup_location }}",
            "shipment_number": "={{ $json.output.shipment_number }}",
            "cargo_weight_tons": "={{ $json.output.cargo_weight_tons }}",
            "destination_address": "={{ $json.output.destination_address }}",
            "driving_distance_km": "={{ $json.output.driving_distance_km }}",
            "temperature_control": "={{ $json.output.temperature_control }}",
            "expected_pickup_time": "={{ $json.output.expected_pickup_time }}",
            "estimated_transit_min": "={{ $json.output.estimated_transit_min }}",
            "destination_store_name": "={{ $json.output.destination_store_name }}",
            "expected_delivery_time": "={{ $json.output.expected_delivery_time }}"
          },
          "schema": [
            {
              "id": "shipment_number",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "shipment_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "pickup_location",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "pickup_location",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "pickup_address",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "pickup_address",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "expected_pickup_time",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "expected_pickup_time",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "temperature_control",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "temperature_control",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "destination_store_name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "destination_store_name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "destination_address",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "destination_address",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "expected_delivery_time",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "expected_delivery_time",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "driving_distance_km",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "driving_distance_km",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "estimated_transit_min",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "estimated_transit_min",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "cargo_quantity",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "cargo_quantity",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "cargo_weight_tons",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "cargo_weight_tons",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "co2_kg",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "co2_kg",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "co2_estimation_time",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "co2_estimation_time",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "shipment_number"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 877993777,
          "cachedResultUrl": "",
          "cachedResultName": "CO2 emissions"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "",
          "cachedResultName": "Open Route Service"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "",
          "name": ""
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.6
    }
  ],
  "active": false,
  "pinData": {
    "AI Agent Parser": [
      {
        "json": {
          "output": {
            "cargo_quantity": 12,
            "pickup_address": "77 Rue Albert Garry, 94450 Limeil-Brévannes",
            "pickup_location": "Centre de Distribution Auchan",
            "shipment_number": "7894-PCB-654",
            "cargo_weight_tons": 3.79,
            "destination_address": "43-45 Quai Jules Guesde, 94405 Vitry-sur-Seine",
            "driving_distance_km": 9.61,
            "temperature_control": "Frozen",
            "expected_pickup_time": "2024-09-24T09:00:00",
            "estimated_transit_min": 16.9,
            "destination_store_name": "Auchan Store 124",
            "expected_delivery_time": "2024-09-24T18:00:00"
          }
        }
      }
    ]
  },
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "844e09c0-2706-43da-bd53-6c211b68aafc",
  "connections": {
    "Load Results": {
      "main": [
        []
      ]
    },
    "Gmail Trigger": {
      "main": [
        [
          {
            "node": "AI Agent Parser",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent Parser": {
      "main": [
        [
          {
            "node": "Record Shipment Information",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model2": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent Parser",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Collect CO2 Emissions": {
      "main": [
        [
          {
            "node": "Load Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "AI Agent Parser",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Record Shipment Information": {
      "main": [
        [
          {
            "node": "Collect CO2 Emissions",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。

这个工作流适合什么场景?

中级 - 人工智能, IT 运维

需要付费吗?

本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。

工作流信息
难度等级
中级
节点数量10
分类2
节点类型7
难度说明

适合有一定经验的用户,包含 6-15 个节点的中等复杂度工作流

作者
Samir Saci

Samir Saci

@samirsaci

Automation, AI and Analytics for Supply Chain & Business Optimization Helping businesses streamline operations using n8n, AI agents, and data science to enhance efficiency and sustainability. Linkedin: www.linkedin.com/in/samir-saci

外部链接
在 n8n.io 查看

分享此工作流