mcpField
N
n8n-pto-pipeline

n8n-pto-pipeline

github.com/datadrivenconstructionProductivity375103 installsUpdated 1w ago
Repository

About n8n-pto-pipeline

An n8n workflow for construction teams that distributes work assignments from Google Sheets to foremen through Telegram and collects status replies. It provides scheduled delivery and writes updates back to the task sheet.

Key features

  1. 01Scheduled task distribution
  2. 02Read tasks from Google Sheets
  3. 03Send assignments via Telegram
  4. 04Collect foreman status replies
  5. 05Update task status in Sheets

Use cases

  1. 01Send daily assignments to foremen
  2. 02Collect completion updates from the field
  3. 03Track task status in Google Sheets

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/datadrivenconstruction/ddc_skills_for_ai_agents_in_construction --skill n8n-pto-pipeline

After installing, type/n8n-pto-pipelinein Claude Code to confirm it loaded.

Bundled filesclaw.jsoninstructions.md

Details

From the project README

n8n PTO-Foreman Pipeline

Business Case

Problem Statement

Daily work planning in construction involves:

  • Manual task distribution from PTO (engineering) to field crews
  • Paper-based or phone-based task assignment
  • No systematic tracking of task completion
  • Delayed reporting and status updates
Solution

Automated n8n pipeline connecting Google Sheets task lists with Telegram bots for real-time task distribution and status collection.

Business Value
  • Real-time distribution - Tasks delivered automatically at 8:00 AM
  • Digital tracking - All assignments and statuses in one table
  • Mobile-first - Foremen use familiar Telegram interface
  • No app installation - Works with any phone with Telegram

Technical Implementation

Architecture
┌─────────────────┐    ┌─────────────┐    ┌─────────────────┐
│  Google Sheets  │───>│  n8n        │───>│  Telegram Bot   │
│  (Task List)    │    │  Pipeline   │    │  (To Foreman)   │
└─────────────────┘    └─────────────┘    └─────────────────┘
        ▲                     │                    │
        │                     │                    ▼
        │              ┌──────┴──────┐      ┌───────────┐
        └──────────────│   Status    │<─────│  Foreman  │
                       │   Update    │      │  Response │
                       └─────────────┘      └───────────┘
n8n Pipeline Components
1. Morning Trigger (8:00 AM)
{
  "nodes": [
    {
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "parameters": {
        "rule": {
          "interval": [
            {"field": "hours", "hoursInterval": 24}
          ]
        },
        "triggerTimes": {"item": [{"hour": 8, "minute": 0}]}
      }
    }
  ]
}
2. Get Tasks from Google Sheets
{
  "name": "Get Today Tasks",
  "type": "n8n-nodes-base.googleSheets",
  "parameters": {
    "operation": "read",
    "sheetId": "YOUR_SHEET_ID",
    "range": "Tasks!A:F",
    "options": {}
  }
}
3. Filter Tasks by Foreman
// Filter tasks for specific foreman based on chat_id
const chatId = $node["Telegram Trigger"].json["message"]["chat"]["id"];
const tasks = $input.all();

return tasks.filter(task =>
  task.json.foreman_chat_id === chatId.toString()
);
4. Format and Send via Telegram
// Format task message
const tasks = $input.all();
let message = "📋 *Задачи на сегодня:*\n\n";

tasks.forEach((task, index) => {
  message += `*${index + 1}. ${task.json.task_name}*\n`;
  message += `   📍 Участок: ${task.json.location}\n`;
  message += `   ⏰ Срок: ${task.json.deadline}\n`;
  message += `   📝 ${task.json.description}\n\n`;
});

message += "\n_Ответьте на это сообщение статусом:_\n";
message += "✅ выполнил\n❌ не выполнил + причина";

return [{json: {message}}];
5. Status Update Handler
// Parse foreman response and update status
const message = $node["Telegram Trigger"].json["message"]["text"];
const replyTo = $node["Telegram Trigger"].json["message"]["reply_to_message"];

let status = "в работе";
let comment = "";

if (message.toLowerCase().includes("выполнил")) {
  status = "выполнено";
} else if (message.toLowerCase().includes("не выполнил")) {
  status = "не выполнено";
  comment = message.replace(/не выполнил/i, "").trim();
}

return [{
  json: {
    task_id: replyTo.message_id,
    status: status,
    comment: comment,
    updated_at: new Date().toISOString()
  }
}];
Google Sheets Structure

Tasks Sheet:

ColumnDescription
task_idUnique task identifier
task_nameTask title
descriptionDetailed description
locationWork location
deadlineDue date/time
foreman_chat_idTelegram chat ID of assigned foreman
statusCurrent status
commentForeman comment

Foremen Sheet:

ColumnDescription
nameForeman name
chat_idTelegram chat ID
registered_atRegistration timestamp
Telegram Bot Setup
  1. Create bot via @BotFather
  2. Get bot token
  3. Configure webhook in n8n
  4. For local testing, use n8n tunnel:
npx n8n --tunnel

Usage Flow

For PTO Engineer:
  1. Open Google Sheets task list
  2. Add tasks with foreman assignments
  3. System automatically sends at 8:00 AM
For Foreman:
  1. Receive tasks via Telegram bot
  2. Reply to task message with status
  3. System updates Google Sheets automatically
For Manager:
  1. View real-time status in Google Sheets
  2. Generate reports from historical data
  3. Analyze completion rates by foreman/location

Deployment Options

Local (Testing)
npx n8n --tunnel
Cloud VPS (Production)
  • Hostinger n8n: ~$5/month
  • Amvera Cloud: ~170 RUB/month
  • timeweb: ~590 RUB/month

Extensions

  • Add photo attachments for completed work
  • Integrate with PostgreSQL for complex queries
  • Add reminder notifications
  • Generate daily/weekly reports
  • Connect to project management systems

Resources

  • Source: DDC Telegram Community discussions
  • Template: Available in DDC GitHub repository

Comments

Markdown supported