Automation aktualisieren
curl --request PUT \
--url https://app.famulor.de/api/user/automate/flows/{id} \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"enabled": true,
"flow": {},
"sample": {},
"assistant_id": 123,
"confirm_side_effects": true
}
'import requests
url = "https://app.famulor.de/api/user/automate/flows/{id}"
payload = {
"name": "<string>",
"enabled": True,
"flow": {},
"sample": {},
"assistant_id": 123,
"confirm_side_effects": True
}
headers = {"Content-Type": "application/json"}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
enabled: true,
flow: {},
sample: {},
assistant_id: 123,
confirm_side_effects: true
})
};
fetch('https://app.famulor.de/api/user/automate/flows/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.famulor.de/api/user/automate/flows/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'enabled' => true,
'flow' => [
],
'sample' => [
],
'assistant_id' => 123,
'confirm_side_effects' => true
]),
CURLOPT_HTTPHEADER => [
"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/flows/{id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"enabled\": true,\n \"flow\": {},\n \"sample\": {},\n \"assistant_id\": 123,\n \"confirm_side_effects\": true\n}")
req, _ := http.NewRequest("PUT", url, payload)
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))
}HttpResponse<String> response = Unirest.put("https://app.famulor.de/api/user/automate/flows/{id}")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"enabled\": true,\n \"flow\": {},\n \"sample\": {},\n \"assistant_id\": 123,\n \"confirm_side_effects\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.famulor.de/api/user/automate/flows/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"enabled\": true,\n \"flow\": {},\n \"sample\": {},\n \"assistant_id\": 123,\n \"confirm_side_effects\": true\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "f4EaLhOW2zoEsXXSOJP2r",
"name": "Order lookup v2",
"status": "disabled",
"updated": true
}
}
{
"automation_id": "f4EaLhOW2zoEsXXSOJP2r",
"status": "active",
"test": {
"run_status": "SUCCEEDED",
"steps": []
},
"response": null,
"binding": null
}
{
"message": "Automation not found"
}
Automations
Automation aktualisieren
Benenne eine Famulor-Automation um, schalte sie ein/aus oder repariere sie mit einer korrigierten Definition.
PUT
/
api
/
user
/
automate
/
flows
/
{id}
Automation aktualisieren
curl --request PUT \
--url https://app.famulor.de/api/user/automate/flows/{id} \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"enabled": true,
"flow": {},
"sample": {},
"assistant_id": 123,
"confirm_side_effects": true
}
'import requests
url = "https://app.famulor.de/api/user/automate/flows/{id}"
payload = {
"name": "<string>",
"enabled": True,
"flow": {},
"sample": {},
"assistant_id": 123,
"confirm_side_effects": True
}
headers = {"Content-Type": "application/json"}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
enabled: true,
flow: {},
sample: {},
assistant_id: 123,
confirm_side_effects: true
})
};
fetch('https://app.famulor.de/api/user/automate/flows/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.famulor.de/api/user/automate/flows/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'enabled' => true,
'flow' => [
],
'sample' => [
],
'assistant_id' => 123,
'confirm_side_effects' => true
]),
CURLOPT_HTTPHEADER => [
"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/flows/{id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"enabled\": true,\n \"flow\": {},\n \"sample\": {},\n \"assistant_id\": 123,\n \"confirm_side_effects\": true\n}")
req, _ := http.NewRequest("PUT", url, payload)
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))
}HttpResponse<String> response = Unirest.put("https://app.famulor.de/api/user/automate/flows/{id}")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"enabled\": true,\n \"flow\": {},\n \"sample\": {},\n \"assistant_id\": 123,\n \"confirm_side_effects\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.famulor.de/api/user/automate/flows/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"enabled\": true,\n \"flow\": {},\n \"sample\": {},\n \"assistant_id\": 123,\n \"confirm_side_effects\": true\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "f4EaLhOW2zoEsXXSOJP2r",
"name": "Order lookup v2",
"status": "disabled",
"updated": true
}
}
{
"automation_id": "f4EaLhOW2zoEsXXSOJP2r",
"status": "active",
"test": {
"run_status": "SUCCEEDED",
"steps": []
},
"response": null,
"binding": null
}
{
"message": "Automation not found"
}
Famulor 1.0 API (Legacy). Diese Seite gilt nur für Famulor 1.0 (
app.famulor.de) und bleibt aus Kompatibilitätsgründen erhalten. Für die aktuelle Plattform nutze die Famulor 2.0 API-Referenz.- Umbenennen / Umschalten — mit
nameund/oderenableddie Automation umbenennen oder ein-/ausschalten. - Reparieren — mit einer korrigierten
flow-Definition wird die Automation an Ort und Stelle neu gebaut, mit einem echten Lauf erneut getestet und nur bei bestandenem Test wieder aktiviert. Nutze das nach der Diagnose mit Automation abrufen und Runs auflisten.
Eine Reparatur-Definition ersetzt die gesamte Automation — sie wird nie gemerged. Lies zuerst die aktuelle Definition und sende die komplette Kette zurück, inklusive aller Steps, die bleiben sollen; weggelassene Steps werden gelöscht. Der Reparatur-Testlauf führt die Automation echt aus — daher ist
confirm_side_effects: true erneut nötig, wenn die korrigierte Definition sendende Steps enthält.Pfad-Parameter
string
erforderlich
Die ID der Automation (aus Automationen auflisten)
Anfrage-Body
string
Ein neuer Name für die Automation (max. 255 Zeichen). Im Reparatur-Modus bleibt der aktuelle Name erhalten, wenn weggelassen.
boolean
true zum Einschalten, false zum Ausschaltenobject
Reparatur-Modus: die korrigierte vollständige Definition im gleichen Format wie Automation erstellen (
{"trigger": {...}, "steps": [...]}). Max. 1 MB.object
Sample-Payload für den Reparatur-Testlauf (bei Assistant-Events wird bei Weglassen das kanonische Sample verwendet). Max. 256 KB.
integer
Bei Reparaturen von Assistant-Event-Automationen: der Assistant, an den (erneut) gebunden wird. Meist bereits im Trigger der Definition enthalten.
boolean
Pflicht (
true), wenn die korrigierte Definition Steps enthält, die Nachrichten oder E-Mails senden, Anrufe starten oder Non-GET-HTTP-Requests machenname, enabled oder flow liefert 422 und verlangt mindestens eines davon.
Response — Umbenennen / Umschalten
object
Response — Reparatur
Dieselbe Envelope wie Automation erstellen (automation_id, status, test, response, binding), ohne webhook_url — eine reparierte Automation behält ihre ursprüngliche Webhook-URL. Mit HTTP 200; status ist active, active_untested oder test_failed. Schlägt der Reparatur-Test fehl, bleibt die Automation deaktiviert; eine vor dem Testlauf abgelehnte Reparatur (z. B. no_steps) lässt die bestehende Automation unberührt.
Eine fehlende Automation — oder eine, die nicht zu deinem Account gehört — liefert 404 mit {"message": "Automation not found"}.
{
"data": {
"id": "f4EaLhOW2zoEsXXSOJP2r",
"name": "Order lookup v2",
"status": "disabled",
"updated": true
}
}
{
"automation_id": "f4EaLhOW2zoEsXXSOJP2r",
"status": "active",
"test": {
"run_status": "SUCCEEDED",
"steps": []
},
"response": null,
"binding": null
}
{
"message": "Automation not found"
}
Verwandte Seiten: Automation abrufen, Vorherige Version wiederherstellen und Authentifizierung.