8
n8n 中文网amn8n.com

塔罗牌占卜

高级

这是一个Miscellaneous, AI Chatbot领域的自动化工作流,包含 19 个节点。主要使用 If, Code, Webhook, Aggregate, HttpRequest 等节点。 基于 GPT 和 Blooio 的 iMessage 塔罗牌占卜系统

前置要求
  • HTTP Webhook 端点(n8n 会自动生成)
  • 可能需要目标 API 的认证凭证
  • OpenAI API Key
  • PostgreSQL 数据库连接信息
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "lNmIFkiOmboSoUE8",
  "meta": {
    "instanceId": "9fe2e2e308ee9fa575b11a458a16465194c029a4f53a09a925eb0b5fa7b5761a",
    "templateCredsSetupCompleted": true
  },
  "name": "塔罗牌占卜",
  "tags": [],
  "nodes": [
    {
      "id": "d55821e6-8dbb-4a96-8d5b-9419e14ee9cc",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1220,
        0
      ],
      "parameters": {
        "width": 880,
        "height": 1000,
        "content": "## 使用 n8n HTTP 请求节点发送 Blooio.com 消息"
      },
      "typeVersion": 1
    },
    {
      "id": "b79415f2-3c1c-453b-91bf-34139589eaef",
      "name": "发送消息",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1280,
        780
      ],
      "parameters": {
        "url": "https://api.blooio.com/send-message",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "sendHeaders": true,
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "identifier",
              "value": "={{ $('Receive Message (From Blooio)').item.json.body.message.sender }}"
            },
            {
              "name": "message",
              "value": "={{ $json.output }}"
            }
          ]
        },
        "genericAuthType": "httpBearerAuth",
        "headerParameters": {
          "parameters": [
            {
              "name": "accept",
              "value": "application/json"
            }
          ]
        }
      },
      "credentials": {
        "httpBearerAuth": {
          "id": "WxjvtozS2uLOEBkw",
          "name": "Blooio Bearer Auth account"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "130336d2-db04-4bed-8fec-d6fec36803ec",
      "name": "便签 1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2000,
        980
      ],
      "parameters": {
        "color": 3,
        "width": 780,
        "height": 360,
        "content": "## 消息已读 Webhook:"
      },
      "typeVersion": 1
    },
    {
      "id": "c159c029-2c39-4696-9cb2-7f6e8b238e04",
      "name": "便签 2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2000,
        380
      ],
      "parameters": {
        "color": 6,
        "width": 780,
        "height": 580,
        "content": "## 消息接收 Webhook:"
      },
      "typeVersion": 1
    },
    {
      "id": "6d590245-abed-488a-bc31-cfe947a96237",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -160,
        780
      ],
      "parameters": {
        "text": "=User message: {{ $('Receive Message (From Blooio)').item.json.body.message.content }}",
        "options": {
          "systemMessage": "<identity>\nYou are Mystic Tarot Reader — a visually intuitive, spiritually attuned AI tarot guide who interprets card images and text queries to offer soulful, empowering readings. Your presence is warm, sacred, and mystical, like a trusted oracle who responds with care and wonder through iMessage.\n</identity>\n\n<mission>\nYour task is to receive either:\n- A photo of tarot cards, with or without a question\n- A text-based inquiry for a virtual reading\n\nYou will identify the cards (visually or by name), interpret their symbolism in context, and provide heartfelt spiritual guidance. Your goal is to empower, comfort, and awaken insight in the user — never to predict fixed futures.\n\nYou respond with poetic clarity, emotional resonance, and intuitive warmth, making every reading feel personal and magical.\n</mission>\n\n<analysis_protocol>\n1. Visual Recognition  \n   - If a card image is provided, identify each card’s name, suit, and whether it is upright or reversed.\n   - Recognize the spread type if evident (e.g., single, 3-card, Celtic Cross). If unclear, treat it as a general pull.\n\n2. Interpretation  \n   - Explain the meaning of each card, combining traditional symbolism and intuitive energy.\n   - Relate each card’s message to the user's question or emotional tone if one is given.\n\n3. Integration Guidance  \n   - Offer gentle actions, mindset shifts, or spiritual practices to reflect the card’s message.\n   - Avoid predictions; speak in terms of energy, archetypes, invitations, and choices.\n\n4. Visuals  \n   - When helpful or upon request, show an elegant rendering of the pulled tarot card(s) for mystical immersion.\n\n</analysis_protocol>\n\n<response_format>\nYou reply in a mystical iMessage-style voice — soft, intuitive, and soulful. Never respond in markdown or put start *** around words since iMessages does not format text.\n\nStart with a gentle greeting or acknowledgment of the card(s) and inquiry.  \nThen:\n- Reveal and describe each card, using emotive language and symbolic insight.\n- Integrate their meanings into a cohesive message or reflection.\n- Offer soulful next steps, journaling prompts, affirmations, or things to consider.\n- Conclude with an invitation to draw again or check in if they need more clarity.\n\nYour readings should sound like this:\n> \"Ahh, The Empress... lush with creativity, sensuality, and divine receiving. She’s whispering: What wants to be nurtured in you right now?\"\n\nAvoid:  \n- Bullet points, markdown, numbered lists, or tables.  \n- Technical or robotic language.  \n- Overly brief replies — be poetic and immersive.\n\n</response_format>\n\n<onboarding_logic>\nIf the user says \"Hi\", \"Hello\", or similar, respond with:\n\n> ✨ Hello, beautiful soul... and welcome to the **Mystic Tarot Reader**.  \n>\n> This is a sacred space for self-reflection, insight, and gentle guidance. Here’s how to begin your tarot journey:  \n>\n> 🌙 **Step 1**: Take a deep breath and center yourself.  \n> 🌿 **Step 2**: Think of a question, situation, or feeling you’d like clarity on.  \n> 🃏 **Step 3**: Pull one or more tarot cards using your favorite deck.  \n> 📸 **Step 4**: Send me a photo of the card(s) **and** share the question or thought you focused on.  \n>\n> I’ll read the energy and walk you through the meaning — like a cosmic guide on your shoulder.  \n>\n> 💫 Ready when you are.\n\nIf the user does not have a deck or says “draw one for me,” reply with:\n\n> Of course 🌌 Let me draw a card for you now...  \n> *(Then continue with a virtual draw and full reading.)*\n\n</onboarding_logic>\n\n<error_handling>\nIf the uploaded image is unclear or doesn’t show tarot cards, respond with warmth:\n\n> 🌫 The image is a bit misty to my inner eye — I can’t quite make out the card. Could you send a clearer photo or try again with your pull?\n\nIf unsure about the card or layout, gently offer a general message or ask if they’d like to clarify. Never break tone or sound technical. Always maintain the sacred, supportive feel.\n</error_handling>",
          "passthroughBinaryImages": true
        },
        "promptType": "define"
      },
      "typeVersion": 1.9
    },
    {
      "id": "f7f7b39c-676e-412f-b34c-9c2bec110c40",
      "name": "OpenAI 聊天模型",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -160,
        960
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini",
          "cachedResultName": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "JrqIdyKAvwxNgaEM",
          "name": "Tay - SLUG"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "77f9d1ad-7fcb-4df2-8757-5612b10c7aec",
      "name": "Postgres 聊天记忆",
      "type": "@n8n/n8n-nodes-langchain.memoryPostgresChat",
      "position": [
        -20,
        980
      ],
      "parameters": {
        "tableName": "n8n_tarot_ai",
        "sessionKey": "={{ $('Receive Message (From Blooio)').item.json.body.message.conversation.id }}",
        "sessionIdType": "customKey",
        "contextWindowLength": 200
      },
      "credentials": {
        "postgres": {
          "id": "asiZOOtRYUAuWsWd",
          "name": "Neon"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "9bcc2d84-61db-4785-9cb5-4d893d3c973e",
      "name": "接收消息 (来自 Blooio)",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -1440,
        760
      ],
      "webhookId": "0cf10724-2d78-4fc1-8a6a-7d4a96c2a786",
      "parameters": {
        "path": "tarot-ai",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 2
    },
    {
      "id": "5d753997-b62d-4868-9acc-ad8cf52d6549",
      "name": "HTTP 请求",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        400,
        400
      ],
      "parameters": {
        "url": "={{ $json.url }}",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "fe6cbb47-c6d0-4ae8-b2df-93270c96168a",
      "name": "如果有图像,下载它们",
      "type": "n8n-nodes-base.if",
      "position": [
        -700,
        760
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "551f9536-48c3-4757-a58b-35ee1ef81a80",
              "operator": {
                "type": "array",
                "operation": "lengthGt",
                "rightType": "number"
              },
              "leftValue": "={{ $('Receive Message (From Blooio)').item.json.body.message.attachments }}",
              "rightValue": 0
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "3ab1790b-91b5-4b42-b394-9daf596d9a01",
      "name": "遍历项目",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        40,
        380
      ],
      "parameters": {
        "options": {
          "reset": false
        }
      },
      "typeVersion": 3
    },
    {
      "id": "edd17416-c915-40c7-9126-f0da875ec821",
      "name": "代码",
      "type": "n8n-nodes-base.code",
      "position": [
        -280,
        380
      ],
      "parameters": {
        "jsCode": "let output = [];\n\nfor (const item of $input.first().json.body.message.attachments) {\n  output.push({\n    json: {\n      url: item.url\n    }\n  });\n}\n\nreturn output;"
      },
      "typeVersion": 2
    },
    {
      "id": "a49c6fc6-6017-4dae-8cb7-55e24f6f1db6",
      "name": "AI Agent1",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        600,
        780
      ],
      "parameters": {
        "text": "={{ $json.data.toJsonString() }}",
        "options": {
          "systemMessage": "Summarize these messages and give the user a report that will be send in an iMessage. Do not say \"here's the summary\" or anything like that. Just respond with the summary by itself."
        },
        "promptType": "define"
      },
      "typeVersion": 2
    },
    {
      "id": "5832d268-d10d-41b1-82ea-08ef58f4bdb4",
      "name": "聚合",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        260,
        780
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData"
      },
      "typeVersion": 1
    },
    {
      "id": "d9a526a4-d839-48b0-9966-9e189c7d008b",
      "name": "OpenAI 聊天模型1",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        620,
        940
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "JrqIdyKAvwxNgaEM",
          "name": "Tay - SLUG"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "abaff486-0b39-4b83-b800-e4c453154f91",
      "name": "不要回应自己",
      "type": "n8n-nodes-base.if",
      "position": [
        -960,
        760
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "cecd3adf-a9e5-41d3-87ae-4a9699bd641b",
              "operator": {
                "type": "boolean",
                "operation": "false",
                "singleValue": true
              },
              "leftValue": "={{ $json.body.message.selfMessage }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "6d134ffb-638d-4aef-87d6-1ec2205d06c9",
      "name": "便签 3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -360,
        260
      ],
      "parameters": {
        "color": 4,
        "width": 980,
        "height": 400,
        "content": "## 图像下载器"
      },
      "typeVersion": 1
    },
    {
      "id": "94f9f9bc-65d6-4725-923f-161dfeae142a",
      "name": "便签 5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1220,
        -1460
      ],
      "parameters": {
        "color": 3,
        "width": 680,
        "height": 2140,
        "content": "![描述](https://i.imgur.com/UgEluxE.png)"
      },
      "typeVersion": 1
    },
    {
      "id": "7df3f7c9-9892-4c50-aa4b-4c16d65dd3a7",
      "name": "便签 4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2000,
        -660
      ],
      "parameters": {
        "width": 780,
        "height": 1040,
        "content": "## 🔮 从这里开始:神秘塔罗机器人设置"
      },
      "typeVersion": 1
    }
  ],
  "active": true,
  "pinData": {
    "Receive Message (From Blooio)": [
      {
        "json": {
          "body": {
            "type": "new-message",
            "message": {
              "readAt": null,
              "sender": "+11111111111",
              "sentAt": 1751234680604,
              "content": "And a Diet Coke",
              "delivered": true,
              "messageId": "6409C11D-9C0B-404B-B2E3-052DA7C14D07",
              "technology": "iMessage",
              "attachments": [
                {
                  "id": "E843680B-8F00-460C-A0AA-34B1B1DD9624",
                  "url": "https://bucket.blooio.com/custom-webhook-attachments/R3ZJISuC-t9CssQNM3i2J.jpeg",
                  "size": 979912,
                  "filename": "Pasta.jpeg",
                  "mimeType": "image/jpeg",
                  "expiresAt": "2025-07-29T22:04:42.432Z",
                  "expiresAtUnix": 1753826682432
                }
              ],
              "deliveredAt": null,
              "selfMessage": false,
              "conversation": {
                "id": "iMessage;-;+11111111111",
                "name": null,
                "recipient": "+11111111111"
              }
            }
          },
          "query": {},
          "params": {},
          "headers": {
            "host": "workflows.xx.com",
            "cf-ray": "9578b8a804fa2f17-LAX",
            "cdn-loop": "cloudflare; loops=1; subreqs=1",
            "cf-ew-via": "15",
            "cf-worker": "blooio.com",
            "cf-visitor": "{\"scheme\":\"https\"}",
            "cf-ipcountry": "US",
            "content-type": "application/json",
            "content-length": "622",
            "accept-encoding": "gzip, br",
            "x-forwarded-for": "162.158.91.171",
            "cf-connecting-ip": "2a06:98c0:3600::103",
            "x-forwarded-host": "workflows.xx.com",
            "x-forwarded-proto": "https"
          },
          "webhookUrl": "https://workflows.xx.com/webhook/receive-event",
          "executionMode": "production"
        }
      }
    ]
  },
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "82c9ffad-b201-4c96-8cc3-31d3e21678f6",
  "connections": {
    "Code": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        [
          {
            "node": "Aggregate",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent1": {
      "main": [
        [
          {
            "node": "Send Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate": {
      "main": [
        [
          {
            "node": "AI Agent1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "HTTP Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent1",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Postgres Chat Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Don't respond to yourself": {
      "main": [
        [
          {
            "node": "If has images, download them",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If has images, download them": {
      "main": [
        [
          {
            "node": "Code",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Receive Message (From Blooio)": {
      "main": [
        [
          {
            "node": "Don't respond to yourself",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

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

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

高级 - 杂项, AI 聊天机器人

需要付费吗?

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

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

适合高级用户,包含 16+ 个节点的复杂工作流

外部链接
在 n8n.io 查看

分享此工作流