SSL Expiry Alert
工作流概述
这是一个包含12个节点的复杂工作流,主要用于自动化处理各种任务。
工作流源代码
{
"id": "Qj1307oyBx1hZJy5",
"meta": {
"instanceId": "1abe0e4c2be794795d12bf72aa530a426a6f87aabad209ed6619bcaf0f666fb0",
"templateCredsSetupCompleted": true
},
"name": "SSL Expiry Alert",
"tags": [
{
"id": "aqlZb2qfWiaT4Xr5",
"name": "IT Ops",
"createdAt": "2025-01-03T12:20:11.917Z",
"updatedAt": "2025-01-03T12:20:11.917Z"
},
{
"id": "zJaZorWWcGpTp35U",
"name": "DevOps",
"createdAt": "2025-01-03T12:19:34.273Z",
"updatedAt": "2025-01-03T12:19:34.273Z"
}
],
"nodes": [
{
"id": "260b66a2-0841-4dc7-9666-acbc9317fd91",
"name": "URLs to Monitor",
"type": "n8n-nodes-base.googleSheets",
"position": [
1120,
-120
],
"parameters": {
"columns": {
"value": {
"URL": "={{ $json.result.host }}",
"KnownExpiryDate": "={{ $json.result.valid_till }}"
},
"schema": [
{
"id": "Website ",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Website ",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "URL",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "KnownExpiryDate",
"type": "string",
"display": true,
"required": false,
"displayName": "KnownExpiryDate",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"URL"
]
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1VfsX4cW2oKQ3ZHUjBvGk--d1X7509c6__b6gPvA5VpI/edit#gid=0",
"cachedResultName": "URLs to Check"
},
"documentId": {
"__rl": true,
"mode": "url",
"value": "https://docs.google.com/spreadsheets/d/1VfsX4cW2oKQ3ZHUjBvGk--d1X7509c6__b6gPvA5VpI/edit?gid=0#gid=0"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "I7vwmkFVGPrI7Os1",
"name": "Vishal - Google Sheets"
}
},
"typeVersion": 4.5
},
{
"id": "a2922f1b-9d29-4b66-9560-44207f3e14d2",
"name": "Weekly Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
160,
140
],
"parameters": {
"rule": {
"interval": [
{
"field": "weeks",
"triggerAtDay": [
1
],
"triggerAtHour": 8
}
]
}
},
"typeVersion": 1.2
},
{
"id": "005564e9-5ecb-4ee9-aca0-69a660656b09",
"name": "Fetch URLs",
"type": "n8n-nodes-base.googleSheets",
"position": [
420,
140
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "url",
"value": "https://docs.google.com/spreadsheets/d/1pnUfIkD90MUG99Fp0vRoAB-w-GPSAwRZw0-JsNl-h3s/edit?gid=0#gid=0"
},
"documentId": {
"__rl": true,
"mode": "url",
"value": "https://docs.google.com/spreadsheets/d/1pnUfIkD90MUG99Fp0vRoAB-w-GPSAwRZw0-JsNl-h3s/edit?usp=sharing"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "I7vwmkFVGPrI7Os1",
"name": "Vishal - Google Sheets"
}
},
"typeVersion": 4.5
},
{
"id": "943c561c-ca89-461c-a6fb-c3011baaf81a",
"name": "Check SSL",
"type": "n8n-nodes-base.httpRequest",
"position": [
680,
140
],
"parameters": {
"url": "=https://ssl-checker.io/api/v1/check/{{ $json[\"URL\"].replace(/^https?:\/\//, \"\").replace(/\/$/, \"\") }}",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "911fa691-decf-4572-a46e-d8644d3b2a35",
"name": "Expiry Alert",
"type": "n8n-nodes-base.if",
"position": [
1120,
220
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "ee6e2ce8-569a-4f1f-91b5-2c55f605a16b",
"operator": {
"type": "number",
"operation": "lte"
},
"leftValue": "={{ $json.result.days_left }}",
"rightValue": 7
}
]
}
},
"typeVersion": 2.2
},
{
"id": "8b59ebbb-0a87-40c2-be79-cc38431ebdbd",
"name": "Send Alert Email",
"type": "n8n-nodes-base.gmail",
"position": [
1440,
240
],
"webhookId": "cd6b6b20-e619-4526-aa69-64754e3d9035",
"parameters": {
"sendTo": "phanineeraj@quantana.com",
"message": "=SSL Expiry - {{ $json.result.days_left }} Days Left - {{ $json.result.host }}",
"options": {
"appendAttribution": false
},
"subject": "=SSL Expiry - {{ $json.result.days_left }} Days Left - {{ $json.result.host }}",
"emailType": "text"
},
"credentials": {
"gmailOAuth2": {
"id": "brYm5tKb5se1DyUw",
"name": "Sabila Gmail"
}
},
"typeVersion": 2.1
},
{
"id": "32eebd68-f0e6-467c-bf65-f2d513a60666",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
100,
0
],
"parameters": {
"height": 329.860465116279,
"content": "Triggers the workflow once a week."
},
"typeVersion": 1
},
{
"id": "3c0ed796-94a4-488c-9cb7-e3d46db63815",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
360,
0
],
"parameters": {
"height": 327.0154373927959,
"content": "Pulls the list of URLs to monitor from the Google Sheet. Ensure you clone the Google Sheet worksheet and update this node with its URL."
},
"typeVersion": 1
},
{
"id": "fdb2077c-7d6a-4255-b499-e90513a0de1d",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
620,
0
],
"parameters": {
"height": 323.89365351629556,
"content": "Uses SSL-Checker.io to verify the SSL certificate of each URL. Fetches details like the host, validity period, and days remaining until expiry."
},
"typeVersion": 1
},
{
"id": "5cc1644b-6abc-4299-8a25-9507b09d863f",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1060,
-260
],
"parameters": {
"height": 344.1852487135509,
"content": "Updates the Google Sheet with SSL details, including the expiry date and certificate status."
},
"typeVersion": 1
},
{
"id": "1001a69e-8efc-4a8b-a97b-a1bc021ada35",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1060,
140
],
"parameters": {
"height": 344.1852487135509,
"content": "Checks if any SSL certificate is set to expire in 7 days or less."
},
"typeVersion": 1
},
{
"id": "ad9e359e-3d95-4e8c-97b0-d06475bb8883",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
1360,
140
],
"parameters": {
"height": 344.1852487135509,
"content": "Sends an email alert if an SSL certificate is nearing expiry, including the host and days remaining."
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"timezone": "Asia/Kolkata",
"callerPolicy": "workflowsFromSameOwner",
"errorWorkflow": "rL70w0U4LV2l9a5b",
"executionOrder": "v1"
},
"versionId": "f60d6e6e-dace-497a-b58b-113993ec36e5",
"connections": {
"Check SSL": {
"main": [
[
{
"node": "URLs to Monitor",
"type": "main",
"index": 0
},
{
"node": "Expiry Alert",
"type": "main",
"index": 0
}
]
]
},
"Fetch URLs": {
"main": [
[
{
"node": "Check SSL",
"type": "main",
"index": 0
}
]
]
},
"Expiry Alert": {
"main": [
[
{
"node": "Send Alert Email",
"type": "main",
"index": 0
}
]
]
},
"Weekly Trigger": {
"main": [
[
{
"node": "Fetch URLs",
"type": "main",
"index": 0
}
]
]
}
}
}
功能特点
- 自动检测新邮件
- AI智能内容分析
- 自定义分类规则
- 批量处理能力
- 详细的处理日志
技术分析
节点类型及作用
- Googlesheets
- Scheduletrigger
- Httprequest
- If
- Gmail
复杂度评估
配置难度:
维护难度:
扩展性:
实施指南
前置条件
- 有效的Gmail账户
- n8n平台访问权限
- Google API凭证
- AI分类服务订阅
配置步骤
- 在n8n中导入工作流JSON文件
- 配置Gmail节点的认证信息
- 设置AI分类器的API密钥
- 自定义分类规则和标签映射
- 测试工作流执行
- 配置定时触发器(可选)
关键参数
| 参数名称 | 默认值 | 说明 |
|---|---|---|
| maxEmails | 50 | 单次处理的最大邮件数量 |
| confidenceThreshold | 0.8 | 分类置信度阈值 |
| autoLabel | true | 是否自动添加标签 |
最佳实践
优化建议
- 定期更新AI分类模型以提高准确性
- 根据邮件量调整处理批次大小
- 设置合理的分类置信度阈值
- 定期清理过期的分类规则
安全注意事项
- 妥善保管API密钥和认证信息
- 限制工作流的访问权限
- 定期审查处理日志
- 启用双因素认证保护Gmail账户
性能优化
- 使用增量处理减少重复工作
- 缓存频繁访问的数据
- 并行处理多个邮件分类任务
- 监控系统资源使用情况
故障排除
常见问题
邮件未被正确分类
检查AI分类器的置信度阈值设置,适当降低阈值或更新训练数据。
Gmail认证失败
确认Google API凭证有效且具有正确的权限范围,重新进行OAuth授权。
调试技巧
- 启用详细日志记录查看每个步骤的执行情况
- 使用测试邮件验证分类逻辑
- 检查网络连接和API服务状态
- 逐步执行工作流定位问题节点
错误处理
工作流包含以下错误处理机制:
- 网络超时自动重试(最多3次)
- API错误记录和告警
- 处理失败邮件的隔离机制
- 异常情况下的回滚操作