Häufig gestellte Fragen
Erste Schritte: Vom Null-Setup zum bewerteten DR Wie funktionieren Preislisten in Billing Engine? Wie funktionieren Rules in Billing Engine?Diese Anleitung führt Sie durch das minimale Setup — von der Anmeldung bis zum ersten DR mit zugewiesenem Preis. Das schaffen Sie in 10 Minuten.
Jeden Schritt können Sie über das Dashboard oder direkt über die API ausführen — ganz wie Sie möchten.
Dashboard: Melden Sie sich unter /dashboard mit Ihren Zugangsdaten an.
API:
POST /api/v1/auth/login
Content-Type: application/json
{
"username": "ihr_login",
"password": "ihr_passwort"
}
Die Antwort enthält einen token. Fügen Sie ihn jedem weiteren Request hinzu:
Authorization: Bearer <token>
Eine Preisliste teilt dem System mit, wie viel ein bestimmter Datensatztyp kostet. Die Struktur hat drei Ebenen: Preisliste → Version → Positionen.
Dashboard: Bereich Preislisten → Preisliste hinzufügen.
API:
POST /api/v1/price-lists
Authorization: Bearer <token>
Content-Type: application/json
{
"name": "Standard-Preisliste",
"currency": "EUR"
}
Antwort: { "id": "<preislisten_id>" } — speichern Sie diese.
Eine Version legt fest, ab wann Preise gelten. Sie muss is_active: true haben, damit sie verwendet wird.
Dashboard: Preisliste öffnen → Reiter Versionen → Version hinzufügen.
API:
POST /api/v1/price-lists/<preislisten_id>/versions
Authorization: Bearer <token>
Content-Type: application/json
{
"name": "v1",
"valid_from": "2024-01-01T00:00:00Z",
"is_active": true
}
Antwort: { "id": "<versions_id>" } — speichern Sie diese.
Eine Position sagt: „Für Code VOICE_CZ berechne 0,06 € pro Einheit."
Dashboard: Version öffnen → Position hinzufügen.
API:
POST /api/v1/price-lists/versions/<versions_id>/items
Authorization: Bearer <token>
Content-Type: application/json
{
"code": "VOICE_CZ",
"name": "Sprachanruf CZ",
"price": 0.06,
"currency": "EUR",
"unit": "Minute"
}
Der Wert
codemuss exakt mit dem Feldcodeim DR übereinstimmen, den Sie in Schritt 4 senden.
Eine Pricing Rule verknüpft die Preisliste mit Ihren Kunden. Ohne Rule weiß das System nicht, welche Preisliste es verwenden soll.
Das folgende Setup wendet die Preisliste auf alle Ihre Kunden an.
Dashboard: Bereich Pricing Rules → Regel hinzufügen, Preisliste auswählen.
API:
POST /api/v1/pricing-rules
Authorization: Bearer <token>
Content-Type: application/json
{
"name": "Standardregel",
"code": "RULE_DEFAULT",
"price_list_id": "<preislisten_id>",
"priority": 10,
"is_active": true
}
Eine Rule ohne
customer_idodergroup_idgilt für alle Kunden. Um eine bestimmte Gruppe anzusprechen, fügen Sie"group_id": "<group_id>"hinzu.
Jetzt senden Sie den ersten Datensatz. Verwenden Sie "ondemand": true für sofortige Bewertung.
Kunden müssen nicht im Voraus angelegt werden. Geben Sie einfach eine beliebige Kennung in customer_external_id an — der Kunde wird beim ersten Datensatz automatisch erstellt.
POST /api/v1/dr
Authorization: Bearer <token>
Content-Type: application/json
{
"ondemand": true,
"records": [
{
"code": "VOICE_CZ",
"quantity": 10,
"time_from": "2024-06-15T10:00:00Z",
"customer_external_id": "CUST-001"
}
]
}
Antwort: { "inserted": 1, "ids": ["<dr_id>"] }
Was im Hintergrund passiert ist:
CUST-001 wurde automatisch erstellt (keine persönlichen Daten erforderlich)VOICE_CZ10 × 0,06 = 0,60 €ratedRechnungsunterlagen für einen beliebigen Zeitraum erhalten Sie mit einem einzigen Aufruf.
Dashboard: Bereich Billing → Zeitraum festlegen → Übersicht anzeigen.
API:
POST /api/v1/dr/billing
Authorization: Bearer <token>
Content-Type: application/json
{
"time_from": "2024-06-01T00:00:00Z",
"time_to": "2024-06-30T23:59:59Z",
"group_by": "code"
}
Antwort:
{
"items": [
{
"code": "VOICE_CZ",
"quantity": 10,
"amount_without_vat": 0.60,
"vat_amount": 0.00,
"amount": 0.60,
"currency": "EUR"
}
],
"summary": {
"amount_without_vat": 0.60,
"vat_amount": 0.00,
"amount": 0.60,
"currency": "EUR"
}
}
SMS_CZ, DATA_EU, …)customer_external_id-Werte verwenden; Kunden werden automatisch erstelltgroup_id erstellenvalid_from hinzufügen; historische Daten bleiben unverändertEine Preisliste in Billing Engine ist eine hierarchische Struktur aus Versionen und Positionen.
Jede Preisliste kann mehrere Versionen haben — typischerweise ist eine aktiv, die anderen archiviert.
Jede Version enthält Preispositionen, die durch einen Code identifiziert werden (z. B. VOICE_CZ, SMS_CZ).
Wenn ein Datensatz (DR) eingeht, führt das System folgende Schritte aus:
Preis = Menge × EinzelpreisPreislisten werden Kunden nicht direkt zugewiesen. Die Verknüpfung erfolgt über:
Dieses Modell ermöglicht es, eine einzige Preisliste für viele Kunden zu verwenden und bei Versionswechseln nicht jeden Kunden einzeln anpassen zu müssen.
Pricing Rules bestimmen, welche Preisliste und Version für einen Datensatz angewendet werden.
Jede Rule definiert:
conditions) — Übereinstimmungskriterien, z. B. code = "VOICE_CZ" oder quantity > 10Das System durchläuft die Rules von der höchsten Priorität und wendet die erste passende an.
Bedingungen unterstützen die Operatoren: eq, ne, gt, gte, lt, lte, like, in.
{ "code": { "op": "eq", "value": "VOICE_CZ" },
"quantity": { "op": "gt", "value": 0 } }
Trigger erweitern Rules um automatisierte Aktionen. Sie werden ausgelöst, wenn:
conditions)SUM(quantity) > 100 (aggregate_conditions)Ein Trigger kann eine Benachrichtigung senden oder eine Gebühr zur Abrechnung hinzufügen.