npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

n8n-nodes-aplikacja-ofertowania

v0.1.0

Published

N8N community node do tworzenia ofert w Aplikacji do Ofertowania

Readme

n8n-nodes-aplikacja-ofertowania

Community node dla n8n umożliwiający tworzenie ofert w Aplikacji do Ofertowania.

Spis treści

Instalacja

Self-hosted n8n (zalecane)

Opcja 1: Przez UI (n8n >= 0.199.0)

  1. Otwórz SettingsCommunity Nodes
  2. Kliknij Install a community node
  3. Wpisz: n8n-nodes-aplikacja-ofertowania
  4. Kliknij Install

Opcja 2: Z linii poleceń

# W katalogu ~/.n8n (lub N8N_USER_FOLDER)
cd ~/.n8n
npm install n8n-nodes-aplikacja-ofertowania

Zrestartuj n8n po instalacji.

Opcja 3: Instalacja lokalna (development)

# Sklonuj repo
cd /ścieżka/do/aplikacja-do-ofertowania/n8n-nodes-aplikacja-ofertowania

# Zainstaluj zależności i zbuduj
npm install
npm run build

# Skopiuj lub zlinkuj do katalogu n8n
# Linux/Mac:
ln -s $(pwd) ~/.n8n/custom/n8n-nodes-aplikacja-ofertowania

# Lub zamontuj przez Docker:
# docker run -v $(pwd):/home/node/.n8n/custom/n8n-nodes-aplikacja-ofertowania n8nio/n8n

n8n Cloud

Community nodes nie są dostępne w n8n Cloud. Użyj self-hosted n8n.

Konfiguracja credentiala

1. Wygeneruj klucz API

  1. Zaloguj się do panelu admina swojego tenanta
  2. Przejdź do UstawieniaKlucze API (/admin/api-keys)
  3. Kliknij Utwórz nowy klucz
  4. Podaj nazwę (np. "n8n integration")
  5. Upewnij się, że klucz ma scope: offers:write i offers:read
  6. Skopiuj klucz — zobaczysz go tylko raz!

2. Utwórz credential w n8n

  1. W n8n otwórz CredentialsAdd Credential
  2. Wybierz Aplikacja do Ofertowania API
  3. Wypełnij pola:
    • Base URL: Pełny URL twojego tenanta, np. https://twoj-slug.systemofert.kijowski.com.pl
    • API Key: Klucz skopiowany w kroku 1 (format: ofr_...)
  4. Kliknij Save

n8n automatycznie zweryfikuje połączenie przez wywołanie GET /api/templates.

Operacje

Offer → Create

Tworzy nową ofertę na podstawie szablonu.

| Pole | Typ | Wymagane | Opis | |------|-----|----------|------| | Template | dropdown | ✅ | Szablon oferty do użycia | | Recipient Name | string | ❌ | Imię i nazwisko odbiorcy | | Recipient Email | string | ❌ | Email odbiorcy (wymagany jeśli Send Email = true) | | Title | string | ❌ | Tytuł oferty (obsługuje Mustache placeholdery) | | Use JSON Mode | boolean | ❌ | Przełącz na tryb JSON dla wartości | | Values | key-value / JSON | ❌ | Wartości placeholderów szablonu | | Send Email | boolean | ❌ | Czy wysłać email do odbiorcy |

Additional Fields:

| Pole | Opis | |------|------| | CTA Type | none, accept, lub calendly | | Calendly URL | URL do Calendly (gdy CTA = calendly) | | Logo URL | URL logo do wyświetlenia na ofercie | | Mail Template ID | UUID szablonu maila | | Nav Button Bg | Kolor tła przycisku nawigacji | | Nav Button Accent | Kolor akcentu przycisku | | Image Replacements | Zamiany URL obrazów | | Font Replacements | Zamiany URL fontów |

Output:

{
  "success": true,
  "offerId": "uuid-oferty",
  "token": "abc123xyz",
  "status": "cold",
  "url": "https://tenant.example.com/o/abc123xyz",
  "emailQueued": true
}

Przykładowy workflow

Webhook → Create Offer → Respond

