UNPKG

umbot

Version:

Мультиплатформенный фреймворк для создания голосовых навыков и чат-ботов с единой бизнес-логикой. Встроенная поддержка ВКонтакте, Telegram, Viber, MAX, Яндекс Алисы, Маруси и Сбера SmartApp. Архитектура на адаптерах позволяет подключать любые другие платф

65 lines (64 loc) 2.61 kB
"use strict"; 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; }