umbot
Version:
Мультиплатформенный фреймворк для создания голосовых навыков и чат-ботов с единой бизнес-логикой. Встроенная поддержка ВКонтакте, Telegram, Viber, MAX, Яндекс Алисы, Маруси и Сбера SmartApp. Архитектура на адаптерах позволяет подключать любые другие платф
256 lines (255 loc) • 10 kB
JavaScript
;
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;