أكواد برمجية

مكتبة منظمة من الأكواد المفيدة، سير عمل N8n، ومراجع سريعة.

8 كود

إرسال رسالة تليجرام مع أزرار تفاعلية

إرسال رسالة مع أزرار تفاعلية باستخدام واجهة بوت تليجرام في عقدة الكود بـ N8n.

تليجرامjavascript
javascript
// Send message with inline keyboard via Telegram Bot API
const botToken = $env.TELEGRAM_BOT_TOKEN;
const chatId = $input.first().json.chat_id;

const response = await fetch(
  `https://api.telegram.org/bot${botToken}/sendMessage`,
  {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      chat_id: chatId,
      text: "Choose an option:",
      parse_mode: "HTML",
      reply_markup: {
        inline_keyboard: [
          [
            { text: "✅ Approve", callback_data: "approve" },
            { text: "❌ Reject", callback_data: "reject" },
          ],
          [{ text: "📋 Details", callback_data: "details" }],
        ],
      },
    }),
  }
);

return [{ json: await response.json() }];
telegrambotinline-keyboardn8nVideo

استعلام PostgreSQL للإدراج أو التحديث مع إرجاع

إدراج أو تحديث صف عند التعارض وإرجاع النتيجة. مثالي لمزامنة البيانات من واجهات خارجية.

PostgreSQLsql
sql
-- Upsert: Insert or update user on conflict
-- Perfect for syncing Telegram user data
INSERT INTO users (
  telegram_id,
  username,
  first_name,
  last_seen,
  message_count
)
VALUES ($1, $2, $3, NOW(), 1)
ON CONFLICT (telegram_id)
DO UPDATE SET
  username = EXCLUDED.username,
  first_name = EXCLUDED.first_name,
  last_seen = NOW(),
  message_count = users.message_count + 1
RETURNING *;
postgresqlupserton-conflictreturning

عقدة الكود N8n: حلقة تقسيم صفحات API

جلب جميع الصفحات من نقطة نهاية API مقسمة في تنفيذ واحد لعقدة الكود.

عقدة الكودjavascript
javascript
// Fetch all pages from a paginated API
const baseUrl = "https://api.example.com/data";
const allItems = [];
let page = 1;
let hasMore = true;

while (hasMore) {
  const response = await this.helpers.httpRequest({
    url: `${baseUrl}?page=${page}&limit=100`,
    method: "GET",
    headers: {
      Authorization: `Bearer ${$env.API_TOKEN}`,
    },
  });

  allItems.push(...response.data);
  hasMore = response.pagination.hasNext;
  page++;

  // Safety limit
  if (page > 50) break;
}

return allItems.map(item => ({ json: item }));
n8npaginationapiloopGitHub

التحقق من توقيع Webhook في N8n

التحقق من توقيعات Webhook الواردة باستخدام HMAC-SHA256 لضمان مصداقية الطلبات.

عقدة الكودjavascript
javascript
// Verify webhook signature (HMAC-SHA256)
const crypto = require('crypto');

const secret = $env.WEBHOOK_SECRET;
const payload = JSON.stringify($input.first().json);
const signature = $input.first().headers['x-signature'];

const expected = crypto
  .createHmac('sha256', secret)
  .update(payload)
  .digest('hex');

if (signature !== `sha256=${expected}`) {
  throw new Error('Invalid webhook signature');
}

return $input.all();
n8nwebhooksecurityhmac

استعلام حقول JSONB في PostgreSQL

استخراج وفلترة البيانات من أعمدة JSONB باستخدام عوامل PostgreSQL.

PostgreSQLsql
sql
-- Query JSONB fields in PostgreSQL
-- Get users who have 'n8n' in their skills array
SELECT
  id,
  username,
  metadata->>'email' AS email,
  metadata->'skills' AS skills,
  created_at
FROM users
WHERE
  metadata->'skills' @> '["n8n"]'::jsonb
  AND (metadata->>'active')::boolean = true
ORDER BY created_at DESC
LIMIT 20;

-- Update a nested JSONB field
UPDATE users
SET metadata = jsonb_set(
  metadata,
  '{last_login}',
  to_jsonb(NOW()::text)
)
WHERE telegram_id = $1;
postgresqljsonbqueryfilter

تحميل ملف من تليجرام

تحميل ملف مرسل إلى بوت تليجرام وحفظه باستخدام N8n.

تليجرامjavascript
javascript
// Download file from Telegram message
const botToken = $env.TELEGRAM_BOT_TOKEN;
const fileId = $input.first().json.message.document.file_id;

// Step 1: Get file path
const fileInfo = await fetch(
  `https://api.telegram.org/bot${botToken}/getFile?file_id=${fileId}`
).then(r => r.json());

const filePath = fileInfo.result.file_path;

// Step 2: Download file
const fileUrl = `https://api.telegram.org/file/bot${botToken}/${filePath}`;
const fileBuffer = await fetch(fileUrl).then(r => r.arrayBuffer());

return [{
  json: {
    fileName: filePath.split('/').pop(),
    fileSize: fileBuffer.byteLength,
    fileUrl,
  },
  binary: {
    data: {
      data: Buffer.from(fileBuffer).toString('base64'),
      mimeType: 'application/octet-stream',
      fileName: filePath.split('/').pop(),
    },
  },
}];
telegrambotfiledownloadVideo

معالجة الأخطاء في N8n مع تنبيه تليجرام

نمط معالجة أخطاء قابل لإعادة الاستخدام يلتقط أخطاء سير العمل ويرسل تنبيهات مفصلة إلى تليجرام.

N8n عامjavascript
javascript
// Error handler — send alert to Telegram
const botToken = $env.TELEGRAM_BOT_TOKEN;
const adminChatId = $env.ADMIN_CHAT_ID;

const error = $input.first().json;
const workflowName = $workflow.name;
const timestamp = new Date().toISOString();

const message = [
  "🚨 <b>Workflow Error</b>",
  "",
  `📋 <b>Workflow:</b> ${workflowName}`,
  `⏰ <b>Time:</b> ${timestamp}`,
  `❌ <b>Error:</b> <code>${error.message || 'Unknown'}</code>`,
  `📍 <b>Node:</b> ${error.node || 'N/A'}`,
  "",
  "Check the execution log for details.",
].join("\n");

await fetch(
  `https://api.telegram.org/bot${botToken}/sendMessage`,
  {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      chat_id: adminChatId,
      text: message,
      parse_mode: "HTML",
    }),
  }
);

return [{ json: { alertSent: true } }];
n8nerror-handlingtelegrammonitoring

سكريبت تنظيف Docker

تنظيف صور وحاويات ومجلدات Docker غير المستخدمة لتحرير مساحة القرص على الخادم.

N8n عامbash
bash
#!/bin/bash
# Docker cleanup script — safe for production VPS

echo "🧹 Docker Cleanup Starting..."

# Remove stopped containers
echo "Removing stopped containers..."
docker container prune -f

# Remove unused images (not used by any container)
echo "Removing dangling images..."
docker image prune -f

# Remove unused volumes (careful!)
echo "Removing unused volumes..."
docker volume prune -f

# Show disk usage
echo ""
echo "📊 Docker disk usage:"
docker system df

echo "✅ Cleanup complete!"
dockercleanupvpsbash