Как быстро подключить склад из гугл таблицы к поиску на Prom-Stock?
Date Published

Эта инструкция позволит вам настроить API для подключения вашей Google Таблицы к поиску на странице Склад.
🔧 Шаг 1. Подготовьте таблицу
Создайте Google Таблицу (или скопируйте из примера) со следующими столбцами:
sku | description | category | brand | quantity | newdelivery_qty_1 | newdelivery_date_1 | newdelivery_qty_2 | newdelivery_date_2
Пример таблицы и файла скрипта: 👉 Ссылка на Google Диск с примером
👉 Минимально обязательные поля: sku, description, quantity. Остальные можно оставить пустыми.
Шаг 2. Настройка скрипта API
Откройте вашу Google Таблицу.
В меню выберите: Расширения → Apps Script.

Замените содержимое файла этим скриптом:
1const API_CONFIG = {2 SECRET_TOKEN: "ваш_секретный_токен",3 SPREADSHEET_ID: "аш_ID_таблицы",4 DEFAULT_PER_PAGE: 5,5 MAX_PER_PAGE: 50,6 CACHE_DURATION: 3007};89function testDoGet() {10 const mockRequest = {11 parameter: {12 page: "1",13 per_page: "5",14 filters: JSON.stringify({ sku: "1045", description: "" }),15 sort_by: "sku",16 sort_order: "asc",17 token: API_CONFIG.SECRET_TOKEN18 }19 };2021 const result = doGet(mockRequest);22 Logger.log("Результат теста:\n" + result.getContent());23 return result;24}2526function doGet(e) {27 e = e || {};28 e.parameter = e.parameter || {};2930 try {31 const requestToken = e.parameter.token;32 if (!requestToken || requestToken !== API_CONFIG.SECRET_TOKEN) {33 throw new Error("Неверный токен доступа.");34 }3536 const sheet = SpreadsheetApp.openById(API_CONFIG.SPREADSHEET_ID).getSheetByName("Лист1");37 const values = sheet.getDataRange().getValues();38 const headers = values.shift();39 const formattedHeaders = headers.map(h => h.toString().toLowerCase().replace(/\s+/g, "_"));4041 const params = parseRequestParameters(e.parameter);4243 let processedData = values.map(row => {44 return formattedHeaders.reduce((obj, key, i) => {45 obj[key] = row[i];46 return obj;47 }, {});48 });4950 if (params.filters) {51 try {52 const skuFilter = cleanSku(params.filters.sku || "");53 const descFilter = (params.filters.description || "").toLowerCase().trim();5455 if (skuFilter || descFilter) {56 processedData = processedData.filter(row => {57 try {58 const rowSku = cleanSku(String(row.sku || ""));59 const rowDesc = (row.description || "").toLowerCase().trim();6061 const matchSku = skuFilter ? rowSku.includes(skuFilter) : true;62 const matchDesc = descFilter ? rowDesc.includes(descFilter) : true;6364 return matchSku && matchDesc;65 } catch (e) {66 console.error(`Ошибка обработки строки: ${JSON.stringify(row)}`, e);67 return false;68 }69 });70 }71 } catch (e) {72 console.error("Ошибка в параметрах фильтрации:", e);73 return [];74 }75 }7677 function cleanSku(sku) {78 if (!sku) return "";7980 return sku81 .toString()82 .toLowerCase()83 .replace(/[\s()\-_]/g, "")84 .replace(/[^\w]/g, "");85 }868788 if (params.sort_by && formattedHeaders.includes(params.sort_by)) {89 processedData.sort((a, b) => {90 const cmp = compareValues(a[params.sort_by], b[params.sort_by]);91 return params.sort_order === "desc" ? -cmp : cmp;92 });93 }949596 const paginatedData = applyPagination(processedData, params);979899 const response = buildResponse(paginatedData, processedData.length, params);100101 return cacheAndReturnResponse(response, e.parameter);102 } catch (error) {103 Logger.log(`Ошибка API: ${error.message}\n${error.stack}`);104 return buildErrorResponse(error.message, 401);105 }106}107108109function parseRequestParameters(params) {110 return {111 page: Math.max(1, parseInt(params.page) || 1),112 per_page: Math.min(113 API_CONFIG.MAX_PER_PAGE,114 Math.max(1, parseInt(params.per_page) || API_CONFIG.DEFAULT_PER_PAGE)115 ),116 sort_by: params.sort_by,117 sort_order: params.sort_order === "desc" ? "desc" : "asc",118 filters: safeJsonParse(params.filters),119 token: params.token120 };121}122123function applyPagination(items, params) {124 const startIdx = (params.page - 1) * params.per_page;125 return items.slice(startIdx, startIdx + params.per_page);126}127128function buildResponse(data, totalItems, params) {129 return {130 meta: {131 page: params.page,132 per_page: params.per_page,133 total: totalItems,134 total_pages: Math.ceil(totalItems / params.per_page),135 sort_by: params.sort_by,136 sort_order: params.sort_order137 },138 data: data139 };140}141142function cacheAndReturnResponse(response, params) {143 const cacheKey = JSON.stringify(params);144 const cached = CacheService.getScriptCache().get(cacheKey);145146 if (cached) {147 Logger.log("Используем данные из кэша");148 return buildJsonResponse(cached);149 }150151 const jsonResponse = JSON.stringify(response);152 CacheService.getScriptCache().put(cacheKey, jsonResponse, API_CONFIG.CACHE_DURATION);153154 return buildJsonResponse(jsonResponse);155}156157function compareValues(a, b) {158 if (a === b) return 0;159 return a < b ? -1 : 1;160}161162function safeJsonParse(str) {163 try {164 return str ? JSON.parse(str) : null;165 } catch (e) {166 Logger.log(`Ошибка парсинга JSON: ${str}`);167 return null;168 }169}170171function buildJsonResponse(data) {172 return ContentService.createTextOutput(data)173 .setMimeType(ContentService.MimeType.JSON);174}175176function buildErrorResponse(message, status) {177 return buildJsonResponse(JSON.stringify({178 error: true,179 message: message,180 status: status181 }));182}183
В начале скрипта найдите блок конфигурации API_CONFIG и укажите:
SECRET_TOKEN: "придумайте секретный токен",
SPREADSHEET_ID: "ваш_ID_таблицы",
SHEET_NAME: "Проверьте имя листа, должно совпадать",
🧩 SPREADSHEET_ID находится в URL таблицы:
"https://docs.google.com/spreadsheets/d/1AbCDeFGhiJKlmNOPqRStuVWxyZ1234567890/edit"
🚀 Шаг 3. Разверните как веб-приложение
В Apps Script нажмите Развертывание → Новое развертывание.
В типе развертывания выберите Веб-приложение.
Заполните:
Описание: API
Кто имеет доступ: Все, включая анонимных
Выполняется от имени: вас (владельца)
Нажмите Развернуть — скрипт запросит разрешения, подтвердите доступ.
Получите URL веб-приложения — это и будет ваш API URL.

🔐 Шаг 3. Подключение к API
Теперь в личном кабинете в разделе Профиль и инфо о компании откройте Профиль Копании, и кликните на компанию, что бы открыть панель настроек.

Список компаний
переключившись во вкладку "API настройки", вы раздел Подключение к API можете указать поля:
API URL
API Token
Тип API

API настройки
API Token - это ваш SECRET_TOKEN.
API Url - URL Веб-приложение из развертывания.