UNPKG

umbot

Version:

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

256 lines (255 loc) 10 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MarusiaRequest = void 0; const VkRequest_1 = require("./VkRequest"); const constants_1 = require("../Marusia/constants"); const constants_2 = require("./constants"); /** * Класс для взаимодействия с API голосового помощника Маруся * Расширяет функционал VkRequest для работы со специфичными методами Маруси * @see (https://dev.vk.ru/ru/marusia/api) Смотри тут * * @example * ```ts * import { MarusiaRequest } from './api/MarusiaRequest'; * * // Создание экземпляра * const marusia = new MarusiaRequest(); * marusia.initToken('your-marusia-token'); * * // Загрузка изображения * async function uploadImage(imagePath: string) { * // Получаем URL для загрузки * const uploadLink = await marusia.marusiaGetPictureUploadLink(); * if (uploadLink) { * // Загружаем изображение * const upload = await marusia.upload(uploadLink.upload_url, imagePath); * if (upload) { * // Сохраняем изображение * const picture = await marusia.marusiaSavePicture( * upload.photo, * upload.server, * upload.hash * ); * return picture; * } * } * return null; * } * * // Загрузка аудио * async function uploadAudio(audioPath: string) { * // Получаем URL для загрузки * const uploadLink = await marusia.marusiaGetAudioUploadLink(); * if (uploadLink) { * // Загружаем аудиофайл * const upload = await marusia.upload(uploadLink.upload_url, audioPath); * if (upload) { * // Сохраняем аудио * const audio = await marusia.marusiaCreateAudio(upload); * return audio; * } * } * return null; * } * ``` */ class MarusiaRequest extends VkRequest_1.VkRequest { /** * Создает экземпляр класса для работы с API Маруси */ constructor(appContext) { super(appContext); if (appContext.appConfig.tokens[constants_1.T_MARUSIA].token) { this.initToken(appContext.appConfig.tokens[constants_1.T_MARUSIA].token); } } /** * Запрашивает URL для загрузки изображения на сервера Маруси * * @remarks * Поддерживаемые форматы изображений: * - JPEG, JPG, PNG * - Максимальный размер: 5MB * - Рекомендуемое разрешение: 800x800 пикселей * * @example * ```ts * // Получение URL для загрузки * const uploadLink = await marusia.marusiaGetPictureUploadLink(); * if (uploadLink) { * // Загрузка изображения * const upload = await marusia.upload(uploadLink.upload_url, 'image.jpg'); * if (upload) { * console.log('Изображение загружено:', upload); * } * } * ``` * * @returns {Promise<IMarusiaApiPictureUpdateLink | null>} Данные для загрузки изображения или null при ошибке */ async marusiaGetPictureUploadLink() { return await this.call('marusia.getPictureUploadLink'); } /** * Сохраняет загруженное изображение в Марусе * @param photo Идентификатор загруженного изображения * @param server Идентификатор сервера загрузки * @param hash Хэш-сумма для проверки изображения * * @remarks * После успешного сохранения изображение становится доступным в навыке * и может быть использовано в карточках и других элементах интерфейса. * * @example * ```ts * // Полный процесс загрузки и сохранения изображения * const uploadLink = await marusia.marusiaGetPictureUploadLink(); * if (uploadLink) { * const upload = await marusia.upload(uploadLink.upload_url, 'image.jpg'); * if (upload) { * const picture = await marusia.marusiaSavePicture( * upload.photo, * upload.server, * upload.hash * ); * if (picture) { * console.log('ID изображения:', picture.id); * } * } * } * ``` * * @returns {Promise<IMarusiaApiSavePicture | null>} Результат сохранения или null при ошибке */ async marusiaSavePicture(photo, server, hash) { this._request.post = { photo, server, hash, }; return await this.call('marusia.savePicture'); } /** * Удаляет загруженное изображение из Маруси * @param id Идентификатор загруженного изображения * * @returns {Promise<IMarusiaApiRemove | null>} Результат удаления или null при ошибке */ async marusiaDeletePicture(id) { this._request.post = { id, }; return await this.call('marusia.deletePicture'); } /** * Получает список всех изображений из навыка * * @remarks * Метод возвращает информацию о всех изображениях, загруженных в навык: * - id: уникальный идентификатор изображения * - url: URL для доступа к изображению * - preview_url: URL превью изображения * - created: дата создания (Unix timestamp) * * @example * ```ts * // Получение списка изображений * const pictures = await marusia.marusiaGetPictures(); * if (pictures) { * pictures.items.forEach(picture => { * console.log('ID:', picture.id); * console.log('URL:', picture.url); * console.log('Превью:', picture.preview_url); * }); * } * ``` * * @returns Список изображений или null при ошибке */ async marusiaGetPictures() { return await this.call('marusia.getPictures'); } /** * Запрашивает URL для загрузки аудиофайла на сервера Маруси * * @remarks * Поддерживаемые форматы аудио: * - MP3 * - Максимальный размер: 10MB * - Максимальная длительность: 5 минут * - Рекомендуемый битрейт: 128 kbps * * @example * ```ts * // Получение URL для загрузки * const uploadLink = await marusia.marusiaGetAudioUploadLink(); * if (uploadLink) { * // Загрузка аудио * const upload = await marusia.upload(uploadLink.upload_url, 'audio.mp3'); * if (upload) { * console.log('Аудио загружено:', upload); * } * } * ``` * * @returns {Promise<IMarusiaApiAudioUpdateLink | null>} Данные для загрузки аудио или null при ошибке */ async marusiaGetAudioUploadLink() { return await this.call('marusia.getAudioUploadLink'); } /** * Сохраняет загруженный аудиофайл в Марусе * @param audio_meta Метаданные аудиофайла после загрузки * * @remarks * После успешного сохранения аудиофайл становится доступным в навыке * и может быть использован в голосовых ответах. * * @example * ```ts * // Полный процесс загрузки и сохранения аудио * const uploadLink = await marusia.marusiaGetAudioUploadLink(); * if (uploadLink) { * const upload = await marusia.upload(uploadLink.upload_url, 'audio.mp3'); * if (upload) { * const audio = await marusia.marusiaCreateAudio(upload); * if (audio) { * console.log('ID аудио:', audio.id); * console.log('URL аудио:', audio.url); * } * } * } * ``` * * @returns {Promise<IMarusiaApiCreateAudio | null>} Результат сохранения или null при ошибке */ async marusiaCreateAudio(audio_meta) { this._request.post = { audio_meta, }; return await this.call('marusia.createAudio'); } /** * Удаляет загруженный аудиофайл из Маруси * @param id Идентификатор загруженного аудиофайла * * @returns {Promise<IMarusiaApiRemove | null>} Результат удаления или null при ошибке */ async marusiaDeleteAudio(id) { this._request.post = { id, }; return await this.call('marusia.deleteAudio'); } /** * Записывает информацию об ошибках в лог-файл * @param error Текст ошибки для логирования */ _log(error) { this._appContext.logError((0, constants_2.getErrorMsg)(error, 'MarusiaRequest', this._request.url), { error: this._error, }); } } exports.MarusiaRequest = MarusiaRequest;