AutomationFlowsSlack & Telegram › Panel Responder Manual

Panel Responder Manual

Panel Responder Manual. Uses supabase, whatsApp. Webhook trigger; 7 nodes.

Webhook trigger★★★★☆ complexity7 nodesSupabaseWhatsApp
Slack & Telegram Trigger: Webhook Nodes: 7 Complexity: ★★★★☆ Added:

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "name": "Panel Responder Manual",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "panel-responder",
        "responseMode": "onReceived",
        "options": {}
      },
      "id": "w1",
      "name": "Webhook Responder",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        0,
        300
      ]
    },
    {
      "parameters": {
        "jsCode": "const b = $json.body || {};\nif (b.secret !== 'jeancrg2026panel' || !b.contacto_id || !b.texto) throw new Error('Parametros invalidos: se requiere secret, contacto_id y texto');\nreturn [{ json: { ok: true, contacto_id: b.contacto_id, texto: b.texto } }];"
      },
      "id": "w2",
      "name": "Validar",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        200,
        300
      ]
    },
    {
      "parameters": {
        "operation": "getAll",
        "tableId": "contactos",
        "options": {
          "select": "*"
        }
      },
      "id": "w3",
      "name": "Traer Contacto",
      "type": "n8n-nodes-base.supabase",
      "typeVersion": 2,
      "position": [
        400,
        300
      ],
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "const cid = $('Validar').item.json.contacto_id;\nconst c = $('Traer Contacto').all().flatMap(i => i.json).flat(1).find(x => x && x.id === cid);\nif (!c || !c.telefono) throw new Error('Contacto no encontrado');\nreturn [{ json: { telefono: c.telefono, texto: $('Validar').item.json.texto, contacto_id: cid } }];"
      },
      "id": "w4",
      "name": "Buscar Telefono",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        600,
        300
      ]
    },
    {
      "parameters": {
        "operation": "sendMessage",
        "phoneNumberId": "1309447485585504",
        "recipientPhoneNumber": "={{ $json.telefono }}"
      },
      "onError": "continueRegularOutput",
      "id": "w5",
      "name": "Enviar WhatsApp",
      "type": "n8n-nodes-base.whatsApp",
      "typeVersion": 1.1,
      "position": [
        800,
        300
      ],
      "credentials": {
        "whatsAppApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "tableId": "conversaciones",
        "fieldsUi": {
          "fieldValues": [
            {
              "fieldId": "contacto_id",
              "fieldValue": "={{ $('Buscar Telefono').item.json.contacto_id }}"
            },
            {
              "fieldId": "tenant_id",
              "fieldValue": "d2f0d3a0-0000-4000-8000-000000000001"
            },
            {
              "fieldId": "role",
              "fieldValue": "assistant"
            },
            {
              "fieldId": "content",
              "fieldValue": "={{ $('Buscar Telefono').item.json.texto }}"
            },
            {
              "fieldId": "derivado_a_humano",
              "fieldValue": "true"
            }
          ]
        }
      },
      "id": "w6",
      "name": "Guardar Respuesta Humana",
      "type": "n8n-nodes-base.supabase",
      "typeVersion": 1,
      "position": [
        1000,
        300
      ],
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "const err = $json.error;\nif (err) {\n  const s = typeof err === 'string' ? err : JSON.stringify(err);\n  if (/131047|131048|window|template/i.test(s)) {\n    return [{ json: { ok: false, error: 'ventana-24h-cerrada: el cliente debe escribirte primero desde su WhatsApp (regla de Meta). Escribele desde tu personal o esper\u00e1 su mensaje.' } }];\n  }\n  return [{ json: { ok: false, error: 'envio-fallido: ' + (typeof err === 'string' ? err : (err.message || s)) } }];\n}\nreturn [{ json: { ok: true } }];"
      },
      "id": "w7",
      "name": "Formatear Resultado",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1200,
        300
      ]
    }
  ],
  "connections": {
    "Webhook Responder": {
      "main": [
        [
          {
            "node": "Validar",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Validar": {
      "main": [
        [
          {
            "node": "Traer Contacto",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Traer Contacto": {
      "main": [
        [
          {
            "node": "Buscar Telefono",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Buscar Telefono": {
      "main": [
        [
          {
            "node": "Enviar WhatsApp",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Enviar WhatsApp": {
      "main": [
        [
          {
            "node": "Guardar Respuesta Humana",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Guardar Respuesta Humana": {
      "main": [
        [
          {
            "node": "Formatear Resultado",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Panel Responder Manual. Uses supabase, whatsApp. Webhook trigger; 7 nodes.

Source: https://github.com/JeanCardozo/chatAI/blob/main/workflows/panel/panel-responder.json — original creator credit. Request a take-down →

More Slack & Telegram workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Slack & Telegram

This workflow is a complete, production-ready solution for recovering abandoned carts in Shopify stores using a multi-channel, multi-touch approach. It automates personalized follow-ups via Email, SMS

HTTP Request, Shopify, SendGrid +5
Slack & Telegram

This workflow is designed for **customer support teams, e-commerce founders, and operations managers** who want to handle thousands of customer queries seamlessly. Instead of building a brand-new chat

Telegram Trigger, Supabase, WhatsApp +2
Slack & Telegram

AIPA - Multi-Business Calendar Management. Uses telegram, supabase, telegramTrigger, googleCalendar. Webhook trigger; 20 nodes.

Telegram, Supabase, Telegram Trigger +1
Slack & Telegram

Theorem Reach — Free Trial Webhook. Uses postgres, executeCommand, whatsApp. Webhook trigger; 20 nodes.

Postgres, Execute Command, WhatsApp
Slack & Telegram

Ban Claim Handler. Uses postgres, httpRequest, whatsApp, telegram. Webhook trigger; 20 nodes.

Postgres, HTTP Request, WhatsApp +1