TypeScript SDK: Context: запуск, данные и прогресс
Платформа передаёт ctx в async function run(ctx: Akmelo.Context): Promise<void>. Через него вы получаете параметры, обращаетесь к разрешённым сервисам и отдаёте результаты. Не создавайте ctx самостоятельно.
Примеры — отдельные фрагменты тела async function run(ctx: Akmelo.Context): Promise<void>. Используйте await только для методов с Promise в сигнатуре.
Методы
http()state()storage()browser()captcha()wildberries()dom()json()text()url()emit()flush()log()progress()metric()param()params()credential()sleep()cancelled()abort()fail()now()mail()documents()ai()sources()
http
ctx.http() → HttpClient
Получить клиент для запросов к сайту. Все запросы используют сетевые настройки текущего сайта.
const result = ctx.http();
state
ctx.state() → KeyValue
Получить хранилище небольшого состояния обхода. Подходит для номера последней обработанной страницы.
const result = ctx.state();
storage
ctx.storage(code) → Storage
Выбрать файловое S3-хранилище по коду подключения. Подключение нужно заранее настроить и разрешить для сайта.
const result = ctx.storage('media');
browser
ctx.browser() → Browser
Получить браузер для страниц, которым нужен JavaScript, клики или прокрутка.
const result = ctx.browser();
wildberries
ctx.wildberries() → Wildberries
Получить готовый источник карточек для сайта, созданного из решения Wildberries. Список товаров и регионов берётся из настроек сайта. Все методы и пример.
const result = ctx.wildberries();
dom
ctx.dom(html, baseUrl) → Dom
Разобрать уже полученный HTML. baseUrl нужен для преобразования относительных ссылок в полные.
const result = ctx.dom('<a href="/product">Товар</a>', 'https://example.com');
json
ctx.json(text) → unknown
Разбирает JSON-текст через JSON.parse(). При невалидном JSON выбрасывает ошибку; параметра глубины у метода нет.
const result = ctx.json('{"items":[]}');
text
ctx.text() → TextTools
Получить помощник для очистки текста, цен и артикулов.
const result = ctx.text();
url
ctx.url() → UrlTools
Получить помощник для ссылок, query-параметров и шаблонов страниц.
const result = ctx.url();
emit
ctx.emit(item, key) → void
Добавляет обычный объект TypeScript в результат. Не передавайте объекты Response, Dom или Document целиком: соберите нужные поля. Стабильный key позволит обновить запись в следующем прогоне.
ctx.emit({ sku: 'A-1', price: 1250 }, 'A-1');
flush
ctx.flush() → void
Отправить накопленную пачку записей, не дожидаясь автоматической отправки.
ctx.flush();
log
ctx.log(message, context, level) → void
Записать понятное сообщение в журнал прогона. Дополнительные значения передаются объектом context.
ctx.log('Начат сбор');
progress
ctx.progress(done, total, label, percent) → void
Показать выполненную часть работы и название пользовательского этапа. total можно не знать заранее.
ctx.progress(1, 10, 'Каталог');
metric
ctx.metric(name, value) → void
Добавить числовую метрику выполнения, например количество пропущенных карточек.
ctx.metric('processed', 1);
param
ctx.param(name, default) → unknown
Получить один параметр запуска. default используется, если параметра нет или его значение null.
const result = ctx.param('catalog_url', '');
params
ctx.params() → object
Получить сразу все параметры запуска.
const result = ctx.params();
credential
ctx.credential(name) → Promise<string>
Получить именованный секрет для доступа к целевому сайту. Имя должно соответствовать настроенному ключу.
const result = await ctx.credential('site_token');
sleep
ctx.sleep(ms) → Promise<void>
Сделать контролируемую паузу. Аргумент измеряется в миллисекундах.
await ctx.sleep(250);
cancelled
ctx.cancelled() → Promise<boolean>
Узнать, запросил ли пользователь остановку. Проверяйте в длительных циклах.
const result = await ctx.cancelled();
abort
ctx.abort(reason) → never
Остановить выполнение с объяснением причины, сохранив состояние для возможного продолжения. Прогон получает статус остановленного. Если источник ответил ошибкой или сломался формат данных, используйте fail().
ctx.abort('Не удалось обработать страницу');
fail
ctx.fail(reason) → never
Завершить прогон с ошибкой, когда источник недоступен или ответ не соответствует ожидаемому формату. В отличие от abort(), такая остановка отмечается как ошибка, а не отмена.
ctx.fail('Не удалось обработать страницу');
now
ctx.now() → Date
Возвращает объект Date с текущим моментом времени. Для UTC используйте toISOString(); отображение зависит от выбранного часового пояса.
const result = ctx.now();
ctx.mail() → Mail
Открывает методы чтения входящего письма в почтовом сценарии. Содержимое доступно только для закреплённого события.
const result = ctx.mail();
documents
ctx.documents() → Documents
Открывает чтение и разбор разрешённых файлов Excel, PDF, Word, CSV и текста.
const result = ctx.documents();
ai
ctx.ai() → Ai
Открывает методы анализа, извлечения и преобразования данных. Сетевые вызовы AI асинхронны и учитываются в бюджете пространства.
const result = ctx.ai();
sources
ctx.sources() → Sources
Открывает закреплённые входы процесса и локальное сравнение цен. Сами входы доступны только сценарию соответствующего процесса.
const inputs = ctx.sources();
captcha
ctx.captcha()
Возвращает API явных заданий. Каталог и оценка цены не создают платное задание. Создание, получение статуса и обратная связь работают через учёт пространства в облаке и на агенте.