TypeScript SDK: Источники, файлы, почта и Wildberries
Эта статья показывает, как соединить несколько частей SDK в одном сценарии. Для параметров, возвращаемых значений и отдельного примера каждого метода откройте KeyValue, Sources, Storage, Mail и Wildberries.
Можно запросить несколько сайтов и обработать письмо в одном запуске. Результаты сохраняются у сайта, выбранного для сценария. Пошаговый пример.
Эти методы связывают сценарий с подключёнными источниками. Доступ зависит от настроек сценария и прав пространства. Вызовы к сервисам асинхронные; используйте await.
Состояние и входные данные
ctx.state().get(key, fallback), set(key, value) и incr(key, by) сохраняют курсор между прогонами. ctx.sources().input(key) читает подключённый вход, document(key, id) возвращает документ, а comparePrices(sources) сравнивает цены нескольких источников локально. Для сравнения нужны 2–10 источников, одинаковая валюта и запись { sku, price, currency } в каждом.
async function run(ctx: Akmelo.Context): Promise<void> {
const lastPage = await ctx.state().get('page', 0);
ctx.log(`Следующая страница: ${lastPage + 1}`);
await ctx.state().set('page', lastPage + 1);
}
Файлы и почта
ctx.storage(code) работает с выбранным хранилищем: putFromUrl(url, key, mime), put(key, content, mime), exists(key), url(key, ttlSeconds). ctx.mail() даёт available(), current(), text(), attachments(), document(id) и attachment(id) для входящего письма. Вызовы требуют await; не записывайте содержимое секрета или письма в журнал.
Wildberries
ctx.wildberries().products(), regions(), categoryQuery() и maxPages() читают настройки сценария локально. cards(ids, regionId), search(regionId, page), analogs(regionId), details(id) и detailsMany(ids) получают данные через готовый источник. title(card) и characteristics(card) извлекают поля из карточки локально. Выберите регион из regions(); его идентификатор передавайте в методы поиска и карточек.
async function run(ctx: Akmelo.Context): Promise<void> {
const wb = ctx.wildberries();
const region = wb.regions()[0];
if (!region) ctx.abort('Выберите регион');
const cards = await wb.cards(wb.products(), region.id);
for (const card of cards) ctx.emit({ id: card.id, title: wb.title(card) }, String(card.id));
}
Для чтения Excel, PDF, Word и CSV используйте документный SDK. Для преобразования неструктурированных данных — AI.