Activities
Which standard workflow activities to use, and how to build, deploy and debug custom Python activities from Git.
Step-by-step guidance.
Before you start
- A workflow task. App APIs and CRUD belong in a backend instead.
Standard activities
| Need | Use |
|---|---|
| SQL inside a workflow job | `SqlExecutionEngine` (Run Database Query) with a saved query. See Database. |
| Durable files | `file-storage-operations`. See File storage. |
| PDF, Office, text or image text and structure | The shared Extract Document activity. |
| Visual or audio and video interpretation | A native AI agent step. See AI steps. |
| Existing workflow authentication | `UserRegister`, `UserLogin` and `IssueFactoryJwt`. New apps use native accounts. |
| Images, video and voice | Image Generation, Video Generation and Voice Generation. |
Reuse discovered activity IDs. Configure and debug the first critical route before adding others. Supported formats need no custom activity.
Build a custom activity
The path is local smoke test, pushed commit, build, healthy deployment, then one safe debug request.
- Call `getFactoryBuilderContext` and `searchActivities`, and inspect `activities/*/rumata.activity.yaml`.
- Run `bash $RUMATA_ACTIVITY_VALIDATOR_PATH <activity-dir>` (fallback `/app/scripts/verification/validate-git-backed-activity.sh`) and require `Local activity smoke passed`. This checks the source and handler contract, not the remote build.
- Commit and push within the user’s authorization. For a new activity call `createActivityFromGit`. For an existing one, edit, push, then call `buildActivityFromGit`. Never recreate an existing activity.
- Poll non-terminal builds with `getActivityBuild`. Only a successful build can be deployed with `deployActivityRealtime`.
- Poll `getActivityDeployment` until healthy.
- For a workflow demo, search workflows, create a minimal wrapper and call `debugWorkflowRequest`.
Activity source contract
text
activities/<id>/
main.py
requirements.txt
rumata.activity.yaml- Python only. Declare the Python 3.12 realtime runtime, with entry and package fields relative to the activity directory.
- Match `handler(data, ...configurationArgs)` to the configuration template. Do not add `context`.
- Reference secrets by name, never by value.
- Local uncommitted files are not build input. Builds use the project’s linked repository at an immutable commit, which may differ from the factory checkout.