{
  "name": "OpenBot — echo bot (Developer API)",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "openbot",
        "responseMode": "onReceived",
        "options": { "rawBody": true }
      },
      "id": "webhook",
      "name": "OpenBot webhook",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [0, 0]
    },
    {
      "parameters": {
        "jsCode": "// OpenBot-ийн гарын үсэг: sha256=HMAC-SHA256(secret, ts + '.' + raw_body)\nconst crypto = require('crypto');\nconst secret = $env.BUILDRY_WEBHOOK_SECRET; // whsec_…\nconst h = $input.first().json.headers;\nconst raw = Buffer.from($input.first().binary?.data?.data || '', 'base64').toString('utf8') || JSON.stringify($input.first().json.body);\nconst ts = h['x-buildry-timestamp'];\nconst sig = (h['x-buildry-signature'] || '').replace('sha256=', '');\nconst mac = crypto.createHmac('sha256', secret).update(ts + '.' + raw).digest('hex');\nif (sig.length !== mac.length || !crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(mac))) {\n  throw new Error('bad signature');\n}\nif (Math.abs(Date.now() / 1000 - Number(ts)) > 300) throw new Error('stale');\nconst body = $input.first().json.body;\nif (body.event !== 'message.received') return [];\nreturn [{ json: { conversation_id: body.data.conversation_id, text: body.data.message.text || '' } }];"
      },
      "id": "verify",
      "name": "Verify + pick message",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [260, 0]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.openbot.mn/v1/messages",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            { "name": "Authorization", "value": "=Bearer {{ $env.BUILDRY_API_KEY }}" },
            { "name": "Content-Type", "value": "application/json" }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{ JSON.stringify({ conversation_id: $json.conversation_id, text: 'Та бичлээ: ' + $json.text, quick_replies: ['Дахин', 'Оператор'] }) }}"
      },
      "id": "reply",
      "name": "Reply via /v1/messages",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [520, 0]
    }
  ],
  "connections": {
    "OpenBot webhook": { "main": [[{ "node": "Verify + pick message", "type": "main", "index": 0 }]] },
    "Verify + pick message": { "main": [[{ "node": "Reply via /v1/messages", "type": "main", "index": 0 }]] }
  },
  "settings": { "executionOrder": "v1" },
  "meta": {
    "notes": "Env: BUILDRY_API_KEY (sk_live_…), BUILDRY_WEBHOOK_SECRET (whsec_…). Webhook URL = n8n-ийн Production URL → OpenBot dashboard «Хөгжүүлэгч» → Webhook. Сувгаа «Гадаад бот» горимд шилжүүлнэ."
  }
}
