Compare commits

...

90 Commits

Author SHA1 Message Date
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
Dave Horton
873d8dc0c8 0.0.35 2023-09-20 07:31:02 -04:00
Hoan Luu Huu
992a5fe897 add support for dual streams in rest:dial (#25) 2023-09-20 07:30:23 -04:00
Dave Horton
6803a3e49d 0.0.34 2023-09-13 09:39:46 -04:00
Hoan Luu Huu
2d2145917e feat fast recognition (#22) 2023-09-13 09:39:17 -04:00
Anton Voylenko
4fa8d46fd8 missing config verbs for listen (#24) 2023-09-13 09:33:25 -04:00
Dave Horton
9690e14f64 0.0.33 2023-09-13 08:59:09 -04:00
Dave Horton
49752d16ea allow specification of token for cobalt speech when compiling contexts 2023-09-13 08:59:01 -04:00
Dave Horton
9e141cba6a 0.0.32 2023-09-12 20:48:02 -04:00
Dave Horton
82e2bc5239 Vendor/cobalt (#23)
* add support for cobalt

* more changes for cobalt

* 0.0.31

* more cobalt options
2023-09-12 20:47:30 -04:00
Dave Horton
3a5b053248 0.0.30 2023-08-19 09:45:46 -04:00
Dave Horton
d74364b1c2 Merge pull request #21 from avoylenko/main
endConferenceDuration for conference verb
2023-08-19 09:45:36 -04:00
Anton Voylenko
213d7596d2 endConferenceDuration for conference verb 2023-08-19 15:36:02 +03:00
Dave Horton
3d4df422e1 0.0.29 2023-08-17 07:53:39 -04:00
Dave Horton
3531711991 Merge pull request #20 from jambonz/feat/fallback_speech
feat fallback speech vendor
2023-08-17 07:53:07 -04:00
Quan HL
f860074a24 fix typo 2023-08-17 11:54:15 +07:00
Quan HL
65de44012a feat fallback speech vendor 2023-08-17 11:29:44 +07:00
Dave Horton
067a49bd2c 0.0.28 2023-08-15 18:17:33 -04:00
Dave Horton
4967efa745 Merge pull request #19 from jambonz/feat/moh_01
add onHoldHook to dial verb
2023-08-15 18:16:39 -04:00
Quan HL
61669e5574 add onHoldHook to dial verb 2023-08-16 05:01:34 +07:00
Dave Horton
e25ef7349e 0.0.27 2023-08-15 08:47:07 -04:00
Dave Horton
26f5609996 Merge pull request #18 from jambonz/fix/multi_speech_same_vendor
feat add label to synthesizer
2023-08-15 08:45:58 -04:00
Quan HL
1a1436b612 add label to recognizer 2023-08-15 09:14:33 +07:00
Quan HL
ba9a9f9b60 feat add label to synthesizer 2023-08-15 07:07:47 +07:00
Dave Horton
93c368e894 Merge pull request #17 from jambonz/feat/moh
feat: add onhold music to dial verb
2023-08-10 07:49:26 -04:00
Quan HL
185e4df06e obholdMusic for config verb 2023-08-10 13:56:10 +07:00
Quan HL
c22e8c9cf0 feat: add onhold music to dial verb 2023-07-25 17:56:28 +07:00
Dave Horton
1c3d86c807 0.0.26 2023-07-20 07:35:08 -04:00
Dave Horton
7e986acc17 Merge pull request #15 from jambonz/feat/siprec_custom_headers
feat confige record allow SIP custom headers
2023-07-20 07:34:29 -04:00
Quan HL
d5c535c02c feat confige record allow SIP custom headers 2023-07-20 15:12:10 +07:00
Dave Horton
6e819279d1 0.0.25 2023-06-19 06:45:03 +01:00
Dave Horton
24e73a4dc6 Merge pull request #13 from jambonz/feat/multi_srs
config with multiple siprecServerURL
2023-06-19 06:44:28 +01:00
Quan HL
cfd367f185 config with multiple siprecServerURL 2023-06-19 07:26:53 +07:00
Dave Horton
f472de9638 0.0.24 2023-06-02 12:53:12 -04:00
Dave Horton
45a2a039cd transcribe: recognizer is not required, but transcriptionHook is 2023-06-02 12:53:00 -04:00
Dave Horton
4a345633a3 0.0.23 2023-05-28 21:55:58 -04:00
Dave Horton
f14ff2e319 Merge pull request #12 from jambonz/feat/advanced_queue
feat: enqueue dequeue priority and callSid
2023-05-28 21:55:35 -04:00
Quan HL
c85cb7e67e feat: enqueue dequeue priority and callSid 2023-05-29 07:09:00 +07:00
Dave Horton
8ccb13f962 0.0.22 2023-05-09 11:48:09 -04:00
Dave Horton
044ce2d4bb add synthesizer.options 2023-05-09 11:48:00 -04:00
Dave Horton
b483e04611 0.0.21 2023-05-08 09:47:01 -04:00
Dave Horton
c1032638b2 config: add support for resetting recognizer and/or synthesizer to application defaults 2023-05-08 09:46:45 -04:00
Dave Horton
72225385ae 0.0.20 2023-05-07 08:41:52 -04:00
Dave Horton
6ad9d2bce0 Merge pull request #11 from jambonz/feat/rest_dial_amd
rest:dial amd
2023-05-07 08:41:37 -04:00
Quan HL
045df8a9fe rest:dial amd 2023-05-07 19:40:28 +07:00
6 changed files with 294 additions and 35 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('|')) {

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "@jambonz/verb-specifications",
"version": "0.0.19",
"version": "0.0.57",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@jambonz/verb-specifications",
"version": "0.0.19",
"version": "0.0.57",
"license": "MIT",
"dependencies": {
"debug": "^4.3.4",

View File

@@ -1,6 +1,6 @@
{
"name": "@jambonz/verb-specifications",
"version": "0.0.19",
"version": "0.0.57",
"description": "Jambonz Verb Specification Utilities",
"main": "index.js",
"scripts": {

View File

@@ -1,4 +1,11 @@
{
"answer": {
"properties": {
"id": "string"
},
"required": [
]
},
"sip:decline": {
"properties": {
"id": "string",
@@ -43,8 +50,13 @@
"bargeIn": "#bargeIn",
"record": "#recordOptions",
"listen": "#listenOptions",
"transcribe": "#transcribeOptions",
"amd": "#amd",
"notifyEvents": "boolean"
"notifyEvents": "boolean",
"reset": "string|array",
"onHoldMusic": "string",
"actionHookDelayAction": "#actionHookDelayAction",
"sipRequestWithinDialogHook": "object|string"
},
"required": []
},
@@ -58,7 +70,12 @@
"type": "string",
"enum": ["mono", "stereo", "mixed"]
},
"metadata": "object"
"metadata": "object",
"maxLength": "number",
"passDtmf": "boolean",
"playBeep": "boolean",
"disableBidirectionalAudio": "boolean",
"timeout": "number"
},
"required": [
"enable"
@@ -82,13 +99,42 @@
"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",
"loop": "boolean",
"gain": "number|string"
},
"required": [
"action",
"track"
]
},
"dequeue": {
"properties": {
"id": "string",
"name": "string",
"actionHook": "object|string",
"timeout": "number",
"beep": "boolean"
"beep": "boolean",
"callSid": "string"
},
"required": [
"name"
@@ -100,6 +146,7 @@
"name": "string",
"actionHook": "object|string",
"waitHook": "object|string",
"priority": "number",
"_": "object"
},
"required": [
@@ -165,7 +212,8 @@
"timeout": "number",
"recognizer": "#recognizer",
"play": "#play",
"say": "#say"
"say": "#say",
"actionHookDelayAction": "#actionHookDelayAction"
},
"required": [
]
@@ -175,8 +223,11 @@
"id": "string",
"name": "string",
"beep": "boolean",
"memberTag": "string",
"speakOnlyTo": "string",
"startConferenceOnEnter": "boolean",
"endConferenceOnExit": "boolean",
"endConferenceDuration": "number",
"maxParticipants": "number",
"joinMuted": "boolean",
"actionHook": "object|string",
@@ -194,6 +245,7 @@
"properties": {
"id": "string",
"actionHook": "object|string",
"onHoldHook": "object|string",
"answerOnBridge": "boolean",
"callerId": "string",
"callerName": "string",
@@ -210,7 +262,8 @@
"timeout": "number",
"proxy": "string",
"transcribe": "#transcribe",
"amd": "#amd"
"amd": "#amd",
"tag": "object"
},
"required": [
"target"
@@ -361,7 +414,8 @@
"enum": ["startCallRecording", "stopCallRecording", "pauseCallRecording", "resumeCallRecording"]
},
"recordingID": "string",
"siprecServerURL": "string"
"siprecServerURL": "string|array",
"headers": "object"
},
"required": [
"action"
@@ -394,7 +448,10 @@
"tag": "object",
"to": "#target",
"headers": "object",
"timeout": "number"
"timeout": "number",
"amd": "#amd",
"dual_streams": "boolean",
"sipRequestWithinDialogHook": "string"
},
"required": [
"call_hook",
@@ -419,7 +476,7 @@
"earlyMedia": "boolean"
},
"required": [
"recognizer"
"transcriptionHook"
]
},
"target": {
@@ -442,7 +499,8 @@
"vmail": "boolean",
"tenant": "string",
"trunk": "string",
"overrideTo": "string"
"overrideTo": "string",
"proxy": "string"
},
"required": [
"type"
@@ -469,8 +527,13 @@
"synthesizer": {
"properties": {
"vendor": "string",
"label": "string",
"language": "string",
"voice": "string",
"voice": "string|object",
"fallbackVendor": "string",
"fallbackLabel": "string",
"fallbackLanguage": "string",
"fallbackVoice": "string|object",
"engine": {
"type": "string",
"enum": ["standard", "neural"]
@@ -478,7 +541,8 @@
"gender": {
"type": "string",
"enum": ["MALE", "FEMALE", "NEUTRAL"]
}
},
"options": "object"
},
"required": [
"vendor"
@@ -487,7 +551,11 @@
"recognizer": {
"properties": {
"vendor": "string",
"label": "string",
"language": "string",
"fallbackVendor": "string",
"fallbackLabel": "string",
"fallbackLanguage": "string",
"vad": "#vad",
"hints": "array",
"hintsBoost": "number",
@@ -550,11 +618,16 @@
"azureSttEndpointId": "string",
"asrDtmfTerminationDigit": "string",
"asrTimeout": "number",
"fastRecognitionTimeout": "number",
"nuanceOptions": "#nuanceOptions",
"deepgramOptions": "#deepgramOptions",
"ibmOptions": "#ibmOptions",
"nvidiaOptions": "#nvidiaOptions",
"sonioxOptions": "#sonioxOptions",
"cobaltOptions": "#cobaltOptions",
"awsOptions": "#awsOptions",
"azureOptions": "#azureOptions",
"assemblyAiOptions": "#assemblyAiOptions",
"customOptions": "#customOptions"
},
"required": [
@@ -570,6 +643,48 @@
"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"
},
"required": [
]
},
"cobaltOptions": {
"properties": {
"serverUri": "string",
"enableConfusionNetwork": "boolean",
"metadata": "string",
"compiledContextData": "string",
"wordTimeOffsets": "boolean",
"contextToken": "string"
},
"required": [
]
},
"nvidiaOptions": {
"properties": {
"rivaUri": "string",
@@ -602,12 +717,15 @@
},
"deepgramOptions": {
"properties": {
"deepgramSttUri": "string",
"deepgramSttUseTls": "boolean",
"apiKey": "string",
"tier": "string",
"model": "string",
"customModel": "string",
"version": "string",
"punctuate": "boolean",
"smartFormatting": "boolean",
"profanityFilter": "boolean",
"redact": {
"type": "string",
@@ -628,6 +746,8 @@
"replace": "array",
"keywords": "array",
"endpointing": "boolean | number",
"utteranceEndMs": "number",
"shortUtterance": "boolean",
"vadTurnoff": "number",
"tag": "string"
}
@@ -702,6 +822,11 @@
"required": [
]
},
"assemblyAiOptions": {
"properties": {
"apiKey": "string"
}
},
"resource": {
"properties": {
"externalReference": "#resourceReference",
@@ -802,5 +927,14 @@
"toneTimeoutMs": "number",
"greetingCompletionTimeoutMs": "number"
}
},
"actionHookDelayAction" : {
"properties": {
"enabled": "boolean",
"noResponseTimeout": "number",
"noResponseGiveUpTimeout": "number",
"retries": "number",
"actions": "array"
}
}
}

View File

@@ -24,27 +24,96 @@ test("validate correct verbs", async (t) => {
"verb": "config",
"synthesizer": {
"voice": "Jenny",
"vendor": "google"
"vendor": "google",
"label": "label1"
},
"recognizer": {
"vendor": "google",
"language": "de-DE"
"language": "de-DE",
"label": "label1"
},
"bargeIn": {
"enable": true,
"input" : ["speech"],
"actionHook": "/userInput"
},
"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",
"recognizer": {
"vendor": "google",
"language": "de-DE",
"label": "label1",
"assemblyAiOptions": {
"apiKey": "apikey"
}
}
},
{
"verb": "config",
"record": {
"action": "startCallRecording",
"siprecServerURL": ["sip:srs@recording.example.com","sip:srs@recording.example.com"],
"headers" : {
"X-Header1": "Value1",
"X-Header2": "Value2"
}
}
},
{
"verb": "config",
"sipRequestWithinDialogHook": "https://jambonz.or/sipIndialogActionHook"
},
{
"verb": "config",
"record": {
"action": "startCallRecording",
"siprecServerURL": "sip:srs@recording.example.com"
}
},
{
"verb": "dequeue",
"name": "support",
"beep": true,
"timeout": 60
"timeout": 60,
"callSid": "call_sid1234"
},
{
"verb": "dial",
"actionHook": "/outdial",
"onHoldHook": "/onHoldHook",
"callerId": "+16173331212",
"callerName": "Tom",
"answerOnBridge": true,
@@ -95,7 +164,8 @@ test("validate correct verbs", async (t) => {
"verb": "enqueue",
"name": "support",
"actionHook": "/queue-action",
"waitHook": "/queue-wait"
"waitHook": "/queue-wait",
"priority": 50
},
{
"verb": "gather",
@@ -111,6 +181,7 @@ test("validate correct verbs", async (t) => {
"language": "en-US",
"hints": ["sales", "support"],
"hintsBoost": 10,
"fastRecognitionTimeout": 2000,
"deepgramOptions": {
"endpointing": 500
}
@@ -119,7 +190,30 @@ test("validate correct verbs", async (t) => {
"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"
"language": "en-US",
"label": "label1",
"fallbackVendor": "google",
"fallbackLanguage": "en-US",
"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",
"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",
}
}
}
},
@@ -135,12 +229,37 @@ test("validate correct verbs", async (t) => {
"recognizer": {
"vendor": "google",
"language": "en-US",
"fallbackVendor": "google",
"fallbackLanguage": "en-US",
"fallbackLabel": "label1",
"hints": ["sales", "support"],
"hintsBoost": 10,
"deepgramOptions": {
"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",
@@ -261,22 +380,27 @@ test("validate correct verbs", async (t) => {
},
{
"verb": "rest:dial",
account_sid: "1291964182631236912836123912",
call_hook: {
url: "http://127.0.0.1:3100/",
method: "POST",
username: "username",
password: "password",
"account_sid": "1291964182631236912836123912",
"call_hook": {
"url": "http://127.0.0.1:3100/",
"method": "POST",
"username": "username",
"password": "password",
},
from: "15583084810",
to: {
type: "phone",
number: "15583084809",
"from": "15583084810",
"to": {
"type": "phone",
"number": "15583084809",
},
tag: {
customer: "acme",
referenceId: "deadbeef",
}
"tag": {
"customer": "acme",
"referenceId": "deadbeef",
},
"amd": {
"actionHook": "/answeringMachineDetection",
},
"dual_streams": true
}
];
try {