@jambonz/mcp-schema-server 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/AGENTS.md +305 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +135 -0
- package/dist/index.js.map +1 -0
- package/package.json +47 -0
- package/schema/components/actionHook.schema.json +36 -0
- package/schema/components/actionHookDelayAction.schema.json +37 -0
- package/schema/components/auth.schema.json +18 -0
- package/schema/components/bidirectionalAudio.schema.json +22 -0
- package/schema/components/fillerNoise.schema.json +25 -0
- package/schema/components/recognizer.schema.json +280 -0
- package/schema/components/synthesizer.schema.json +82 -0
- package/schema/components/target.schema.json +105 -0
- package/schema/components/vad.schema.json +48 -0
- package/schema/jambonz-app.schema.json +106 -0
- package/schema/verbs/alert.schema.json +20 -0
- package/schema/verbs/answer.schema.json +12 -0
- package/schema/verbs/conference.schema.json +43 -0
- package/schema/verbs/config.schema.json +174 -0
- package/schema/verbs/dequeue.schema.json +36 -0
- package/schema/verbs/dial.schema.json +157 -0
- package/schema/verbs/dtmf.schema.json +27 -0
- package/schema/verbs/dub.schema.json +52 -0
- package/schema/verbs/enqueue.schema.json +38 -0
- package/schema/verbs/gather.schema.json +145 -0
- package/schema/verbs/hangup.schema.json +29 -0
- package/schema/verbs/leave.schema.json +12 -0
- package/schema/verbs/listen.schema.json +110 -0
- package/schema/verbs/llm.schema.json +131 -0
- package/schema/verbs/message.schema.json +30 -0
- package/schema/verbs/pause.schema.json +26 -0
- package/schema/verbs/pipeline.schema.json +61 -0
- package/schema/verbs/play.schema.json +69 -0
- package/schema/verbs/redirect.schema.json +23 -0
- package/schema/verbs/say.schema.json +84 -0
- package/schema/verbs/sip-decline.schema.json +31 -0
- package/schema/verbs/sip-refer.schema.json +41 -0
- package/schema/verbs/sip-request.schema.json +33 -0
- package/schema/verbs/stream.schema.json +30 -0
- package/schema/verbs/tag.schema.json +21 -0
- package/schema/verbs/transcribe.schema.json +44 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://jambonz.org/schema/verbs/conference",
|
|
4
|
+
"title": "Conference",
|
|
5
|
+
"description": "Places the caller into a multi-party conference room. Multiple callers in the same named conference can speak to each other. Supports features like muting, recording, waiting rooms, and participant limits.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"verb": { "const": "conference" },
|
|
9
|
+
"id": { "type": "string", "description": "An optional unique identifier for this verb instance." },
|
|
10
|
+
"name": {
|
|
11
|
+
"type": "string",
|
|
12
|
+
"description": "The name of the conference room. All callers joining the same named conference are connected together.",
|
|
13
|
+
"examples": ["team-standup", "customer-call-12345"]
|
|
14
|
+
},
|
|
15
|
+
"beep": { "type": "boolean", "description": "If true, play a beep when participants join or leave." },
|
|
16
|
+
"memberTag": { "type": "string", "description": "A tag to identify this participant. Can be used to target specific members for actions like muting or whispering." },
|
|
17
|
+
"speakOnlyTo": { "type": "string", "description": "If set, this participant's audio is only heard by the member with the specified memberTag. Creates a private whisper channel." },
|
|
18
|
+
"startConferenceOnEnter": { "type": "boolean", "description": "If true (default), the conference starts when this participant joins. If false, this participant waits silently until a participant with startConferenceOnEnter=true joins." },
|
|
19
|
+
"endConferenceOnExit": { "type": "boolean", "description": "If true, the conference ends for all participants when this participant leaves." },
|
|
20
|
+
"endConferenceDuration": { "type": "number", "description": "Maximum duration of the conference in seconds." },
|
|
21
|
+
"maxParticipants": { "type": "number", "description": "Maximum number of participants allowed in the conference." },
|
|
22
|
+
"joinMuted": { "type": "boolean", "description": "If true, this participant joins the conference muted." },
|
|
23
|
+
"actionHook": { "$ref": "../components/actionHook", "description": "A webhook invoked when this participant leaves the conference." },
|
|
24
|
+
"waitHook": { "$ref": "../components/actionHook", "description": "A webhook invoked while this participant is waiting for the conference to start. Should return verbs to play (e.g. hold music)." },
|
|
25
|
+
"statusEvents": { "type": "array", "items": { "type": "string" }, "description": "List of conference events to receive via the statusHook." },
|
|
26
|
+
"statusHook": { "$ref": "../components/actionHook", "description": "A webhook to receive conference status events (joins, leaves, etc.)." },
|
|
27
|
+
"enterHook": { "$ref": "../components/actionHook", "description": "A webhook invoked when this participant first enters the conference." },
|
|
28
|
+
"record": { "type": "object", "description": "Recording configuration for the conference.", "additionalProperties": true },
|
|
29
|
+
"listen": { "type": "object", "description": "Audio streaming configuration for the conference.", "additionalProperties": true },
|
|
30
|
+
"distributeDtmf": { "type": "boolean", "description": "If true, DTMF events from this participant are distributed to all other participants." }
|
|
31
|
+
},
|
|
32
|
+
"required": ["name"],
|
|
33
|
+
"examples": [
|
|
34
|
+
{
|
|
35
|
+
"verb": "conference",
|
|
36
|
+
"name": "team-standup",
|
|
37
|
+
"beep": true,
|
|
38
|
+
"startConferenceOnEnter": true,
|
|
39
|
+
"endConferenceOnExit": false,
|
|
40
|
+
"statusHook": "/conference-events"
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://jambonz.org/schema/verbs/config",
|
|
4
|
+
"title": "Config",
|
|
5
|
+
"description": "Sets session-level defaults for the call. Configures default TTS, STT, VAD, recording, streaming, and other session-wide settings. These defaults apply to all subsequent verbs unless overridden at the verb level. Typically the first verb in an application. Can be used multiple times during a call to change settings.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"verb": {
|
|
9
|
+
"const": "config",
|
|
10
|
+
"description": "The verb name."
|
|
11
|
+
},
|
|
12
|
+
"id": {
|
|
13
|
+
"type": "string",
|
|
14
|
+
"description": "An optional unique identifier for this verb instance."
|
|
15
|
+
},
|
|
16
|
+
"synthesizer": {
|
|
17
|
+
"$ref": "../components/synthesizer",
|
|
18
|
+
"description": "Default TTS configuration for the session."
|
|
19
|
+
},
|
|
20
|
+
"recognizer": {
|
|
21
|
+
"$ref": "../components/recognizer",
|
|
22
|
+
"description": "Default STT configuration for the session."
|
|
23
|
+
},
|
|
24
|
+
"bargeIn": {
|
|
25
|
+
"type": "object",
|
|
26
|
+
"description": "Default barge-in configuration. When enabled, callers can interrupt playing prompts with speech or DTMF.",
|
|
27
|
+
"properties": {
|
|
28
|
+
"enable": { "type": "boolean" },
|
|
29
|
+
"sticky": {
|
|
30
|
+
"type": "boolean",
|
|
31
|
+
"description": "If true, barge-in settings persist across verbs rather than resetting after each verb."
|
|
32
|
+
},
|
|
33
|
+
"actionHook": { "$ref": "../components/actionHook" },
|
|
34
|
+
"input": {
|
|
35
|
+
"type": "array",
|
|
36
|
+
"items": { "type": "string", "enum": ["speech", "digits"] }
|
|
37
|
+
},
|
|
38
|
+
"minBargeinWordCount": { "type": "number" }
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"ttsStream": {
|
|
42
|
+
"type": "object",
|
|
43
|
+
"description": "Default TTS streaming configuration for the session.",
|
|
44
|
+
"properties": {
|
|
45
|
+
"enable": { "type": "boolean" },
|
|
46
|
+
"synthesizer": { "$ref": "../components/synthesizer" }
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"record": {
|
|
50
|
+
"type": "object",
|
|
51
|
+
"description": "Session-level call recording configuration.",
|
|
52
|
+
"additionalProperties": true
|
|
53
|
+
},
|
|
54
|
+
"listen": {
|
|
55
|
+
"type": "object",
|
|
56
|
+
"description": "Session-level audio streaming (listen/stream) configuration.",
|
|
57
|
+
"additionalProperties": true
|
|
58
|
+
},
|
|
59
|
+
"stream": {
|
|
60
|
+
"type": "object",
|
|
61
|
+
"description": "Session-level audio streaming configuration. Alias for 'listen'.",
|
|
62
|
+
"additionalProperties": true
|
|
63
|
+
},
|
|
64
|
+
"transcribe": {
|
|
65
|
+
"type": "object",
|
|
66
|
+
"description": "Session-level real-time transcription configuration.",
|
|
67
|
+
"additionalProperties": true
|
|
68
|
+
},
|
|
69
|
+
"amd": {
|
|
70
|
+
"type": "object",
|
|
71
|
+
"description": "Session-level answering machine detection configuration.",
|
|
72
|
+
"additionalProperties": true
|
|
73
|
+
},
|
|
74
|
+
"fillerNoise": {
|
|
75
|
+
"$ref": "../components/fillerNoise",
|
|
76
|
+
"description": "Default filler noise configuration for the session."
|
|
77
|
+
},
|
|
78
|
+
"vad": {
|
|
79
|
+
"$ref": "../components/vad",
|
|
80
|
+
"description": "Default voice activity detection configuration for the session."
|
|
81
|
+
},
|
|
82
|
+
"notifyEvents": {
|
|
83
|
+
"type": "boolean",
|
|
84
|
+
"description": "If true, send call events (e.g. DTMF, call status changes) to the application via the status webhook."
|
|
85
|
+
},
|
|
86
|
+
"notifySttLatency": {
|
|
87
|
+
"type": "boolean",
|
|
88
|
+
"description": "If true, include STT latency measurements in webhook payloads."
|
|
89
|
+
},
|
|
90
|
+
"reset": {
|
|
91
|
+
"oneOf": [
|
|
92
|
+
{ "type": "string" },
|
|
93
|
+
{ "type": "array", "items": { "type": "string" } }
|
|
94
|
+
],
|
|
95
|
+
"description": "Reset specific session-level settings to their defaults. Pass a setting name or array of setting names to reset."
|
|
96
|
+
},
|
|
97
|
+
"onHoldMusic": {
|
|
98
|
+
"type": "string",
|
|
99
|
+
"format": "uri",
|
|
100
|
+
"description": "URL of an audio file to play when the call is placed on hold."
|
|
101
|
+
},
|
|
102
|
+
"actionHookDelayAction": {
|
|
103
|
+
"$ref": "../components/actionHookDelayAction",
|
|
104
|
+
"description": "Default configuration for handling slow webhook responses."
|
|
105
|
+
},
|
|
106
|
+
"sipRequestWithinDialogHook": {
|
|
107
|
+
"$ref": "../components/actionHook",
|
|
108
|
+
"description": "A webhook to invoke when a SIP request (e.g. INFO, NOTIFY) is received within the dialog."
|
|
109
|
+
},
|
|
110
|
+
"boostAudioSignal": {
|
|
111
|
+
"oneOf": [
|
|
112
|
+
{ "type": "number" },
|
|
113
|
+
{ "type": "string" }
|
|
114
|
+
],
|
|
115
|
+
"description": "Boost (or attenuate) the audio signal in dB for the session."
|
|
116
|
+
},
|
|
117
|
+
"referHook": {
|
|
118
|
+
"$ref": "../components/actionHook",
|
|
119
|
+
"description": "A webhook to invoke when a SIP REFER request is received."
|
|
120
|
+
},
|
|
121
|
+
"earlyMedia": {
|
|
122
|
+
"type": "boolean",
|
|
123
|
+
"description": "If true, allow early media (audio before call answer) for the session."
|
|
124
|
+
},
|
|
125
|
+
"autoStreamTts": {
|
|
126
|
+
"type": "boolean",
|
|
127
|
+
"description": "If true, automatically use streaming TTS for all 'say' verbs in the session."
|
|
128
|
+
},
|
|
129
|
+
"disableTtsCache": {
|
|
130
|
+
"type": "boolean",
|
|
131
|
+
"description": "If true, disable TTS caching for the session."
|
|
132
|
+
},
|
|
133
|
+
"noiseIsolation": {
|
|
134
|
+
"type": "object",
|
|
135
|
+
"description": "Noise isolation configuration to reduce background noise on the caller's audio.",
|
|
136
|
+
"properties": {
|
|
137
|
+
"enable": { "type": "boolean" },
|
|
138
|
+
"vendor": { "type": "string" },
|
|
139
|
+
"level": { "type": "number" },
|
|
140
|
+
"model": { "type": "string" }
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
"turnTaking": {
|
|
144
|
+
"type": "object",
|
|
145
|
+
"description": "Turn-taking detection configuration for conversational AI applications.",
|
|
146
|
+
"properties": {
|
|
147
|
+
"enable": { "type": "boolean" },
|
|
148
|
+
"vendor": { "type": "string" },
|
|
149
|
+
"threshold": { "type": "number" },
|
|
150
|
+
"model": { "type": "string" }
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
"required": [],
|
|
155
|
+
"examples": [
|
|
156
|
+
{
|
|
157
|
+
"verb": "config",
|
|
158
|
+
"synthesizer": {
|
|
159
|
+
"vendor": "elevenlabs",
|
|
160
|
+
"voice": "Rachel",
|
|
161
|
+
"language": "en-US"
|
|
162
|
+
},
|
|
163
|
+
"recognizer": {
|
|
164
|
+
"vendor": "deepgram",
|
|
165
|
+
"language": "en-US"
|
|
166
|
+
},
|
|
167
|
+
"fillerNoise": {
|
|
168
|
+
"enable": true,
|
|
169
|
+
"url": "https://example.com/sounds/typing.wav",
|
|
170
|
+
"startDelaySecs": 2
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
]
|
|
174
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://jambonz.org/schema/verbs/dequeue",
|
|
4
|
+
"title": "Dequeue",
|
|
5
|
+
"description": "Removes a caller from a named queue and bridges them to the current call. Typically used by an agent or operator call flow to connect with the next waiting caller.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"verb": { "const": "dequeue" },
|
|
9
|
+
"id": { "type": "string", "description": "An optional unique identifier for this verb instance." },
|
|
10
|
+
"name": {
|
|
11
|
+
"type": "string",
|
|
12
|
+
"description": "The name of the queue to dequeue from.",
|
|
13
|
+
"examples": ["support", "sales"]
|
|
14
|
+
},
|
|
15
|
+
"actionHook": {
|
|
16
|
+
"$ref": "../components/actionHook",
|
|
17
|
+
"description": "A webhook invoked when the dequeued call ends."
|
|
18
|
+
},
|
|
19
|
+
"timeout": {
|
|
20
|
+
"type": "number",
|
|
21
|
+
"description": "Time in seconds to wait for a caller to be available in the queue."
|
|
22
|
+
},
|
|
23
|
+
"beep": {
|
|
24
|
+
"type": "boolean",
|
|
25
|
+
"description": "If true, play a beep when the calls are connected."
|
|
26
|
+
},
|
|
27
|
+
"callSid": {
|
|
28
|
+
"type": "string",
|
|
29
|
+
"description": "Dequeue a specific call by its call SID, rather than the next caller in line."
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"required": ["name"],
|
|
33
|
+
"examples": [
|
|
34
|
+
{ "verb": "dequeue", "name": "support", "beep": true }
|
|
35
|
+
]
|
|
36
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://jambonz.org/schema/verbs/dial",
|
|
4
|
+
"title": "Dial",
|
|
5
|
+
"description": "Initiates an outbound call to one or more targets and bridges the caller to the first target that answers. Targets can be phone numbers (PSTN), SIP endpoints, registered users, or Microsoft Teams users. Supports simultaneous ringing, call screening, recording, and DTMF capture during the bridged call.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"verb": {
|
|
9
|
+
"const": "dial",
|
|
10
|
+
"description": "The verb name."
|
|
11
|
+
},
|
|
12
|
+
"id": {
|
|
13
|
+
"type": "string",
|
|
14
|
+
"description": "An optional unique identifier for this verb instance."
|
|
15
|
+
},
|
|
16
|
+
"target": {
|
|
17
|
+
"type": "array",
|
|
18
|
+
"items": { "$ref": "../components/target" },
|
|
19
|
+
"description": "One or more call targets to dial. If multiple targets are specified, they are rung simultaneously and the first to answer is connected. The rest are canceled.",
|
|
20
|
+
"minItems": 1
|
|
21
|
+
},
|
|
22
|
+
"actionHook": {
|
|
23
|
+
"$ref": "../components/actionHook",
|
|
24
|
+
"description": "A webhook invoked when the dialed call ends. Receives call disposition details (duration, who hung up, etc.) and should return the next verbs to execute."
|
|
25
|
+
},
|
|
26
|
+
"onHoldHook": {
|
|
27
|
+
"$ref": "../components/actionHook",
|
|
28
|
+
"description": "A webhook invoked when the call is placed on hold. Should return verbs to execute (e.g. play hold music) while the caller is holding."
|
|
29
|
+
},
|
|
30
|
+
"answerOnBridge": {
|
|
31
|
+
"type": "boolean",
|
|
32
|
+
"description": "If true, delay answering the inbound call until the outbound leg is answered. This allows the caller to hear ringing until the target picks up, and avoids billing the caller for unanswered outbound attempts."
|
|
33
|
+
},
|
|
34
|
+
"callerId": {
|
|
35
|
+
"type": "string",
|
|
36
|
+
"description": "The caller ID (phone number) to present on the outbound call. Overrides the default caller ID.",
|
|
37
|
+
"examples": ["+15085551212"]
|
|
38
|
+
},
|
|
39
|
+
"callerName": {
|
|
40
|
+
"type": "string",
|
|
41
|
+
"description": "The caller display name to present on the outbound call."
|
|
42
|
+
},
|
|
43
|
+
"confirmHook": {
|
|
44
|
+
"$ref": "../components/actionHook",
|
|
45
|
+
"description": "A webhook invoked when a target answers, before the call is bridged. Used for call screening — the webhook can return verbs (e.g. a 'say' prompt and 'gather') to confirm the callee wants to accept the call."
|
|
46
|
+
},
|
|
47
|
+
"referHook": {
|
|
48
|
+
"$ref": "../components/actionHook",
|
|
49
|
+
"description": "A webhook invoked when a SIP REFER is received on the bridged call. Allows handling call transfers initiated by the far end."
|
|
50
|
+
},
|
|
51
|
+
"dialMusic": {
|
|
52
|
+
"type": "string",
|
|
53
|
+
"format": "uri",
|
|
54
|
+
"description": "URL of an audio file to play to the caller while the outbound call is ringing. Replaces the default ringback tone."
|
|
55
|
+
},
|
|
56
|
+
"dtmfCapture": {
|
|
57
|
+
"type": "object",
|
|
58
|
+
"description": "Configuration for capturing DTMF digits during the bridged call. Keys are DTMF patterns to capture, values are configuration for each.",
|
|
59
|
+
"additionalProperties": true
|
|
60
|
+
},
|
|
61
|
+
"dtmfHook": {
|
|
62
|
+
"$ref": "../components/actionHook",
|
|
63
|
+
"description": "A webhook invoked when a captured DTMF pattern is detected during the bridged call."
|
|
64
|
+
},
|
|
65
|
+
"headers": {
|
|
66
|
+
"type": "object",
|
|
67
|
+
"description": "Custom SIP headers to include on the outbound INVITE.",
|
|
68
|
+
"additionalProperties": { "type": "string" }
|
|
69
|
+
},
|
|
70
|
+
"anchorMedia": {
|
|
71
|
+
"type": "boolean",
|
|
72
|
+
"description": "If true, keep media anchored through the jambonz media server even if a direct media path is possible. Required for features like recording, listen, and DTMF capture during bridged calls."
|
|
73
|
+
},
|
|
74
|
+
"exitMediaPath": {
|
|
75
|
+
"type": "boolean",
|
|
76
|
+
"description": "If true, remove jambonz from the media path after the call is bridged. Reduces latency but disables mid-call features like recording and DTMF capture."
|
|
77
|
+
},
|
|
78
|
+
"boostAudioSignal": {
|
|
79
|
+
"oneOf": [
|
|
80
|
+
{ "type": "number" },
|
|
81
|
+
{ "type": "string" }
|
|
82
|
+
],
|
|
83
|
+
"description": "Boost (or attenuate) the audio signal in dB. Positive values increase volume, negative values decrease it.",
|
|
84
|
+
"examples": [6, -3]
|
|
85
|
+
},
|
|
86
|
+
"listen": {
|
|
87
|
+
"type": "object",
|
|
88
|
+
"description": "Configuration for streaming audio of the bridged call to a websocket endpoint.",
|
|
89
|
+
"additionalProperties": true
|
|
90
|
+
},
|
|
91
|
+
"stream": {
|
|
92
|
+
"type": "object",
|
|
93
|
+
"description": "Configuration for streaming audio of the bridged call. Alias for 'listen'.",
|
|
94
|
+
"additionalProperties": true
|
|
95
|
+
},
|
|
96
|
+
"transcribe": {
|
|
97
|
+
"type": "object",
|
|
98
|
+
"description": "Configuration for real-time transcription of the bridged call.",
|
|
99
|
+
"additionalProperties": true
|
|
100
|
+
},
|
|
101
|
+
"timeLimit": {
|
|
102
|
+
"type": "number",
|
|
103
|
+
"description": "Maximum duration in seconds for the bridged call. The call is automatically hung up when this limit is reached.",
|
|
104
|
+
"examples": [3600]
|
|
105
|
+
},
|
|
106
|
+
"timeout": {
|
|
107
|
+
"type": "number",
|
|
108
|
+
"description": "Time in seconds to wait for the target to answer before giving up.",
|
|
109
|
+
"examples": [30, 60]
|
|
110
|
+
},
|
|
111
|
+
"proxy": {
|
|
112
|
+
"type": "string",
|
|
113
|
+
"description": "A SIP proxy to route the outbound call through.",
|
|
114
|
+
"examples": ["sip:proxy.example.com"]
|
|
115
|
+
},
|
|
116
|
+
"amd": {
|
|
117
|
+
"type": "object",
|
|
118
|
+
"description": "Answering machine detection configuration. When enabled, jambonz attempts to determine whether the call was answered by a human or a machine.",
|
|
119
|
+
"additionalProperties": true
|
|
120
|
+
},
|
|
121
|
+
"dub": {
|
|
122
|
+
"type": "array",
|
|
123
|
+
"items": { "type": "object" },
|
|
124
|
+
"description": "Audio dubbing configuration for mixing additional audio tracks into the bridged call."
|
|
125
|
+
},
|
|
126
|
+
"tag": {
|
|
127
|
+
"type": "object",
|
|
128
|
+
"description": "Arbitrary metadata to attach to this call leg. Included in subsequent webhook invocations and CDRs.",
|
|
129
|
+
"additionalProperties": true
|
|
130
|
+
},
|
|
131
|
+
"forwardPAI": {
|
|
132
|
+
"type": "boolean",
|
|
133
|
+
"description": "If true, forward the P-Asserted-Identity header from the inbound call to the outbound call."
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
"required": ["target"],
|
|
137
|
+
"examples": [
|
|
138
|
+
{
|
|
139
|
+
"verb": "dial",
|
|
140
|
+
"target": [
|
|
141
|
+
{ "type": "phone", "number": "+15085551212" }
|
|
142
|
+
],
|
|
143
|
+
"answerOnBridge": true,
|
|
144
|
+
"timeout": 30,
|
|
145
|
+
"actionHook": "/dial-complete"
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"verb": "dial",
|
|
149
|
+
"target": [
|
|
150
|
+
{ "type": "sip", "sipUri": "sip:alice@example.com" },
|
|
151
|
+
{ "type": "sip", "sipUri": "sip:bob@example.com" }
|
|
152
|
+
],
|
|
153
|
+
"confirmHook": "/screen-call",
|
|
154
|
+
"timeLimit": 3600
|
|
155
|
+
}
|
|
156
|
+
]
|
|
157
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://jambonz.org/schema/verbs/dtmf",
|
|
4
|
+
"title": "DTMF",
|
|
5
|
+
"description": "Sends DTMF tones on the call. Used to interact with IVR systems on the far end, or to signal systems that respond to DTMF.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"verb": { "const": "dtmf" },
|
|
9
|
+
"id": { "type": "string", "description": "An optional unique identifier for this verb instance." },
|
|
10
|
+
"dtmf": {
|
|
11
|
+
"type": "string",
|
|
12
|
+
"description": "The DTMF digits to send. Valid characters are 0-9, *, #, and A-D. Use 'w' for a 500ms pause between digits.",
|
|
13
|
+
"examples": ["1234#", "1w2w3", "5551212"]
|
|
14
|
+
},
|
|
15
|
+
"duration": {
|
|
16
|
+
"type": "number",
|
|
17
|
+
"description": "Duration in milliseconds for each DTMF tone.",
|
|
18
|
+
"default": 500,
|
|
19
|
+
"examples": [250, 500]
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"required": ["dtmf"],
|
|
23
|
+
"examples": [
|
|
24
|
+
{ "verb": "dtmf", "dtmf": "1234#" },
|
|
25
|
+
{ "verb": "dtmf", "dtmf": "1w2w3w4", "duration": 250 }
|
|
26
|
+
]
|
|
27
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://jambonz.org/schema/verbs/dub",
|
|
4
|
+
"title": "Dub",
|
|
5
|
+
"description": "Manages audio dubbing tracks on a call. Allows adding, removing, and controlling auxiliary audio tracks that are mixed into the call audio. Used for background music, coaching whispers, or injecting audio from external sources.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"verb": { "const": "dub" },
|
|
9
|
+
"id": { "type": "string", "description": "An optional unique identifier for this verb instance." },
|
|
10
|
+
"action": {
|
|
11
|
+
"type": "string",
|
|
12
|
+
"description": "The dubbing action to perform.",
|
|
13
|
+
"enum": ["addTrack", "removeTrack", "silenceTrack", "playOnTrack", "sayOnTrack"]
|
|
14
|
+
},
|
|
15
|
+
"track": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"description": "The name of the audio track. Used to reference the track in subsequent dub actions.",
|
|
18
|
+
"examples": ["background-music", "coach-whisper"]
|
|
19
|
+
},
|
|
20
|
+
"play": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"format": "uri",
|
|
23
|
+
"description": "URL of an audio file to play on the track. Used with 'playOnTrack' action."
|
|
24
|
+
},
|
|
25
|
+
"say": {
|
|
26
|
+
"oneOf": [
|
|
27
|
+
{ "type": "string" },
|
|
28
|
+
{ "type": "object", "additionalProperties": true }
|
|
29
|
+
],
|
|
30
|
+
"description": "Text to synthesize and play on the track. Used with 'sayOnTrack' action. Can be a string or a say configuration object."
|
|
31
|
+
},
|
|
32
|
+
"loop": {
|
|
33
|
+
"type": "boolean",
|
|
34
|
+
"description": "If true, loop the audio on the track continuously."
|
|
35
|
+
},
|
|
36
|
+
"gain": {
|
|
37
|
+
"oneOf": [
|
|
38
|
+
{ "type": "number" },
|
|
39
|
+
{ "type": "string" }
|
|
40
|
+
],
|
|
41
|
+
"description": "Audio gain for the track in dB. Use negative values to reduce volume.",
|
|
42
|
+
"examples": [-10, 0, 6]
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"required": ["action", "track"],
|
|
46
|
+
"examples": [
|
|
47
|
+
{ "verb": "dub", "action": "addTrack", "track": "bgm" },
|
|
48
|
+
{ "verb": "dub", "action": "playOnTrack", "track": "bgm", "play": "https://example.com/music.mp3", "loop": true, "gain": -15 },
|
|
49
|
+
{ "verb": "dub", "action": "sayOnTrack", "track": "coach", "say": "Ask about their budget" },
|
|
50
|
+
{ "verb": "dub", "action": "removeTrack", "track": "bgm" }
|
|
51
|
+
]
|
|
52
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://jambonz.org/schema/verbs/enqueue",
|
|
4
|
+
"title": "Enqueue",
|
|
5
|
+
"description": "Places the caller into a named call queue. While in the queue, the caller hears content returned by the waitHook (typically hold music or position announcements). The caller remains in the queue until dequeued by another call or process.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"verb": { "const": "enqueue" },
|
|
9
|
+
"id": { "type": "string", "description": "An optional unique identifier for this verb instance." },
|
|
10
|
+
"name": {
|
|
11
|
+
"type": "string",
|
|
12
|
+
"description": "The name of the queue to place the caller in. Queues are created implicitly when first referenced.",
|
|
13
|
+
"examples": ["support", "sales"]
|
|
14
|
+
},
|
|
15
|
+
"actionHook": {
|
|
16
|
+
"$ref": "../components/actionHook",
|
|
17
|
+
"description": "A webhook invoked when the caller leaves the queue (either dequeued or hung up). Should return the next verbs to execute."
|
|
18
|
+
},
|
|
19
|
+
"waitHook": {
|
|
20
|
+
"$ref": "../components/actionHook",
|
|
21
|
+
"description": "A webhook invoked immediately when the caller enters the queue and periodically while waiting. Should return verbs to play to the caller (e.g. hold music, queue position announcements)."
|
|
22
|
+
},
|
|
23
|
+
"priority": {
|
|
24
|
+
"type": "number",
|
|
25
|
+
"description": "The priority of this caller in the queue. Lower numbers are higher priority and are dequeued first.",
|
|
26
|
+
"examples": [1, 5, 10]
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"required": ["name"],
|
|
30
|
+
"examples": [
|
|
31
|
+
{
|
|
32
|
+
"verb": "enqueue",
|
|
33
|
+
"name": "support",
|
|
34
|
+
"waitHook": "/queue-wait",
|
|
35
|
+
"actionHook": "/queue-exit"
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
}
|