Documentation/Automation/Declarative Flow
IntermediateAutomation Engine v1

Declarative Flow

State machine deklaratif melalui sesi.flow({...}) untuk command, menu, input, media, integration, capability, kondisi, dan output.

Struktur minimum

js
sesi.flow({
  nama: "layanan",
  trigger: {
    command: ["layanan"],
    prefix: { mode: "inherit" }
  },
  mulai: "utama",
  timeout: "15m",
  modeWaktu: "idle",
  tahap: {
    utama: {
      balas: "Layanan aktif.",
      lanjut: "$selesai"
    }
  }
})
FieldKeterangan
namaNama flow 1–100 karakter.
triggerCommand entry point opsional/tercompile.
metaMetadata Command Registry dan Auto Menu.
mulaiNama state awal.
timeout30s–24h; format detik/30s/15m/2h.
modeWaktuidle/sliding atau fixed/tetap.
pengingatMaksimal 10 reminder sebelum expiry.
komponenReusable state fragments.
perintahCommand navigation di dalam session.
tahapObject state machine.

Flow harus static/compileable

Object yang diberikan ke `sesi.flow()` harus JSON-like/static agar compiler dapat membangun dependency, trigger, state graph, capability dan integration manifest sebelum publish.

Beberapa flow dalam satu script

Satu script boleh mendefinisikan beberapa `sesi.flow()`. Runtime hanya menjalankan flow yang dipilih command trigger atau flow yang sedang memiliki active session. Flow lain akan di-skip.

js
sesi.flow({ nama: "sticker", trigger: { command: ["sticker"] }, ... })
sesi.flow({ nama: "scan", trigger: { command: ["scan"] }, ... })

Subflow call / return

Flow dapat memanggil flow lain tanpa membuat session baru. Runtime menyimpan call stack di metadata conversation sehingga child flow dapat menunggu pesan berikutnya dan tetap kembali ke caller setelah worker restart.

js
sesi.flow({
  nama: "main",
  mulai: "cek",
  tahap: {
    cek: {
      panggil: {
        flow: "customer-lookup",
        dengan: { phone: "{sender.phone}" },
        simpanHasil: "customer",
        lanjut: "selesai"
      }
    },
    selesai: {
      balas: "Halo {customer.nama}",
      lanjut: "$selesai"
    }
  }
})

sesi.flow({
  nama: "customer-lookup",
  mulai: "return",
  tahap: {
    return: {
      kembalikan: { nama: "{args.phone}" }
    }
  }
})
FieldMakna
panggil.flowNama static subflow dalam automation yang sama.
panggil.denganArgument lokal child; dibaca melalui {args.*}.
panggil.simpanHasilTempat menyimpan nilai return pada data conversation caller.
panggil.lanjutState caller setelah child selesai.
kembalikan / returnNilai yang dikembalikan child ke caller.
$returnKembali ke caller tanpa payload eksplisit.

Alias Indonesia/English

Beberapa field menerima alias seperti `tahap/states`, `mulai/start`, `aksi/action`, `terima/receive`, `kirim/send`. Dokumentasi merekomendasikan gaya yang konsisten dalam satu flow agar lebih mudah dibaca.