From 7130d8e934edc846b344384d0468a7b24979054f Mon Sep 17 00:00:00 2001 From: Ali BARIN Date: Fri, 10 Jan 2025 14:48:07 +0000 Subject: [PATCH] feat(signalwire): some sample values for attribute values --- .../actions/add-voice-xml-node/index.js | 20 +- .../src/apps/signalwire/dynamic-data/index.js | 2 + .../index.js | 253 ++++++++++++++++++ 3 files changed, 274 insertions(+), 1 deletion(-) create mode 100644 packages/backend/src/apps/signalwire/dynamic-data/list-voice-xml-node-attribute-values/index.js diff --git a/packages/backend/src/apps/signalwire/actions/add-voice-xml-node/index.js b/packages/backend/src/apps/signalwire/actions/add-voice-xml-node/index.js index ea37e2a9..0aa889a1 100644 --- a/packages/backend/src/apps/signalwire/actions/add-voice-xml-node/index.js +++ b/packages/backend/src/apps/signalwire/actions/add-voice-xml-node/index.js @@ -69,9 +69,27 @@ export default defineAction({ { label: 'Attribute value', key: 'value', - type: 'string', + type: 'dropdown', required: false, variables: true, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listVoiceXmlNodeAttributeValues', + }, + { + name: 'parameters.nodeName', + value: '{parameters.nodeName}', + }, + { + name: 'parameters.attributes', + value: '{parameters.attributes}', + }, + ], + }, }, ], }, diff --git a/packages/backend/src/apps/signalwire/dynamic-data/index.js b/packages/backend/src/apps/signalwire/dynamic-data/index.js index adc5bbe2..f3f5b012 100644 --- a/packages/backend/src/apps/signalwire/dynamic-data/index.js +++ b/packages/backend/src/apps/signalwire/dynamic-data/index.js @@ -1,11 +1,13 @@ import listIncomingCallPhoneNumbers from './list-incoming-call-phone-numbers/index.js'; import listIncomingSmsPhoneNumbers from './list-incoming-sms-phone-numbers/index.js'; import listVoiceXmlNodeAttributes from './list-voice-xml-node-attributes/index.js'; +import listVoiceXmlNodeAttributeValues from './list-voice-xml-node-attribute-values/index.js'; import listVoiceXmlNodes from './list-voice-xml-nodes/index.js'; export default [ listIncomingCallPhoneNumbers, listIncomingSmsPhoneNumbers, listVoiceXmlNodeAttributes, + listVoiceXmlNodeAttributeValues, listVoiceXmlNodes, ]; diff --git a/packages/backend/src/apps/signalwire/dynamic-data/list-voice-xml-node-attribute-values/index.js b/packages/backend/src/apps/signalwire/dynamic-data/list-voice-xml-node-attribute-values/index.js new file mode 100644 index 00000000..27f775c0 --- /dev/null +++ b/packages/backend/src/apps/signalwire/dynamic-data/list-voice-xml-node-attribute-values/index.js @@ -0,0 +1,253 @@ +export default { + name: 'List voice XML node attribute values', + key: 'listVoiceXmlNodeAttributeValues', + + async run($) { + const nodeName = $.step.parameters.nodeName; + const attributeName = $.step.parameters.attributeName; + + // Node: Conference + const conferenceMutedAttributeValues = [ + { + name: 'Yes', + value: true, + }, + { + name: 'No', + value: false, + }, + ]; + + const conferenceBeepAttributeValues = [ + { + name: 'Yes', + value: true, + }, + { + name: 'No', + value: false, + }, + { + name: 'On Enter Only', + value: 'onEnter', + }, + { + name: 'On Exit Only', + value: 'onExit', + }, + ]; + + const conferenceStartConferenceOnEnterAttributeValues = [ + { + name: 'Yes', + value: true, + }, + { + name: 'No', + value: false, + }, + ]; + + const conferenceEndConferenceOnExitAttributeValues = [ + { + name: 'Yes', + value: true, + }, + { + name: 'No', + value: false, + }, + ]; + + const conferenceWaitMethodAttributeValues = [ + { + name: 'POST', + value: 'POST', + }, + { + name: 'GET', + value: 'GET', + }, + ]; + + const conferenceRecordAttributeValues = [ + { + name: 'Record From Start', + value: 'record-from-start', + }, + { + name: 'Do Not Record', + value: 'do-not-record', + }, + ]; + + const conferenceTrimAttributeValues = [ + { + name: 'Trim Silence', + value: 'trim-silence', + }, + { + name: 'Do Not Trim', + value: 'do-not-trim', + }, + ]; + + const conferenceStayAloneAttributeValues = [ + { + name: 'Yes', + value: true, + }, + { + name: 'No', + value: false, + }, + ]; + + const conferenceJitterBufferAttributeValues = [ + { + name: 'Off', + value: 'off', + }, + { + name: 'Fixed', + value: 'fixed', + }, + { + name: 'Adaptive', + value: 'adaptive', + }, + ]; + + const conference = { + muted: conferenceMutedAttributeValues, + beep: conferenceBeepAttributeValues, + startConferenceOnEnter: conferenceStartConferenceOnEnterAttributeValues, + endConferenceOnExit: conferenceEndConferenceOnExitAttributeValues, + waitMethod: conferenceWaitMethodAttributeValues, + record: conferenceRecordAttributeValues, + trim: conferenceTrimAttributeValues, + stayAlone: conferenceStayAloneAttributeValues, + jitterBuffer: conferenceJitterBufferAttributeValues, + }; + + // NODE: Say + const sayVoiceAttributeValues = [ + { name: 'Man', value: 'man' }, + { name: 'Woman', value: 'woman' }, + { name: 'Polly Man', value: 'Polly.man' }, + { name: 'Polly Woman', value: 'Polly.woman' }, + { name: 'Polly Man Neural', value: 'Polly.man-Neural' }, + { name: 'Polly Woman Neural', value: 'Polly.woman-Neural' }, + { name: 'Google Cloud Man', value: 'gcloud.man' }, + { name: 'Google Cloud Woman', value: 'gcloud.woman' }, + ]; + + const sayLoopAttributeValues = [ + { name: 'Infinite', value: 0 }, + { name: 'One Time', value: 1 }, + { name: 'Two Times', value: 2 }, + { name: 'Three Times', value: 3 }, + { name: 'Four Times', value: 4 }, + { name: 'Five Times', value: 5 }, + ]; + + const sayLanguageAttributeValues = [ + { name: 'English (US)', value: 'en-US' }, + { name: 'English (UK)', value: 'en-GB' }, + { name: 'Spanish (Spain)', value: 'es-ES' }, + { name: 'French (France)', value: 'fr-FR' }, + { name: 'German (Germany)', value: 'de-DE' }, + ]; + + const say = { + voice: sayVoiceAttributeValues, + loop: sayLoopAttributeValues, + language: sayLanguageAttributeValues, + }; + + // Node: Sip + + const sipCodecsAttributeValues = [ + { name: 'PCMU', value: 'PCMU' }, + { name: 'PCMA', value: 'PCMA' }, + { name: 'G722', value: 'G722' }, + { name: 'G729', value: 'G729' }, + { name: 'OPUS', value: 'OPUS' }, + ]; + + const sipMethodAttributeValues = [ + { name: 'GET', value: 'GET' }, + { name: 'POST', value: 'POST' }, + ]; + + const sipStatusCallbackMethodAttributeValues = [ + { name: 'GET', value: 'GET' }, + { name: 'POST', value: 'POST' }, + ]; + + const sipStatusCallbackEventValues = [ + { name: 'Initiated', value: 'initiated' }, + { name: 'Ringing', value: 'ringing' }, + { name: 'Answered', value: 'answered' }, + { name: 'Completed', value: 'completed' }, + ]; + + const sip = { + codecs: sipCodecsAttributeValues, + method: sipMethodAttributeValues, + statusCallbackMethod: sipStatusCallbackMethodAttributeValues, + statusCallbackEvent: sipStatusCallbackEventValues, + }; + + // Node: Stream + const streamTrackAttributeValues = [ + { + name: 'Inbound Track', + value: 'inbound_track', + }, + { + name: 'Outbound Track', + value: 'outbound_track', + }, + { + name: 'Both Tracks', + value: 'both_tracks', + }, + ]; + + const streamStatusCallbackMethodAttributeValues = [ + { + name: 'GET', + value: 'GET', + }, + { + name: 'POST', + value: 'POST', + }, + ]; + + const stream = { + track: streamTrackAttributeValues, + statusCallbackMethod: streamStatusCallbackMethodAttributeValues, + }; + + const allNodeAttributeValues = { + conference, + say, + sip, + stream, + }; + + if (!nodeName) return { data: [] }; + + const selectedNodeAttributes = allNodeAttributeValues[nodeName]; + + if (!selectedNodeAttributes) return { data: [] }; + + const selectedNodeAttributeValues = selectedNodeAttributes[attributeName]; + + if (!selectedNodeAttributeValues) return { data: [] }; + + return { data: selectedNodeAttributeValues }; + }, +};