From 99d08d3cb1776df3dc85d35e9de0e5500e5f0b98 Mon Sep 17 00:00:00 2001 From: Aleksandr Zavadkin Date: Thu, 20 Nov 2025 14:26:39 +0900 Subject: [PATCH 1/7] docs(docs): configuration and structure --- docs/.vitepress/config.mts | 380 ++++++++++++++++++-------------- docs/integration/index.md | 18 +- docs/integration/start/index.md | 3 + 3 files changed, 236 insertions(+), 165 deletions(-) create mode 100644 docs/integration/start/index.md diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index a46f110..33155b8 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -4,7 +4,7 @@ import { defineConfig } from 'vitepress' export default defineConfig({ title: "REES46", description: "Документация платформы", - base: '/help', + base: '/docs', themeConfig: { // https://vitepress.dev/reference/default-theme-config @@ -21,39 +21,91 @@ export default defineConfig({ sidebar: { '/guides/': [], - // TODO переделать на верхнеуровневые разделы, а внутри уже расширенные локальные разделы '/integration/': [ - { - text: 'Базовая интеграция', - collapsed: true, - items: [ - { text: 'Введение', link: '/setup/' }, - { text: 'Трекинг через SDK', link: '/loyalty/tracking' }, - ] - }, - { - text: 'Товарный фид', - collapsed: true, - items: [ - { text: 'Введение', link: '/feed/' }, - { text: 'Импорт через XML', link: '/feed/xml' }, - { text: 'Импорт через API', link: '/feed/api' }, - { text: 'Импорт через БД', link: '/feed/database' }, - { text: 'Расширенные свойства', link: '/feed/industry-properties' }, - ] - }, + { + text: 'Начальная интеграция', + collapsed: true, + items: [ + { text: 'Введение', link: '/integration/start/index.md' }, + { text: 'Установка SDK', link: '/integration/start/sdk.md' }, + { text: 'Инициализация сессии', link: '/integration/start/init.md' }, + { text: 'Стандартные события', link: '/integration/start/events.md' }, + { text: 'Кастомные события', link: '/integration/start/custom-events.md' }, + { text: 'Профиль', link: '/integration/start/profile.md' }, + ] + }, + { + text: 'Каталог', + collapsed: true, + items: [ + { text: 'Введение', link: '/integration/catalog/index.md' }, + ] + }, + { + text: 'Каналы коммуникации', + collapsed: true, + items: [ + { text: 'Введение', link: '/integration/channels/index.md' }, + ] + }, + { + text: 'Товарные рекомендации', + collapsed: true, + items: [ + { text: 'Введение', link: '/integration/recommendations/index.md' }, + ] + }, + { + text: 'Поиск', + collapsed: true, + items: [ + { text: 'Введение', link: '/integration/search/index.md' }, + ] + }, + { + text: 'Листинг товаров', + collapsed: true, + items: [ + { text: 'Введение', link: '/integration/listing/index.md' }, + ] + }, + { + text: 'Товарные коллекции', + collapsed: true, + items: [ + { text: 'Введение', link: '/integration/collections/index.md' }, + ] + }, + { + text: 'Сторис', + collapsed: true, + items: [ + { text: 'Введение', link: '/integration/stories/index.md' }, + ] + }, + { + text: 'Попапы и in-app push', + collapsed: true, + items: [ + { text: 'Введение', link: '/integration/popups/index.md' }, + ] + }, { text: 'Программа лояльности', collapsed: true, items: [ - { text: 'Основное подключение', link: '/loyalty/setup/' }, - { text: 'Участники', link: '/loyalty/membership' }, - { text: 'Уровни', link: '/loyalty/levels' }, - { text: 'Бонусы', link: '/loyalty/bonuses' }, - { text: 'Стикеры', link: '/loyalty/stickers' }, - { text: 'Акции', link: '/loyalty/promotions' }, - { text: 'Промокоды и купоны', link: '/loyalty/promo-codes' }, - { text: 'Реферальная программа', link: '/loyalty/referral' }, + { text: 'Введение', link: '/integration/loyalty/index.md' }, + ] + }, + { + text: 'Режим PRO', + collapsed: true, + items: [ + { text: 'Введение', link: '/integration/extended/index.md' }, + { text: 'On-premise', link: '/integration/extended/on-premise.md' }, + { text: 'White label', link: '/integration/extended/white-label.md' }, + { text: 'S2S – серверная интеграция', link: '/integration/extended/s2s.md' }, + { text: 'Dashboard API', link: '/integration/extended/dashboard-api.md' }, ] }, ], @@ -75,7 +127,6 @@ export default defineConfig({ text: 'Поиск', collapsed: true, items: [ - { text: 'Фасетный поиск', link: '/mechanics/search/facet-search' } ] }, { @@ -101,18 +152,19 @@ export default defineConfig({ '/education/': [], '/glossary/': [ + { text: 'E-commerce', collapsed: true, items: [ - { text: 'DIY', link: '/glossary/ecommerce/dyi' }, - { text: 'E-pharmacy', link: '/glossary/ecommerce/e-pharmacy' }, - { text: 'FMCG', link: '/glossary/ecommerce/fmcg' }, - { text: 'FoodTech', link: '/glossary/ecommerce/food-tech' }, - { text: 'Health & Beauty', link: '/glossary/ecommerce/health-and-beauty' }, - { text: 'eGrocery', link: '/glossary/ecommerce/egrocery' }, - { text: 'Конверсия', link: '/glossary/ecommerce/conversion' }, - { text: 'Товарный фид', link: '/glossary/ecommerce/products-feed' } + { text: 'DIY', link: '/glossary/ecommerce/dyi.md' }, + { text: 'E-pharmacy', link: '/glossary/ecommerce/e-pharmacy.md' }, + { text: 'FMCG', link: '/glossary/ecommerce/fmcg.md' }, + { text: 'FoodTech', link: '/glossary/ecommerce/food-tech.md' }, + { text: 'Health & Beauty', link: '/glossary/ecommerce/health-and-beauty.md' }, + { text: 'eGrocery', link: '/glossary/ecommerce/egrocery.md' }, + { text: 'Конверсия', link: '/glossary/ecommerce/conversion.md' }, + { text: 'Товарный фид', link: '/glossary/ecommerce/products-feed.md' } ] }, @@ -120,34 +172,34 @@ export default defineConfig({ text: 'Email-маркетинг', collapsed: true, items: [ - { text: 'Double opt-in', link: '/glossary/email-marketing/double-opt-in' }, - { text: 'Liquid Markup', link: '/glossary/email-marketing/liquid-markup' }, - { text: 'Mobile push', link: '/glossary/email-marketing/mobile-push' }, - { text: 'Opt-out', link: '/glossary/email-marketing/opt-out' }, - { text: 'Push-рассылки', link: '/glossary/email-marketing/push-campaigns' }, - { text: 'Push-токены', link: '/glossary/email-marketing/push-token' }, - { text: 'Welcome-цепочка', link: '/glossary/email-marketing/welcome-campaign' }, - { text: 'Автосборщик email', link: '/glossary/email-marketing/email-collector' }, - { text: 'Веб-пуш', link: '/glossary/email-marketing/web-push' }, - { text: 'Грейлистинг', link: '/glossary/email-marketing/gray-listing' }, - { text: 'Динамический сегмент', link: '/glossary/email-marketing/dynamic-segment' }, - { text: 'Канал доставки', link: '/glossary/email-marketing/delivery-channel' }, - { text: 'Комбинированная форма подписки', link: '/glossary/email-marketing/combined-subscription-form' }, - { text: 'Массовые рассылки', link: '/glossary/email-marketing/bulk-campaigns' }, - { text: 'Отложенная отправка', link: '/glossary/email-marketing/scheduled-campaign' }, - { text: 'Пользовательские сегменты', link: '/glossary/email-marketing/segment' }, - { text: 'Прехедер', link: '/glossary/email-marketing/pre-header' }, - { text: 'Реактивационное письмо', link: '/glossary/email-marketing/reactivation-message' }, - { text: 'Событие-триггер', link: '/glossary/email-marketing/event-trigger' }, - { text: 'Ссылка отписки (англ. unsubscribe link)', link: '/glossary/email-marketing/unsubsribe-link' }, - { text: 'Статичный сегмент', link: '/glossary/email-marketing/static-segment' }, - { text: 'Тестовое письмо', link: '/glossary/email-marketing/test-message' }, - { text: 'Транзакционные SMS', link: '/glossary/email-marketing/transactional-sms' }, - { text: 'Транзакционные email', link: '/glossary/email-marketing/transactional-email' }, - { text: 'Транзакционные мультисообщения', link: '/glossary/email-marketing/transactional-cascade-message' }, - { text: 'Транзакционные рассылки', link: '/glossary/email-marketing/transactional-messages' }, - { text: 'Триггерные цепочки', link: '/glossary/email-marketing/trigger-campaigns' }, - { text: 'Целевые клики', link: '/glossary/email-marketing/target-clicks' } + { text: 'Double opt-in', link: '/glossary/email-marketing/double-opt-in.md' }, + { text: 'Liquid Markup', link: '/glossary/email-marketing/liquid-markup.md' }, + { text: 'Mobile push', link: '/glossary/email-marketing/mobile-push.md' }, + { text: 'Opt-out', link: '/glossary/email-marketing/opt-out.md' }, + { text: 'Push-рассылки', link: '/glossary/email-marketing/push-campaigns.md' }, + { text: 'Push-токены', link: '/glossary/email-marketing/push-token.md' }, + { text: 'Welcome-цепочка', link: '/glossary/email-marketing/welcome-campaign.md' }, + { text: 'Автосборщик email', link: '/glossary/email-marketing/email-collector.md' }, + { text: 'Веб-пуш', link: '/glossary/email-marketing/web-push.md' }, + { text: 'Грейлистинг', link: '/glossary/email-marketing/gray-listing.md' }, + { text: 'Динамический сегмент', link: '/glossary/email-marketing/dynamic-segment.md' }, + { text: 'Канал доставки', link: '/glossary/email-marketing/delivery-channel.md' }, + { text: 'Комбинированная форма подписки', link: '/glossary/email-marketing/combined-subscription-form.md' }, + { text: 'Массовые рассылки', link: '/glossary/email-marketing/bulk-campaigns.md' }, + { text: 'Отложенная отправка', link: '/glossary/email-marketing/scheduled-campaign.md' }, + { text: 'Пользовательские сегменты', link: '/glossary/email-marketing/segment.md' }, + { text: 'Прехедер', link: '/glossary/email-marketing/pre-header.md' }, + { text: 'Реактивационное письмо', link: '/glossary/email-marketing/reactivation-message.md' }, + { text: 'Событие-триггер', link: '/glossary/email-marketing/event-trigger.md' }, + { text: 'Ссылка отписки (англ. unsubscribe link)', link: '/glossary/email-marketing/unsubsribe-link.md' }, + { text: 'Статичный сегмент', link: '/glossary/email-marketing/static-segment.md' }, + { text: 'Тестовое письмо', link: '/glossary/email-marketing/test-message.md' }, + { text: 'Транзакционные SMS', link: '/glossary/email-marketing/transactional-sms.md' }, + { text: 'Транзакционные email', link: '/glossary/email-marketing/transactional-email.md' }, + { text: 'Транзакционные мультисообщения', link: '/glossary/email-marketing/transactional-cascade-message.md' }, + { text: 'Транзакционные рассылки', link: '/glossary/email-marketing/transactional-messages.md' }, + { text: 'Триггерные цепочки', link: '/glossary/email-marketing/trigger-campaigns.md' }, + { text: 'Целевые клики', link: '/glossary/email-marketing/target-clicks.md' } ] }, @@ -155,40 +207,40 @@ export default defineConfig({ text: 'Маркетинг', collapsed: true, items: [ - { text: 'A/B-тест', link: '/glossary/marketing/ab-test' }, - { text: 'API', link: '/glossary/marketing/api' }, - { text: 'Big Data', link: '/glossary/marketing/big-data' }, - { text: 'Customer journey', link: '/glossary/marketing/customer-journey' }, - { text: 'Data-driven', link: '/glossary/marketing/data-driven' }, - { text: 'Google Analytics', link: '/glossary/marketing/google-analytics' }, - { text: 'KPI', link: '/glossary/marketing/kpi' }, - { text: 'Mindmap', link: '/glossary/marketing/mindmap' }, - { text: 'No-code solutions', link: '/glossary/marketing/no-code-solutions' }, - { text: 'On-premise', link: '/glossary/marketing/on-premise' }, - { text: 'Performance-маркетинг', link: '/glossary/marketing/performance-marketing' }, - { text: 'SaaS', link: '/glossary/marketing/saas' }, - { text: 'UTM-метки', link: '/glossary/marketing/utm' }, - { text: 'Воронка продаж', link: '/glossary/marketing/sales-funnel' }, - { text: 'Дашборд', link: '/glossary/marketing/dashboard' }, - { text: 'Карта кликов (англ. click map)', link: '/glossary/marketing/click-map' }, - { text: 'Копакинг', link: '/glossary/marketing/co-packing' }, - { text: 'Лид (продажи)', link: '/glossary/marketing/lead' }, - { text: 'Лид-магнит', link: '/glossary/marketing/lead-magnet' }, - { text: 'Лидогенерация', link: '/glossary/marketing/lead-gen' }, - { text: 'Ликвидность', link: '/glossary/marketing/liquidity' }, - { text: 'Логика «ЕСЛИ/ТО»', link: '/glossary/marketing/if-else-logic' }, - { text: 'Логика «И/ИЛИ»', link: '/glossary/marketing/and-or-logic' }, - { text: 'Маржинальность', link: '/glossary/marketing/price-margin' }, - { text: 'Охват', link: '/glossary/marketing/reach' }, - { text: 'Попап', link: '/glossary/marketing/popup' }, - { text: 'Премодерация', link: '/glossary/marketing/pre-moderation' }, - { text: 'Программа лояльности', link: '/glossary/marketing/loyalty-program' }, - { text: 'Редирект', link: '/glossary/marketing/redirect' }, - { text: 'Ретаргетинг', link: '/glossary/marketing/retargeting' }, - { text: 'Сервис коротких ссылок (url shortener)', link: '/glossary/marketing/url-shortener' }, - { text: 'Сквозная аналитика', link: '/glossary/marketing/end-to-end-analytics' }, - { text: 'Соцдем', link: '/glossary/marketing/socio-demographics' }, - { text: 'Целевая аудитория', link: '/glossary/marketing/target-audience' } + { text: 'A/B-тест', link: '/glossary/marketing/ab-test.md' }, + { text: 'API', link: '/glossary/marketing/api.md' }, + { text: 'Big Data', link: '/glossary/marketing/big-data.md' }, + { text: 'Customer journey', link: '/glossary/marketing/customer-journey.md' }, + { text: 'Data-driven', link: '/glossary/marketing/data-driven.md' }, + { text: 'Google Analytics', link: '/glossary/marketing/google-analytics.md' }, + { text: 'KPI', link: '/glossary/marketing/kpi.md' }, + { text: 'Mindmap', link: '/glossary/marketing/mindmap.md' }, + { text: 'No-code solutions', link: '/glossary/marketing/no-code-solutions.md' }, + { text: 'On-premise', link: '/glossary/marketing/on-premise.md' }, + { text: 'Performance-маркетинг', link: '/glossary/marketing/performance-marketing.md' }, + { text: 'SaaS', link: '/glossary/marketing/saas.md' }, + { text: 'UTM-метки', link: '/glossary/marketing/utm.md' }, + { text: 'Воронка продаж', link: '/glossary/marketing/sales-funnel.md' }, + { text: 'Дашборд', link: '/glossary/marketing/dashboard.md' }, + { text: 'Карта кликов (англ. click map)', link: '/glossary/marketing/click-map.md' }, + { text: 'Копакинг', link: '/glossary/marketing/co-packing.md' }, + { text: 'Лид (продажи)', link: '/glossary/marketing/lead.md' }, + { text: 'Лид-магнит', link: '/glossary/marketing/lead-magnet.md' }, + { text: 'Лидогенерация', link: '/glossary/marketing/lead-gen.md' }, + { text: 'Ликвидность', link: '/glossary/marketing/liquidity.md' }, + { text: 'Логика «ЕСЛИ/ТО»', link: '/glossary/marketing/if-else-logic.md' }, + { text: 'Логика «И/ИЛИ»', link: '/glossary/marketing/and-or-logic.md' }, + { text: 'Маржинальность', link: '/glossary/marketing/price-margin.md' }, + { text: 'Охват', link: '/glossary/marketing/reach.md' }, + { text: 'Попап', link: '/glossary/marketing/popup.md' }, + { text: 'Премодерация', link: '/glossary/marketing/pre-moderation.md' }, + { text: 'Программа лояльности', link: '/glossary/marketing/loyalty-program.md' }, + { text: 'Редирект', link: '/glossary/marketing/redirect.md' }, + { text: 'Ретаргетинг', link: '/glossary/marketing/retargeting.md' }, + { text: 'Сервис коротких ссылок (url shortener)', link: '/glossary/marketing/url-shortener.md' }, + { text: 'Сквозная аналитика', link: '/glossary/marketing/end-to-end-analytics.md' }, + { text: 'Соцдем', link: '/glossary/marketing/socio-demographics.md' }, + { text: 'Целевая аудитория', link: '/glossary/marketing/target-audience.md' } ] }, @@ -196,41 +248,41 @@ export default defineConfig({ text: 'Метрики и аббревиатуры', collapsed: true, items: [ - { text: 'ABC-сегменты', link: '/glossary/metrics/abc-segments' }, - { text: 'AOV', link: '/glossary/metrics/aov' }, - { text: 'ARPPU', link: '/glossary/metrics/arppu' }, - { text: 'ARPU', link: '/glossary/metrics/arpu' }, - { text: 'Bounce rate', link: '/glossary/metrics/bounce-rate' }, - { text: 'CDP (customer data platform)', link: '/glossary/metrics/cdp' }, - { text: 'CMS (content management system)', link: '/glossary/metrics/cms' }, - { text: 'CPE', link: '/glossary/metrics/cpe' }, - { text: 'CPM', link: '/glossary/metrics/cpm' }, - { text: 'CPS', link: '/glossary/metrics/cps' }, - { text: 'CR (Conversion Rate)', link: '/glossary/metrics/conversion-rate' }, - { text: 'CRM', link: '/glossary/metrics/crm' }, - { text: 'CSV (формат файла)', link: '/glossary/metrics/csv' }, - { text: 'CTOR (рассылки)', link: '/glossary/metrics/ctor' }, - { text: 'CTR (рассылки)', link: '/glossary/metrics/ctr' }, - { text: 'D2C', link: '/glossary/metrics/d2c' }, - { text: 'DMP (data management platform)', link: '/glossary/metrics/dmp' }, - { text: 'Delivery Rate (рассылки)', link: '/glossary/metrics/delivery-rate' }, - { text: 'FM-анализ', link: '/glossary/metrics/fm-analysis' }, - { text: 'Hard bounce', link: '/glossary/metrics/hard-bounce' }, - { text: 'LTV', link: '/glossary/metrics/ltv' }, - { text: 'NPS (Net Promoter Score)', link: '/glossary/metrics/nps' }, - { text: 'O2O', link: '/glossary/metrics/o2o' }, - { text: 'OR (Open Rate)', link: '/glossary/metrics/open-rate' }, - { text: 'RF-анализ', link: '/glossary/metrics/rf-analysis' }, - { text: 'RFM-анализ', link: '/glossary/metrics/rfm-analysis' }, - { text: 'RM-анализ', link: '/glossary/metrics/rm-analysis' }, - { text: 'ROI', link: '/glossary/metrics/roi' }, - { text: 'ROMI', link: '/glossary/metrics/romi' }, - { text: 'RPE', link: '/glossary/metrics/rpe' }, - { text: 'Soft bounce', link: '/glossary/metrics/soft-bounce' }, - { text: 'Spam complaint rate', link: '/glossary/metrics/spam-rate' }, - { text: 'UnR (unsubscribe rate)', link: '/glossary/metrics/unsubscribe-rate' }, - { text: 'Валовая прибыль', link: '/glossary/metrics/gross-profit' }, - { text: 'Коэффициент оттока клиентов (англ. churn rate)', link: '/glossary/metrics/churn-rate' } + { text: 'ABC-сегменты', link: '/glossary/metrics/abc-segments.md' }, + { text: 'AOV', link: '/glossary/metrics/aov.md' }, + { text: 'ARPPU', link: '/glossary/metrics/arppu.md' }, + { text: 'ARPU', link: '/glossary/metrics/arpu.md' }, + { text: 'Bounce rate', link: '/glossary/metrics/bounce-rate.md' }, + { text: 'CDP (customer data platform)', link: '/glossary/metrics/cdp.md' }, + { text: 'CMS (content management system)', link: '/glossary/metrics/cms.md' }, + { text: 'CPE', link: '/glossary/metrics/cpe.md' }, + { text: 'CPM', link: '/glossary/metrics/cpm.md' }, + { text: 'CPS', link: '/glossary/metrics/cps.md' }, + { text: 'CR (Conversion Rate)', link: '/glossary/metrics/conversion-rate.md' }, + { text: 'CRM', link: '/glossary/metrics/crm.md' }, + { text: 'CSV (формат файла)', link: '/glossary/metrics/csv.md' }, + { text: 'CTOR (рассылки)', link: '/glossary/metrics/ctor.md' }, + { text: 'CTR (рассылки)', link: '/glossary/metrics/ctr.md' }, + { text: 'D2C', link: '/glossary/metrics/d2c.md' }, + { text: 'DMP (data management platform)', link: '/glossary/metrics/dmp.md' }, + { text: 'Delivery Rate (рассылки)', link: '/glossary/metrics/delivery-rate.md' }, + { text: 'FM-анализ', link: '/glossary/metrics/fm-analysis.md' }, + { text: 'Hard bounce', link: '/glossary/metrics/hard-bounce.md' }, + { text: 'LTV', link: '/glossary/metrics/ltv.md' }, + { text: 'NPS (Net Promoter Score)', link: '/glossary/metrics/nps.md' }, + { text: 'O2O', link: '/glossary/metrics/o2o.md' }, + { text: 'OR (Open Rate)', link: '/glossary/metrics/open-rate.md' }, + { text: 'RF-анализ', link: '/glossary/metrics/rf-analysis.md' }, + { text: 'RFM-анализ', link: '/glossary/metrics/rfm-analysis.md' }, + { text: 'RM-анализ', link: '/glossary/metrics/rm-analysis.md' }, + { text: 'ROI', link: '/glossary/metrics/roi.md' }, + { text: 'ROMI', link: '/glossary/metrics/romi.md' }, + { text: 'RPE', link: '/glossary/metrics/rpe.md' }, + { text: 'Soft bounce', link: '/glossary/metrics/soft-bounce.md' }, + { text: 'Spam complaint rate', link: '/glossary/metrics/spam-rate.md' }, + { text: 'UnR (unsubscribe rate)', link: '/glossary/metrics/unsubscribe-rate.md' }, + { text: 'Валовая прибыль', link: '/glossary/metrics/gross-profit.md' }, + { text: 'Коэффициент оттока клиентов (англ. churn rate)', link: '/glossary/metrics/churn-rate.md' } ] }, @@ -238,13 +290,13 @@ export default defineConfig({ text: 'Товарные рекомендации', collapsed: true, items: [ - { text: 'Upsell', link: '/glossary/product-recommendations/upsell' }, - { text: 'Блоки товарных рекомендаций', link: '/glossary/product-recommendations/product-recommendations-block' }, - { text: 'Коллаборативная фильтрация', link: '/glossary/product-recommendations/collaborative-filtering' }, - { text: 'Машинная персонализация', link: '/glossary/product-recommendations/machine-personalization' }, - { text: 'Отраслевая персонализация', link: '/glossary/product-recommendations/industry-personalization' }, - { text: 'Перекрёстные продажи (англ. cross-selling)', link: '/glossary/product-recommendations/cross-selling' }, - { text: 'Персонализация', link: '/glossary/product-recommendations/personalization' } + { text: 'Upsell', link: '/glossary/product-recommendations/upsell.md' }, + { text: 'Блоки товарных рекомендаций', link: '/glossary/product-recommendations/product-recommendations-block.md' }, + { text: 'Коллаборативная фильтрация', link: '/glossary/product-recommendations/collaborative-filtering.md' }, + { text: 'Машинная персонализация', link: '/glossary/product-recommendations/machine-personalization.md' }, + { text: 'Отраслевая персонализация', link: '/glossary/product-recommendations/industry-personalization.md' }, + { text: 'Перекрёстные продажи (англ. cross-selling)', link: '/glossary/product-recommendations/cross-selling.md' }, + { text: 'Персонализация', link: '/glossary/product-recommendations/personalization.md' } ] }, @@ -252,19 +304,19 @@ export default defineConfig({ text: 'Поиск', collapsed: true, items: [ - { text: 'Findability', link: '/glossary/search/findability' }, - { text: 'Natural Language Search', link: '/glossary/search/natural-language-search' }, - { text: 'Аппроксимация', link: '/glossary/search/approximation' }, - { text: 'Быстрый поиск', link: '/glossary/search/instant-search' }, - { text: 'Голосовой поиск', link: '/glossary/search/voice-search' }, - { text: 'Запросы с максимальной выручкой', link: '/glossary/search/most-profitable-requests' }, - { text: 'Нулевая выдача', link: '/glossary/search/empty-search-results' }, - { text: 'Персональное ранжирование', link: '/glossary/search/personalized-ranking' }, - { text: 'Полный поиск', link: '/glossary/search/full-search' }, - { text: 'Популярные запросы без выручки', link: '/glossary/search/popular-requests-without-purchases' }, - { text: 'Синонимы (запросы)', link: '/glossary/search/synonym' }, - { text: 'Стемминг', link: '/glossary/search/stemming' }, - { text: 'Стоп-лист', link: '/glossary/search/stop-list' } + { text: 'Findability', link: '/glossary/search/findability.md' }, + { text: 'Natural Language Search', link: '/glossary/search/natural-language-search.md' }, + { text: 'Аппроксимация', link: '/glossary/search/approximation.md' }, + { text: 'Быстрый поиск', link: '/glossary/search/instant-search.md' }, + { text: 'Голосовой поиск', link: '/glossary/search/voice-search.md' }, + { text: 'Запросы с максимальной выручкой', link: '/glossary/search/most-profitable-requests.md' }, + { text: 'Нулевая выдача', link: '/glossary/search/empty-search-results.md' }, + { text: 'Персональное ранжирование', link: '/glossary/search/personalized-ranking.md' }, + { text: 'Полный поиск', link: '/glossary/search/full-search.md' }, + { text: 'Популярные запросы без выручки', link: '/glossary/search/popular-requests-without-purchases.md' }, + { text: 'Синонимы (запросы)', link: '/glossary/search/synonym.md' }, + { text: 'Стемминг', link: '/glossary/search/stemming.md' }, + { text: 'Стоп-лист', link: '/glossary/search/stop-list.md' } ] }, @@ -275,20 +327,20 @@ export default defineConfig({ text: 'Юридические документы', collapsed: false, items: [ - { text: 'Список документов', link: 'legal/index' }, - { text: 'Пользовательское соглашение', link: 'legal/agreement' }, - { text: 'Договор-оферта', link: 'legal/offer' }, - { text: 'Политика конфиденциальности', link: 'legal/policy' } + { text: 'Список документов', link: 'legal/index.md' }, + { text: 'Пользовательское соглашение', link: 'legal/agreement.md' }, + { text: 'Договор-оферта', link: 'legal/offer.md' }, + { text: 'Политика конфиденциальности', link: 'legal/policy.md' } ] }, { text: 'Согласия', collapsed: false, items: [ - { text: 'Согласие на получение и обработку персональных данных при запросе на обратную связь', link: 'legal/feedback' }, - { text: 'Согласие на получение и обработку персональных данных', link: 'legal/personal-data' }, - { text: 'Согласие на получение и обработку персональных данных в целях рекламы', link: 'legal/ads' }, - { text: 'Согласие на получение и обработку персональных данных при регистрации', link: 'legal/registration' } + { text: 'Согласие на получение и обработку персональных данных при запросе на обратную связь', link: 'legal/feedback.md' }, + { text: 'Согласие на получение и обработку персональных данных', link: 'legal/personal-data.md' }, + { text: 'Согласие на получение и обработку персональных данных в целях рекламы', link: 'legal/ads.md' }, + { text: 'Согласие на получение и обработку персональных данных при регистрации', link: 'legal/registration.md' } ] } ], @@ -298,4 +350,4 @@ export default defineConfig({ // { icon: 'github', link: 'https://github.com/vuejs/vitepress' } ] } -}) +}) \ No newline at end of file diff --git a/docs/integration/index.md b/docs/integration/index.md index 30404ce..1978ddb 100644 --- a/docs/integration/index.md +++ b/docs/integration/index.md @@ -1 +1,17 @@ -TODO \ No newline at end of file +# Интеграция и API + +Интеграция любого инструмента REES46 начинается с базовой интеграции CDP: + +1. Установка SDK на сайт и в мобильные приложения. +2. Трекинг действий посетителей. +3. Синхронизация заказов. +4. Первичный импорт аудитории и истории заказов. +5. Загрузка фида с товарами или услугами. + +Поэтому рекомендуем начать с раздела "[Начальная интеграция](./start/index.md)" и выполнить максимум рекомендаций. + +Платформа может работать с любым устройством, у которого есть интернет. + +Есть SDK и есть REST API. + +Для управления есть еще Dashboard API, ссылка на него идет отдельно. \ No newline at end of file diff --git a/docs/integration/start/index.md b/docs/integration/start/index.md new file mode 100644 index 0000000..8b160e8 --- /dev/null +++ b/docs/integration/start/index.md @@ -0,0 +1,3 @@ +# Начальная интеграция + + From 0156d954293b0422a58e08d4c585f7efbe7684c7 Mon Sep 17 00:00:00 2001 From: Aleksandr Zavadkin Date: Mon, 24 Nov 2025 19:59:34 +0900 Subject: [PATCH 2/7] docs(docs): documentation structure update, BasicBlock vue component Signed-off-by: Aleksandr Zavadkin --- .../theme/components/BasicBlock.vue | 181 ++++++++++++++++++ docs/.vitepress/theme/index.js | 9 + docs/integration/start/index.md | 6 +- docs/public/integration/start/content/1.md | 1 + docs/public/integration/start/content/2.md | 14 ++ docs/public/integration/start/content/3.md | 1 + 6 files changed, 211 insertions(+), 1 deletion(-) create mode 100644 docs/.vitepress/theme/components/BasicBlock.vue create mode 100644 docs/.vitepress/theme/index.js create mode 100644 docs/public/integration/start/content/1.md create mode 100644 docs/public/integration/start/content/2.md create mode 100644 docs/public/integration/start/content/3.md diff --git a/docs/.vitepress/theme/components/BasicBlock.vue b/docs/.vitepress/theme/components/BasicBlock.vue new file mode 100644 index 0000000..2dbb458 --- /dev/null +++ b/docs/.vitepress/theme/components/BasicBlock.vue @@ -0,0 +1,181 @@ + + + + + diff --git a/docs/.vitepress/theme/index.js b/docs/.vitepress/theme/index.js new file mode 100644 index 0000000..9d96ae1 --- /dev/null +++ b/docs/.vitepress/theme/index.js @@ -0,0 +1,9 @@ +import DefaultTheme from 'vitepress/theme' +import BasicBlock from './components/BasicBlock.vue' + +export default { + ...DefaultTheme, + enhanceApp({ app }) { + app.component('BasicBlock', BasicBlock) + } +} diff --git a/docs/integration/start/index.md b/docs/integration/start/index.md index 8b160e8..5d45c2f 100644 --- a/docs/integration/start/index.md +++ b/docs/integration/start/index.md @@ -1,3 +1,7 @@ # Начальная интеграция - + diff --git a/docs/public/integration/start/content/1.md b/docs/public/integration/start/content/1.md new file mode 100644 index 0000000..92fe939 --- /dev/null +++ b/docs/public/integration/start/content/1.md @@ -0,0 +1 @@ +тест 1 \ No newline at end of file diff --git a/docs/public/integration/start/content/2.md b/docs/public/integration/start/content/2.md new file mode 100644 index 0000000..48595e2 --- /dev/null +++ b/docs/public/integration/start/content/2.md @@ -0,0 +1,14 @@ +Что такое Lorem Ipsum? +Lorem Ipsum - это текст-"рыба", часто используемый в печати и вэб-дизайне. Lorem Ipsum является стандартной "рыбой" для текстов на латинице с начала XVI века. В то время некий безымянный печатник создал большую коллекцию размеров и форм шрифтов, используя Lorem Ipsum для распечатки образцов. Lorem Ipsum не только успешно пережил без заметных изменений пять веков, но и перешагнул в электронный дизайн. Его популяризации в новое время послужили публикация листов Letraset с образцами Lorem Ipsum в 60-х годах и, в более недавнее время, программы электронной вёрстки типа Aldus PageMaker, в шаблонах которых используется Lorem Ipsum. + +Почему он используется? +Давно выяснено, что при оценке дизайна и композиции читаемый текст мешает сосредоточиться. Lorem Ipsum используют потому, что тот обеспечивает более или менее стандартное заполнение шаблона, а также реальное распределение букв и пробелов в абзацах, которое не получается при простой дубликации "Здесь ваш текст.. Здесь ваш текст.. Здесь ваш текст.." Многие программы электронной вёрстки и редакторы HTML используют Lorem Ipsum в качестве текста по умолчанию, так что поиск по ключевым словам "lorem ipsum" сразу показывает, как много веб-страниц всё ещё дожидаются своего настоящего рождения. За прошедшие годы текст Lorem Ipsum получил много версий. Некоторые версии появились по ошибке, некоторые - намеренно (например, юмористические варианты). + + +Откуда он появился? +Многие думают, что Lorem Ipsum - взятый с потолка псевдо-латинский набор слов, но это не совсем так. Его корни уходят в один фрагмент классической латыни 45 года н.э., то есть более двух тысячелетий назад. Ричард МакКлинток, профессор латыни из колледжа Hampden-Sydney, штат Вирджиния, взял одно из самых странных слов в Lorem Ipsum, "consectetur", и занялся его поисками в классической латинской литературе. В результате он нашёл неоспоримый первоисточник Lorem Ipsum в разделах 1.10.32 и 1.10.33 книги "de Finibus Bonorum et Malorum" ("О пределах добра и зла"), написанной Цицероном в 45 году н.э. Этот трактат по теории этики был очень популярен в эпоху Возрождения. Первая строка Lorem Ipsum, "Lorem ipsum dolor sit amet..", происходит от одной из строк в разделе 1.10.32 + +Классический текст Lorem Ipsum, используемый с XVI века, приведён ниже. Также даны разделы 1.10.32 и 1.10.33 "de Finibus Bonorum et Malorum" Цицерона и их английский перевод, сделанный H. Rackham, 1914 год. + +Где его взять? +Есть много вариантов Lorem Ipsum, но большинство из них имеет не всегда приемлемые модификации, например, юмористические вставки или слова, которые даже отдалённо не напоминают латынь. Если вам нужен Lorem Ipsum для серьёзного проекта, вы наверняка не хотите какой-нибудь шутки, скрытой в середине абзаца. Также все другие известные генераторы Lorem Ipsum используют один и тот же текст, который они просто повторяют, пока не достигнут нужный объём. Это делает предлагаемый здесь генератор единственным настоящим Lorem Ipsum генератором. Он использует словарь из более чем 200 латинских слов, а также набор моделей предложений. В результате сгенерированный Lorem Ipsum выглядит правдоподобно, не имеет повторяющихся абзацей или "невозможных" слов. \ No newline at end of file diff --git a/docs/public/integration/start/content/3.md b/docs/public/integration/start/content/3.md new file mode 100644 index 0000000..99dcc48 --- /dev/null +++ b/docs/public/integration/start/content/3.md @@ -0,0 +1 @@ +тест 3 \ No newline at end of file From 109c3e4e1683560a23303a8180ecf79ce8c0ba84 Mon Sep 17 00:00:00 2001 From: Aleksandr Zavadkin Date: Tue, 25 Nov 2025 21:20:48 +0900 Subject: [PATCH 3/7] docs(docs): API tabs component added, config and structure updated Signed-off-by: Aleksandr Zavadkin --- docs/.vitepress/theme/components/APITabs.vue | 132 ++++++++++++++++++ docs/.vitepress/theme/index.js | 2 + docs/integration/start/index.md | 10 ++ .../integration/start/api/android-java.md | 1 + .../integration/start/api/android-kotlin.md | 1 + docs/public/integration/start/api/curl.md | 1 + docs/public/integration/start/api/general.md | 1 + docs/public/integration/start/api/ios.md | 1 + docs/public/integration/start/api/js.md | 1 + .../integration/start/api/react-native.md | 0 10 files changed, 150 insertions(+) create mode 100644 docs/.vitepress/theme/components/APITabs.vue create mode 100644 docs/public/integration/start/api/android-java.md create mode 100644 docs/public/integration/start/api/android-kotlin.md create mode 100644 docs/public/integration/start/api/curl.md create mode 100644 docs/public/integration/start/api/general.md create mode 100644 docs/public/integration/start/api/ios.md create mode 100644 docs/public/integration/start/api/js.md create mode 100644 docs/public/integration/start/api/react-native.md diff --git a/docs/.vitepress/theme/components/APITabs.vue b/docs/.vitepress/theme/components/APITabs.vue new file mode 100644 index 0000000..e607141 --- /dev/null +++ b/docs/.vitepress/theme/components/APITabs.vue @@ -0,0 +1,132 @@ + + + + + diff --git a/docs/.vitepress/theme/index.js b/docs/.vitepress/theme/index.js index 9d96ae1..6f9f06d 100644 --- a/docs/.vitepress/theme/index.js +++ b/docs/.vitepress/theme/index.js @@ -1,9 +1,11 @@ import DefaultTheme from 'vitepress/theme' import BasicBlock from './components/BasicBlock.vue' +import APITabs from './components/APITabs.vue' export default { ...DefaultTheme, enhanceApp({ app }) { app.component('BasicBlock', BasicBlock) + app.component('APITabs', APITabs) } } diff --git a/docs/integration/start/index.md b/docs/integration/start/index.md index 5d45c2f..b939154 100644 --- a/docs/integration/start/index.md +++ b/docs/integration/start/index.md @@ -5,3 +5,13 @@ '/docs/integration/start/content/2.md', '/docs/integration/start/content/3.md' ]" /> + + \ No newline at end of file diff --git a/docs/public/integration/start/api/android-java.md b/docs/public/integration/start/api/android-java.md new file mode 100644 index 0000000..d548577 --- /dev/null +++ b/docs/public/integration/start/api/android-java.md @@ -0,0 +1 @@ +adssdsdf \ No newline at end of file diff --git a/docs/public/integration/start/api/android-kotlin.md b/docs/public/integration/start/api/android-kotlin.md new file mode 100644 index 0000000..9733108 --- /dev/null +++ b/docs/public/integration/start/api/android-kotlin.md @@ -0,0 +1 @@ +sdsdsd \ No newline at end of file diff --git a/docs/public/integration/start/api/curl.md b/docs/public/integration/start/api/curl.md new file mode 100644 index 0000000..0e9e67d --- /dev/null +++ b/docs/public/integration/start/api/curl.md @@ -0,0 +1 @@ +dssdsdfsdf \ No newline at end of file diff --git a/docs/public/integration/start/api/general.md b/docs/public/integration/start/api/general.md new file mode 100644 index 0000000..2448afd --- /dev/null +++ b/docs/public/integration/start/api/general.md @@ -0,0 +1 @@ +sdsdsdsd \ No newline at end of file diff --git a/docs/public/integration/start/api/ios.md b/docs/public/integration/start/api/ios.md new file mode 100644 index 0000000..8e48f46 --- /dev/null +++ b/docs/public/integration/start/api/ios.md @@ -0,0 +1 @@ +dssdsd \ No newline at end of file diff --git a/docs/public/integration/start/api/js.md b/docs/public/integration/start/api/js.md new file mode 100644 index 0000000..2448afd --- /dev/null +++ b/docs/public/integration/start/api/js.md @@ -0,0 +1 @@ +sdsdsdsd \ No newline at end of file diff --git a/docs/public/integration/start/api/react-native.md b/docs/public/integration/start/api/react-native.md new file mode 100644 index 0000000..e69de29 From 8dedc218481ce90fe570e7bf61eb1adca216b3f6 Mon Sep 17 00:00:00 2001 From: Michael Kechinov Date: Mon, 8 Dec 2025 18:37:57 +0300 Subject: [PATCH 4/7] feat: apple wallet configuration --- docs/.vitepress/config.mts | 10 +++ docs/integration/loyalty/wallet/apple.md | 63 +++++++++++++++++++ docs/integration/loyalty/wallet/distribute.md | 3 + docs/integration/loyalty/wallet/google.md | 2 + docs/integration/loyalty/wallet/index.md | 16 +++++ 5 files changed, 94 insertions(+) create mode 100644 docs/integration/loyalty/wallet/apple.md create mode 100644 docs/integration/loyalty/wallet/distribute.md create mode 100644 docs/integration/loyalty/wallet/google.md create mode 100644 docs/integration/loyalty/wallet/index.md diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index 33155b8..083c6c9 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -95,6 +95,16 @@ export default defineConfig({ collapsed: true, items: [ { text: 'Введение', link: '/integration/loyalty/index.md' }, + { + text: 'Wallet', + collapsed: true, + items: [ + { text: 'Введение', link: '/integration/loyalty/wallet/index.md' }, + { text: 'Настройка Apple Wallet', link: '/integration/loyalty/wallet/apple.md' }, + { text: 'Настройка Google Wallet', link: '/integration/loyalty/wallet/google.md' }, + { text: 'Распространение', link: '/integration/loyalty/wallet/distribute.md' }, + ] + } ] }, { diff --git a/docs/integration/loyalty/wallet/apple.md b/docs/integration/loyalty/wallet/apple.md new file mode 100644 index 0000000..b965090 --- /dev/null +++ b/docs/integration/loyalty/wallet/apple.md @@ -0,0 +1,63 @@ +# Настройка Apple Wallet + +Вам потребуется аккаунт Apple Developer и MacBook, чтобы сгенерировать сертификат Apple Pass. Если с этим есть сложности, обратитесь к нашей команде поддержки. + +Краткий план действий: + +1. Создаем идентификатор Pass ID +2. Создаем CSR файл +3. Генерируем CER-файл +4. Импортируем в Keychain +5. Выгружаем сертификат P12 +6. Загружаем в личный кабинет + +## Создаем идентификатор Pass ID + +1. Зайдите в Apple Developer +2. Перейдите в раздел `Certificates, Identifiers & Profiles` +3. Выберите `Identifiers` +4. Нажмите `[+]` +5. Впишите описание (любой текст) и идентификатор пасса, что-то вроде `pass.ru.mywebsite.loyalty` (строка может быть любая, главное чтобы это было похоже на Reverse DNS) +6. Нажмите "Сохранить" + +Не закрывайте окно, нам потребуется форма создания сертификата через один шаг. + +## Создаем CSR файл + +1. Откройте на MacBook приложение `Keychain Access` +2. В меню выберите `Keychain Access > Certificate Assistant > Request a Certificate From a Certificate Authority...` +3. В новом окне в параметре `Request is` выберите вариант `Saved to disk` +4. Сохраните файл `CertificateSigningRequest.certSigningRequest` на жесткий диск, он потребуется на следующем шаге + +## Генерируем CER-файл + +1. Вернитесь в окно браузера, где вы создали `Pass Identifier` (если закрыли, то откройте `Certificates, Identifiers & Profiles > Identifiers`, справа-сверху вместо `App IDs` выберите `Pass Type IDs`, и кликните в идентификатор, который вы создали ранее) +2. Нажмите кнопку `Create certificate` +3. В имя сертификата впишите что угодно +4. Выберите в поле файла созданный ранее файл `CertificateSigningRequest.certSigningRequest` +5. Нажмите `Continue` +6. На следующем экране скачайте `.cer` файл на жесткий диск + +## Импортируем в Keychain + +1. Двойной клик на полученный `.cer` файл +2. Откроется `Keychain Access` +3. В секции `login` через поле поиска найдите тот Pass Type ID, который вы создали в секции `Создаем идентификатор Pass ID` + +## Выгружаем сертификат P12 + +1. Правой кнопкой на имя `Pass Type ID`, откроется контекстное меню +2. Выберите `Export "Pass Type ID ..."` +3. Откроется окно с указанием имени файла (по-умолчанию `Certificates`), оставьте его как есть, и формат файла `.p12` тоже. Нажмите `Save` +4. В следующем окне введите пароль к сертификату (обязательно) + +## Загружаем в личный кабинет + +1. Откройте в личном кабинете REES46 экран настройки Wallet +2. Скроллируйте вниз, пока не увидите форму загрузки сертификата Apple +3. Выберите файл из предыдущего пункта и введите пароль +4. Нажмите "Загрузить" +5. Если получили ошибку пароля, значит пароль указан неправильно (проверьте, что не вставляете лишние пробелы) +6. После успешной загрузки вы увидите дату, до которой действует сертификат. Не забывайте проверять ее и загрузить новый сертификат до того, как наступит эта дата, иначе вы не сможете создавать новые пассы + +На этом с Apple все. Настройте [Google](./google.md) и можно приступать к [выдаче пассов вашим клиентам](./distribute.md). \ No newline at end of file diff --git a/docs/integration/loyalty/wallet/distribute.md b/docs/integration/loyalty/wallet/distribute.md new file mode 100644 index 0000000..1fc2abe --- /dev/null +++ b/docs/integration/loyalty/wallet/distribute.md @@ -0,0 +1,3 @@ +# Передача пассов клиентам + +Как получить pass-файлы и отдать клиентам. \ No newline at end of file diff --git a/docs/integration/loyalty/wallet/google.md b/docs/integration/loyalty/wallet/google.md new file mode 100644 index 0000000..990eaa0 --- /dev/null +++ b/docs/integration/loyalty/wallet/google.md @@ -0,0 +1,2 @@ +# Настройка Google Wallet + diff --git a/docs/integration/loyalty/wallet/index.md b/docs/integration/loyalty/wallet/index.md new file mode 100644 index 0000000..ac22a4b --- /dev/null +++ b/docs/integration/loyalty/wallet/index.md @@ -0,0 +1,16 @@ +# Введение в Wallet + +Wallet позволяет хранить пассы (pass, виртуальные карты лояльности) в телефоне покупателя. + +Первичная настройка оформления пасса выполняется в личном кабинете в разделе `Программа лояльности > Wallet`. + +Вы можете выбрать цвет фона и текста, загрузить логотип и стрип (горизонтальная картинка), указать контактные данные и до 10 точек геолокации с вашими розничными точками продаж. + +Затем необходимо загрузить сертификаты Apple и Google, чтобы заработала поддержка пасс-файлов: + +1. [Сертификат Apple](./apple.md) +2. [Сертификат Google](./google.md) + +## Полезная информация + +* Структура Apple Pass, из каких компонентов состоит pass и пр. [Читать](https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/PassKit_PG/Creating.html) \ No newline at end of file From 976ffc44943f5d579147994955d37c26f726609d Mon Sep 17 00:00:00 2001 From: Michael Kechinov Date: Wed, 10 Dec 2025 18:07:09 +0300 Subject: [PATCH 5/7] feat: google wallet configuration --- docs/integration/loyalty/wallet/google.md | 44 +++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/docs/integration/loyalty/wallet/google.md b/docs/integration/loyalty/wallet/google.md index 990eaa0..db662e1 100644 --- a/docs/integration/loyalty/wallet/google.md +++ b/docs/integration/loyalty/wallet/google.md @@ -1,2 +1,46 @@ # Настройка Google Wallet +Вам потребуется аккаунт разработчика Google. + +Краткий план действий: + +1. Активируем Google Wallet +2. Создаем сервисный аккаунт в Google Console +3. Загружаем ключ сервисного аккаунта в настройки Wallet +4. Публикуем свой Google Wallet для всех клиентов + +## Активируем Google Wallet + +1. Зайдите в Google Wallet Console: https://pay.google.com/business/console/home +2. Перейдите в пункт меню `Google Wallet API` слева в меню +3. Скопируйте длинное числовое значение `Issuer ID` (19-значное число немного правее заголовка страницы `Google Wallet API`). Это значение понадобится на странице настройки Wallet в личном кабинете REES46 +4. Перейдите в Google Console: https://console.cloud.google.com +5. Найдите в поиске Google Wallet API и перейдите на его страницу: https://console.cloud.google.com/marketplace/product/google/walletobjects.googleapis.com?q=search&referrer=search +6. Нажмите "Activate" + +## Создаем сервисный аккаунт в Google Console + +1. Перейдите в раздел `Credentials`: https://console.cloud.google.com/apis/credentials +2. Сверху нажмите кнопку `+ Create credentials` +3. Выберите в меню `Service Account` +4. В форме укажите имя ключа (любое) и `Service account ID` (любой) +5. Нажмите `Done` +6. На следующей странице найдите созданный вами сервисный аккаунт и перейдите в него +7. На странице сервисного аккаунта кликните в меню `Keys` +8. Далее `Add key` и в выпадающем меню `Create new key` +9. Выберите формат JSON и нажмите `Create` +10. Сохраните скачанный файл, он потребуется на следующем шаге + +## Загружаем ключ сервисного аккаунта в настройки Wallet + +1. Откройте в личном кабинете REES46 экран настройки Wallet +2. Скроллируйте вниз, пока не увидите форму загрузки файла ключа Google +3. Выберите файл из предыдущего пункта и в поле `Issuer ID` впишите значение, полученное ранее +4. Нажмите `Загрузить` +5. После успешной загрузки вы увидите сообщение о том, что файл ключа загружен + +Можно приступать к [выдаче пассов вашим клиентам](./distribute.md). + +## Больше информации + +Подробная инструкция по Google Wallet: https://developers.google.com/wallet/generic \ No newline at end of file From 41853ffd73a0ddafdf63e2a5668c1a7e93052532 Mon Sep 17 00:00:00 2001 From: Aleksandr Zavadkin Date: Tue, 16 Dec 2025 15:38:53 +0300 Subject: [PATCH 6/7] docs(documentation-unified): Basic docs Layout customized, right-side pannel added Signed-off-by: Aleksandr Zavadkin --- docs/.vitepress/theme/components/Layout.vue | 14 +++ .../theme/components/RightActionPanel.vue | 114 ++++++++++++++++++ docs/.vitepress/theme/index.js | 6 + docs/.vitepress/theme/rightPanel.js | 10 ++ docs/integration/api/index.md | 33 +++++ 5 files changed, 177 insertions(+) create mode 100644 docs/.vitepress/theme/components/Layout.vue create mode 100644 docs/.vitepress/theme/components/RightActionPanel.vue create mode 100644 docs/.vitepress/theme/rightPanel.js create mode 100644 docs/integration/api/index.md diff --git a/docs/.vitepress/theme/components/Layout.vue b/docs/.vitepress/theme/components/Layout.vue new file mode 100644 index 0000000..a5b63d2 --- /dev/null +++ b/docs/.vitepress/theme/components/Layout.vue @@ -0,0 +1,14 @@ + + + diff --git a/docs/.vitepress/theme/components/RightActionPanel.vue b/docs/.vitepress/theme/components/RightActionPanel.vue new file mode 100644 index 0000000..378d2a4 --- /dev/null +++ b/docs/.vitepress/theme/components/RightActionPanel.vue @@ -0,0 +1,114 @@ + + + + + diff --git a/docs/.vitepress/theme/index.js b/docs/.vitepress/theme/index.js index 6f9f06d..7d789d2 100644 --- a/docs/.vitepress/theme/index.js +++ b/docs/.vitepress/theme/index.js @@ -1,11 +1,17 @@ import DefaultTheme from 'vitepress/theme' +import CustomLayout from './components/Layout.vue' + import BasicBlock from './components/BasicBlock.vue' import APITabs from './components/APITabs.vue' export default { ...DefaultTheme, + Layout: CustomLayout, enhanceApp({ app }) { + DefaultTheme.enhanceApp?.({ app }) + app.component('BasicBlock', BasicBlock) app.component('APITabs', APITabs) } } + diff --git a/docs/.vitepress/theme/rightPanel.js b/docs/.vitepress/theme/rightPanel.js new file mode 100644 index 0000000..57ef96b --- /dev/null +++ b/docs/.vitepress/theme/rightPanel.js @@ -0,0 +1,10 @@ +export const rightPanels = [ + { + id: 'api', + title: 'API Reference', + buttonLabel: 'API', + items: [ + { text: 'Introduction', link: '../integration/api/index.md' }, + ] + }, +] diff --git a/docs/integration/api/index.md b/docs/integration/api/index.md new file mode 100644 index 0000000..e4785e0 --- /dev/null +++ b/docs/integration/api/index.md @@ -0,0 +1,33 @@ +# Introduction + +Welcome to <%= config[:service_name] %> API Reference. This reference will help you to create new, more effective S2S or M2S integration. + +Our API is RESTful and you can use any language to work with it. + +We provide examples as: + +- cURL +- Javascript (web) +- Swift (iOS) +- Kotlin (Android) +- Java (Android) + +Every request in this API can include a set of parameters — some mandatory, others optional. + +Optional parameters may affect how requests are processed. + +For example, the stream parameter (explained below) provides a way to label the source of data. + + \ No newline at end of file From 325f5a6ce0cee0a95ee05f8a33a0bb26aa9f4142 Mon Sep 17 00:00:00 2001 From: Aleksandr Zavadkin Date: Wed, 17 Dec 2025 16:13:26 +0300 Subject: [PATCH 7/7] docs(documentation-united): new APITabs component, navigation vith native routing Signed-off-by: Aleksandr Zavadkin --- docs/.vitepress/theme/components/APITabs.vue | 136 ++++-------------- docs/.vitepress/theme/components/Layout.vue | 17 ++- .../theme/components/RightActionPanel.vue | 112 +++++++++++---- docs/.vitepress/theme/index.js | 2 - docs/.vitepress/theme/rightPanel.js | 4 +- package.json | 6 +- 6 files changed, 138 insertions(+), 139 deletions(-) diff --git a/docs/.vitepress/theme/components/APITabs.vue b/docs/.vitepress/theme/components/APITabs.vue index e607141..b922a94 100644 --- a/docs/.vitepress/theme/components/APITabs.vue +++ b/docs/.vitepress/theme/components/APITabs.vue @@ -1,132 +1,50 @@ - diff --git a/docs/.vitepress/theme/components/Layout.vue b/docs/.vitepress/theme/components/Layout.vue index a5b63d2..f8fb1bf 100644 --- a/docs/.vitepress/theme/components/Layout.vue +++ b/docs/.vitepress/theme/components/Layout.vue @@ -1,14 +1,29 @@ + + diff --git a/docs/.vitepress/theme/components/RightActionPanel.vue b/docs/.vitepress/theme/components/RightActionPanel.vue index 378d2a4..32218b5 100644 --- a/docs/.vitepress/theme/components/RightActionPanel.vue +++ b/docs/.vitepress/theme/components/RightActionPanel.vue @@ -12,35 +12,50 @@ -
+

{{ current.title }}

-