Compare commits

...

174 Commits

Author SHA1 Message Date
Hoan HL
eaba3a84a8 wip 2025-10-13 17:52:04 +07:00
Hoan HL
6654771906 Merge branch 'main' of https://github.com/jambonz/verb-specifications into feat/houndify_stt 2025-10-13 17:46:10 +07:00
Dave Horton
577191ed0d 0.0.116 2025-10-03 13:30:34 -04:00
Dave Horton
ee2ffff20d preflightThreshold is now eagerEotThreshold (#111) 2025-10-03 13:30:07 -04:00
Dave Horton
4c5b795498 0.0.115 2025-09-30 20:33:34 -07:00
Hoan Luu Huu
7ecd46393c fixed eagerEotThreshold for deepgram flux (#110) 2025-09-30 23:33:20 -04:00
Hoan Luu Huu
8fffe39195 update deepgrap flux options (#109) 2025-09-30 23:30:43 -04:00
Quan HL
c01c3c76ef add testcase 2025-09-19 11:28:22 +07:00
Quan HL
f9df6fcf1b support houndify stt 2025-09-19 11:24:25 +07:00
Dave Horton
23cb499244 0.0.114 2025-09-09 17:56:59 -04:00
Dave Horton
fb94dc94cb wip (#107) 2025-09-09 17:56:30 -04:00
Hoan Luu Huu
30677b6cd1 auth should not be required by llm (#106) 2025-08-28 20:06:28 -04:00
Dave Horton
4ea9cda0f8 0.0.113 2025-08-11 20:44:53 -04:00
Dave Horton
a0b9f963c2 new deepgram option entity_prompt (#105) 2025-08-11 20:44:23 -04:00
Dave Horton
841a471faa 0.0.112 2025-08-05 10:18:46 -04:00
Dave Horton
44112f67b3 Wip (#104)
* wip

* wip
2025-08-05 10:18:14 -04:00
Dave Horton
1f7c98c0ce 0.0.111 2025-07-14 09:29:48 -04:00
Hoan Luu Huu
276a55e672 support Deepgram river options (#102) 2025-07-14 09:29:21 -04:00
Dave Horton
840db61042 0.0.110 2025-07-11 12:50:08 -04:00
Sam Machin
85e1b64ee4 add forwardPAI to dial (#103) 2025-07-11 12:49:37 -04:00
Dave Horton
8ed54e2d51 0.0.109 2025-07-11 10:20:35 -04:00
Hoan Luu Huu
c24fb7996c support enable stt latency calculation (#99)
* support enable stt latency calculation

* fixed review comment
2025-07-11 09:57:03 -04:00
Dave Horton
6c24ad1145 0.0.108 2025-07-09 10:23:15 -04:00
Sam Machin
af3955cb35 add alert (#101) 2025-07-09 10:22:54 -04:00
Hoan Luu Huu
1ee29749c3 support mod_vad_silero (#100)
* support mod_vad_silero

* wip

* wip
2025-07-06 16:02:17 -04:00
Dave Horton
dea57e0910 0.0.107 2025-07-02 20:36:01 -04:00
Hoan Luu Huu
f444a57bcd consistent assemblyAiOptions name (#98) 2025-07-02 20:35:08 -04:00
Dave Horton
a9a2339821 0.0.106 2025-06-29 08:04:27 -04:00
Hoan Luu Huu
95f3a06625 support assembly ai v3 (#97)
* support assembly ai v3

* wip
2025-06-29 08:02:46 -04:00
Dave Horton
985476e8b1 0.0.105 2025-06-10 15:25:01 +02:00
Hoan Luu Huu
1782db362e support autoStreamTts for enabling say.stream = true globaly (#96) 2025-06-10 15:24:14 +02:00
Dave Horton
e654ee9e10 0.0.104 2025-05-13 07:49:29 -04:00
Hoan Luu Huu
38d1d04c4a support whisper say verb instructions (#95) 2025-05-13 07:49:16 -04:00
Dave Horton
5cbd3886d1 0.0.103 2025-04-20 09:34:50 -04:00
Dave Horton
de8dfc9202 add mcpServers to llm (#89)
* add mcpServers to llm

* add testcase

---------

Co-authored-by: Quan HL <quan.luuhoang8@gmail.com>
2025-04-20 09:34:20 -04:00
Dave Horton
637431468d 0.0.102 2025-04-11 07:37:31 -04:00
Sam Machin
4a817c97b2 Update specs.json (#93)
model is not required for ALL llm providers
2025-04-11 07:19:02 -04:00
Dave Horton
ce44bf41d4 0.0.101 2025-03-26 16:16:48 -04:00
Dave Horton
ab84583eff add semantic_vad for openai stt (#92) 2025-03-26 16:16:20 -04:00
Dave Horton
13901713b8 0.0.100 2025-03-26 10:47:44 -04:00
Dave Horton
85fd68af16 add templates for openai prompts for stt (#91) 2025-03-26 10:47:18 -04:00
Dave Horton
5a5a397a68 0.0.99 2025-03-24 18:47:28 -04:00
Dave Horton
b85c7ac743 add openai STT options (#90)
* add openai STT options

* wip

* allow apikey passed as param for openai stt
2025-03-24 18:47:01 -04:00
Dave Horton
82c6952f70 0.0.98 2025-03-06 11:51:34 -05:00
Sam Machin
fc95fa3d02 add digitCount to amd (#88) 2025-03-06 11:51:01 -05:00
Dave Horton
6b3ee83d08 0.0.97 2025-02-15 09:22:43 -05:00
Hoan Luu Huu
3700ba6607 deepgram options noDelay (#86) 2025-02-15 09:10:11 -05:00
Dave Horton
09a76f44cb 0.0.96 2025-02-07 12:53:24 -05:00
Dave Horton
aa445c1edb add deepgramOptions.keyterms (#85) 2025-02-07 12:52:29 -05:00
rammohan-y
57887a660c https://github.com/jambonz/jambonz-feature-server/issues/1057 (#83)
added speechRecognitionMode in azureOptions as enum
2025-01-24 07:21:51 -05:00
Dave Horton
e9dace6495 0.0.94 2025-01-16 10:57:11 -05:00
Dave Horton
762a9639bd add channel to listen opts (#82) 2025-01-16 10:56:40 -05:00
Dave Horton
2740eb9848 wip (#81) 2025-01-16 10:53:30 -05:00
Dave Horton
1a525e7a3e 0.0.93 2025-01-15 10:36:15 -05:00
Dave Horton
f16b49cc23 add domain for speechmatics (#80) 2025-01-15 10:36:04 -05:00
Dave Horton
1cc7dae926 0.0.92 2025-01-13 10:55:23 -05:00
Sam Machin
8c50bf8764 add deepgram fillerWords (#79) 2025-01-13 10:54:54 -05:00
Dave Horton
e2bffbe0a8 0.0.91 2024-12-30 14:25:41 -05:00
Sam Machin
4b79b1408b add timeLimit to REST:Dial & test (#78)
also added timeLimit to the dial verb test
2024-12-30 14:23:32 -05:00
Dave Horton
900d517b8a 0.0.90 2024-12-11 10:32:44 -05:00
Hoan Luu Huu
104ca00a3d support refer display name (#76) 2024-12-11 10:27:55 -05:00
Dave Horton
7b3dd92c18 0.0.89 2024-12-05 16:16:55 -05:00
Dave Horton
43a2805ea8 add support for config.ttsStream (#75) 2024-12-05 16:16:35 -05:00
Dave Horton
f9e6755d8d 0.0.88 2024-11-26 14:42:44 -05:00
Dave Horton
264640bbc7 add say.closeStreamOnEmpty 2024-11-26 14:42:36 -05:00
Dave Horton
71d31952d6 0.0.87 2024-11-26 13:53:21 -05:00
Dave Horton
6a80506a81 add support for say verb streaming tts (#74) 2024-11-26 13:52:58 -05:00
Dave Horton
85b1c3a2f9 0.0.86 2024-11-16 14:01:10 -05:00
Dave Horton
f59137ebad add dial.exitMediaPath to indicate we want to be only in the signaling path for this bridged call; media is completely released from all jambonz components (#73) 2024-11-16 14:00:45 -05:00
Dave Horton
7b80ba6fd5 0.0.85 2024-11-15 18:35:21 -05:00
Dave Horton
216e6954af add translationHook to transcribe verb as some STTs support it (speechmatics) (#72) 2024-11-15 18:34:50 -05:00
Dave Horton
027cce284d 0.0.84 2024-11-15 15:46:53 -05:00
Dave Horton
9a8194b360 speechmatics changes (#71) 2024-11-15 15:46:21 -05:00
Markus Frindt
0bcfa783b7 fix key of sm_transcriptionConfig and required in speechmaticsOptions (#70)
Co-authored-by: mfrindt <m.frindt@cognigy.com>
2024-10-23 07:23:08 -04:00
Dave Horton
9a3fb68fe7 0.0.83 2024-10-09 11:53:57 -04:00
Dave Horton
f2ea3f3913 Feat/llm verb (#69)
* llm verb

* initial support for llm verb

* auth is required for llm, events is an array

* fix invalid syntax
2024-10-09 11:53:24 -04:00
Dave Horton
6a75a8b98a Feat/llm verb (#68)
* llm verb

* initial support for llm verb

* auth is required for llm, events is an array
2024-10-09 11:52:01 -04:00
Dave Horton
2af0fd4415 0.0.82 2024-10-01 13:38:11 -04:00
Dave Horton
46688934bc add support for speechmatics ASR (#67) 2024-10-01 13:37:45 -04:00
Dave Horton
afce20a206 0.0.81 2024-09-25 07:25:12 -04:00
Hoan Luu Huu
e80679fd07 support config referHook (#66) 2024-09-25 07:24:40 -04:00
Dave Horton
aa86d0b3e6 0.0.80 2024-09-17 13:23:55 -04:00
rammohan-y
60f4bcd97a feat/902 - added giveUpActions to actionHookDelayAction object (#65)
https://github.com/jambonz/jambonz-feature-server/issues/902wq
2024-09-17 13:22:58 -04:00
Dave Horton
cb8b51da4a 0.0.79 2024-08-20 18:09:33 -04:00
Dave Horton
d9fd63850b add queryInput to dialogflow (#63) 2024-08-20 18:09:08 -04:00
Dave Horton
e57c81aeed 0.0.78 2024-08-20 13:54:37 -04:00
Dave Horton
610b14736a add agent to dialflow cx (#62) 2024-08-20 13:54:23 -04:00
Dave Horton
4a8517cab5 0.0.77 2024-08-20 08:58:32 -04:00
Dave Horton
21bb3c2b73 add support for dialogflow cx (#61) 2024-08-20 08:57:45 -04:00
Dave Horton
e044621bbc 0.0.76 2024-08-13 08:17:40 -04:00
rammohan-kore
6d8ffc9d80 feat/859: Added generative, long-form to engine enum (#60) 2024-08-13 08:05:14 -04:00
Dave Horton
941ba6aa8c 0.0.75 2024-08-07 10:04:46 -04:00
Hoan Luu Huu
1d8cf321a7 support jambonz transcribe sampling rate (#59)
* support jambonz transcribe sampling rate

* fix review comment
2024-08-07 10:04:30 -04:00
Dave Horton
0d8b9de099 0.0.74 2024-07-15 15:30:28 -04:00
Dave Horton
08e01efa7f add recognizer.minConfidence and rest:dial.referHook (#58) 2024-07-15 15:30:06 -04:00
Dave Horton
1fdda56c39 0.0.73 2024-07-07 09:16:06 -06:00
Vinod Dharashive
8db0a91521 Aure PostProcessing #755 (#56) 2024-07-07 09:15:26 -06:00
Dave Horton
6432d9e64b 0.0.72 2024-05-29 07:12:30 -04:00
Hoan Luu Huu
c029a18c3e verbioOptions support (#53) 2024-05-29 07:12:09 -04:00
Dave Horton
27b1a06944 0.0.71 2024-05-28 08:39:36 -04:00
Hoan Luu Huu
0f9c096988 feat support mod vad detect (#54) 2024-05-28 08:38:20 -04:00
Markus Frindt
569b994356 fix vulnerabilities via npm audit fix (#51)
Co-authored-by: Markus Frindt <m.frindt@cognigy.com>
2024-04-24 11:49:05 -04:00
Dave Horton
9b639a9591 0.0.70 2024-04-17 16:29:02 -04:00
Dave Horton
6242514b6e add support for partialResultHook in config.bargeIn 2024-04-17 16:28:52 -04:00
Dave Horton
6f5884f7be 0.0.69 2024-04-02 14:48:33 -04:00
Dave Horton
d5bc910907 typo 2024-04-02 14:48:26 -04:00
Dave Horton
2f6696bbf8 0.0.68 2024-04-02 14:45:17 -04:00
Dave Horton
2c19b34922 added googleOptions.recognizer_id to allow someone to specify a preconfigured google recognizer for STT 2024-04-02 14:45:08 -04:00
Dave Horton
c5d977da50 0.0.67 2024-04-02 08:36:02 -04:00
Hoan Luu Huu
a6f64710c1 support google v2 enable_voice_activity_events (#50) 2024-04-02 08:35:47 -04:00
Dave Horton
3463528127 0.0.66 2024-04-01 19:14:23 -04:00
Hoan Luu Huu
030eb5f847 support google stt version 2 (#49)
* support google stt version 2

* fix review comments

* fix review comment
2024-04-01 19:14:06 -04:00
Dave Horton
f8d07d340a 0.0.65 2024-03-30 09:10:18 -04:00
Hoan Luu Huu
8a96b05f23 feat fork audio support bidirectional audio stream (#48)
* feat fork audio support bidirectional audio stream

* update bidirectionalAudio
2024-03-30 09:09:17 -04:00
Dave Horton
a6a942c1c6 0.0.64 2024-03-14 11:18:49 -04:00
Dave Horton
85fa4714fb change dial to allow an array of dub verbs instead of a single one 2024-03-14 11:18:40 -04:00
Dave Horton
d047892fff 0.0.63 2024-03-11 17:45:21 -04:00
Dave Horton
11bb83f703 add dial.boostAudioSignal to set gain on B leg after dial 2024-03-11 17:45:12 -04:00
Dave Horton
c5a263ee68 0.0.62 2024-03-10 21:05:46 -04:00
Dave Horton
47f8a593f5 dub say can either be text or object with text and synthesizer (ie like say verb syntax) 2024-03-10 21:05:37 -04:00
Dave Horton
c9d2c9aa4d 0.0.61 2024-03-10 19:13:11 -04:00
Dave Horton
1ce577c8c9 add channel property to transcribe, can be used in dial verb to indicate to transcribe only one of the two channels (#47) 2024-03-10 19:12:40 -04:00
Dave Horton
dc0abfad02 0.0.60 2024-03-07 15:11:34 -05:00
Dave Horton
1e9285b9d9 add support for playing filler noise while waiting for app to process a gather (#46) 2024-03-07 15:10:55 -05:00
Dave Horton
f3f048d94f 0.0.59 2024-03-07 09:59:28 -05:00
Dave Horton
a737d8bcbb add config.boostAudioSignal and nested dub in dial verb (#45) 2024-03-07 09:58:59 -05:00
Dave Horton
c3d69e614e 0.0.58 2024-03-07 07:47:27 -05:00
Hoan Luu Huu
9277e053a6 support azure language identification mode (#44) 2024-03-06 12:05:24 -05:00
Dave Horton
954f9479c9 0.0.57 2024-03-04 18:11:01 -05:00
Dave Horton
58385e791b rework dub verb (#43) 2024-03-04 18:10:30 -05:00
Dave Horton
85aaab5856 0.0.56 2024-02-29 19:49:12 -05:00
Dave Horton
d70324485b add support for dub channel (#42) 2024-02-29 19:48:33 -05:00
Dave Horton
2cf2c15586 0.0.55 2024-02-27 12:49:51 -05:00
Dave Horton
f6ad050a32 Feat/ambient sounds (#41)
* add config.ambientNoise

* add answer verb to force answer
2024-02-27 12:49:19 -05:00
Dave Horton
ba02161f74 0.0.54 2024-02-25 15:20:25 -05:00
Dave Horton
fabf9255ea add specs to allow coach mode in conferencing, where one participant can only be heard by another (#40) 2024-02-25 15:19:26 -05:00
Dave Horton
3f1e7cbd3b 0.0.53 2024-02-12 10:43:18 -05:00
Anton Voylenko
ff6bea3168 tag for dial verb (#38) 2024-02-12 10:42:31 -05:00
Dave Horton
4ea66245d4 0.0.52 2024-02-07 08:30:03 -05:00
Dave Horton
faa99cdce3 modify deepgram onprem property names 2024-02-07 08:29:55 -05:00
Dave Horton
d017e739b1 0.0.51 2024-02-05 13:01:05 -05:00
Dave Horton
764383cf43 add support for deepgram on-prem with deepgramOptions.deepgramUri 2024-02-05 13:00:36 -05:00
Dave Horton
3f19ce4a24 0.0.50 2023-12-26 10:14:16 -05:00
Hoan Luu Huu
1e6b24181c support config->transcribe run in background (#37)
* support config->transcribe run in background

* wip

* fix review comments
2023-12-26 10:13:57 -05:00
Dave Horton
63aa94a9ec 0.0.49 2023-12-01 10:28:21 -05:00
Dave Horton
d4614c2ad1 fix awsOptions 2023-12-01 10:28:15 -05:00
Dave Horton
7da6165b93 0.0.48 2023-11-30 15:53:01 -05:00
Dave Horton
ad76081fa7 allow region override in awsOptions 2023-11-30 15:52:43 -05:00
Dave Horton
ce94e943d2 0.0.47 2023-11-30 15:45:11 -05:00
Dave Horton
436fb557dc add support for recognizer.awsOptions (#36) 2023-11-30 15:44:27 -05:00
Dave Horton
203b8600a8 0.0.46 2023-11-14 08:31:08 -05:00
Dave Horton
b877ca52d0 add target.proxy to dial verb (#35) 2023-11-14 08:30:41 -05:00
Anton Voylenko
cdb671d25d sipRequestWithinDialogHook support (#34) 2023-11-14 08:27:33 -05:00
Dave Horton
6ae0aff8b1 0.0.45 2023-11-01 07:57:29 -04:00
Hoan Luu Huu
9a2a22dd88 feat assemblyAi (#33) 2023-11-01 07:56:52 -04:00
Dave Horton
369583d536 minor readme typo 2023-10-30 13:48:08 -04:00
Dave Horton
77d203ca80 0.0.44 2023-10-30 12:49:54 -04:00
Dave Horton
9cb550f49e fix prev commit 2023-10-30 12:49:35 -04:00
Dave Horton
de88976293 0.0.43 2023-10-30 11:15:49 -04:00
Dave Horton
60efb4b9af add recognizer.azureOptions.speechSegmentationSilenceTimeoutMs (to support https://github.com/jambonz/jambonz-feature-server/issues/508) (#31) 2023-10-30 11:15:18 -04:00
Dave Horton
49ac048477 0.0.42 2023-10-29 21:38:28 -04:00
Hoan Luu Huu
e653a62c49 feat google custom voice (#30) 2023-10-29 21:37:49 -04:00
Dave Horton
f41aae81c6 0.0.41 2023-10-27 15:19:12 -04:00
Dave Horton
5707f7d4d4 remove properties with undefined values before validation: the SttTask superclass of gather and transcribe creates them for label and callbackVendor 2023-10-27 15:18:58 -04:00
Dave Horton
f75871dc46 0.0.40 2023-10-27 10:23:39 -04:00
Dave Horton
98fa56bd3d add deepgramOptions.shortUtterance - triggers transcript based on is_final not speech_final 2023-10-27 10:23:31 -04:00
Dave Horton
e1b9abef9e 0.0.39 2023-10-26 13:54:19 -04:00
Dave Horton
22b118534b add deepgramOptions.utteranceEndMs 2023-10-26 13:54:10 -04:00
Dave Horton
733a4760fe 0.0.38 2023-10-25 10:09:21 -04:00
Dave Horton
3deb8759db add deepgramOptions.smartFormatting (#28) 2023-10-25 10:08:56 -04:00
Dave Horton
79cdfc73d4 0.0.37 2023-10-06 08:54:14 -04:00
Hoan Luu Huu
9b7358d6b4 feat: add sip Indialog actionHook (#27)
* feat: add sip Indialog actionHook

* to use Hook

* to use Hook

* fix
2023-10-06 08:49:49 -04:00
Dave Horton
4bb25941bf 0.0.36 2023-09-22 09:09:22 -04:00
Hoan Luu Huu
42ff6170b6 support bot delay action (#26)
* support bot delay action

* support bot delay action
2023-09-22 09:09:04 -04:00
6 changed files with 2730 additions and 764 deletions

View File

@@ -1,4 +1,4 @@
# verb-specificiations
# verb-specifications
Jambonz Verb Specification Utilities
#### Running the test suite

View File

@@ -58,7 +58,8 @@ function validateVerb(name, data, logger) {
const dSpec = specData.properties[dKey];
debug(`Task:validate validating property ${dKey} with value ${JSON.stringify(dVal)}`);
if (typeof dSpec === 'string' && dSpec === 'array') {
if (typeof dVal === 'undefined') continue;
else if (typeof dSpec === 'string' && dSpec === 'array') {
if (!Array.isArray(dVal)) throw new Error(`${name}: property ${dKey} is not an array`);
}
else if (typeof dSpec === 'string' && dSpec.includes('|')) {

2620
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "@jambonz/verb-specifications",
"version": "0.0.35",
"version": "0.0.116",
"description": "Jambonz Verb Specification Utilities",
"main": "index.js",
"scripts": {
@@ -20,7 +20,7 @@
"devDependencies": {
"eslint": "^7.32.0",
"eslint-plugin-promise": "^4.3.1",
"tape": "^5.6.1"
"tape": "^5.7.5"
},
"dependencies": {
"debug": "^4.3.4",

View File

@@ -1,4 +1,20 @@
{
"alert" : {
"properties": {
"id": "string",
"message": "string"
},
"required": [
"message"
]
},
"answer": {
"properties": {
"id": "string"
},
"required": [
]
},
"sip:decline": {
"properties": {
"id": "string",
@@ -27,6 +43,7 @@
"id": "string",
"referTo": "string",
"referredBy": "string",
"referredByDisplayName": "string",
"headers": "object",
"actionHook": "object|string",
"eventHook": "object|string"
@@ -41,15 +58,37 @@
"synthesizer": "#synthesizer",
"recognizer": "#recognizer",
"bargeIn": "#bargeIn",
"ttsStream": "#ttsStream",
"record": "#recordOptions",
"listen": "#listenOptions",
"stream": "#listenOptions",
"transcribe": "#transcribeOptions",
"amd": "#amd",
"fillerNoise": "#fillerNoise",
"notifyEvents": "boolean",
"notifySttLatency": "boolean",
"reset": "string|array",
"onHoldMusic": "string"
"onHoldMusic": "string",
"actionHookDelayAction": "#actionHookDelayAction",
"sipRequestWithinDialogHook": "object|string",
"boostAudioSignal": "number|string",
"vad":"#vad",
"referHook": "object|string",
"earlyMedia": "boolean",
"autoStreamTts": "boolean"
},
"required": []
},
"fillerNoise": {
"properties": {
"enable": "boolean",
"url": "string",
"startDelaySecs": "number"
},
"required": [
"enable"
]
},
"listenOptions": {
"properties": {
"enable": "boolean",
@@ -65,17 +104,28 @@
"passDtmf": "boolean",
"playBeep": "boolean",
"disableBidirectionalAudio": "boolean",
"bidirectionalAudio": "#bidirectionalAudio",
"timeout": "number"
},
"required": [
"enable"
]
},
"ttsStream": {
"properties": {
"enable": "boolean",
"synthesizer": "#synthesizer"
},
"required": [
"enable"
]
},
"bargeIn": {
"properties": {
"enable": "boolean",
"sticky": "boolean",
"actionHook": "object|string",
"partialResultHook": "object|string",
"input": "array",
"finishOnKey": "string",
"numDigits": "number",
@@ -89,6 +139,34 @@
"enable"
]
},
"transcribeOptions": {
"properties": {
"enable": "boolean",
"transcriptionHook": "string",
"recognizer": "#recognizer"
},
"required": [
"enable"
]
},
"dub": {
"properties": {
"id": "string",
"action": {
"type": "string",
"enum": ["addTrack", "removeTrack", "silenceTrack", "playOnTrack", "sayOnTrack"]
},
"track": "string",
"play": "string",
"say": "string|object",
"loop": "boolean",
"gain": "number|string"
},
"required": [
"action",
"track"
]
},
"dequeue": {
"properties": {
"id": "string",
@@ -146,13 +224,15 @@
"properties": {
"id": "string",
"text": "string|array",
"instructions": "string",
"stream": "boolean",
"loop": "number|string",
"synthesizer": "#synthesizer",
"earlyMedia": "boolean",
"disableTtsCache": "boolean"
"disableTtsCache": "boolean",
"closeStreamOnEmpty": "boolean"
},
"required": [
"text"
]
},
"gather": {
@@ -174,7 +254,9 @@
"timeout": "number",
"recognizer": "#recognizer",
"play": "#play",
"say": "#say"
"say": "#say",
"fillerNoise": "#fillerNoise",
"actionHookDelayAction": "#actionHookDelayAction"
},
"required": [
]
@@ -184,6 +266,8 @@
"id": "string",
"name": "string",
"beep": "boolean",
"memberTag": "string",
"speakOnlyTo": "string",
"startConferenceOnEnter": "boolean",
"endConferenceOnExit": "boolean",
"endConferenceDuration": "number",
@@ -215,13 +299,19 @@
"dtmfHook": "object|string",
"headers": "object",
"anchorMedia": "boolean",
"exitMediaPath": "boolean",
"boostAudioSignal": "number|string",
"listen": "#listen",
"stream": "#listen",
"target": ["#target"],
"timeLimit": "number",
"timeout": "number",
"proxy": "string",
"transcribe": "#transcribe",
"amd": "#amd"
"amd": "#amd",
"dub": ["#dub"],
"tag": "object",
"forwardPAI": "boolean"
},
"required": [
"target"
@@ -232,15 +322,17 @@
"id": "string",
"credentials": "object|string",
"project": "string",
"agent": "string",
"environment": "string",
"region": {
"region": "string",
"model": {
"type": "string",
"enum": ["europe-west1", "europe-west2", "australia-southeast1", "asia-northeast1"]
"enum": ["es", "cx"]
},
"lang": "string",
"actionHook": "object|string",
"eventHook": "object|string",
"events": "[string]",
"events": "array",
"welcomeEvent": "string",
"welcomeEventParams": "object",
"noInputTimeout": "number",
@@ -248,7 +340,8 @@
"passDtmfAsTextInput": "boolean",
"thinkingMusic": "string",
"tts": "#synthesizer",
"bargein": "boolean"
"bargein": "boolean",
"queryInput": "#queryInput"
},
"required": [
"project",
@@ -256,6 +349,16 @@
"lang"
]
},
"queryInput": {
"properties": {
"text": "string",
"intent": "string",
"event": "string",
"dtmf": "string"
},
"required": [
]
},
"dtmf": {
"properties": {
"id": "string",
@@ -306,6 +409,35 @@
"passDtmf": "boolean",
"playBeep": "boolean",
"disableBidirectionalAudio": "boolean",
"bidirectionalAudio": "#bidirectionalAudio",
"sampleRate": "number",
"timeout": "number",
"transcribe": "#transcribe",
"url": "string",
"wsAuth": "#auth",
"earlyMedia": "boolean",
"channel": "number"
},
"required": [
"url"
]
},
"stream": {
"properties": {
"id": "string",
"actionHook": "object|string",
"auth": "#auth",
"finishOnKey": "string",
"maxLength": "number",
"metadata": "object",
"mixType": {
"type": "string",
"enum": ["mono", "stereo", "mixed"]
},
"passDtmf": "boolean",
"playBeep": "boolean",
"disableBidirectionalAudio": "boolean",
"bidirectionalAudio": "#bidirectionalAudio",
"sampleRate": "number",
"timeout": "number",
"transcribe": "#transcribe",
@@ -317,6 +449,35 @@
"url"
]
},
"llm": {
"properties": {
"id": "string",
"vendor": "string",
"model": "string",
"auth": "object",
"connectOptions": "object",
"mcpServers": ["#mcpServer"],
"actionHook": "object|string",
"eventHook": "object|string",
"toolHook": "object|string",
"events": "array",
"llmOptions": "object"
},
"required": [
"vendor",
"llmOptions"
]
},
"mcpServer": {
"properties": {
"url": "string",
"auth": "object",
"roots": ["#root"]
},
"required": [
"url"
]
},
"message": {
"properties": {
"id": "string",
@@ -408,7 +569,10 @@
"headers": "object",
"timeout": "number",
"amd": "#amd",
"dual_streams" : "boolean"
"dual_streams": "boolean",
"sipRequestWithinDialogHook": "string",
"referHook": "object|string",
"timeLimit": "number"
},
"required": [
"call_hook",
@@ -429,11 +593,12 @@
"properties": {
"id": "string",
"transcriptionHook": "string",
"translationHook": "string",
"recognizer": "#recognizer",
"earlyMedia": "boolean"
"earlyMedia": "boolean",
"channel": "number"
},
"required": [
"transcriptionHook"
]
},
"target": {
@@ -456,7 +621,8 @@
"vmail": "boolean",
"tenant": "string",
"trunk": "string",
"overrideTo": "string"
"overrideTo": "string",
"proxy": "string"
},
"required": [
"type"
@@ -485,14 +651,14 @@
"vendor": "string",
"label": "string",
"language": "string",
"voice": "string",
"voice": "string|object",
"fallbackVendor": "string",
"fallbackLabel": "string",
"fallbackLanguage": "string",
"fallbackVoice": "string",
"fallbackVoice": "string|object",
"engine": {
"type": "string",
"enum": ["standard", "neural"]
"enum": ["standard", "neural", "generative", "long-form"]
},
"gender": {
"type": "string",
@@ -575,13 +741,22 @@
"asrDtmfTerminationDigit": "string",
"asrTimeout": "number",
"fastRecognitionTimeout": "number",
"minConfidence": "number",
"nuanceOptions": "#nuanceOptions",
"deepgramOptions": "#deepgramOptions",
"ibmOptions": "#ibmOptions",
"nvidiaOptions": "#nvidiaOptions",
"sonioxOptions": "#sonioxOptions",
"cobaltOptions": "#cobaltOptions",
"customOptions": "#customOptions"
"awsOptions": "#awsOptions",
"azureOptions": "#azureOptions",
"assemblyAiOptions": "#assemblyAiOptions",
"googleOptions": "#googleOptions",
"customOptions": "#customOptions",
"verbioOptions": "#verbioOptions",
"speechmaticsOptions": "#speechmaticsOptions",
"openaiOptions": "#openaiOptions",
"houndifyOptions": "#houndifyOptions"
},
"required": [
"vendor"
@@ -591,11 +766,110 @@
"properties": {
"authToken": "string",
"uri": "string",
"sampleRate": "number",
"options": "object"
},
"required": [
]
},
"awsOptions": {
"properties": {
"accessKey": "string",
"secretKey": "string",
"securityToken": "string",
"region": "string",
"vocabularyName": "string",
"vocabularyFilterName": "string",
"vocabularyFilterMethod": {
"type": "string",
"enum": [
"remove",
"mask",
"tag"
]
},
"languageModelName": "string",
"piiEntityTypes": "array",
"piiIdentifyEntities": "boolean"
},
"required": [
]
},
"azureOptions": {
"properties": {
"speechSegmentationSilenceTimeoutMs": "number",
"postProcessing" : "string",
"languageIdMode": {
"type": "string",
"enum": [
"AtStart",
"Continuous"
]
},
"speechRecognitionMode": {
"type": "string",
"enum": [
"CONVERSATION",
"DICTATION",
"INTERACTIVE"
]
}
},
"required": [
]
},
"googleOptions" : {
"properties": {
"serviceVersion": {
"type": "string",
"enum": [
"v1",
"v2"
]
},
"recognizerId": "string",
"speechStartTimeoutMs": "number",
"speechEndTimeoutMs": "number",
"enableVoiceActivityEvents": "boolean",
"transcriptNormalization": "array"
}
},
"houndifyOptions": {
"properties": {
"latitude": "number",
"longitude": "number",
"city": "string",
"state": "string",
"country": "string",
"timeZone": "string",
"domain": "string",
"audioEndpoint": "string",
"maxSilenceSeconds": "number",
"maxSilenceAfterFullQuerySeconds": "number",
"maxSilenceAfterPartialQuerySeconds": "number",
"vadSensitivity": "number",
"vadTimeout": "number",
"vadMode": "string",
"vadVoiceMs": "number",
"vadSilenceMs": "number",
"vadDebug": "boolean",
"audioFormat": "string",
"enableNoiseReduction": "boolean",
"enableProfanityFilter": "boolean",
"enablePunctuation": "boolean",
"enableCapitalization": "boolean",
"confidenceThreshold": "number",
"enableDisfluencyFilter": "boolean",
"maxResults": "number",
"enableWordTimestamps": "boolean",
"maxAlternatives": "number",
"partialTranscriptInterval": "number",
"sessionTimeout": "number",
"connectionTimeout": "number",
"customVocabulary": "array",
"languageModel": "string"
}
},
"cobaltOptions": {
"properties": {
"serverUri": "string",
@@ -640,12 +914,16 @@
},
"deepgramOptions": {
"properties": {
"deepgramSttUri": "string",
"deepgramSttUseTls": "boolean",
"apiKey": "string",
"tier": "string",
"model": "string",
"customModel": "string",
"version": "string",
"punctuate": "boolean",
"smartFormatting": "boolean",
"noDelay": "boolean",
"profanityFilter": "boolean",
"redact": {
"type": "string",
@@ -665,9 +943,18 @@
"search": "array",
"replace": "array",
"keywords": "array",
"keyterms": "array",
"endpointing": "boolean | number",
"utteranceEndMs": "number",
"shortUtterance": "boolean",
"vadTurnoff": "number",
"tag": "string"
"tag": "string",
"fillerWords" : "boolean",
"eotThreshold": "number",
"eotTimeoutMs": "number",
"mipOptOut": "boolean",
"entityPrompt": "string",
"eagerEotThreshold":"number"
}
},
"sonioxOptions": {
@@ -683,6 +970,165 @@
"required": [
]
},
"verbioOptions": {
"properties": {
"enable_formatting": "boolean",
"enable_diarization": "boolean",
"topic": "number",
"inline_grammar": "string",
"grammar_uri": "string",
"label": "string",
"recognition_timeout": "number",
"speech_complete_timeout": "number",
"speech_incomplete_timeout": "number"
},
"required": [
]
},
"openaiOptions": {
"properties": {
"apiKey": "string",
"model": "string",
"prompt": "string",
"promptTemplates": "#promptTemplates",
"language": "string",
"input_audio_noise_reduction": {
"type": "string",
"enum": [
"near_field",
"far_field"
]
},
"turn_detection": "#turnDetection"
},
"required": [
]
},
"promptTemplates": {
"properties": {
"hintsTemplate": "string",
"conversationHistoryTemplate": "string"
},
"required": [
]
},
"turnDetection": {
"properties": {
"type": {
"type": "string",
"enum": [
"none",
"server_vad",
"semantic_vad"
]
},
"eagerness": {
"type": "string",
"enum": [
"low",
"medium",
"high",
"auto"
]
},
"threshold": "number",
"prefix_padding_ms": "number",
"silence_duration_ms": "number"
},
"required": [
"type"
]
},
"speechmaticsOptions": {
"properties": {
"transcription_config": "#sm_transcriptionConfig",
"translation_config": "#sm_translationConfig",
"audio_events_config_config": "#sm_audioEventsConfig"
},
"required": [
]
},
"sm_transcriptionConfig": {
"properties": {
"language": "string",
"domain": "string",
"additional_vocab": "array",
"diarization": "string",
"speaker_diarization_config": "#sm_speakerDiarizationConfig",
"enable_partials": "boolean",
"max_delay": "number",
"max_delay_mode": {
"type": "string",
"enum": [
"fixed",
"flexible"
]
},
"output_locale": "string",
"punctuation_overrides": "#sm_puctuationOverrides",
"operating_point": "string",
"enable_entities": "boolean",
"audio_filtering_config": "#sm_audioFilteringConfig",
"transcript_filtering_config": "#sm_transcriptFilteringConfig"
},
"required": [
]
},
"sm_speakerDiarizationConfig": {
"properties": {
"speaker_sensitivity": "number",
"max_speakers": "number"
},
"required": [
]
},
"sm_puctuationOverrides": {
"properties": {
"permitted_marks": "array",
"sensitivity": "number"
},
"required": [
]
},
"sm_audioFilteringConfig": {
"properties": {
"volume_threshold": "number"
},
"required": [
"volume_threshold"
]
},
"sm_transcriptFilteringConfig": {
"properties": {
"remove_disfluencies": "boolean"
},
"required": [
"remove_disfluencies"
]
},
"sm_translationConfig": {
"properties": {
"target_languages": "array",
"enable_partials": "boolean"
},
"required": [
"target_languages"
]
},
"sm_audioEventsConfig": {
"properties": {
"types": {
"type": "array",
"enum": [
"applause",
"music",
"laughter"
]
}
},
"required": [
]
},
"sonioxStorage": {
"properties": {
"id": "string",
@@ -740,6 +1186,22 @@
"required": [
]
},
"assemblyAiOptions": {
"properties": {
"apiKey": "string",
"serviceVersion": {
"type": "string",
"enum": [
"v2",
"v3"
]
},
"formatTurns": "boolean",
"endOfTurnConfidenceThreshold": "number",
"minEndOfTurnSilenceWhenConfident": "number",
"maxTurnSilence": "number"
}
},
"resource": {
"properties": {
"externalReference": "#resourceReference",
@@ -816,16 +1278,27 @@
"properties": {
"enable": "boolean",
"voiceMs": "number",
"mode": "number"
"silenceMs": "number",
"strategy": "string",
"mode": "number",
"vendor": {
"type": "string",
"enum": [
"webrtc",
"silero"
]
},
"threshold": "number",
"speechPadMs": "number"
},
"required": [
"enable"
]
},
"amd": {
"properties": {
"actionHook": "object|string",
"thresholdWordCount": "number",
"digitCount": "number",
"timers": "#amdTimers",
"recognizer": "#recognizer"
},
@@ -840,5 +1313,53 @@
"toneTimeoutMs": "number",
"greetingCompletionTimeoutMs": "number"
}
},
"actionHookDelayAction" : {
"properties": {
"enabled": "boolean",
"noResponseTimeout": "number",
"noResponseGiveUpTimeout": "number",
"retries": "number",
"actions": "array",
"giveUpActions": "array"
}
},
"bidirectionalAudio" : {
"properties": {
"enabled": "boolean",
"streaming": "boolean",
"sampleRate": "number"
}
},
"pipeline": {
"properties": {
"id": "string",
"stt": "#recognizer",
"tts": "#synthesizer",
"vad": "#vad",
"turnDetection": "#turnDetectionPipeline",
"llm": "#llm",
"preflightLlm": "boolean",
"actionHook": "object|string",
"eventHook": "object|string"
},
"required": [
"stt",
"llm",
"tts"
]
},
"turnDetectionPipeline": {
"properties": {
"vendor": {
"type": "string",
"enum": ["krisp"]
},
"threshold": "number",
"eagerEotThreshold": "number"
},
"required": [
"vendor"
]
}
}
}

View File

@@ -37,7 +37,76 @@ test("validate correct verbs", async (t) => {
"input" : ["speech"],
"actionHook": "/userInput"
},
"onHoldMusic": "http://server.com/hold"
"transcribe": {
"enable": true,
"transcriptionHook": "http://server.com/hook",
"recognizer": {
"vendor": "google",
"language": "de-DE",
}
},
"onHoldMusic": "http://server.com/hold",
"actionHookDelayAction": {
"enabled": true,
"noResponseTimeout": 5,
"noResponseGiveUpTimeout": 10,
"retries": 3,
"actions": [
{
"verb": "say",
"text": "To speak to Sales press 1 or say Sales. To speak to customer support press 2 or say Support",
"synthesizer": {
"vendor": "google",
"language": "en-US"
}
},
{
"verb": "play",
"url": "https://example.com/example.mp3",
"timeoutSecs": 10,
"seekOffset": 8000,
"actionHook": "/play/action"
}
]
}
},
{
"verb": "config",
"notifySttLatency": true,
"recognizer": {
"vendor": "google",
"language": "de-DE",
"label": "label1",
"assemblyAiOptions": {
"apiKey": "apikey",
"serviceVersion": "v3",
"formatTurns": true,
"endOfTurnConfidenceThreshold": 0.5,
"minEndOfTurnSilenceWhenConfident": 500,
"maxTurnSilence": 2000
}
}
},
{
"verb": "config",
"referHook": "https://referhook.com"
},
{
"verb": "config",
"referHook": {
"url": "https://referhook.com"
}
},
{
"verb": "config",
"recognizer": {
"vendor": "google",
"language": "de-DE",
"label": "label1",
"azureOptions": {
"languageIdMode": "Continuous"
}
}
},
{
"verb": "config",
@@ -50,6 +119,10 @@ test("validate correct verbs", async (t) => {
}
}
},
{
"verb": "config",
"sipRequestWithinDialogHook": "https://jambonz.or/sipIndialogActionHook"
},
{
"verb": "config",
"record": {
@@ -72,6 +145,7 @@ test("validate correct verbs", async (t) => {
"callerName": "Tom",
"answerOnBridge": true,
"dtmfCapture": ["*2", "*3"],
"timeLimit": 10,
"dtmfHook": {
"url": "/dtmf",
"method": "GET"
@@ -137,7 +211,12 @@ test("validate correct verbs", async (t) => {
"hintsBoost": 10,
"fastRecognitionTimeout": 2000,
"deepgramOptions": {
"endpointing": 500
"endpointing": 500,
"noDelay": true,
"eotThreshold": 500,
"eotTimeoutMs": 5000,
"eagerEotThreshold": 200,
"mipOptOut": true
}
},
"say": {
@@ -151,8 +230,103 @@ test("validate correct verbs", async (t) => {
"fallbackLabel": "label1",
"fallbackVoice": "voice"
}
},
"say": {
"text": "To speak to Sales press 1 or say Sales. To speak to customer support press 2 or say Support",
"instructions": "Voice: High-energy, upbeat, and encouraging, projecting enthusiasm and motivation."
},
"say": {
"text": "To speak to Sales press 1 or say Sales. To speak to customer support press 2 or say Support",
"synthesizer": {
"vendor": "google",
"language": "en-US",
"voice": {
"reportedUsage":"REALTIME",
"model":"path/to/model",
},
"fallbackVendor": "google",
"fallbackLanguage": "en-US",
"fallbackLabel": "label1",
"fallbackVoice": {
"reportedUsage":"REALTIME",
"model":"path/to/model",
}
}
}
},
{
"verb": "gather",
"actionHook": "http://example.com/collect",
"input": ["digits", "speech"],
"bargein": true,
"dtmfBargein": true,
"finishOnKey": "#",
"numDigits": 5,
"timeout": 8,
"recognizer": {
"vendor": "verbio",
"language": "en-US",
"verbioOptions": {
"enable_formatting": true,
"enable_diarization": true,
"topic": 0,
"inline_grammar": "this is inline grammar",
"grammar_uri": "https://grammar_uri.com",
"label": "label",
"recognition_timeout": 500,
"speech_complete_timeout": 500,
"speech_incomplete_timeout": 500,
}
},
},
{
"verb": "gather",
"actionHook": "http://example.com/collect",
"input": ["digits", "speech"],
"bargein": true,
"dtmfBargein": true,
"finishOnKey": "#",
"numDigits": 5,
"timeout": 8,
"recognizer": {
"vendor": "houndify",
"language": "en-US",
"houndifyOptions": {
"latitude": 30.6,
"longitude": 30.6,
"city": "Huston",
"state": "CA",
"country": "US",
"timeZone": "GMT",
"domain": "Voice",
"audioEndpoint": "https://api.houndify.com/v1/audio",
"maxSilenceSeconds": 5,
"maxSilenceAfterFullQuerySeconds": 3,
"maxSilenceAfterPartialQuerySeconds": 2,
"vadSensitivity": 0.5,
"vadTimeout": 1000,
"vadMode": "auto",
"vadVoiceMs": 250,
"vadSilenceMs": 500,
"vadDebug": true,
"audioFormat": "PCM16",
"enableNoiseReduction": true,
"enableProfanityFilter": false,
"enablePunctuation": true,
"enableCapitalization": true,
"confidenceThreshold": 0.7,
"enableDisfluencyFilter": true,
"maxResults": 5,
"enableWordTimestamps": true,
"maxAlternatives": 3,
"partialTranscriptInterval": 100,
"sessionTimeout": 30000,
"connectionTimeout": 5000,
"customVocabulary": ["jambonz", "telephony", "voip"],
"languageModel": "enhanced"
}
},
},
{
"verb": "gather",
"actionHook": "http://example.com/collect",
@@ -174,6 +348,28 @@ test("validate correct verbs", async (t) => {
"endpointing": true
}
},
"actionHookDelayAction": {
"noResponseTimeout": 5,
"noResponseGiveUpTimeout": 10,
"retries": 3,
"actions": [
{
"verb": "say",
"text": "To speak to Sales press 1 or say Sales. To speak to customer support press 2 or say Support",
"synthesizer": {
"vendor": "google",
"language": "en-US"
}
},
{
"verb": "play",
"url": "https://example.com/example.mp3",
"timeoutSecs": 10,
"seekOffset": 8000,
"actionHook": "/play/action"
}
]
}
},
{
"verb": "hangup",
@@ -217,6 +413,46 @@ test("validate correct verbs", async (t) => {
"url": "wss://myrecorder.example.com/calls",
"mixType" : "stereo"
},
{
"verb": "listen",
"url": "wss://myrecorder.example.com/calls",
"mixType" : "stereo",
"bidirectionalAudio": {
enabled: true,
streaming: true,
sampleRate: 8000
}
},
{
"verb": "config",
"listen": {
"enable": true,
"url": "wss://myrecorder.example.com/calls",
"mixType" : "stereo",
"bidirectionalAudio": {
enabled: true,
streaming: true,
sampleRate: 8000
}
}
},
{
"verb": "config",
"autoStreamTts": true
},
{
"verb": "config",
"vad": {
"enable": true,
"voiceMs": 250,
"silenceMs": 150,
"strategy": "one-shot",
"mode": 2,
"vendor": "webrtc",
"threshold": 0.5,
"speechPadMs": 1000
}
},
{
"verb": "message",
"to": "15083084809",
@@ -275,6 +511,12 @@ test("validate correct verbs", async (t) => {
"referTo": "+15083084809",
"actionHook": "/action"
},
{
"verb": "sip:refer",
"referTo": "+15083084809",
"referredByDisplayName": "Alice",
"actionHook": "/action"
},
{
"verb": "tag",
"data": {
@@ -292,6 +534,39 @@ test("validate correct verbs", async (t) => {
"interim": true
}
},
{
"verb": "transcribe",
"transcriptionHook": "http://example.com/transcribe",
"recognizer": {
"vendor": "nvidia",
"language" : "en-US",
"customOptions": {
"sampleRate": 16000
}
}
},
{
"verb": "transcribe",
"transcriptionHook": "http://example.com/transcribe",
"recognizer": {
"vendor": "nvidia",
"language" : "en-US",
"interim": true,
"googleOptions": {
"serviceVersion": "v2",
"speechStartTimeoutMs": 500,
"speechEndTimeoutMs": 1000,
"enableVoiceActivityEvents": true,
"transcriptNormalization" : [
{
"search": "dog",
"replace": "cat",
"case_sensitive": true
}
]
}
}
},
{
"verb": "rest:dial",
"account_sid": "1291964182631236912836123912",
@@ -314,7 +589,28 @@ test("validate correct verbs", async (t) => {
"actionHook": "/answeringMachineDetection",
},
"dual_streams": true
"dual_streams": true,
"timeLimit" : 10
},
{
"verb": "llm",
"vendor": 'ultravox',
"model": 'fixie-ai/ultravox',
"auth": {
"apiKey": "sk-1234567890abcdefg"
},
"llmOptions": {
"firstSpeaker": 'FIRST_SPEAKER_AGENT',
},
"mcpServers": [
{
"url": 'https://mcp.example.com',
"auth": {
"username": 'username',
"password": 'password'
}
}
]
}
];
try {