Typowy przypadek: formularz na stronie wysyła dane przez webhook, n8n tworzy ofertę.

┌─────────────┐     ┌──────────────────────────┐     ┌─────────────────┐
│   Webhook   │────▶│ Aplikacja do Ofertowania │────▶│ Respond Webhook │
│   (trigger) │     │     (Create Offer)       │     │                 │
└─────────────┘     └──────────────────────────┘     └─────────────────┘

Konfiguracja Webhook node:

  • HTTP Method: POST
  • Path: /create-offer
  • Response Mode: Last Node

Konfiguracja Aplikacja do Ofertowania node:

  • Template: Wybierz z listy
  • Recipient Name: {{ $json.body.name }}
  • Recipient Email: {{ $json.body.email }}
  • Title: Oferta dla {{ $json.body.name }}
  • Use JSON Mode: ✅ ON
  • Values (JSON): {{ JSON.stringify($json.body) }}
  • Send Email: ✅ ON

Konfiguracja Respond to Webhook node:

{
  "success": true,
  "offerUrl": "{{ $json.url }}"
}

Workflow JSON (do importu)

{
  "name": "Create Offer from Form",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "create-offer",
        "responseMode": "lastNode"
      },
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [250, 300]
    },
    {
      "parameters": {
        "resource": "offer",
        "operation": "create",
        "templateId": "={{ $json.body.templateId }}",
        "recipientName": "={{ $json.body.name }}",
        "recipientEmail": "={{ $json.body.email }}",
        "title": "Oferta dla {{ $json.body.name }}",
        "useJsonMode": true,
        "valuesJson": "={{ JSON.stringify($json.body.values || {}) }}",
        "sendEmail": true
      },
      "name": "Create Offer",
      "type": "n8n-nodes-aplikacja-ofertowania.aplikacjaOfertowania",
      "position": [500, 300],
      "credentials": {
        "aplikacjaOfertowaniaApi": {
          "id": "your-credential-id",
          "name": "Aplikacja do Ofertowania API"
        }
      }
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ { success: true, offerUrl: $json.url } }}"
      },
      "name": "Respond",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [750, 300]
    }
  ],
  "connections": {
    "Webhook": {
      "main": [[{ "node": "Create Offer", "type": "main", "index": 0 }]]
    },
    "Create Offer": {
      "main": [[{ "node": "Respond", "type": "main", "index": 0 }]]
    }
  }
}

Mapowanie pól formularza

Jeśli twój szablon używa placeholderów Mustache:

<p>Szanowny/a {{imie}} {{nazwisko}},</p>
<p>Przygotowaliśmy dla Ciebie ofertę o wartości {{cena}} PLN.</p>

To webhook z formularza powinien wysłać:

{
  "name": "Jan Kowalski",
  "email": "[email protected]",
  "values": {
    "imie": "Jan",
    "nazwisko": "Kowalski",
    "cena": "5000"
  }
}

A w node Values (JSON): {{ JSON.stringify($json.body.values) }}

Rozwiązywanie problemów

"Nieprawidłowy klucz API"

  • Sprawdź czy klucz zaczyna się od ofr_
  • Upewnij się, że Base URL jest poprawny (bez końcowego /)
  • Wygeneruj nowy klucz w panelu admina

"Klucz API nie ma uprawnień offers:read"

Wygeneruj nowy klucz z scopami: offers:read, offers:write

"Nie znaleziono szablonu"

  • Sprawdź czy szablon istnieje w panelu admina
  • Upewnij się, że klucz API należy do tego samego tenanta

Dropdown "Template" jest pusty

  • Sprawdź połączenie z API (credential test)
  • Upewnij się, że tenant ma co najmniej jeden szablon

Email nie został wysłany

  • Sprawdź czy Recipient Email jest wypełniony
  • Sprawdź konfigurację SMTP w panelu admina (/admin/settings/smtp)
  • Sprawdź czy Send Email = true

Development

cd n8n-nodes-aplikacja-ofertowania

# Install dependencies
npm install

# Build
npm run build

# Watch mode
npm run dev

# Lint
npm run lint

# Format
npm run format

Licencja

MIT