umbot
Version:
Мультиплатформенный фреймворк для создания голосовых навыков и чат-ботов с единой бизнес-логикой. Встроенная поддержка ВКонтакте, Telegram, Viber, MAX, Яндекс Алисы, Маруси и Сбера SmartApp. Архитектура на адаптерах позволяет подключать любые другие платф
65 lines (64 loc) • 2.61 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.soundProcessing = soundProcessing;
const index_1 = require("../../../index");
const utils_1 = require("../Base/utils");
const API_1 = require("../API");
const constants_1 = require("./constants");
/**
* Получение токена, необходимого для воспроизведения звуков в MAX
* @param controller Контроллер приложения
* @param path Путь до аудиофайла
*/
async function getSoundInDB(controller, path) {
return (0, utils_1.getSoundToken)(path, constants_1.T_MAX_APP, controller, async (model) => {
const api = new API_1.MaxRequest(controller.appContext);
const upload = await api.upload(path, 'audio');
if (upload?.token || upload?.url) {
model.soundToken = upload.token || upload.url;
if (await model.save(true)) {
return model.soundToken;
}
}
return null;
});
}
/**
* Получение корректного ответа для озвучивания запроса пользователю MAX
* @param soundInfo Информация необходимая для обработки аудио
* @param controller Контроллер приложения
*/
async function soundProcessing(soundInfo, controller) {
const { sounds, text } = soundInfo;
const data = [];
if (sounds) {
for (let i = 0; i < sounds.length; i++) {
const sound = sounds[i];
if (sound.sounds !== undefined && sound.key !== undefined) {
let sText = index_1.Text.getText(sound.sounds);
if (index_1.Text.isUrl(sText) || (await (0, index_1.isFile)(sText))) {
sText = await getSoundInDB(controller, sText);
}
if (sText) {
data.push({ type: 'audio', payload: { token: sText } });
}
}
}
}
if (text) {
const speechKit = new API_1.YandexSpeechKit(controller.appContext.appConfig.tokens[constants_1.T_MAX_APP].speech_kit_token + '', controller.appContext);
const content = await speechKit.getTts(text);
let sText = null;
if (content) {
sText = await getSoundInDB(controller, content.fileName);
await (0, index_1.unlink)(content.fileName);
}
if (sText) {
data.push({ type: 'audio', payload: { token: sText } });
}
}
if (data.length) {
return data;
}
return null;
}