Automate WhatsApp
When to use
Use this skill to build and run WhatsApp automations: workflow CRUD, graph edits, triggers, executions, function management, app integrations, and D1 database operations.
Setup
Env vars:
- •
KAPSO_API_BASE_URL(host only, no/platform/v1) - •
KAPSO_API_KEY
How to
Edit a workflow graph
- •Fetch graph:
node scripts/get-graph.js <workflow_id>(note thelock_version) - •Edit the JSON (see graph rules below)
- •Validate:
node scripts/validate-graph.js --definition-file <path> - •Update:
node scripts/update-graph.js <workflow_id> --expected-lock-version <n> --definition-file <path> - •Re-fetch to confirm
For small edits, use edit-graph.js with --old-file and --new-file instead.
If you get a lock_version conflict: re-fetch, re-apply changes, retry with new lock_version.
Manage triggers
- •List:
node scripts/list-triggers.js <workflow_id> - •Create:
node scripts/create-trigger.js <workflow_id> --trigger-type <type> --phone-number-id <id> - •Toggle:
node scripts/update-trigger.js --trigger-id <id> --active true|false - •Delete:
node scripts/delete-trigger.js --trigger-id <id>
For inbound_message triggers, first run node scripts/list-whatsapp-phone-numbers.js to get phone_number_id.
Debug executions
- •List:
node scripts/list-executions.js <workflow_id> - •Inspect:
node scripts/get-execution.js <execution-id> - •Get value:
node scripts/get-context-value.js <execution-id> --variable-path vars.foo - •Events:
node scripts/list-execution-events.js <execution-id>
Create and deploy a function
- •Write code with handler signature (see function rules below)
- •Create:
node scripts/create-function.js --name <name> --code-file <path> - •Deploy:
node scripts/deploy-function.js --function-id <id> - •Verify:
node scripts/get-function.js --function-id <id>
Set up agent node with app integrations
- •Find model:
node scripts/list-provider-models.js - •Find account:
node scripts/list-accounts.js --app-slug <slug>(usepipedream_account_id) - •Find action:
node scripts/search-actions.js --query <word> --app-slug <slug>(action_id = key) - •Create integration:
node scripts/create-integration.js --action-id <id> --app-slug <slug> --account-id <id> --configured-props <json> - •Add tools to agent node via
flow_agent_app_integration_tools
Database CRUD
- •List tables:
node scripts/list-tables.js - •Query:
node scripts/query-rows.js --table <name> --filters <json> - •Create/update/delete with row scripts
Graph rules
- •Exactly one start node with
id=start - •Never change existing node IDs
- •Use
{node_type}_{timestamp_ms}for new node IDs - •Non-decide nodes have 0 or 1 outgoing
nextedge - •Decide edge labels must match
conditions[].label - •Edge keys are
source/target/label(notfrom/to)
For full schema details, see references/graph-contract.md.
Function rules
js
async function handler(request, env) {
// Parse input
const body = await request.json();
// Use env.KV and env.DB as needed
return new Response(JSON.stringify({ result: "ok" }));
}
- •Do NOT use
export,export default, or arrow functions - •Return a
Responseobject
Execution context
Always use this structure:
- •
vars- user-defined variables - •
system- system variables - •
context- channel data - •
metadata- request metadata
Scripts
Workflows
| Script | Purpose |
|---|---|
list-workflows.js | List workflows (metadata only) |
get-workflow.js | Get workflow metadata |
create-workflow.js | Create a workflow |
update-workflow-settings.js | Update workflow settings |
Graph
| Script | Purpose |
|---|---|
get-graph.js | Get workflow graph + lock_version |
edit-graph.js | Patch graph via string replacement |
update-graph.js | Replace entire graph |
validate-graph.js | Validate graph structure locally |
Triggers
| Script | Purpose |
|---|---|
list-triggers.js | List triggers for a workflow |
create-trigger.js | Create a trigger |
update-trigger.js | Enable/disable a trigger |
delete-trigger.js | Delete a trigger |
list-whatsapp-phone-numbers.js | List phone numbers for trigger setup |
Executions
| Script | Purpose |
|---|---|
list-executions.js | List executions |
get-execution.js | Get execution details |
get-context-value.js | Read value from execution context |
update-execution-status.js | Force execution state |
resume-execution.js | Resume waiting execution |
list-execution-events.js | List execution events |
Functions
| Script | Purpose |
|---|---|
list-functions.js | List project functions |
get-function.js | Get function details + code |
create-function.js | Create a function |
update-function.js | Update function code |
deploy-function.js | Deploy function to runtime |
invoke-function.js | Invok |