Automation-Vorlage anwenden
curl --request POST \
--url https://app.famulor.de/api/user/automate/templates/{key} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"params": {},
"assistant_id": 123,
"name": "<string>",
"confirm_side_effects": true
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({params: {}, assistant_id: 123, name: '<string>', confirm_side_effects: true})
};
fetch('https://app.famulor.de/api/user/automate/templates/{key}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://app.famulor.de/api/user/automate/templates/{key}"
payload = {
"params": {},
"assistant_id": 123,
"name": "<string>",
"confirm_side_effects": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.famulor.de/api/user/automate/templates/{key}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'params' => [
],
'assistant_id' => 123,
'name' => '<string>',
'confirm_side_effects' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.famulor.de/api/user/automate/templates/{key}"
payload := strings.NewReader("{\n \"params\": {},\n \"assistant_id\": 123,\n \"name\": \"<string>\",\n \"confirm_side_effects\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"automation_id": "aB3xYz01MnOpQrStUvWxY",
"webhook_url": null,
"status": "active",
"test": {
"run_status": "SUCCEEDED",
"steps": []
},
"response": null,
"binding": {
"type": "post_call",
"assistant_id": 123,
"bound": true
}
}
{
"message": "These values are required: spreadsheet_id. Ask the user for them — never guess or reuse example values.",
"error": "missing_params",
"params": [
{
"key": "spreadsheet_id",
"label": "Google Spreadsheet ID",
"description": "The spreadsheet to append rows to.",
"required": true,
"example": "1AbCdEfGhIjKlMnOpQrStUvWxYz"
}
]
}
{
"message": "No template with that key — call the template list first.",
"error": "template_not_found",
"params": null
}
Automation-Vorlage anwenden
Erstelle eine Famulor-Automation aus einer fertigen Vorlage und prüfe sie mit einem echten Testlauf.
POST
/
api
/
user
/
automate
/
templates
/
{key}
Automation-Vorlage anwenden
curl --request POST \
--url https://app.famulor.de/api/user/automate/templates/{key} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"params": {},
"assistant_id": 123,
"name": "<string>",
"confirm_side_effects": true
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({params: {}, assistant_id: 123, name: '<string>', confirm_side_effects: true})
};
fetch('https://app.famulor.de/api/user/automate/templates/{key}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://app.famulor.de/api/user/automate/templates/{key}"
payload = {
"params": {},
"assistant_id": 123,
"name": "<string>",
"confirm_side_effects": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.famulor.de/api/user/automate/templates/{key}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'params' => [
],
'assistant_id' => 123,
'name' => '<string>',
'confirm_side_effects' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.famulor.de/api/user/automate/templates/{key}"
payload := strings.NewReader("{\n \"params\": {},\n \"assistant_id\": 123,\n \"name\": \"<string>\",\n \"confirm_side_effects\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"automation_id": "aB3xYz01MnOpQrStUvWxY",
"webhook_url": null,
"status": "active",
"test": {
"run_status": "SUCCEEDED",
"steps": []
},
"response": null,
"binding": {
"type": "post_call",
"assistant_id": 123,
"bound": true
}
}
{
"message": "These values are required: spreadsheet_id. Ask the user for them — never guess or reuse example values.",
"error": "missing_params",
"params": [
{
"key": "spreadsheet_id",
"label": "Google Spreadsheet ID",
"description": "The spreadsheet to append rows to.",
"required": true,
"example": "1AbCdEfGhIjKlMnOpQrStUvWxYz"
}
]
}
{
"message": "No template with that key — call the template list first.",
"error": "template_not_found",
"params": null
}
Dieser Endpunkt erstellt eine Automation aus einer Vorlage (siehe Vorlagen auflisten), führt einen echten Test aus und — bei Assistant-Event-Vorlagen — bindet die Automation nach bestandenem Test an den Assistant. Die Response hat dieselbe Envelope wie Automation erstellen.
Vorlagen mit
side_effects: true senden im Testlauf wirklich Nachrichten oder starten Anrufe — Anwenden erfordert confirm_side_effects: true, und der Test nutzt die echten Werte, die du geliefert hast. Nie eine Vorlage mit Beispiel- oder geratenen Werten anwenden.Path Parameters
string
erforderlich
Der Vorlagen-Key (aus Vorlagen auflisten). Ein unbekannter Key liefert
404.Request Body
object
Die Parameter der Vorlage als Key-Value-Paare — siehe die
params-Liste der Vorlage. Fehlende Pflichtparameter liefern 422 (missing_params) mit genauer Auflistung. Max. 64 KB.integer
Der Assistant, an den die resultierende Automation gebunden wird. Pflicht bei Vorlagen mit
requires_assistant: true.string
Ein eigener Name für die Automation (max. 255 Zeichen); Standard ist der Vorlagenname
boolean
Pflicht (
true) für Vorlagen mit side_effects: trueResponse
Die Envelope von Automation erstellen:automation_id, webhook_url (bei webhook-getriggerten Vorlagen wie lead-intake-webhook und Mid-Call-Lookup; null bei Assistant-Event-Vorlagen), status (active / active_untested / test_failed), test (run_status + Ergebnisse pro Step), response, binding. Liefert 201, wenn die Automation aktiv ist, 200, wenn der Testlauf fehlschlug.
Parkt ein Testlauf an einem Delay-Step (z. B. post-call-callback) mit run_status: "PAUSED" — das ist Erfolg, kein Fehler: alle Steps vor dem Delay sind gelaufen, der Lauf setzt zur Zielzeit fort.
Fehlercodes (422)
Harte Fehler liefern{"message": "...", "error": "<code>", "params": ...} und es wird nichts erstellt. Wichtige Codes:
| error | Bedeutung |
|---|---|
missing_params | Pflichtparameter fehlen — das params-Array der Response listet die vollständigen Specs. |
invalid_param_choice | Ein Parameter referenziert eine Ressource (z. B. Spreadsheet), die im verbundenen Konto nicht existiert — die Meldung listet die echten Optionen. |
needs_connection / needs_reconnection | Eine benötigte Account-Connection fehlt oder ist kaputt — die Meldung enthält die genauen Schritte in der Famulor-App (einmalig). |
side_effects_require_confirmation | Die Vorlage sendet echt — erneut mit confirm_side_effects: true versuchen. |
assistant_required / assistant_not_found / binding_conflict | Wie bei Automation erstellen. |
{
"automation_id": "aB3xYz01MnOpQrStUvWxY",
"webhook_url": null,
"status": "active",
"test": {
"run_status": "SUCCEEDED",
"steps": []
},
"response": null,
"binding": {
"type": "post_call",
"assistant_id": 123,
"bound": true
}
}
{
"message": "These values are required: spreadsheet_id. Ask the user for them — never guess or reuse example values.",
"error": "missing_params",
"params": [
{
"key": "spreadsheet_id",
"label": "Google Spreadsheet ID",
"description": "The spreadsheet to append rows to.",
"required": true,
"example": "1AbCdEfGhIjKlMnOpQrStUvWxYz"
}
]
}
{
"message": "No template with that key — call the template list first.",
"error": "template_not_found",
"params": null
}
Verwandte Seiten: Vorlagen auflisten, Automation erstellen und Authentifizierung.
⌘I