{
  "name": "Create a secure personal AI assistant with OpenAI and Signal Messenger",
  "nodes": [
    {
      "id": "2cbe5fe8-3593-44a8-84e6-d202e035c26d",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -144,
        -1296
      ]
    },
    {
      "id": "ea8207a4-f048-4a68-9971-eda5cddd0937",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -224,
        -1152
      ]
    },
    {
      "id": "f6ea0142-c74d-4284-9b3b-661b6d2c6739",
      "name": "Format Response",
      "type": "n8n-nodes-base.set",
      "position": [
        656,
        -1296
      ]
    },
    {
      "id": "2d94293e-99b1-4df4-b2b7-ae5805c0dc24",
      "name": "Format Request",
      "type": "n8n-nodes-base.set",
      "position": [
        -608,
        -1872
      ]
    },
    {
      "id": "d5fabed2-27ad-44b2-8d32-45330fb14d92",
      "name": "Verify User",
      "type": "n8n-nodes-base.if",
      "position": [
        -416,
        -1872
      ]
    },
    {
      "id": "4a795aaf-0e62-405c-a138-b7b14f791c35",
      "name": "Stop Typing",
      "type": "n8n-nodes-signal-cli-rest-api.signal",
      "position": [
        400,
        -1296
      ]
    },
    {
      "id": "58ccbb0f-861a-4850-a9f7-dc91600d265b",
      "name": "Signal Trigger",
      "type": "n8n-nodes-signal-cli-rest-api.signalTrigger",
      "position": [
        -832,
        -1872
      ]
    },
    {
      "id": "50a2dfbf-82a2-4fc1-86fa-40bbbf92f03a",
      "name": "Mark Message as Read",
      "type": "n8n-nodes-signal-cli-rest-api.signal",
      "position": [
        -800,
        -1296
      ]
    },
    {
      "id": "d16e5bad-1bfa-44e6-be85-fdeb17256bec",
      "name": "Send Message",
      "type": "n8n-nodes-signal-cli-rest-api.signal",
      "position": [
        880,
        -1296
      ]
    },
    {
      "id": "7719621e-e675-47f5-8308-846525bc7c8a",
      "name": "Start Typing",
      "type": "n8n-nodes-signal-cli-rest-api.signal",
      "position": [
        -560,
        -1296
      ]
    },
    {
      "id": "4a3ee570-8ccc-4d83-a3c3-50dc1ba3019f",
      "name": "Thinking",
      "type": "@n8n/n8n-nodes-langchain.toolThink",
      "position": [
        80,
        -1152
      ]
    },
    {
      "id": "4f128f7e-1bfa-48a5-8a2e-74f037531e6e",
      "name": "Simple Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        -80,
        -1152
      ]
    },
    {
      "id": "b117ef73-7a4b-4587-bfc4-b9e4da947352",
      "name": "On form submission",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        48,
        -1776
      ]
    },
    {
      "id": "2732ce54-d82b-4ee6-bf34-a2f8942f4144",
      "name": "Form",
      "type": "n8n-nodes-base.form",
      "position": [
        448,
        -1776
      ]
    },
    {
      "id": "b1df1977-39cd-472a-981a-a16c367fe2d3",
      "name": "Verify Account",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        656,
        -1776
      ]
    },
    {
      "id": "e1a53ef0-caf9-4221-80b8-de146072c734",
      "name": "Register Account",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        240,
        -1776
      ]
    },
    {
      "id": "main-overview-sticky",
      "name": "Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1568,
        -2048
      ],
      "parameters": {
        "width": 600,
        "height": 992,
        "content": "## How it works\n\nThis workflow creates a personal AI assistant that responds to your Signal messages. When you send a message, the bot verifies it's from you (blocking strangers), marks it as read, sh"
      }
    },
    {
      "id": "registration-section-sticky",
      "name": "Registration Section",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        80,
        -2032
      ],
      "parameters": {
        "width": 652,
        "height": 200,
        "content": "## Registration (One-time Setup)\n\nThese webforms guide the user  through registering your bot's Signal account. Disabled after initial setup. A separate phone-number for the bot itself is required, to"
      }
    },
    {
      "id": "intake-section-sticky",
      "name": "Message Intake",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -800,
        -2032
      ],
      "parameters": {
        "width": 480,
        "height": 132,
        "content": "## Message Intake & Security\n\nReceives Signal messages, extracts user info, and verifies sender identity before processing."
      }
    },
    {
      "id": "ai-section-sticky",
      "name": "AI Processing",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -224,
        -1456
      ],
      "parameters": {
        "width": 400,
        "height": 136,
        "content": "## AI Brain\n\nOpenAI processes messages with conversation memory and thinking capability. Choose your model and add custom tools here."
      }
    },
    {
      "id": "response-section-sticky",
      "name": "Response Handling",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        400,
        -1488
      ],
      "parameters": {
        "width": 614,
        "height": null,
        "content": "## Response Flow\n\nFormats AI output and sends reply to user with natural typing indicators."
      }
    },
    {
      "id": "ux-section-sticky",
      "name": "UX Enhancements",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -784,
        -1472
      ],
      "parameters": {
        "width": 300,
        "height": 144,
        "content": "## User Experience\n\nMarks messages as read and shows typing status for natural conversation feel."
      }
    }
  ],
  "connections": {
    "Form": {
      "main": [
        [
          {
            "node": "Verify Account",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        [
          {
            "node": "Stop Typing",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Thinking": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Stop Typing": {
      "main": [
        [
          {
            "node": "Format Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Verify User": {
      "main": [
        [
          {
            "node": "Mark Message as Read",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Start Typing": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Format Request": {
      "main": [
        [
          {
            "node": "Verify User",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Signal Trigger": {
      "main": [
        [
          {
            "node": "Format Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Response": {
      "main": [
        [
          {
            "node": "Send Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Register Account": {
      "main": [
        [
          {
            "node": "Form",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "On form submission": {
      "main": [
        [
          {
            "node": "Register Account",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mark Message as Read": {
      "main": [
        [
          {
            "node": "Start Typing",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}