mirror of
https://github.com/jambonz/jambonz-feature-server.git
synced 2025-12-20 08:40:38 +00:00
* initial changes to gather to support nuance stt * updateSpeechCredentialLastUsed could be called without a speech_credential_sid if credentials are passed in the flow * fix bugname * typo * added handlers for nuance * logging * major refactor of parsing transcriptions * initial support for nuance in transcribe verb * updates from testing * cleanup some tests * update action * typo * gather: start nuance timers after say/play completes * update drachtio-fsrmf * refactor some code * typo * log nuance error detail * timeout handling * typo * handle nuance 413 response when recognition times out * typo in specs.json * add support for nuance resources * fixes and tests for transcribe * remove logging from test * initial support for kryptonEndpoint * try getting access token even when using krypton * typo in kryptonEndpoint property * add support for Nuance tts * parse nuance voice and model for tts * use nuance credentials from db * update to db-helpers@0.7.0 with caching option * add support for azure audio logging in gather/transcribe * sync package-lock.json
129 lines
3.1 KiB
JavaScript
129 lines
3.1 KiB
JavaScript
const assert = require('assert');
|
|
const fs = require('fs');
|
|
const express = require('express');
|
|
const app = express();
|
|
const listenPort = process.env.HTTP_PORT || 3000;
|
|
let json_mapping = new Map();
|
|
let hook_mapping = new Map();
|
|
|
|
app.listen(listenPort, () => {
|
|
console.log(`sample jambones app server listening on ${listenPort}`);
|
|
});
|
|
|
|
app.use(express.urlencoded({ extended: true }));
|
|
app.use(express.json());
|
|
|
|
/*
|
|
* Markup language
|
|
*/
|
|
|
|
app.all('/', (req, res) => {
|
|
console.log(req.body, 'POST /');
|
|
const key = req.body.from
|
|
return getJsonFromMap(key, req, res);
|
|
});
|
|
|
|
app.post('/appMapping', (req, res) => {
|
|
console.log(req.body, 'POST /appMapping');
|
|
json_mapping.set(req.body.from, req.body.data);
|
|
return res.sendStatus(200);
|
|
});
|
|
|
|
/*
|
|
* Status Callback
|
|
*/
|
|
app.post('/callStatus', (req, res) => {
|
|
console.log({payload: req.body}, 'POST /callStatus');
|
|
let key = req.body.from + "_callStatus"
|
|
addRequestToMap(key, req, hook_mapping);
|
|
return res.sendStatus(200);
|
|
});
|
|
/*
|
|
* transcriptionHook
|
|
*/
|
|
app.post('/transcriptionHook', (req, res) => {
|
|
console.log({payload: req.body}, 'POST /transcriptionHook');
|
|
let key = req.body.from + "_actionHook"
|
|
addRequestToMap(key, req, hook_mapping);
|
|
return res.json([{"verb": "hangup"}]);
|
|
});
|
|
/*
|
|
* actionHook
|
|
*/
|
|
app.post('/actionHook', (req, res) => {
|
|
console.log({payload: req.body}, 'POST /actionHook');
|
|
let key = req.body.from + "_actionHook"
|
|
addRequestToMap(key, req, hook_mapping);
|
|
return res.sendStatus(200);
|
|
});
|
|
|
|
/*
|
|
* customHook
|
|
* For the hook to return
|
|
*/
|
|
|
|
app.all('/customHook', (req, res) => {
|
|
let key = `${req.body.from}_customHook`;;
|
|
console.log(req.body, `POST /customHook`);
|
|
return getJsonFromMap(key, req, res);
|
|
});
|
|
|
|
app.post('/customHookMapping', (req, res) => {
|
|
let key = `${req.body.from}_customHook`;
|
|
console.log(req.body, `POST /customHookMapping`);
|
|
json_mapping.set(key, req.body.data);
|
|
return res.sendStatus(200);
|
|
});
|
|
|
|
// Fetch Requests
|
|
app.get('/requests/:key', (req, res) => {
|
|
let key = req.params.key;
|
|
if (hook_mapping.has(key)) {
|
|
return res.json(hook_mapping.get(key));
|
|
} else {
|
|
return res.sendStatus(404);
|
|
}
|
|
|
|
})
|
|
|
|
app.get('/lastRequest/:key', (req, res) => {
|
|
let key = req.params.key;
|
|
if (hook_mapping.has(key)) {
|
|
let requests = hook_mapping.get(key);
|
|
return res.json(requests[requests.length - 1]);
|
|
} else {
|
|
return res.sendStatus(404);
|
|
}
|
|
})
|
|
|
|
/*
|
|
* private function
|
|
*/
|
|
|
|
function getJsonFromMap(key, req, res) {
|
|
if (!json_mapping.has(key)) return res.sendStatus(404);
|
|
const retData = JSON.parse(json_mapping.get(key));
|
|
console.log(retData, ` Response to ${req.method} ${req.url}`);
|
|
addRequestToMap(key, req, hook_mapping);
|
|
return res.json(retData);
|
|
}
|
|
|
|
function addRequestToMap(key, req, map) {
|
|
let headers = new Map()
|
|
for(let i = 0; i < req.rawHeaders.length; i++) {
|
|
if (i % 2 === 0) {
|
|
headers.set(req.rawHeaders[i], req.rawHeaders[i + 1])
|
|
}
|
|
}
|
|
let request = {
|
|
'url': req.url,
|
|
'headers': Object.fromEntries(headers),
|
|
'body': req.body
|
|
}
|
|
if (map.has(key)) {
|
|
map.get(key).push(request);
|
|
} else {
|
|
map.set(key, [request]);
|
|
}
|
|
}
|