AutomationFlowsData & Sheets › Flow 3 - Reviews Post-turno

Flow 3 - Reviews Post-turno

Flow 3 - Reviews Post-Turno. Uses googleSheets, httpRequest. Scheduled trigger; 5 nodes.

Cron / scheduled trigger★★★★☆ complexity5 nodesGoogle SheetsHTTP Request
Data & Sheets Trigger: Cron / scheduled Nodes: 5 Complexity: ★★★★☆ Added:

This workflow follows the Google Sheets → HTTP Request recipe pattern — see all workflows that pair these two integrations.

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": "Flow 3 - Reviews Post-Turno",
  "nodes": [
    {
      "id": "f3-cron",
      "name": "Cron 20hs",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.1,
      "position": [
        0,
        300
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 20 * * *"
            }
          ]
        }
      }
    },
    {
      "id": "f3-sheets-read",
      "name": "Leer Pacientes",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.4,
      "position": [
        220,
        300
      ],
      "parameters": {
        "operation": "read",
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "1vK8h8c8prheB8_KE7nwl6e4SblGoeALs_jE-vkgv5ho"
        },
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Pacientes"
        },
        "options": {}
      },
      "alwaysOutputData": true,
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "id": "f3-code-filter",
      "name": "Filtrar CONFIRMADO de Hoy",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        440,
        300
      ],
      "parameters": {
        "mode": "runOnceForAllItems",
        "jsCode": "const items = $input.all();\nconst hoy = new Date().toISOString().split('T')[0];\n\nconst confirmados = items.filter(i => {\n  const estado = (i.json.estado || '').toUpperCase();\n  const proximoTurno = (i.json.proximoTurno || '').split(' ')[0];\n  return estado === 'CONFIRMADO' && proximoTurno === hoy;\n});\n\nif (confirmados.length === 0) return [];\n\nreturn confirmados.map(i => ({\n  json: {\n    telefono: i.json.telefono,\n    nombre: i.json.nombre || 'Paciente',\n    contentVariables: JSON.stringify({\n      \"1\": i.json.nombre || 'Paciente',\n      \"2\": \"{{NOMBRE_CLINICA}}\"\n    })\n  }\n}));"
      }
    },
    {
      "id": "f3-twilio-send",
      "name": "Enviar Pedido de Review",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        660,
        300
      ],
      "parameters": {
        "method": "POST",
        "url": "=https://api.twilio.com/2010-04-01/Accounts/{{ $env.TWILIO_ACCOUNT_SID }}/Messages.json",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "=Basic {{ btoa($env.TWILIO_ACCOUNT_SID + ':' + $env.TWILIO_AUTH_TOKEN) }}"
            }
          ]
        },
        "sendBody": true,
        "contentType": "form-urlencoded",
        "bodyParameters": {
          "parameters": [
            {
              "name": "From",
              "value": "whatsapp:+14155238886"
            },
            {
              "name": "To",
              "value": "=whatsapp:+{{ $json.telefono }}"
            },
            {
              "name": "Body",
              "value": "=Hola {{ $json.nombre }}! \ud83d\ude0a Esperamos que tu atenci\u00f3n haya sido excelente hoy. \u00bfC\u00f3mo fue tu experiencia? Tu opini\u00f3n nos ayuda mucho. \u00a1Gracias! \ud83d\ude4f"
            }
          ]
        }
      }
    },
    {
      "id": "f3-sheets-update",
      "name": "Actualizar a ESPERANDO_REVIEW",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.4,
      "position": [
        880,
        300
      ],
      "parameters": {
        "operation": "appendOrUpdate",
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "1vK8h8c8prheB8_KE7nwl6e4SblGoeALs_jE-vkgv5ho"
        },
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Pacientes"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "telefono": "={{ $('Filtrar CONFIRMADO de Hoy').item.json.telefono }}",
            "estado": "ESPERANDO_REVIEW",
            "fechaUltimoContacto": "={{ new Date().toISOString() }}"
          },
          "matchingColumns": [
            "telefono"
          ],
          "schema": [
            {
              "id": "telefono",
              "displayName": "telefono",
              "required": false,
              "defaultMatch": true,
              "canBeUsedToMatch": true
            },
            {
              "id": "estado",
              "displayName": "estado",
              "required": false,
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "fechaUltimoContacto",
              "displayName": "fechaUltimoContacto",
              "required": false,
              "defaultMatch": false,
              "canBeUsedToMatch": false
            }
          ]
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    }
  ],
  "connections": {
    "Cron 20hs": {
      "main": [
        [
          {
            "node": "Leer Pacientes",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Leer Pacientes": {
      "main": [
        [
          {
            "node": "Filtrar CONFIRMADO de Hoy",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filtrar CONFIRMADO de Hoy": {
      "main": [
        [
          {
            "node": "Enviar Pedido de Review",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Enviar Pedido de Review": {
      "main": [
        [
          {
            "node": "Actualizar a ESPERANDO_REVIEW",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1",
    "saveManualExecutions": true
  }
}

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

Flow 3 - Reviews Post-Turno. Uses googleSheets, httpRequest. Scheduled trigger; 5 nodes.

Source: https://github.com/SMsimarco/RecepIA---n8n/blob/main/n8n-flows/vapi/flow3_reviews_post_turno.json — original creator credit. Request a take-down →

More Data & Sheets workflows → · Browse all categories →

Related workflows

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

Data & Sheets

Complaint Triage Orchestrator (S2.3). Uses httpRequest, googleSheets. Scheduled trigger; 65 nodes.

HTTP Request, Google Sheets
Data & Sheets

This workflow automates video distribution to 9 social platforms simultaneously using Blotato's API. It includes both a scheduled publisher (checks Google Sheets for videos marked "Ready") and a subwo

Google Sheets, HTTP Request, Form Trigger +2
Data & Sheets

YogiAI. Uses googleSheets, googleSheetsTool, httpRequest, stopAndError. Scheduled trigger; 61 nodes.

Google Sheets, Google Sheets Tool, HTTP Request +1
Data & Sheets

This workflow monitors Google Calendar for events indicating that a customer will visit the company today or the next day, retrieves the required details, and sends reminder notifications to the relev

Google Calendar, Google Sheets, HTTP Request +1
Data & Sheets

ofn hook v0.24.0 beta. Uses start, httpRequest, functionItem, itemLists. Scheduled trigger; 42 nodes.

Start, HTTP Request, Function Item +3