ring-a-ding-cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +14408 -0
- package/dist/skills/ring-a-ding/SKILL.md +129 -0
- package/package.json +26 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ring-a-ding
|
|
3
|
+
description: Use the rad CLI to place outbound phone calls with an AI voice agent, then check status, wait for completion, or end calls.
|
|
4
|
+
metadata: {"openclaw":{"requires":{"bins":["rad"],"env":["RAD_API_KEY","OPENAI_API_KEY"]},"primaryEnv":"RAD_API_KEY","install":[{"id":"node","kind":"node","package":"ring-a-ding-cli","bins":["rad"],"label":"Install Ring-a-Ding CLI (npm)"}]}}
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Ring-a-Ding
|
|
8
|
+
|
|
9
|
+
Use `rad` when you need an AI agent to call a person or business, hold a natural
|
|
10
|
+
voice conversation, and report back with the outcome.
|
|
11
|
+
|
|
12
|
+
## Requirements
|
|
13
|
+
|
|
14
|
+
- The shell tool must be allowed to run `rad`.
|
|
15
|
+
- `RAD_API_KEY` and `OPENAI_API_KEY` must be available for the agent run.
|
|
16
|
+
|
|
17
|
+
OpenClaw config example:
|
|
18
|
+
|
|
19
|
+
```json5
|
|
20
|
+
{
|
|
21
|
+
skills: {
|
|
22
|
+
entries: {
|
|
23
|
+
"ring-a-ding": {
|
|
24
|
+
apiKey: "rad_live_...",
|
|
25
|
+
env: {
|
|
26
|
+
OPENAI_API_KEY: "sk-..."
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Outside OpenClaw, `rad init` can store both keys in
|
|
35
|
+
`~/.config/ring-a-ding/config.json`.
|
|
36
|
+
|
|
37
|
+
## Recommended Workflow
|
|
38
|
+
|
|
39
|
+
Prefer non-blocking calls so you can continue other work while the phone call runs.
|
|
40
|
+
|
|
41
|
+
1. Start the call with `rad call`.
|
|
42
|
+
2. Save the returned `callId`.
|
|
43
|
+
3. Continue other work.
|
|
44
|
+
4. Check progress with `rad status <call_id>` after 30 to 60 seconds.
|
|
45
|
+
5. Repeat until the call reaches a terminal status.
|
|
46
|
+
6. Use `rad end <call_id>` if you need to cancel or hang up.
|
|
47
|
+
|
|
48
|
+
Use `rad wait` only when blocking the session is acceptable.
|
|
49
|
+
|
|
50
|
+
## Commands
|
|
51
|
+
|
|
52
|
+
### Start a call
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
rad call "+15551234567" "Call Sunrise Dental to schedule a cleaning for next week. Ask about Tuesday or Wednesday morning availability."
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
The call runs in the background and returns JSON with `callId` and the initial status.
|
|
59
|
+
|
|
60
|
+
### Start a call with complex options
|
|
61
|
+
|
|
62
|
+
Use stdin mode for long context or structured extraction:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
echo '{"to":"+15551234567","purpose":"Schedule appointment","context":"Patient: Jane Smith","personality":"Warm and professional","outputSchema":{"type":"object","properties":{"date":{"type":"string","description":"Appointment date"},"cost":{"type":"number","description":"Quoted price"}}}}' | rad call --stdin
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Check status
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
rad status <call_id>
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Returns status, transcript, summary, extracted data, and cost information when available.
|
|
75
|
+
|
|
76
|
+
### Wait for completion
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
rad wait <call_id> --timeout 300
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
This blocks until the call completes or times out. Prefer polling with `rad status`.
|
|
83
|
+
|
|
84
|
+
### End a call
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
rad end <call_id>
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Print this skill
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
rad skill
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Call Options
|
|
97
|
+
|
|
98
|
+
| Option | Description |
|
|
99
|
+
| --- | --- |
|
|
100
|
+
| `--voice <name>` | Voice: alloy, ash, ballad, cedar, coral, echo, marin, sage, shimmer, verse |
|
|
101
|
+
| `--caller-name <name>` | Name the AI uses to introduce itself |
|
|
102
|
+
| `--personality <text>` | Tone and behavior instructions |
|
|
103
|
+
| `--context <text>` | Background facts the AI may need |
|
|
104
|
+
| `--max-duration <min>` | Maximum call length in minutes, 1 to 30 |
|
|
105
|
+
| `--opening-line <text>` | First sentence when someone picks up |
|
|
106
|
+
| `--voicemail-action <action>` | `leave_message` or `hang_up` |
|
|
107
|
+
| `--output-schema <json>` | JSON Schema for structured extraction, or `@file.json` |
|
|
108
|
+
| `--wait` | Block until the call completes |
|
|
109
|
+
| `--timeout <sec>` | Timeout for `--wait` |
|
|
110
|
+
| `--stdin` | Read call parameters as JSON from stdin |
|
|
111
|
+
|
|
112
|
+
## Usage Guidance
|
|
113
|
+
|
|
114
|
+
- Be specific about who to call, what outcome you need, and any constraints.
|
|
115
|
+
- Put private reference details in `--context`, not in the main purpose.
|
|
116
|
+
- Use `--output-schema` when you need structured results such as times, prices, or confirmations.
|
|
117
|
+
- Use `--personality` to control the tone of the caller.
|
|
118
|
+
|
|
119
|
+
## Terminal Statuses
|
|
120
|
+
|
|
121
|
+
| Status | Meaning |
|
|
122
|
+
| --- | --- |
|
|
123
|
+
| `completed` | Call finished normally |
|
|
124
|
+
| `failed` | Call failed |
|
|
125
|
+
| `no-answer` | Nobody picked up |
|
|
126
|
+
| `busy` | Line was busy |
|
|
127
|
+
| `canceled` | Call was canceled by the user |
|
|
128
|
+
|
|
129
|
+
Non-terminal statuses: `initiated`, `ringing`, `in-progress`.
|
package/package.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ring-a-ding-cli",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "CLI for Ring-a-Ding — give AI agents the ability to make phone calls",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"rad": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": ["dist"],
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "rm -rf dist && esbuild src/index.ts --bundle --platform=node --format=esm --outfile=dist/index.js --banner:js='#!/usr/bin/env node' --external:commander && mkdir -p dist/skills && cp -r skills/. dist/skills",
|
|
13
|
+
"dev": "tsx src/index.ts",
|
|
14
|
+
"typecheck": "tsc --noEmit",
|
|
15
|
+
"test": "vitest run"
|
|
16
|
+
},
|
|
17
|
+
"dependencies": {
|
|
18
|
+
"commander": "^13.0.0"
|
|
19
|
+
},
|
|
20
|
+
"devDependencies": {
|
|
21
|
+
"@rad/shared": "workspace:*",
|
|
22
|
+
"esbuild": "^0.27.4",
|
|
23
|
+
"tsx": "^4.19.0",
|
|
24
|
+
"vitest": "^3.0.0"
|
|
25
|
+
}
|
|
26
|
+
}
|