[
  {
    "key": "alfabank",
    "name": "Альфа-Банк Бизнес",
    "description": "Банковский API — счета, выписки, операции, платежи",
    "category": "banks",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "short_name": "Альфа-Банк",
    "seo": {
      "headline": "Смотрите обороты и операции по счетам Альфа-Банка в чате",
      "scenarios": [
        {
          "title": "Операции и остатки за период",
          "desc": "Агент выгрузит выписку по счетам Альфа-Бизнеса, посчитает обороты и покажет крупные и нетипичные операции."
        },
        {
          "title": "Сверка с бухгалтерией",
          "desc": "Агент сверит банковские операции с проводками 1С и покажет, какие платежи не отражены в учёте."
        },
        {
          "title": "Еженедельный финансовый дайджест",
          "desc": "Агент по расписанию соберёт динамику остатков, топ-платежи и поступления недели в один отчёт."
        },
        {
          "title": "Расклад по контрагентам",
          "desc": "Агент разложит поступления и платежи по контрагентам и назначениям и покажет, кто принёс больше всего денег, а на что они утекли."
        },
        {
          "title": "Платёжка перед отправкой",
          "desc": "Агент соберёт реквизиты и сумму распоряжения, покажет их одним списком и остановится — подпись остаётся за вами в Альфа-Бизнес Онлайн."
        },
        {
          "title": "Куда ушли деньги за квартал",
          "desc": "Агент заберёт выписку за длинный период частями, склеит её сам и покажет структуру расходов и как менялись обороты от месяца к месяцу."
        }
      ],
      "how_it_works": [
        "Агент ходит в API Альфа-Бизнеса на baas.alfabank.ru и начинает со списка счетов компании — тем же запросом, которым проверяется подключение. Дальше он забирает выписку по выбранным счетам за период, считает обороты по приходу и расходу, поднимает крупные и нетипичные операции и раскладывает поступления и платежи по контрагентам и назначениям, чтобы недельная сводка собиралась без ручной выгрузки из интернет-банка.",
        "Банковская выписка — это не то же самое, что происходит на счёте прямо сейчас: в неё попадают операции, которые банк уже провёл, поэтому свежий платёж или зачисление появляются в ней позже, чем о них узнали в компании. Агент опирается на дату проводки, а не на момент, когда о платеже стало известно, и при сверке с проводками 1С сопоставляет операции по сумме, дате и реквизитам контрагента, а не по одному лишь назначению.",
        "По умолчанию агент читает: счета, выписки, историю операций, сверку с учётом и регулярные сводки. Платёжная часть API доступна, но подпись распоряжения остаётся на стороне банка и проходит через подтверждение в Альфа-Бизнес Онлайн — молча отправить деньги агент не может. Перед любым действием на запись он показывает собранные реквизиты и сумму и останавливается, пока вы их не подтвердите.",
        "Доступ устроен в два слоя: API-ключ передаётся как токен, а часть методов дополнительно требует клиентского сертификата, поэтому набор доступных операций зависит от того, какой слой открыт. Выписку API отдаёт страницами и с ограничением на длину периода, поэтому длинные интервалы агент собирает частями и склеивает сам, выдерживая частоту запросов. Если данных за период нет или ключу не хватает прав, он скажет об этом прямо, а не покажет пустую таблицу."
      ],
      "requirements": [
        "Расчётный счёт и оформленное РКО в Альфа-Банке",
        "Руководитель или сотрудник с правом подписи",
        "OpenSSL на компьютере для генерации приватного ключа"
      ],
      "faq": [
        {
          "q": "Что нужно для подключения Альфа-Банка?",
          "a": "API-ключ из Альфа-Бизнес Онлайн и, для части методов, клиентский сертификат. Всё хранится в зашифрованном виде."
        },
        {
          "q": "Какие данные читает агент?",
          "a": "Счета, выписки, операции и платежи компании — в рамках прав ключа. Данные запрашиваются в момент задачи, без постоянной выгрузки."
        },
        {
          "q": "Можно ли отозвать доступ?",
          "a": "Да, в один клик: удалите подключение у нас или отзовите ключ в Альфа-Бизнес Онлайн — доступ прекращается сразу."
        }
      ]
    },
    "seo_en": {
      "headline": "See turnover and account transactions from Alfa-Bank in chat",
      "scenarios": [
        {
          "title": "Transactions and balances for any period",
          "desc": "The agent pulls the statement across your Alfa-Business accounts, totals turnover and flags large or unusual transactions."
        },
        {
          "title": "Reconciliation with accounting",
          "desc": "The agent matches bank transactions against 1C entries and shows which payments never made it into the books."
        },
        {
          "title": "Weekly financial digest",
          "desc": "On a schedule, the agent assembles balance dynamics, top payments and the week's incoming funds into a single report."
        },
        {
          "title": "Breakdown by counterparty",
          "desc": "The agent splits receipts and payments by counterparty and purpose and shows who brought in the most money and where it drained away."
        },
        {
          "title": "A payment before it leaves",
          "desc": "The agent assembles the order's details and amount, lays them out in one list and stops — the signature stays with you in Alfa-Business Online."
        },
        {
          "title": "Where the quarter's money went",
          "desc": "The agent pulls a long statement period in chunks, stitches it together itself and shows the spending structure and how turnover moved month to month."
        }
      ],
      "how_it_works": [
        "The agent calls the Alfa-Business API at baas.alfabank.ru and starts from the list of company accounts — the same request that verifies the connection. From there it pulls the statement for the selected accounts over a period, totals incoming and outgoing turnover, surfaces large and unusual transactions and breaks payments and receipts down by counterparty and purpose, so the weekly summary comes together without a manual export from the internet bank.",
        "A bank statement is not the same thing as what is happening on the account right now: it carries the transactions the bank has already posted, so a fresh payment or credit appears in it later than the company learns about it. The agent works from the posting date rather than the moment the payment became known, and when reconciling against 1C entries it matches transactions by amount, date and counterparty details rather than by the payment purpose alone.",
        "By default the agent reads: accounts, statements, transaction history, reconciliation with the books and recurring summaries. The payment part of the API is available, but signing an order stays on the bank's side and goes through confirmation in Alfa-Business Online — the agent cannot send money silently. Before any write action it shows the details and the amount it has assembled and stops until you confirm them.",
        "Access has two layers: the API key travels as a token, while some methods additionally require a client certificate, so the set of available operations depends on which layer is open. The statement comes back in pages and with a cap on the length of the period, so the agent collects long intervals in chunks and stitches them together itself, holding the request rate. If there is no data for the period or the key lacks permissions, it says so directly instead of showing an empty table."
      ],
      "requirements": [
        "A settlement account and cash management at Alfa-Bank",
        "A director or an employee with signing authority",
        "OpenSSL installed to generate the private key"
      ],
      "faq": [
        {
          "q": "What do I need to connect Alfa-Bank?",
          "a": "An API key from Alfa-Business Online and, for some methods, a client certificate. Everything is stored encrypted."
        },
        {
          "q": "What data does the agent read?",
          "a": "Company accounts, statements, transactions and payments, within the permissions of the key. Data is requested at the moment of the task, with no permanent export."
        },
        {
          "q": "Can access be revoked?",
          "a": "Yes, in one click: delete the connection on our side or revoke the key in Alfa-Business Online, and access stops immediately."
        }
      ]
    }
  },
  {
    "key": "amocrm",
    "name": "AmoCRM (Kommo)",
    "description": "CRM для управления сделками, контактами и воронками продаж",
    "category": "crm",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "short_name": "amoCRM",
    "seo": {
      "headline": "Находите дыры в воронке продаж, не открывая amoCRM",
      "scenarios": [
        {
          "title": "Найти дыры в воронке продаж",
          "desc": "Агент разберёт сделки по этапам, посчитает конверсию между шагами и покажет, где лиды застревают или теряются без задач."
        },
        {
          "title": "Сводка по менеджерам за неделю",
          "desc": "Агент соберёт по каждому менеджеру новые сделки, закрытия, суммы и просроченные задачи — отчёт готов к планёрке."
        },
        {
          "title": "Реанимация зависших сделок",
          "desc": "Агент найдёт сделки без движения дольше N дней, сгруппирует по этапам и подготовит список для прозвона с контекстом по каждой."
        },
        {
          "title": "Контроль качества заполнения CRM",
          "desc": "Агент проверит сделки без бюджета, контакты без телефона и лиды без ответственного — и пришлёт список на исправление."
        },
        {
          "title": "Дежурство по новым лидам",
          "desc": "Агент ловит подписанный вебхук о новой сделке, поднимает карточку с бюджетом, контактом и ответственным и пишет в чат — без опроса CRM по расписанию."
        },
        {
          "title": "Задачи по итогам разбора",
          "desc": "Агент соберёт сделки без единой задачи, покажет списком — кому и что поставить, — и после вашего подтверждения проставит задачи, перечитав каждую сделку."
        }
      ],
      "how_it_works": [
        "Агент ходит в API вашего аккаунта по адресу поддомена — amocrm.ru у amoCRM или kommo.com у Kommo — и читает сделки, контакты, компании, воронки, задачи и примечания. Первым делом он забирает список воронок вместе с их этапами: без этой карты конверсию не с чем сопоставить. Дальше считаются переходы между шагами, суммы и сроки по каждому менеджеру, сделки без движения и поля, которые остались пустыми, — бюджет, телефон, ответственный.",
        "Этап сделки в amoCRM двигают руками, поэтому сам по себе он не говорит, работают с клиентом или нет. Агент смотрит на дату последнего изменения, на открытые и просроченные задачи и на переписку в примечаниях: сделка, третью неделю стоящая на переговорах без единой задачи, попадает в зависшие, а не в активные. Одинаковые названия этапов в разных воронках — разные сущности, и в одну конверсию агент их не сводит.",
        "На запись агент делает то, что разрешено интеграции: ставит задачи, переводит сделки между этапами, дописывает примечания. Перед правкой он перечитывает сделку, чтобы не затереть свежее изменение менеджера, а массовое действие — перевод десятка сделок или раздачу задач — показывает списком и ждёт подтверждения. О создании, обновлении и удалении сделок, контактов, компаний и задач amoCRM сообщает подписанными вебхуками, так что о смене агент узнаёт без постоянного опроса.",
        "Токен доступа живёт сутки и продлевается сам, так что подтверждать подключение заново не приходится. Сделки, контакты и задачи amoCRM отдаёт страницами по 250 записей, и агент дочитывает выборку до конца, а не обрывается на первой странице. Отозвали интеграцию в кабинете — доступ обрывается сразу, и агент говорит, что подключение нужно восстановить, вместо того чтобы молча вернуть ноль. Частоту запросов он держит в рамках допустимого, а если раздел закрыт правами или сделок за период не было, скажет это прямо, а не покажет пустую таблицу."
      ],
      "requirements": [
        "Права администратора аккаунта amoCRM или Kommo.",
        "Адрес кабинета: субдомен и домен amocrm.ru или kommo.com.",
        "Домен кабинета на HTTPS — без SSL форма интеграции не сохранится."
      ],
      "faq": [
        {
          "q": "Как подключается amoCRM?",
          "a": "Через OAuth-интеграцию: указываете поддомен и домен своего аккаунта (amocrm.ru или kommo.com) и данные внешней интеграции из раздела «Настройки → амоМаркет». Доступ работает от имени интеграции и отзывается там же."
        },
        {
          "q": "Что агент видит в amoCRM?",
          "a": "Сделки, контакты, компании, воронки, задачи и примечания — в рамках прав, выданных интеграции. Агент читает данные по запросу и не копирует базу целиком."
        },
        {
          "q": "Может ли агент создавать и менять сделки?",
          "a": "Да, при выданных правах на запись: создавать задачи, двигать сделки по этапам, дописывать примечания. Любое действие с записью агент подтверждает у вас, если не настроено иначе."
        },
        {
          "q": "Работает ли с Kommo?",
          "a": "Да — Kommo это международная версия amoCRM с тем же API, коннектор совместим с обеими."
        }
      ]
    },
    "seo_en": {
      "headline": "Find the leaks in your sales funnel without opening amoCRM",
      "scenarios": [
        {
          "title": "Find the leaks in your sales funnel",
          "desc": "The agent breaks deals down by stage, computes step-to-step conversion and shows where leads stall or slip away with no task attached."
        },
        {
          "title": "Weekly rep performance summary",
          "desc": "The agent gathers new deals, closures, amounts and overdue tasks for every rep, so the report is ready for the stand-up."
        },
        {
          "title": "Revive stalled deals",
          "desc": "The agent finds deals with no movement for N days, groups them by stage and prepares a call list with context on each one."
        },
        {
          "title": "Keep CRM data clean",
          "desc": "The agent checks for deals without a budget, contacts without a phone and leads with no owner, then sends a list to fix."
        },
        {
          "title": "Keep watch on new leads",
          "desc": "The agent catches a signed webhook about a new deal, pulls up the card with budget, contact and owner and posts it to chat — no scheduled polling."
        },
        {
          "title": "Hand out tasks after a review",
          "desc": "The agent collects deals with not a single task, lists who should get what, and once you confirm it creates the tasks, re-reading every deal first."
        }
      ],
      "how_it_works": [
        "The agent calls your account API at the address of your subdomain — amocrm.ru for amoCRM or kommo.com for Kommo — and reads deals, contacts, companies, pipelines, tasks and notes. The first thing it fetches is the list of pipelines together with their stages: without that map there is nothing to measure conversion against. Then it counts the step-to-step transitions, amounts and timings per rep, deals with no movement and the fields left empty — budget, phone, owner.",
        "A deal stage in amoCRM is moved by hand, so on its own it does not tell you whether anyone is working the client. The agent looks at the date of the last change, at open and overdue tasks and at the correspondence in the notes: a deal sitting in negotiations for a third week with not a single task lands in the stalled pile, not the active one. Identically named stages in different pipelines are different entities, and the agent does not merge them into one conversion.",
        "For writes the agent does what the integration is allowed to do: create tasks, move deals between stages, append notes. Before an edit it re-reads the deal so as not to overwrite a rep's fresh change, and a bulk action — moving a dozen deals or handing out tasks — is shown as a list and waits for confirmation. Creations, updates and deletions of deals, contacts, companies and tasks arrive from amoCRM as signed webhooks, so the agent learns about a change without constant polling.",
        "The access token lives for a day and renews itself, so the connection never has to be confirmed again. Deals, contacts and tasks come back from amoCRM in pages of 250 records, and the agent reads a selection to the end instead of stopping at the first page. Revoke the integration in the account and access stops immediately, and the agent says the connection has to be restored rather than quietly returning zero. It keeps the request rate within what is allowed, and if a section is closed by permissions or there simply were no deals in the period, it says so directly instead of showing an empty table."
      ],
      "requirements": [
        "Account administrator rights in amoCRM or Kommo.",
        "Your account address: the subdomain plus amocrm.ru or kommo.com.",
        "The account domain on HTTPS — without SSL the form will not save."
      ],
      "faq": [
        {
          "q": "How does amoCRM connect?",
          "a": "Through an OAuth integration: you give the subdomain and domain of your account (amocrm.ru or kommo.com) and the external integration credentials from Settings and amoMarket. Access runs on behalf of the integration and is revoked in the same place."
        },
        {
          "q": "What does the agent see in amoCRM?",
          "a": "Deals, contacts, companies, pipelines, tasks and notes, within the permissions granted to the integration. The agent reads data on demand and never copies the whole database."
        },
        {
          "q": "Can the agent create and change deals?",
          "a": "Yes, when write permissions are granted: create tasks, move deals between stages, append notes. The agent confirms every write with you unless you configure it otherwise."
        },
        {
          "q": "Does it work with Kommo?",
          "a": "Yes. Kommo is the international version of amoCRM with the same API, and the connector supports both."
        }
      ]
    }
  },
  {
    "key": "apify",
    "name": "Apify",
    "description": "Запуск actor'ов Apify и выгрузка датасетов — парсинг публичных страниц и соцсетей",
    "category": "other",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Собирайте посты, профили и страницы парсерами Apify",
      "scenarios": [
        {
          "title": "Сбор по хэштегу",
          "desc": "Агент запустит парсер Instagram или TikTok по нужным хэштегам и вернёт посты и Reels с автором, датой, просмотрами и лайками."
        },
        {
          "title": "Разбор аккаунтов конкурентов",
          "desc": "Агент соберёт последние публикации выбранных аккаунтов, отсортирует их по популярности и покажет, что у конкурента заходит."
        },
        {
          "title": "Отбор вирусного контента",
          "desc": "Агент отфильтрует выдачу по числу лайков и датному окну — например, ролики по теме за последние 30 дней, набравшие больше 10 000."
        },
        {
          "title": "Повтор сохранённого таска",
          "desc": "Агент запустит сохранённый в Apify таск с уже настроенным парсером и выгрузит свежий датасет — параметры задавать заново не нужно."
        },
        {
          "title": "Долгий сбор без ожидания",
          "desc": "Агент запустит большой прогон асинхронно, повесит webhook на завершение и выгрузит датасет по defaultDatasetId, как только статус дойдёт до SUCCEEDED."
        },
        {
          "title": "Разбор упавшего прогона",
          "desc": "Агент поднимет лог запуска и покажет, во что упёрся парсер — защиту сайта, пустую выдачу или неверный input, — а зависший прогон остановит, чтобы тот не жёг кредиты."
        }
      ],
      "how_it_works": [
        "Агент не пишет собственный парсер, а запускает готовый actor из каталога Apify Store: у актора есть имя вида apify~instagram-hashtag-scraper и input — JSON с хэштегами, аккаунтами и лимитом результатов. Короткие задачи идут синхронно: один запрос ждёт до 300 секунд и возвращает собранные items прямо в ответ. Длинные — асинхронно: агент стартует run, опрашивает его статус и, когда тот доходит до SUCCEEDED, выгружает датасет по defaultDatasetId.",
        "Запуск проходит статусы READY → RUNNING → SUCCEEDED, FAILED или ABORTED, и агент читает не только результат, но и лог: по нему видно, упёрся ли парсер в защиту сайта, вернул ли пустую выдачу или свалился на неверном input. Застрявший прогон он останавливает, чтобы тот не жёг compute units дальше, а вместо бесконечного опроса статуса может зарегистрировать webhook на завершение и забрать данные по факту.",
        "Через Apify агент читает публичные данные — то же, что видит незалогиненный посетитель страницы: посты, Reels и видео по хэштегу, ленты и профили аккаунтов, выдачу поиска, карточки каталогов и карт. Опубликовать пост, поставить лайк или написать в чужой аккаунт через Apify невозможно: платформа только собирает. Меняется здесь единственное — ваш собственный аккаунт Apify: каждый запуск создаёт run и датасет и расходует кредиты плана.",
        "Расход считается по платформе и по самому актору. Платформенный — в compute units: 1 CU это 1 ГБ памяти в течение часа, на бесплатном плане и Starter он стоит $0.2 за CU, а бесплатный план даёт $5 расхода в месяц без привязки карты, 25 параллельных запусков и до 16 ГБ памяти на прогон. Часть акторов из Store берёт поверх этого свою цену за результат, поэтому большой сбор агент сначала оценивает по числу результатов, а не запускает вслепую. Датасет он выгружает сразу после прогона: на бесплатном плане хранятся только 10 последних запусков и только 4 месяца."
      ],
      "requirements": [
        "Аккаунт Apify и личный API-токен из Settings → API & Integrations",
        "Бесплатный план — $5 расхода в месяц без привязки карты",
        "Платный план от $29 в месяц для длинных прогонов и больших выгрузок"
      ],
      "faq": [
        {
          "q": "Как подключить Apify?",
          "a": "Личным API-токеном из консоли console.apify.com: раздел Settings → API & Integrations, там же он и создаётся. Скопируйте строку целиком, без пробелов по краям — лишний символ даёт ошибку unauthorized."
        },
        {
          "q": "Что агент видит через Apify?",
          "a": "То, что собрал запущенный actor: публичные посты, видео, профили и страницы. Плюс служебное по вашему аккаунту — статусы и логи запусков, содержимое датасетов и остаток лимитов плана."
        },
        {
          "q": "Пишет ли агент куда-нибудь?",
          "a": "В соцсети и на сайты — нет: опубликовать пост, оставить комментарий или отправить сообщение через Apify невозможно. Записи появляются только в вашем аккаунте Apify — запуски акторов, их датасеты и, если нужно, webhook на завершение прогона."
        },
        {
          "q": "Что со стоимостью и лимитами?",
          "a": "Бесплатный план даёт $5 расхода в месяц без карты, 25 параллельных запусков и до 16 ГБ памяти на прогон; compute unit — это 1 ГБ памяти в течение часа, $0.2 за CU на бесплатном плане и Starter. Синхронный запуск ждёт результат не дольше 300 секунд: всё, что длиннее, агент ведёт асинхронно с опросом статуса."
        }
      ]
    },
    "seo_en": {
      "headline": "Collect posts, profiles and pages with Apify scrapers",
      "scenarios": [
        {
          "title": "Collect by hashtag",
          "desc": "The agent runs an Instagram or TikTok scraper on the hashtags you need and returns posts and Reels with author, date, views and likes."
        },
        {
          "title": "Go through competitor accounts",
          "desc": "The agent collects the latest posts of the accounts you pick, sorts them by popularity and shows what works for the competitor."
        },
        {
          "title": "Pick out viral content",
          "desc": "The agent filters the results by like count and date window — for example, videos on a topic from the last 30 days with more than 10,000 likes."
        },
        {
          "title": "Re-run a saved task",
          "desc": "The agent runs a task saved in Apify with the scraper already configured and pulls a fresh dataset — no need to set the parameters again."
        },
        {
          "title": "Run a long collection unattended",
          "desc": "The agent starts a large run asynchronously, hangs a webhook on completion and pulls the dataset by defaultDatasetId as soon as the status reaches SUCCEEDED."
        },
        {
          "title": "Look into a failed run",
          "desc": "The agent opens the run log and shows what the scraper hit — site protection, an empty result or a bad input — and aborts a stuck run so it stops burning credits."
        }
      ],
      "how_it_works": [
        "The agent does not write a scraper of its own, it runs a ready-made actor from the Apify Store: an actor has a name like apify~instagram-hashtag-scraper and an input — JSON with hashtags, accounts and a result limit. Short jobs go synchronously: a single request waits up to 300 seconds and returns the collected items in the response. Long ones go asynchronously: the agent starts a run, polls its status and, once it reaches SUCCEEDED, pulls the dataset by defaultDatasetId.",
        "A run goes through the statuses READY → RUNNING → SUCCEEDED, FAILED or ABORTED, and the agent reads not only the result but the log: it shows whether the scraper hit a site's protection, returned an empty result or died on a bad input. A stuck run it aborts so that it stops burning compute units, and instead of polling the status forever it can register a webhook on completion and take the data once it fires.",
        "Through Apify the agent reads public data — the same thing a logged-out visitor sees on the page: posts, Reels and videos by hashtag, feeds and profiles of accounts, search results, cards from directories and maps. Publishing a post, leaving a like or messaging someone else's account through Apify is not possible: the platform only collects. The one thing that does change is your own Apify account: every run creates a run and a dataset and spends plan credits.",
        "Usage is counted both by the platform and by the actor itself. The platform part is in compute units: 1 CU is 1 GB of memory for one hour, costing $0.2 per CU on the free plan and Starter, while the free plan gives $5 of usage a month with no card, 25 concurrent runs and up to 16 GB of memory per run. Some Store actors charge their own price per result on top, so a large collection is sized by its result count up front rather than launched blind. The dataset is pulled right after the run: on the free plan only the 10 most recent runs are kept, and only for 4 months."
      ],
      "requirements": [
        "An Apify account and a personal API token from Settings → API & Integrations",
        "The free plan gives $5 of usage a month with no card",
        "A paid plan from $29 a month for long runs and large result sets"
      ],
      "faq": [
        {
          "q": "How do I connect Apify?",
          "a": "With a personal API token from the console.apify.com console: the Settings → API & Integrations section, where it is also created. Copy the whole string with no spaces at the edges — one extra character gives an unauthorized error."
        },
        {
          "q": "What does the agent see through Apify?",
          "a": "Whatever the actor it ran collected: public posts, videos, profiles and pages. Plus the housekeeping side of your account — run statuses and logs, dataset contents and the remaining plan limits."
        },
        {
          "q": "Does the agent write anywhere?",
          "a": "Not to social networks or websites: publishing a post, leaving a comment or sending a message through Apify is not possible. Records appear only inside your Apify account — actor runs, their datasets and, if needed, a webhook on run completion."
        },
        {
          "q": "What about cost and limits?",
          "a": "The free plan gives $5 of usage a month with no card, 25 concurrent runs and up to 16 GB of memory per run; a compute unit is 1 GB of memory for one hour, at $0.2 per CU on the free plan and Starter. A synchronous run waits for the result no longer than 300 seconds: anything longer the agent runs asynchronously with status polling."
        }
      ]
    }
  },
  {
    "key": "app_store_connect",
    "name": "App Store Connect",
    "description": "Отзывы и оценки приложения в App Store: чтение отзывов по странам и рейтингу, ответы разработчика, список приложений аккаунта",
    "category": "dev",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile"
  },
  {
    "key": "appmetrica",
    "name": "AppMetrica",
    "description": "Мобильная аналитика Яндекса — установки, сессии, события, краши, выручка, push-кампании",
    "category": "analytics",
    "auth_flow": "device_code",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Разбирайте источники установок и качество трафика в чате",
      "scenarios": [
        {
          "title": "Источники установок и качество трафика",
          "desc": "Агент разложит установки и сессии по партнёрам и источникам, посчитает выручку и ARPU и покажет, какие каналы приводят платящих пользователей."
        },
        {
          "title": "Краши по версиям приложения",
          "desc": "Агент соберёт краши и ошибки в разрезе версий, ОС и моделей устройств, посчитает задетые устройства и покажет, какой релиз ломает приложение."
        },
        {
          "title": "Ежедневная сводка по продукту",
          "desc": "Агент подтянет активные устройства, сессии, retention и выручку за сутки и пришлёт короткую сводку в разрезе стран и версий приложения."
        },
        {
          "title": "Выгрузка сырых событий",
          "desc": "Агент выгрузит через Logs API установки, кастомные события и краши построчно за период и сведёт их в разрез, которого нет в отчётах кабинета."
        },
        {
          "title": "Push-рассылка по группе",
          "desc": "Агент заведёт группу push-кампании, покажет параметры и текст до отправки, отправит после подтверждения и перечитает статус — дошла рассылка или отвалилась."
        },
        {
          "title": "Все приложения кабинета разом",
          "desc": "Агент пройдёт по списку приложений кабинета и сведёт установки, сессии и выручку каждого в одну таблицу — видно, какой проект растёт, а какой просел."
        }
      ],
      "how_it_works": [
        "Агент ходит в API AppMetrica под OAuth-токеном Яндекса: сначала забирает список приложений кабинета через management/v1/applications, затем снимает отчёты Reporting API — установки, сессии, активные устройства, кастомные события, краши и выручку — в разрезах по партнёрам и источникам трафика, версиям приложения, ОС, моделям устройств и странам. Поверх этого считаются ARPU и retention, а каналы сравниваются по платящим пользователям, а не по объёму установок.",
        "Сырые данные AppMetrica отдаёт иначе, чем отчёты: Logs API готовит выгрузку асинхронно — первый запрос ставит задачу, а файл приезжает только после подготовки, поэтому агент повторяет обращение до готовности. Пагинации там нет, так что длинный период он режет на куски по датам и склеивает построчные установки, кастомные события и краши сам. Так собирается разрез, которого в отчётах кабинета нет.",
        "На запись агент выходит только там, где это разрешает уровень доступа: заводит группы push-кампаний, отправляет рассылки и правит настройки приложения. Перед отправкой он показывает, какая группа и с какими параметрами уходит, и ждёт явного подтверждения. Рассылка уходит группой, а не по одному устройству, и после отправки агент перечитывает статус кампании, чтобы сказать, дошла она или отвалилась.",
        "Подключение идёт входом в аккаунт Яндекса по коду: токен агент получает и продлевает сам, копировать ключи вручную не нужно. Отчёты AppMetrica досчитывает не мгновенно — последние часы ещё догружаются, поэтому агент называет дату среза рядом с цифрами и не выдаёт неполные сутки за итог. Частоту запросов он выдерживает сам, а если данных за период нет — так и говорит, а не показывает пустую таблицу."
      ],
      "requirements": [
        "Аккаунт Яндекса с доступом к приложению в AppMetrica",
        "Уровень доступа «Только чтение» или выше, не агентский",
        "SDK в приложении инициализирован — иначе отчёты пустые"
      ],
      "faq": [
        {
          "q": "Как подключить AppMetrica?",
          "a": "Входом в аккаунт Яндекса по коду: вы подтверждаете доступ, токен агент получает сам. Заранее проверьте, что этому логину в «Управление доступом» приложения выдан уровень «Только чтение» или выше — агентский уровень отдаёт данные не полностью."
        },
        {
          "q": "Какие данные видит агент?",
          "a": "Список приложений кабинета, отчёты Reporting API — установки, сессии, активные устройства, кастомные события, краши и выручку — и построчные выгрузки Logs API по тем приложениям, к которым у вашего логина есть доступ."
        },
        {
          "q": "Может ли агент что-то менять в AppMetrica?",
          "a": "Да, если уровень доступа «Чтение/редактирование»: агент умеет заводить группы push-кампаний, отправлять рассылки и править настройки приложения. С уровнем «Только чтение» остаются отчёты и выгрузки."
        },
        {
          "q": "Почему выгрузка Logs API приходит не сразу?",
          "a": "Logs API готовит файл асинхронно: первый запрос ставит задачу, данные приезжают после подготовки, поэтому агент повторяет запрос до готовности. Пагинации там нет, большой период он режет на куски по датам."
        }
      ]
    },
    "seo_en": {
      "headline": "Break down install sources and traffic quality in chat",
      "scenarios": [
        {
          "title": "Install sources and traffic quality",
          "desc": "The agent splits installs and sessions by partner and source, computes revenue and ARPU and shows which channels bring paying users."
        },
        {
          "title": "Crashes by app version",
          "desc": "The agent collects crashes and errors by version, OS and device model, counts affected devices and shows which release is breaking the app."
        },
        {
          "title": "Daily product summary",
          "desc": "The agent pulls active devices, sessions, retention and revenue for the day and sends a short summary split by country and app version."
        },
        {
          "title": "Raw event export",
          "desc": "Through the Logs API the agent exports installs, custom events and crashes row by row for a period and builds a breakdown the dashboard does not offer."
        },
        {
          "title": "Push campaign to a group",
          "desc": "The agent creates a push campaign group, shows the parameters and text before sending, sends it once you confirm and re-reads the status to say whether it landed."
        },
        {
          "title": "Every app in the account at once",
          "desc": "The agent walks the list of apps in the account and pulls installs, sessions and revenue for each into one table, showing which project grew and which slipped."
        }
      ],
      "how_it_works": [
        "The agent calls the AppMetrica API with a Yandex OAuth token: first it fetches the list of apps in the account through management/v1/applications, then it pulls Reporting API reports — installs, sessions, active devices, custom events, crashes and revenue — broken down by partner and traffic source, app version, OS, device model and country. On top of that it computes ARPU and retention, and compares channels by paying users rather than by install volume.",
        "AppMetrica hands out raw data differently from reports: the Logs API prepares an export asynchronously — the first request queues the job and the file only arrives once it is ready, so the agent retries until it is. There is no pagination there, so a long period is split into date chunks and the row-level installs, custom events and crashes are stitched together by the agent. That is how a breakdown the dashboard does not offer gets built.",
        "The agent writes only where the access level permits it: it creates push campaign groups, sends campaigns and edits app settings. Before sending it shows which group goes out and with which parameters, and waits for an explicit confirmation. A campaign goes out as a group rather than device by device, and after sending the agent re-reads the campaign status to say whether it landed or fell over.",
        "The connection runs as a sign-in to a Yandex account with a code: the agent obtains and renews the token itself, with no keys to copy by hand. AppMetrica does not finish counting reports instantly — the last hours are still loading, so the agent names the cut-off date next to the figures and never passes an incomplete day off as a total. It holds the request rate itself, and if there is no data for the period it says so instead of showing an empty table."
      ],
      "requirements": [
        "A Yandex account with access to the app in AppMetrica",
        "Access level Read only or higher, not an agency level",
        "The SDK initialised in the app — otherwise reports stay empty"
      ],
      "faq": [
        {
          "q": "How do I connect AppMetrica?",
          "a": "By signing in to your Yandex account with a code: you confirm access and the agent obtains the token itself. Check in advance that this login has the Read-only level or higher in Access management for the app, because the agency level returns incomplete data."
        },
        {
          "q": "What data does the agent see?",
          "a": "The list of apps in the account, Reporting API reports such as installs, sessions, active devices, custom events, crashes and revenue, and row-level Logs API exports for the apps your login can access."
        },
        {
          "q": "Can the agent change anything in AppMetrica?",
          "a": "Yes, with the Read and edit access level the agent can create push campaign groups, send campaigns and edit app settings. With Read-only it is limited to reports and exports."
        },
        {
          "q": "Why does a Logs API export not arrive right away?",
          "a": "The Logs API prepares the file asynchronously: the first request queues the job and the data arrives once it is ready, so the agent retries until it is. There is no pagination there, so a long period is split into date chunks."
        }
      ]
    }
  },
  {
    "key": "ati_su",
    "name": "ATI.SU",
    "description": "Биржа грузоперевозок — грузы, заказы, торги, машины, фирмы, площадки, мессенджер, АТИ-Доки (ЭДО), вебхуки, тайм-слоты, индекс ставок",
    "category": "logistics",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Находите рейсы без перевозчика на ATI.SU прямо в чате",
      "scenarios": [
        {
          "title": "Рейсы без перевозчика",
          "desc": "Агент пройдёт по вашим грузам и заказам на бирже и покажет, какие рейсы до сих пор висят без перевозчика и сколько времени."
        },
        {
          "title": "Ставки против индекса",
          "desc": "Агент сверит ставки в ваших заказах с индексом ATI.SU по направлению и назовёт маршруты, где вы платите заметно выше рынка."
        },
        {
          "title": "Сводка по торгам и откликам",
          "desc": "Агент соберёт утреннюю сводку по торгам и новым откликам перевозчиков, чтобы биржу не приходилось обновлять вручную."
        },
        {
          "title": "Проверка фирмы перед рейсом",
          "desc": "Агент поднимет карточку фирмы в справочнике ATI.SU, покажет её машины и площадки — по ним вы решаете, отдавать ли рейс."
        },
        {
          "title": "Документы по рейсу",
          "desc": "Агент поднимет АТИ-Доки по нужному заказу и назовёт, каких документов до сих пор нет, — раньше, чем их хватится бухгалтерия."
        },
        {
          "title": "Тайм-слоты на ближайшие дни",
          "desc": "Агент соберёт тайм-слоты на площадках и покажет, где погрузка встала впритык к разгрузке, а где окно так и осталось пустым."
        }
      ],
      "how_it_works": [
        "Агент ходит в API биржи на api.ati.su и читает те же разделы, что вы видите в кабинете: грузы и заказы, торги и отклики перевозчиков, справочник фирм с их машинами и площадками, переписку в мессенджере биржи, документы АТИ-Доки, тайм-слоты и индекс ставок. Разделы он запрашивает по одному под конкретный вопрос, а не выкачивает биржу целиком: на вопрос про рейс поднимаются заявка, отклики по ней и карточка перевозчика, остальное не трогается.",
        "Устроена биржа так, что статус заявки сам по себе говорит мало: груз неделю числится размещённым и при этом не собирает ни одного отклика. Поэтому агент считает не статус, а время рейса без перевозчика и число откликов по каждой заявке. Ставку из вашего заказа он сверяет с индексом ATI.SU по направлению, помня, что индекс — это рыночный ориентир по маршруту, а не цена конкретной сделки.",
        "По умолчанию агент работает на чтение: собирает утреннюю сводку по торгам и новым откликам, поднимает карточку фирмы вместе с её машинами и площадками перед тем, как отдать рейс, и складывает найденное в ответ в чате. Всё, что меняет состояние на бирже, — сообщение перевозчику в мессенджере, движение по заказу — он сначала показывает целиком и отправляет только после вашего подтверждения.",
        "Частота ограничена десятью запросами в секунду, поэтому большие выгрузки агент собирает частями и растягивает по времени, а не бьёт биржу параллельными вызовами. Списки он забирает страницами и останавливается, когда набрал нужный период, а не когда кончились данные. Про раздел, который не ответил, агент говорит прямо, вместо пустой таблицы."
      ],
      "requirements": [
        "Зарегистрированная и подтверждённая фирма на ATI.SU",
        "Права на нужные разделы биржи у вашего аккаунта"
      ],
      "faq": [
        {
          "q": "Как подключить ATI.SU?",
          "a": "API-токеном: на портале ati.su/developers/tokens/ в разделе «Мои токены» кнопка «Создать временный токен» даёт ключ на 7 дней для проверки, а для постоянной работы client_id запрашивается на api@ati.su. Значение из столбца «Токен» вставляется в поле токена."
        },
        {
          "q": "Что агент видит в ATI.SU?",
          "a": "Грузы, заказы, торги, машины, фирмы и площадки, переписку в мессенджере биржи, документы АТИ-Доки и индекс ставок — в пределах прав аккаунта, чей токен подключён."
        },
        {
          "q": "Пишет ли агент в ATI.SU?",
          "a": "По умолчанию агент читает биржу и отвечает в чате. Права токена наследуются от аккаунта: если доступа к разделу нет, агент прямо скажет, чего не хватает, вместо непонятной ошибки."
        },
        {
          "q": "Есть ли ограничения по запросам?",
          "a": "Обращения идут не чаще 10 запросов в секунду, поэтому большие выгрузки агент собирает частями. Временный токен живёт 7 дней — после этого подключение нужно обновить постоянным."
        }
      ]
    },
    "seo_en": {
      "headline": "Spot ATI.SU loads still without a carrier right in chat",
      "scenarios": [
        {
          "title": "Loads with no carrier",
          "desc": "The agent walks through your cargo and orders on the exchange and shows which trips are still sitting without a carrier, and for how long."
        },
        {
          "title": "Rates against the index",
          "desc": "The agent compares the rates in your orders with the ATI.SU index for the lane and names the routes where you pay noticeably above market."
        },
        {
          "title": "Auctions and responses at a glance",
          "desc": "The agent builds a morning summary of auctions and new carrier responses, so nobody has to refresh the exchange by hand."
        },
        {
          "title": "Vet a firm before the trip",
          "desc": "The agent pulls up the firm card in the ATI.SU directory and shows its trucks and sites, which is enough to decide whether to hand over the trip."
        },
        {
          "title": "Paperwork on a trip",
          "desc": "The agent pulls the ATI-Doki documents for a given order and names the ones still missing, well before accounting comes looking for them."
        },
        {
          "title": "Time slots for the days ahead",
          "desc": "The agent collects the time slots across sites and shows where loading ended up back to back with unloading and where a window stayed empty."
        }
      ],
      "how_it_works": [
        "The agent calls the exchange API at api.ati.su and reads the same sections you see in the account: cargo and orders, auctions and carrier responses, the firm directory with their trucks and sites, conversations in the exchange messenger, ATI-Doki documents, time slots and the rate index. It requests the sections one at a time, under the specific question, rather than pulling the whole exchange: a question about a trip raises the listing, its responses and the carrier card and leaves the rest alone.",
        "The exchange is built so that the status of a listing on its own says little: a load sits marked as posted for a week and collects not a single response. So the agent counts not the status but the time a trip spends without a carrier and the number of responses on each listing. The rate in your order is compared against the ATI.SU index for the lane, keeping in mind that the index is a market reference for the route, not the price of a particular deal.",
        "By default the agent works read-only: it builds a morning summary of auctions and new responses, pulls up a firm card together with its trucks and sites before a trip is handed over, and puts what it found into a reply in chat. Anything that changes state on the exchange — a message to a carrier in the messenger, a move on an order — it first shows in full and sends only after your confirmation.",
        "The rate is capped at ten requests per second, so large exports are collected in parts and spread over time rather than fired at the exchange in parallel. Lists are taken page by page and the agent stops once it has the period it was asked for, not once the data runs out. About a section that did not answer it says so directly instead of showing an empty table."
      ],
      "requirements": [
        "A registered and verified company on ATI.SU",
        "Account rights to the exchange sections you need"
      ],
      "faq": [
        {
          "q": "How do I connect ATI.SU?",
          "a": "With an API token: on ati.su/developers/tokens/ the My tokens section has a Create temporary token button that issues a key for 7 days of testing, and for permanent work a client_id is requested at api@ati.su. Paste the value from the Token column into the token field."
        },
        {
          "q": "What does the agent see in ATI.SU?",
          "a": "Cargo, orders, auctions, trucks, firms and sites, conversations in the exchange messenger, ATI-Doki documents and the rate index, within the permissions of the account whose token is connected."
        },
        {
          "q": "Does the agent write to ATI.SU?",
          "a": "By default the agent reads the exchange and replies in chat. Token rights are inherited from the account: if a section is closed, the agent says plainly what is missing instead of throwing a cryptic error."
        },
        {
          "q": "Are there request limits?",
          "a": "Requests go out at no more than 10 per second, so the agent collects large exports in parts. A temporary token lives 7 days, after which the connection has to be renewed with a permanent one."
        }
      ]
    }
  },
  {
    "key": "avito",
    "name": "Avito",
    "description": "Объявления, статистика, мессенджер, отзывы и автозагрузка на Avito",
    "category": "marketplaces",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "short_name": "Авито",
    "seo": {
      "headline": "ИИ для Авито: считайте отдачу объявлений и отвечайте в чате",
      "scenarios": [
        {
          "title": "Сводка по объявлениям и звонкам",
          "desc": "Агент соберёт статистику просмотров, контактов и звонков по объявлениям и покажет, какие позиции дают лиды, а какие висят мёртвым грузом."
        },
        {
          "title": "Разбор входящих сообщений",
          "desc": "Агент пройдёт по диалогам мессенджера Avito, выделит горячие запросы без ответа и подготовит черновики ответов."
        },
        {
          "title": "Контроль отзывов профиля",
          "desc": "Агент отследит новые отзывы, подготовит ответы и предупредит о негативе, который снижает рейтинг профиля."
        },
        {
          "title": "Куда ушёл бюджет продвижения",
          "desc": "Агент сведёт расходы на продвижение с контактами и избранным по каждому объявлению и покажет, какие позиции окупают платный показ, а какие просто тратят."
        },
        {
          "title": "Что не встало из автозагрузки",
          "desc": "Агент разберёт последние выгрузки автозагрузки, назовёт объявления, которые не появились в профиле, и покажет причину отказа по каждому."
        },
        {
          "title": "Новые чаты за ночь",
          "desc": "Агент к утру покажет чаты, открытые за ночь: уведомление о каждом приходит сразу, поэтому в сводке видно и первый вопрос покупателя, и время ожидания."
        }
      ],
      "how_it_works": [
        "Агент ходит в API Авито напрямую: читает объявления профиля и их статистику — просмотры, контакты, избранное и расходы на продвижение, — разбирает диалоги мессенджера, отзывы профиля и выгрузки автозагрузки. Подключение он проверяет запросом к собственному аккаунту, поэтому сразу знает, чей профиль обслуживает, и сводит цифры по объявлениям с ценами, показывая отдачу от размещения, а не голый счётчик просмотров.",
        "Мессенджер и отзывы агент не опрашивает по кругу: новое сообщение, открытый чат, добавленный и обновлённый отзыв приходят уведомлениями с подписью, которую он проверяет до того, как что-то показать. Отдельное событие «отзыв обновлён» здесь важно: оценка и текст на Авито правятся задним числом, поэтому агент перечитывает отзыв, а не полагается на первую версию, попавшую в сводку.",
        "На запись агент работает в мессенджере и в отзывах: отвечает в диалогах и готовит ответы на отзывы. Режим выбираете вы — агент отправляет сам или оставляет черновик, который отправляете вы. Горячие запросы без ответа он поднимает наверх и отделяет от переписки, которая уже закрыта, а негатив, бьющий по рейтингу профиля, называет отдельно, а не растворяет в общей статистике.",
        "По паре Client ID и Client Secret сервис сам получает токен и обновляет его по истечении суток, копировать вручную нечего. Что агенту доступно, решает набор прав токена: без права messenger диалоги и ответы закрыты, и агент назовёт это причиной, а не промолчит. Частоту запросов он держит сам, а к Автотеке обращается заметно реже, чем к остальным разделам: там лимит жёстче. Когда за период данных нет, он говорит об этом прямо, а не показывает пустую сводку."
      ],
      "requirements": [
        "Доступ к сообщениям профиля: агент читает диалоги и отвечает",
        "Доступ к статистике объявлений: просмотры, контакты, расходы"
      ],
      "faq": [
        {
          "q": "Что нужно для подключения Avito?",
          "a": "Client ID и Client Secret из кабинета Avito: «Управление профилем → Интеграции». Ключи хранятся в зашифрованном виде, доступ отзывается удалением ключа в кабинете."
        },
        {
          "q": "Агент может отвечать покупателям в мессенджере?",
          "a": "Да — при наличии прав messenger в ключе агент читает диалоги и отправляет ответы. Можно настроить так, что агент готовит черновики, а отправляете вы."
        },
        {
          "q": "Какая аналитика доступна по объявлениям?",
          "a": "Просмотры, контакты, избранное и расходы на продвижение по каждому объявлению. Агент сводит их с ценами и остатками, чтобы показать реальную отдачу от размещения."
        },
        {
          "q": "Пишет ли ИИ текст для объявлений на Авито?",
          "a": "Текст объявления агент готовит и правит по вашим замечаниям, но публикует его не он: на запись коннектор работает в мессенджере и в отзывах, а само объявление вы обновляете через кабинет или автозагрузку."
        },
        {
          "q": "Может ли нейросеть собрать карточки для Авито?",
          "a": "Нейросеть соберёт карточку — заголовок, описание, характеристики — и сверит её со статистикой похожих позиций профиля. На площадку карточки уходят файлом автозагрузки, а агент потом назовёт объявления, которые из выгрузки не встали, и причину отказа по каждому."
        }
      ]
    },
    "seo_en": {
      "headline": "Track how your Avito listings pay off and reply in the messenger",
      "scenarios": [
        {
          "title": "Listings and calls at a glance",
          "desc": "The agent gathers views, contacts and call stats per listing and shows which positions bring leads and which sit there as dead weight."
        },
        {
          "title": "Triage of incoming messages",
          "desc": "The agent goes through Avito messenger conversations, picks out hot unanswered requests and drafts replies."
        },
        {
          "title": "Keep an eye on profile reviews",
          "desc": "The agent tracks new reviews, prepares responses and warns about negatives that drag your profile rating down."
        },
        {
          "title": "Where the promotion budget went",
          "desc": "The agent lines up promotion spend against contacts and favourites for every listing and shows which positions pay the paid views back and which merely burn money."
        },
        {
          "title": "What the autoload feed dropped",
          "desc": "The agent goes through the latest autoload feeds, names the listings that never made it into the profile and shows the reason each one was rejected."
        },
        {
          "title": "Overnight chats by morning",
          "desc": "The agent shows the chats opened overnight: every one of them arrives as a notification straight away, so the summary holds both the buyer's first question and the waiting time."
        }
      ],
      "how_it_works": [
        "The agent calls the Avito API directly: it reads the profile's listings and their statistics — views, contacts, favourites and promotion spend — and works through messenger conversations, profile reviews and autoload feeds. It verifies the connection with a request for the account itself, so it knows from the start whose profile it serves, and it combines listing figures with prices to show the return on a placement rather than a bare view counter.",
        "The agent does not poll the messenger and the reviews in circles: a new message, an opened chat, an added and an updated review arrive as signed notifications, and it checks that signature before showing anything. The separate review updated event matters here: on Avito a rating and its text get edited after the fact, so the agent re-reads the review instead of trusting the first version that made it into a summary.",
        "The agent writes in the messenger and in reviews: it replies in conversations and drafts responses to reviews. The mode is yours to choose — the agent either sends on its own or leaves a draft for you to send. Hot unanswered requests are surfaced and kept apart from conversations that are already closed, and negatives that hit the profile rating are named separately rather than dissolved into the overall statistics.",
        "From a Client ID and Client Secret pair the service obtains the token itself and renews it once the day is up, so there is nothing to copy by hand. What the agent can reach is decided by the token scopes: without the messenger permission conversations and replies stay closed, and the agent names that as the reason instead of going quiet. It holds the request rate itself and turns to Autoteka far less often than to the other sections, where the limit is tighter; when a period has no data, it says so directly rather than showing an empty summary."
      ],
      "requirements": [
        "Access to profile messages: the agent reads chats and replies",
        "Access to listing statistics: views, contacts, promotion spend"
      ],
      "faq": [
        {
          "q": "What do I need to connect Avito?",
          "a": "A Client ID and Client Secret from the Avito account, under Profile management and Integrations. Keys are stored encrypted, and access is revoked by deleting the key in the account."
        },
        {
          "q": "Can the agent reply to buyers in the messenger?",
          "a": "Yes. With messenger permissions on the key the agent reads conversations and sends replies. You can also set it up so the agent prepares drafts and you send them."
        },
        {
          "q": "What listing analytics are available?",
          "a": "Views, contacts, favourites and promotion spend for every listing. The agent combines them with prices and stock to show the real return on each placement."
        },
        {
          "q": "Does the AI write listing copy for Avito?",
          "a": "The agent drafts the listing text and reworks it on your notes, but it is not the one that publishes: the connector writes in the messenger and in reviews, while the listing itself you update through the account or an autoload feed."
        },
        {
          "q": "Can the AI assemble listing cards for Avito?",
          "a": "It will assemble a card — title, description, attributes — and check it against the stats of similar positions in your profile. Cards reach the marketplace through an autoload file, and afterwards the agent names the listings that did not come up from the feed and the rejection reason for each."
        }
      ]
    }
  },
  {
    "key": "avito_ads",
    "name": "Авито Реклама (рекламный кабинет)",
    "description": "Рекламные кампании Авито по client_id и client_secret из кабинета Авито Реклама — кампании, группы, креативы, статистика и балансы",
    "category": "ads",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "short_name": "Авито Реклама",
    "variant_of": "avito"
  },
  {
    "key": "beeline_cloudpbx",
    "name": "Билайн Облачная АТС",
    "description": "Облачная АТС Билайн — звонки, переадресация, запись разговоров, чёрные списки, CDR",
    "category": "messengers",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Разбирайте статистику звонков Билайн АТС прямо в чате",
      "scenarios": [
        {
          "title": "Статистика звонков за период",
          "desc": "Агент закажет выгрузку CDR за нужный период и покажет, сколько вызовов приняли, сколько потеряли и по каким абонентам АТС."
        },
        {
          "title": "Записи разговоров",
          "desc": "Агент найдёт запись нужного разговора по номеру и дате, скачает файл из АТС и перескажет, о чём договорились с клиентом."
        },
        {
          "title": "Переадресация и чёрные списки",
          "desc": "Агент настроит переадресацию по занятости или на мобильный и добавит навязчивый номер в чёрный список, не открывая кабинет АТС."
        },
        {
          "title": "Исходящий вызов от абонента",
          "desc": "Агент инициирует двухсторонний вызов от нужного внутреннего номера и при необходимости включит абоненту постоянную запись разговоров."
        },
        {
          "title": "Карта внутренних номеров",
          "desc": "Агент возьмёт список абонентов АТС, сверит внутренние номера с именами и покажет, у кого включена запись и куда уходит переадресация."
        },
        {
          "title": "Утренняя сводка пропущенных",
          "desc": "Агент по утрам заказывает выгрузку CDR за прошедшие сутки, отбирает потерянные вызовы и присылает список номеров с разбивкой по абонентам."
        }
      ],
      "how_it_works": [
        "Агент ходит в облачную АТС Билайн по адресу cloudcc.beeline.ru: первым делом читает список абонентов АТС, затем историю звонков из выгрузки CDR, записи разговоров, правила переадресации, чёрные списки и голосовые файлы. Из этого он считает, сколько вызовов приняли и сколько потеряли, и раскладывает результат по внутренним номерам — по тем абонентам, которых открывает подключённая учётная запись API.",
        "История звонков отдаётся не мгновенным ответом, а выгрузкой: агент заказывает CDR за нужный период и работает уже с готовым файлом, поэтому отчёт строится по завершённым вызовам, а не по счётчику в реальном времени. Записи разговоров тоже лежат отдельными файлами — агент находит нужную по номеру и дате, скачивает её из АТС и пересказывает, о чём договорились с клиентом.",
        "На запись агент умеет ровно то, что позволяет АТС: инициировать двухсторонний вызов от указанного внутреннего номера, включить абоненту постоянную запись разговоров, поменять переадресацию по занятости или на мобильный, добавить навязчивый номер в чёрный список. По умолчанию он работает на чтение и отчёты, а перед изменением настроек называет абонента и правило и ждёт подтверждения.",
        "Границы доступа задаёт учётная запись API: агент видит абонентов и звонки той АТС, к которой она привязана, и в чужие номера не заглядывает. Длинные периоды он разбирает частями — заказывает выгрузку кусками и склеивает результат сам, — а частоту запросов выдерживает, чтобы не упереться в ограничения АТС. Записи разговоров он скачивает по одной и только под конкретный вопрос, а при отсутствии данных за период говорит это словами, а не показывает пустую таблицу."
      ],
      "requirements": [
        "Договор на Облачную АТС Билайн с доступом в кабинет",
        "Бюджет 500 ₽ в месяц с НДС на услугу «Интеграция по API»"
      ],
      "faq": [
        {
          "q": "Как подключить Билайн Облачную АТС?",
          "a": "Токеном API. В кабинете cloudpbx.beeline.ru откройте «Настройки» → вкладку «API», включите услугу «Интеграция по API» и на табе «Version 2.0» нажмите «Создать новый токен» — он и вставляется в поле «Токен Portal API». Пара логин-пароль для внешних систем выдаётся только на табе «Version 1.0»: если она у вас есть, добавьте её — по ней работают выгрузка CDR, записи разговоров и управление вызовом. Логин и пароль от самого кабинета не подойдут."
        },
        {
          "q": "Что агент видит в Облачной АТС?",
          "a": "Абонентов АТС, историю звонков в выгрузке CDR, записи разговоров, правила переадресации, чёрные списки и голосовые файлы — в объёме, который открывает подключённая учётная запись API."
        },
        {
          "q": "Пишет ли агент в АТС?",
          "a": "Может: инициировать вызов от абонента, включать запись разговора, менять переадресацию и пополнять чёрный список. По умолчанию работает на чтение и отчёты."
        },
        {
          "q": "Нужна ли отдельная услуга у оператора?",
          "a": "Да. «Интеграция по API» подключается на вкладке «API» отдельно и тарифицируется как платная услуга: пока переключатель выключен, запросы к АТС не проходят."
        }
      ]
    },
    "seo_en": {
      "headline": "Break down Beeline Cloud PBX call stats right in chat",
      "scenarios": [
        {
          "title": "Call stats for any period",
          "desc": "The agent orders a CDR export for the period you need and shows how many calls were answered, how many were missed and by which PBX extensions."
        },
        {
          "title": "Call recordings",
          "desc": "The agent finds the recording of the call you need by number and date, downloads the file from the PBX and retells what was agreed with the client."
        },
        {
          "title": "Forwarding and blacklists",
          "desc": "The agent sets up forwarding on busy or to a mobile and adds a nuisance number to the blacklist without opening the PBX console."
        },
        {
          "title": "Outgoing call from an extension",
          "desc": "The agent starts a two-way call from the extension you name and, if needed, turns on permanent call recording for that user."
        },
        {
          "title": "Map of your extensions",
          "desc": "The agent pulls the list of PBX extensions, matches internal numbers with names and shows who has recording switched on and where forwarding sends calls."
        },
        {
          "title": "Morning missed-call digest",
          "desc": "The agent orders a CDR export for the past day every morning, picks out the missed calls and sends over the list of numbers broken down by extension."
        }
      ],
      "how_it_works": [
        "The agent calls the Beeline Cloud PBX at cloudcc.beeline.ru: first it reads the list of PBX extensions, then call history from the CDR export, call recordings, forwarding rules, blacklists and voice files. From that it counts how many calls were answered and how many were missed, and breaks the result down by extension — across the users the connected API account opens up.",
        "Call history is not handed over as an instant response but as an export: the agent orders a CDR for the period you need and works with the finished file, so the report is built from completed calls rather than from a live counter. Call recordings are separate files as well — the agent finds the one you need by number and date, downloads it from the PBX and retells what was agreed with the client.",
        "On the write side the agent does exactly what the PBX allows: start a two-way call from a named extension, turn on permanent call recording for a user, change forwarding on busy or to a mobile, add a nuisance number to the blacklist. By default it works read-only and builds reports, and before changing a setting it names the extension and the rule and waits for confirmation.",
        "Access boundaries are set by the API account: the agent sees the extensions and the calls of the PBX it belongs to and never looks into other numbers. Long periods are taken apart in pieces — it orders the export chunk by chunk and stitches the result together itself — and it holds the request rate so the PBX limits are not hit. Recordings are downloaded one at a time and only for a specific question, and when there is no data for the period it says so in words instead of showing an empty table."
      ],
      "requirements": [
        "A Beeline Cloud PBX contract with console access",
        "Budget of 500 RUB a month incl. VAT for the API add-on"
      ],
      "faq": [
        {
          "q": "How do I connect Beeline Cloud PBX?",
          "a": "With an API token. In the cloudpbx.beeline.ru console open Settings and the API tab, enable the API integration service and press “Create new token” on the Version 2.0 tab — that token goes into the Portal API token field. The login and password pair for external systems is only issued on the Version 1.0 tab: add it if you have one, it drives the CDR export, call recordings and call control. The console's own login and password will not work."
        },
        {
          "q": "What does the agent see in the Cloud PBX?",
          "a": "PBX extensions, call history in the CDR export, call recordings, forwarding rules, blacklists and voice files, as far as the connected API account allows."
        },
        {
          "q": "Does the agent write to the PBX?",
          "a": "It can: start a call from an extension, turn on call recording, change forwarding and extend the blacklist. By default it works read-only and builds reports."
        },
        {
          "q": "Do I need a separate service from the operator?",
          "a": "Yes. API integration is enabled separately on the API tab and is billed as a paid service: while the toggle is off, requests to the PBX will not go through."
        }
      ]
    }
  },
  {
    "key": "betterstack",
    "name": "Better Stack",
    "description": "Better Stack: uptime-мониторы, инциденты, heartbeats, статус-страницы, on-call",
    "category": "dev",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Узнавайте об упавших мониторах Better Stack сразу в чате",
      "scenarios": [
        {
          "title": "Что сейчас лежит",
          "desc": "Агент пройдёт по всем мониторам и назовёт те, что сейчас down, pending или стоят на паузе, с временем последней проверки."
        },
        {
          "title": "Инциденты в рабочем чате",
          "desc": "Агент напишет в чат, как только инцидент заведён, взят в работу или закрыт, — без ожидания письма и звонка эскалации."
        },
        {
          "title": "Разбор ночных сбоев",
          "desc": "Агент соберёт утреннюю сводку: что падало за ночь, надолго ли и какие мониторы так и остались выключенными."
        },
        {
          "title": "Дежурства и статус-страница",
          "desc": "Агент покажет, кто сейчас на дежурстве по расписанию on-call и что в этот момент видят клиенты на статус-странице."
        },
        {
          "title": "Тихие фоновые задачи",
          "desc": "Агент проверит heartbeats и назовёт задачи, от которых давно нет сигнала, — с временем последней отметки и запасом до конца окна ожидания."
        },
        {
          "title": "Кого дёргали чаще всех",
          "desc": "Агент разберёт историю инцидентов за месяц: сколько раз падал каждый монитор, сколько длился простой и какие проверки поднимали дежурных чаще остальных."
        }
      ],
      "how_it_works": [
        "Агент ходит в Uptime API Better Stack — читает мониторы и их состояние, инциденты вместе с историей, heartbeats, статус-страницы и расписания дежурств on-call. Из этого складывается картина: что сейчас down, pending или стоит на паузе, когда была последняя проверка, что падало за ночь и надолго ли, кто в этот момент на дежурстве и что в это время видят клиенты на публичной статус-странице.",
        "Состояние монитора и инцидент — разные вещи, и агент их не смешивает: монитор на паузе не проверяется и инцидентов не создаёт, поэтому в сводке он называется отдельно, а не растворяется среди исправных. Heartbeat устроен наоборот — тревогой становится отсутствие сигнала, и тихая фоновая задача выглядит рабочей, пока не истечёт окно ожидания, так что агент смотрит на время последней проверки, а не только на цвет статуса.",
        "На запись агент по умолчанию не ходит: он читает мониторы и инциденты и отчитывается в чате, а создавать монитор, менять его или снимать с паузы не станет без вашего явного запроса. Инциденты приходят вебхуком — заведение, взятие в работу и закрытие агент видит сразу, — но подпись у этого вебхука не проверяется, поэтому уведомление он считает поводом перечитать состояние через API, а повторную доставку отсекает по идентификатору инцидента.",
        "Границу выборки задаёт сам токен: командный ключ отдаёт мониторы одной команды, и агент называет эту границу вслух, а не выдаёт часть аккаунта за весь. Историю проверок и инцидентов API возвращает страницами с окном по времени, поэтому длинный период агент собирает частями и сам держит паузы между запросами, вместо того чтобы упереться в лимит на середине отчёта. Если раздел закрыт правами токена или данных за период просто нет, он говорит об этом прямо, а не показывает пустую таблицу."
      ],
      "requirements": [
        "Аккаунт Better Stack с настроенными мониторами Uptime.",
        "Вебхук на события инцидентов — иначе агент опрашивает по расписанию."
      ],
      "faq": [
        {
          "q": "Как подключить Better Stack?",
          "a": "API-токеном: в дашборде откройте «API tokens» — раздел доступен только роли «Admin». В блоке «Team-based tokens» выберите команду и возьмите значение из «Uptime API tokens»: он видит мониторы только этой команды, на несколько команд нужен «Global API token»."
        },
        {
          "q": "Что агент видит в Better Stack?",
          "a": "Uptime-мониторы и их состояние, инциденты и их историю, heartbeats, статус-страницы и расписания дежурств той команды, чей токен подключён."
        },
        {
          "q": "Как приходят инциденты?",
          "a": "Через вебхук: события создания, взятия в работу и закрытия инцидента агент получает сразу и может написать о них в рабочий чат без опроса по расписанию."
        },
        {
          "q": "Пишет ли агент в Better Stack?",
          "a": "По умолчанию нет: агент читает мониторы и инциденты и отчитывается в чате. Создавать и менять мониторы он не станет без вашего явного запроса."
        }
      ]
    },
    "seo_en": {
      "headline": "Hear about downed Better Stack monitors right in chat",
      "scenarios": [
        {
          "title": "What is down right now",
          "desc": "The agent walks every monitor and names the ones currently down, pending or paused, with the time of the last check."
        },
        {
          "title": "Incidents in your work chat",
          "desc": "The agent posts to chat the moment an incident is created, acknowledged or resolved, with no waiting for an email or an escalation call."
        },
        {
          "title": "Night outage review",
          "desc": "The agent puts together a morning summary: what went down overnight, for how long and which monitors were left switched off."
        },
        {
          "title": "On-call rota and status page",
          "desc": "The agent shows who is on call right now per the on-call schedule and what customers see on the status page at that moment."
        },
        {
          "title": "Quiet background jobs",
          "desc": "The agent checks the heartbeats and names the jobs that have gone silent, with the time of the last ping and how much of the expected window is left."
        },
        {
          "title": "Who got paged the most",
          "desc": "The agent walks a month of incident history: how often each monitor went down, how long the downtime ran and which checks pulled the on-call engineer out most."
        }
      ],
      "how_it_works": [
        "The agent calls the Better Stack Uptime API — it reads monitors and their state, incidents together with their history, heartbeats, status pages and on-call schedules. Out of that a picture comes together: what is down, pending or paused right now, when the last check happened, what went down overnight and for how long, who is on call at this moment and what customers see on the public status page at the same time.",
        "A monitor state and an incident are different things, and the agent does not conflate them: a paused monitor is not checked and creates no incidents, so it is named separately in the summary rather than dissolving among the healthy ones. A heartbeat works the other way round — the alarm is the absence of a signal, and a quiet background job looks fine until its expected window runs out, so the agent looks at the time of the last check, not only at the colour of the status.",
        "By default the agent does not write: it reads monitors and incidents and reports in chat, and it will not create a monitor, change one or take one off pause without an explicit request from you. Incidents arrive over a webhook — creation, acknowledgement and resolution are seen immediately — but that webhook carries no verified signature, so the agent treats a notification as a reason to re-read the state through the API and drops repeat deliveries by the incident identifier.",
        "The token itself bounds the selection: a team key returns the monitors of one team, and the agent names that boundary out loud rather than passing a part of the account off as the whole. Check and incident history comes back in pages windowed by time, so a long period is assembled in parts with the agent pacing its own requests instead of hitting the limit halfway through a report. If a section is closed off by the token rights or there simply is no data for the period, it says so directly instead of showing an empty table."
      ],
      "requirements": [
        "A Better Stack account with Uptime monitors already set up.",
        "A webhook for incident events — otherwise the agent polls on a schedule."
      ],
      "faq": [
        {
          "q": "How do I connect Better Stack?",
          "a": "With an API token: open API tokens in the dashboard, a section available to the Admin role only. Under Team-based tokens pick a team and take the value from Uptime API tokens: it sees that team monitors only, and covering several teams needs a Global API token."
        },
        {
          "q": "What does the agent see in Better Stack?",
          "a": "Uptime monitors and their state, incidents and their history, heartbeats, status pages and on-call schedules of the team whose token is connected."
        },
        {
          "q": "How do incidents arrive?",
          "a": "Over a webhook: the agent receives incident created, acknowledged and resolved events immediately and can post about them in your work chat without polling on a schedule."
        },
        {
          "q": "Does the agent write to Better Stack?",
          "a": "Not by default: the agent reads monitors and incidents and reports in chat. It will not create or change monitors without an explicit request from you."
        }
      ]
    }
  },
  {
    "key": "bitrix24",
    "name": "Bitrix24 CRM",
    "description": "CRM для управления сделками, контактами и лидами",
    "category": "crm",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "short_name": "Битрикс24",
    "seo": {
      "headline": "Разбирайте воронку Битрикс24 и находите потерянные лиды",
      "scenarios": [
        {
          "title": "Разбор воронки и потерянных лидов",
          "desc": "Агент посчитает конверсию по стадиям, найдёт лиды без ответственного и сделки, брошенные после первого касания."
        },
        {
          "title": "Еженедельный отчёт по продажам",
          "desc": "Агент соберёт закрытые сделки, суммы и активность менеджеров за неделю и пришлёт сводку в Telegram к планёрке."
        },
        {
          "title": "Синхронизация CRM с учёткой",
          "desc": "Агент сверит сделки Битрикс24 с оплатами в банке или 1С и покажет, какие выигранные сделки так и не оплачены."
        },
        {
          "title": "Задачи по зависшим сделкам",
          "desc": "Агент найдёт сделки без задач и без движения, создаст менеджерам задачи с дедлайном и контекстом."
        },
        {
          "title": "Дубли в базе клиентов",
          "desc": "Агент пройдёт по контактам и компаниям, найдёт дубли по телефону и почте и покажет, где один клиент завёлся дважды под разными менеджерами."
        },
        {
          "title": "Новый лид сразу в чат",
          "desc": "Агент поймает событие о новом лиде по вебхуку, подтянет карточку с контактами и источником и напишет дежурному менеджеру, не дожидаясь опроса."
        }
      ],
      "how_it_works": [
        "Агент обращается к порталу через входящий вебхук: его URL уже содержит и адрес, и ключ, поэтому запросы идут REST-методами вроде crm.deal.list прямо в ваш Битрикс24 — облачный или коробочный. Он читает сделки, лиды, контакты, компании и счета, считает конверсию по стадиям, активность менеджеров за период и суммы закрытий. Длинные списки забираются страницами, а о создании и изменении сделок портал может присылать события сам — тогда реакция не ждёт следующего опроса.",
        "Воронка в Битрикс24 разорвана надвое: лид и сделка — разные сущности, и при конвертации из лида рождаются сразу сделка, контакт и компания. Считать конверсию по одним сделкам значит потерять верх воронки, поэтому агент связывает лид с тем, во что он превратился. Стадии тоже не универсальны: у каждого направления сделок свой набор, а часть смысла лежит в пользовательских полях — их агент читает вместе со стандартными.",
        "На запись агент ставит задачи с дедлайном и контекстом и двигает сделки по стадиям, а карточку перед правкой перечитывает: портал не запирает запись от параллельных изменений. Перед созданием контакта или компании он ищет дубли по телефону и почте: повторный лид в Битрикс24 ничего не блокирует и спокойно ложится поверх существующей базы. Массовый импорт и поиск дублей идут заметно медленнее обычных запросов — портал на такие методы отвечает неохотно, и лучше подождать, чем упереться в отказ.",
        "Ссылка вебхука хранится зашифрованной и отзывается в том же разделе «Разработчикам → Другое»; отдельной авторизации портал не требует — ключ едет внутри URL каждого запроса. Частоту запросов агент держит невысокой: лимит портала делится со всеми интеграциями сразу, поэтому длинные выборки он проходит страницами, а не одним махом. Если метод закрыт правами или сделок за период не было, он скажет это прямо, а не отдаст пустую таблицу."
      ],
      "requirements": [
        "Платный тариф Битрикс24: на бесплатном REST API закрыт.",
        "Портал Битрикс24 — облачный на *.bitrix24.ru или коробка на своём домене."
      ],
      "faq": [
        {
          "q": "Как подключить Битрикс24?",
          "a": "Входящим вебхуком: в Битрикс24 откройте «Разработчикам → Другое → Входящий вебхук», выберите права и вставьте полученный URL при подключении. Ссылка хранится в зашифрованном виде."
        },
        {
          "q": "Какие права нужны вебхуку?",
          "a": "Для аналитики достаточно CRM (чтение). Если хотите, чтобы агент создавал задачи и двигал сделки, добавьте права на запись CRM и «Задачи». Права всегда можно сузить — агент попросит недостающее, когда упрётся."
        },
        {
          "q": "Облачный и коробочный Битрикс24 оба работают?",
          "a": "Да, вебхук-механика одинакова: подключается и облачный портал *.bitrix24.ru, и коробка на вашем домене."
        },
        {
          "q": "Агент увидит изменения в сделках сразу?",
          "a": "Да, агент читает REST API в момент задачи. Дополнительно коннектор принимает вебхуки о создании и изменении сделок — на них можно вешать автоматические реакции."
        }
      ]
    },
    "seo_en": {
      "headline": "Break down the Bitrix24 funnel and find the leads you lost",
      "scenarios": [
        {
          "title": "Funnel and lost lead breakdown",
          "desc": "The agent computes stage-by-stage conversion, finds leads with no owner and deals abandoned after the first touch."
        },
        {
          "title": "Weekly sales report",
          "desc": "The agent gathers closed deals, amounts and rep activity for the week and sends the summary to Telegram in time for the stand-up."
        },
        {
          "title": "Sync the CRM with the books",
          "desc": "The agent reconciles Bitrix24 deals with payments in the bank or 1C and shows which won deals were never paid."
        },
        {
          "title": "Tasks for stalled deals",
          "desc": "The agent finds deals with no tasks and no movement and creates tasks for the reps with a deadline and context."
        },
        {
          "title": "Duplicates in the client base",
          "desc": "The agent walks the contacts and companies, finds duplicates by phone and email and shows where one client was entered twice under different reps."
        },
        {
          "title": "New lead straight into chat",
          "desc": "The agent catches the new-lead event over a webhook, pulls up the card with its contacts and source and messages the rep on duty without waiting for a poll."
        }
      ],
      "how_it_works": [
        "The agent reaches the portal through an inbound webhook: its URL already carries both the address and the key, so requests go as REST methods like crm.deal.list straight into your Bitrix24, cloud or self-hosted. It reads deals, leads, contacts, companies and invoices, computes stage-by-stage conversion, rep activity for the period and closed amounts. Long lists are fetched page by page, and the portal can push events about deal creation and changes itself — then a reaction does not wait for the next poll.",
        "The funnel in Bitrix24 is torn in two: a lead and a deal are different entities, and converting a lead gives birth to a deal, a contact and a company at once. Counting conversion on deals alone means losing the top of the funnel, so the agent ties a lead to whatever it turned into. Stages are not universal either: every deal direction has its own set, and part of the meaning sits in custom fields — the agent reads those alongside the standard ones.",
        "For writes the agent creates tasks with a deadline and context and moves deals between stages, re-reading the card first: the portal does not lock a record against parallel edits. Before creating a contact or a company it looks for duplicates by phone and email: a repeat lead in Bitrix24 blocks nothing and happily lands on top of the existing base. Bulk import and duplicate search run noticeably slower than ordinary requests — the portal answers such methods reluctantly, and waiting beats running into a refusal.",
        "The webhook link is stored encrypted and is revoked in the same Developer resources, Other section; the portal asks for no separate authorization — the key rides inside the URL of every request. The request rate is kept low: the portal quota is shared with every other integration at once, so long selections are walked page by page rather than pulled in one go. If a method is closed by permissions or there were no deals in the period, it says so directly instead of handing over an empty table."
      ],
      "requirements": [
        "A paid Bitrix24 plan: the REST API is closed on the free tier.",
        "A Bitrix24 portal — cloud on *.bitrix24.ru or self-hosted on your domain."
      ],
      "faq": [
        {
          "q": "How do I connect Bitrix24?",
          "a": "With an inbound webhook: in Bitrix24 open Developer resources, then Other and Inbound webhook, pick the permissions and paste the resulting URL when connecting. The link is stored encrypted."
        },
        {
          "q": "What permissions does the webhook need?",
          "a": "CRM read access is enough for analytics. If you want the agent to create tasks and move deals, add CRM write and Tasks. The scope can always be narrowed, and the agent will ask for what is missing when it hits a wall."
        },
        {
          "q": "Do cloud and on-premise Bitrix24 both work?",
          "a": "Yes, the webhook mechanics are identical: a cloud portal on *.bitrix24.ru and a self-hosted box on your own domain both connect."
        },
        {
          "q": "Will the agent see deal changes right away?",
          "a": "Yes, the agent reads the REST API at the moment of the task. On top of that the connector accepts webhooks about deal creation and changes, which you can hang automatic reactions on."
        }
      ]
    }
  },
  {
    "key": "bitrix24_app",
    "name": "Bitrix24 CRM",
    "description": "Вход через портал Битрикс24 — сделки, задачи, чаты, диск и календарь без копирования вебхука",
    "category": "crm",
    "auth_flow": "popup_oauth",
    "offered_to_newcomers": false,
    "catalog_visibility": "never",
    "short_name": "Битрикс24",
    "variant_of": "bitrix24",
    "superseded_by": "bitrix24"
  },
  {
    "key": "bpmsoft",
    "name": "BPMSoft CRM",
    "description": "CRM-система — контакты, контрагенты, лиды, продажи, бизнес-процессы (OData 4)",
    "category": "crm",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "short_name": "BPMSoft",
    "seo": {
      "headline": "Разбирайте этапы продаж BPMSoft прямо по данным OData",
      "scenarios": [
        {
          "title": "Разбор этапов продаж",
          "desc": "Агент пройдёт по объектам Opportunity, посчитает суммы и вероятности по этапам и покажет, где сделки стоят дольше обычного."
        },
        {
          "title": "Чистка справочников",
          "desc": "Агент найдёт дубли контактов и контрагентов по телефону и почте и соберёт карточки, в которых не заполнены поля для связи."
        },
        {
          "title": "Счета и просроченная оплата",
          "desc": "Агент сверит суммы счетов с проведёнными оплатами по статусу платежа и покажет просроченную дебиторку в разрезе контрагентов."
        },
        {
          "title": "Дискавери схемы OData",
          "desc": "Агент прочитает $metadata и покажет, какие поля и связи есть у ваших сущностей, включая добавленные при внедрении."
        },
        {
          "title": "Откуда приходят лиды",
          "desc": "Агент сгруппирует лиды по источнику и стадии квалификации и покажет, какие каналы доводят до продажи, а какие оседают в необработанных."
        },
        {
          "title": "Хвосты в обращениях",
          "desc": "Агент соберёт открытые обращения вместе с активностями по ним и покажет, где ответственный не отмечался дольше недели, а срок ответа уже вышел."
        }
      ],
      "how_it_works": [
        "Агент работает с BPMSoft по OData 4: запросы уходят на адрес вашего сервера в раздел /0/odata, откуда читаются контакты, контрагенты, лиды, продажи, активности, счета, заказы, обращения, продукты и документы. На этих данных считаются суммы и вероятности по этапам продаж, сделки, стоящие дольше обычного, дубли в справочниках по телефону и почте и просроченная дебиторка в разрезе контрагентов.",
        "Первым делом агент читает $metadata и разбирается в схеме именно вашего внедрения: набор сущностей и полей в BPMSoft дописывается под заказчика, и колонки, появившиеся при внедрении, для отчёта нередко важнее типовых. Оттуда же берутся связи: ссылочные поля приходят идентификаторами, и без разворачивания связи вместо названия контрагента в таблице останется GUID. Ответ сервера ограничен 20 000 строк, поэтому большие выборки агент забирает постранично.",
        "По умолчанию агент работает на чтение: считает, сверяет, показывает. Запись он умеет — создать и обновить запись, запустить бизнес-процесс по имени схемы, — но делает это по вашему запросу и проговаривая, что именно изменится. Запуск процесса опаснее обычной правки: за ним тянутся уведомления, задачи и переходы по этапам, поэтому схему и объект, к которому она применяется, агент называет до старта, а не после.",
        "Границы агента — это права пользователя интеграции: сущность, закрытая ролью, не появится ни в одном отчёте, и агент назовёт причину, а не покажет пустую таблицу. Отбор и сортировку он отдаёт серверу параметрами $filter, $orderby и $select, чтобы не тянуть лишние колонки, а даты приводит к формату OData — иначе отфильтруется не тот период. Частоту обращений держит умеренной: постраничная выборка идёт с паузами, а не занимает сервер целиком."
      ],
      "requirements": [
        "Права администратора в кабинете BPMSoft",
        "Свободная лицензия для нового пользователя",
        "Сервер доступен извне, а не только из внутренней сети"
      ],
      "faq": [
        {
          "q": "Как подключить BPMSoft CRM?",
          "a": "Тремя полями: адрес сервера из адресной строки кабинета до первого слэша, логин и пароль отдельного пользователя. Пользователю нужна лицензия на вкладке «Лицензии» и операция «Доступ к OData» в разделе «Права доступа на операции»."
        },
        {
          "q": "Что агент видит в BPMSoft CRM?",
          "a": "Сущности OData 4: контакты, контрагентов, лиды, продажи, активности, счета, заказы, обращения, продукты и документы — в объёме прав пользователя интеграции."
        },
        {
          "q": "Пишет ли агент в BPMSoft CRM?",
          "a": "Может: создавать и обновлять записи и запускать бизнес-процесс по имени схемы. По умолчанию работает на чтение и аналитику, запись — по вашему запросу."
        },
        {
          "q": "Что с коробочным сервером?",
          "a": "Адрес должен быть доступен извне: сервер во внутренней сети без внешнего доступа коннектор не увидит. Ответ ограничен 20 000 строк, дальше идёт постраничная выборка."
        }
      ]
    },
    "seo_en": {
      "headline": "Break down BPMSoft sales stages straight from OData",
      "scenarios": [
        {
          "title": "Sales stage breakdown",
          "desc": "The agent walks the Opportunity objects, totals amounts and probabilities by stage and shows where deals sit longer than usual."
        },
        {
          "title": "Clean up the directories",
          "desc": "The agent finds duplicate contacts and accounts by phone and email and collects the cards where contact fields are left empty."
        },
        {
          "title": "Invoices and overdue payments",
          "desc": "The agent matches invoice amounts with recorded payments by payment status and shows overdue receivables per account."
        },
        {
          "title": "OData schema discovery",
          "desc": "The agent reads $metadata and shows which fields and relations your entities have, including the ones added during implementation."
        },
        {
          "title": "Where the leads come from",
          "desc": "The agent groups leads by source and qualification stage and shows which channels reach a sale and which ones pile up unprocessed."
        },
        {
          "title": "Loose ends in cases",
          "desc": "The agent pulls open cases together with their activities and shows where the owner logged nothing for over a week and the response window has passed."
        }
      ],
      "how_it_works": [
        "The agent works with BPMSoft over OData 4: requests go to your server address into the /0/odata section, which is where contacts, accounts, leads, opportunities, activities, invoices, orders, cases, products and documents are read from. On that data it totals amounts and probabilities by sales stage, deals sitting longer than usual, duplicates in the directories by phone and email and overdue receivables per account.",
        "The first thing the agent reads is $metadata, which spells out the schema of your particular implementation: the set of entities and fields in BPMSoft is extended per customer, and the columns added during implementation often matter more for a report than the standard ones. Relations come from there too: reference fields arrive as identifiers, and without expanding the relation a table shows a GUID where the account name should be. A server response is capped at 20 000 rows, so large selections are fetched page by page.",
        "By default the agent works read-only: it counts, reconciles and reports. It can write — create and update a record, run a business process by schema name — but it does that on your request and while spelling out exactly what will change. Running a process is riskier than an ordinary edit: notifications, tasks and stage transitions follow it, so the agent names the schema and the object it applies to before the start, not after.",
        "The agent's boundaries are the permissions of the integration user: an entity closed by a role shows up in no report at all, and the agent names that cause instead of putting an empty table on screen. Filtering and sorting are handed to the server through $filter, $orderby and $select so that spare columns are never pulled, and dates are cast into the OData format, otherwise the period filters to the wrong range. The request rate stays moderate: paged selections run with pauses instead of taking the server over."
      ],
      "requirements": [
        "Administrator rights in the BPMSoft workspace",
        "A spare licence for the new user",
        "A server reachable from outside, not only inside your network"
      ],
      "faq": [
        {
          "q": "How do I connect BPMSoft CRM?",
          "a": "With three fields: the server address from the account URL up to the first slash, plus the login and password of a dedicated user. That user needs a licence on the Licences tab and the Access to OData operation under operation permissions."
        },
        {
          "q": "What does the agent see in BPMSoft CRM?",
          "a": "OData 4 entities: contacts, accounts, leads, opportunities, activities, invoices, orders, cases, products and documents, within the permissions of the integration user."
        },
        {
          "q": "Does the agent write to BPMSoft CRM?",
          "a": "It can: create and update records and run a business process by schema name. By default it works read-only for analytics, and writes happen on your request."
        },
        {
          "q": "What about an on-premise server?",
          "a": "The address has to be reachable from outside: a server on an internal network with no external access is invisible to the connector. A response is capped at 20 000 rows, beyond which it pages through."
        }
      ]
    }
  },
  {
    "key": "brand_analytics",
    "name": "Brand Analytics",
    "description": "Мониторинг упоминаний в соцсетях и СМИ, анализ тональности, топики, авторы",
    "category": "analytics",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Собирайте упоминания бренда за любой период прямо в чате",
      "scenarios": [
        {
          "title": "Упоминания бренда за период",
          "desc": "Агент соберёт упоминания по теме мониторинга за выбранные даты, отфильтрует их по площадкам и покажет сообщения с наибольшим охватом."
        },
        {
          "title": "Тональность и всплески негатива",
          "desc": "Агент разложит сообщения по тональности, построит динамику по дням и покажет, в какой день и на какой площадке негатив пошёл вверх."
        },
        {
          "title": "Топ авторов и площадок",
          "desc": "Агент соберёт авторов с наибольшим охватом, разложит упоминания по типам источников и регионам и покажет, где о вас говорят чаще всего."
        },
        {
          "title": "Аудит тем мониторинга",
          "desc": "Агент сверит темы кабинета между собой, найдёт дубли по объекту и поисковым запросам и покажет, какие темы простаивают и тратят лимит."
        },
        {
          "title": "Мы и соседи по рынку",
          "desc": "Агент возьмёт две темы мониторинга сразу, сравнит объём упоминаний, тональность и площадки и покажет, где о вас говорят иначе, чем о конкуренте."
        },
        {
          "title": "Утренняя сводка упоминаний",
          "desc": "Агент по расписанию соберёт вчерашние упоминания, сравнит объём и тональность с предыдущими днями и пришлёт короткую сводку с самыми заметными сообщениями."
        }
      ],
      "how_it_works": [
        "Агент работает со «Статистическим API» Brand Analytics по токену из кабинета: сначала читает список тем мониторинга, затем по выбранной теме собирает сами упоминания с текстами, статистику по дням, распределение тональности, разрез по типам источников, географию и топ авторов по охвату. Из этого складываются динамика негатива по дням и площадкам и картина того, где о бренде говорят чаще всего.",
        "Ключевая особенность сервиса — всё привязано к темам. Упоминания не существуют сами по себе: их границы задаёт поисковый запрос темы, заведённый в кабинете, и агент видит ровно то, что в этот запрос попало. Поэтому он отдельно сверяет темы между собой: находит дубли по объекту и формулировке запроса и показывает темы, которые простаивают, но продолжают тратить лимит тарифа.",
        "На запись агент здесь не ходит вовсе — «Статистический API» используется только на чтение. Он не создаёт и не правит темы, поисковые запросы и фильтры: если выборка собирает лишнее или упускает нужное, агент называет конкретную тему и то, что в её запросе стоит поменять, а правку вы делаете в кабинете сами. Всё остальное — сбор, разбор и сведение упоминаний — остаётся на нём.",
        "Доступ даёт один API-токен из кабинета: он подставляется в каждый запрос, а объём выдачи упирается в лимит тарифа — счётчик упоминаний общий на все темы. Агент экономит его: забирает период порциями, не перезапрашивает уже разобранное и сам выдерживает частоту обращений. Если по теме за период упоминаний нет, он скажет об этом прямо, а не выдаст пустую таблицу за отсутствие негатива."
      ],
      "requirements": [
        "Тариф «Расширенный» или выше в кабинете Brand Analytics.",
        "Роль «Администратор» или «Супер Администратор» в кабинете."
      ],
      "faq": [
        {
          "q": "Как подключить Brand Analytics?",
          "a": "API-токеном: в кабинете откройте «Настройки» → «Интеграции», подключите «Статистический API», отметьте «Интеграция активна» и скопируйте ключ в поле подключения. Пункт доступен роли «Администратор» на тарифе «Расширенный» и выше."
        },
        {
          "q": "Что агент видит в Brand Analytics?",
          "a": "Темы мониторинга и их настройки, отдельные упоминания с текстами, статистику по дням, распределение тональности, разрез по источникам, географию и топ авторов — по темам, заведённым в кабинете."
        },
        {
          "q": "Пишет ли агент в Brand Analytics?",
          "a": "Нет. Статистический API используется на чтение: агент собирает и разбирает упоминания, но не создаёт и не меняет темы мониторинга, запросы и фильтры."
        },
        {
          "q": "Почему список тем приходит пустым?",
          "a": "Либо в кабинете ещё нет ни одной темы, либо ключ выдан, но переключатель «Интеграция активна» выключен. Данные отдаются только в разрезе тем, поэтому без них подключение выглядит нерабочим."
        }
      ]
    },
    "seo_en": {
      "headline": "Collect brand mentions for any period right in the chat",
      "scenarios": [
        {
          "title": "Brand mentions for any period",
          "desc": "The agent pulls mentions for a monitoring topic across the dates you pick, filters them by platform and surfaces the posts with the widest reach."
        },
        {
          "title": "Sentiment and negativity spikes",
          "desc": "The agent breaks messages down by sentiment, charts the daily dynamics and shows exactly which day and which platform the negativity climbed on."
        },
        {
          "title": "Top authors and platforms",
          "desc": "The agent collects the authors with the widest reach, splits mentions by source type and region and shows where people talk about you most."
        },
        {
          "title": "Monitoring topic audit",
          "desc": "The agent compares the topics in your account, finds duplicates by object and search query and shows which topics sit idle while burning your quota."
        },
        {
          "title": "You against a competitor",
          "desc": "The agent takes two monitoring topics at once, compares mention volume, sentiment and platforms and shows where people talk about you differently than about your rival."
        },
        {
          "title": "Morning mentions summary",
          "desc": "On a schedule, the agent gathers yesterday's mentions, compares volume and sentiment against the previous days and sends a short digest with the loudest posts."
        }
      ],
      "how_it_works": [
        "The agent works with the Brand Analytics Statistical API using the token from your account: first it reads the list of monitoring topics, then for the chosen topic it collects the mentions themselves with full text, daily statistics, sentiment distribution, a breakdown by source type, geography and the top authors by reach. Out of that come the daily negativity dynamics by platform and the picture of where the brand is talked about most.",
        "The key trait of the service is that everything is tied to topics. Mentions do not exist on their own: their boundaries are set by the topic search query configured in the account, and the agent sees exactly what that query captured. So it separately compares topics against each other: it finds duplicates by object and by query wording and shows the topics that sit idle while still burning the plan quota.",
        "The agent never writes here — the Statistical API is used read-only. It neither creates nor edits topics, search queries or filters: if a selection picks up noise or misses what you need, the agent names the specific topic and what should change in its query, and you make the edit in the account yourself. Everything else — collecting, analysing and consolidating mentions — stays on the agent.",
        "Access comes from a single API token issued in the account: it is attached to every request, while the volume you can pull is capped by the plan quota, which is shared across all topics. The agent spends it carefully — it fetches the period in portions, does not re-request what it has already parsed and holds the request rate itself. If a topic has no mentions for the period, it says so directly instead of passing an empty table off as an absence of negativity."
      ],
      "requirements": [
        "The Expanded plan or higher in the Brand Analytics account.",
        "The Administrator or Super Administrator role in the account."
      ],
      "faq": [
        {
          "q": "How do I connect Brand Analytics?",
          "a": "With an API token: in your account open Settings, then Integrations, enable the Statistical API, tick Integration active and copy the key into the connection field. The menu item is available to the Administrator role on the Extended plan and above."
        },
        {
          "q": "What can the agent see in Brand Analytics?",
          "a": "Monitoring topics and their settings, individual mentions with full text, daily statistics, sentiment distribution, a breakdown by source, geography and top authors — for the topics set up in your account."
        },
        {
          "q": "Does the agent write to Brand Analytics?",
          "a": "No. The Statistical API is used read-only: the agent collects and analyses mentions, but never creates or changes monitoring topics, queries or filters."
        },
        {
          "q": "Why does the topic list come back empty?",
          "a": "Either there are no topics in the account yet, or the key was issued while the Integration active toggle stayed off. Data is only served per topic, so without topics the connection looks broken."
        }
      ]
    }
  },
  {
    "key": "bybit",
    "name": "ByBit",
    "description": "Криптобиржа — тикеры, баланс, ордера, позиции, свечи",
    "category": "banks",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Следите за балансом и позициями Bybit прямо в чате",
      "scenarios": [
        {
          "title": "Баланс и открытые позиции",
          "desc": "Агент покажет баланс кошелька и все открытые позиции с текущим PnL одним ответом, без переключения вкладок биржи."
        },
        {
          "title": "Сделки и закрытый PnL",
          "desc": "Агент соберёт исполненные сделки за период и разложит закрытый результат по каждому символу и стороне сделки."
        },
        {
          "title": "Котировки и свечи",
          "desc": "Агент снимет тикеры и свечи по нужным парам и посчитает, как двигалась цена за выбранный вами период."
        },
        {
          "title": "Сводка по расписанию",
          "desc": "Агент пришлёт сводку по расписанию: цены нужных пар, изменение баланса и заявки, которые так и висят неисполненными."
        },
        {
          "title": "Спот и фьючерсы порознь",
          "desc": "Агент запросит спот, бессрочные контракты и опционы отдельными категориями и покажет баланс и позиции по каждой, не сваливая разные контуры в одну сумму."
        },
        {
          "title": "Проверка ключа перед отчётом",
          "desc": "Агент сделает пробный запрос по тикерам и скажет, жив ли ключ: истёк по 90-дневному сроку, отозван или подпись отвергнута — вместо пустой таблицы будет причина."
        }
      ],
      "how_it_works": [
        "Агент работает с единым API Bybit пятой версии: рыночные тикеры и свечи по нужным парам, баланс кошелька, открытые позиции с текущим PnL, активные ордера и история исполненных сделок. Из этого он считает закрытый результат за период с разбивкой по символу и стороне сделки, изменение баланса между датами и список заявок, которые так и висят неисполненными, — всё по аккаунту, чей ключ подключён.",
        "У Bybit почти каждый запрос требует указать категорию рынка: спот, бессрочные контракты и опционы — это разные учётные контуры, и позиция в одном не видна в другом. Агент запрашивает категории отдельно и не смешивает их в одной сумме. Ещё одна тонкость: PnL по открытой позиции — это переоценка по текущей цене, она меняется каждую секунду, поэтому в отчётах агент отделяет её от закрытого результата по фактическим сделкам.",
        "Читать здесь важнее, чем писать. Баланс, позиции, ордера, история и сводки по расписанию собираются одним только чтением: коннектор не переводит средства и не запрашивает прав на вывод. Торговые права появляются, только если вы сами выдали их ключу на стороне биржи; без них агент считает и показывает, но ни одной заявки не выставит и не отменит, а на попытку ответит отказом биржи, а не молчанием.",
        "Подключение идёт парой API Key и Secret: каждый запрос подписывается HMAC-SHA256 вместе с меткой времени, поэтому часы на стороне агента синхронизированы с биржей — иначе подпись отвергается как просроченная. Историю сделок Bybit отдаёт окнами по датам и страницами по курсору, так что длинный период агент обходит частями и складывает результат сам. Частоту обращений он выдерживает сам, а об истёкшем или отозванном ключе говорит прямо, а не показывает пустую таблицу."
      ],
      "requirements": [
        "Аккаунт Bybit, на котором лежат средства",
        "Постоянный IP-адрес, если ключ не должен истекать через 90 дней"
      ],
      "faq": [
        {
          "q": "Как подключить ByBit?",
          "a": "Ключом API: в кабинете Bybit откройте «API Management» → «Create New Key» и выберите тип «System-generated API Keys» — RSA-ключ не подойдёт. Вставьте API Key и Secret, адрес API можно оставить по умолчанию. Уровня «Read-Only» хватает для баланса, позиций и истории."
        },
        {
          "q": "Что агент видит на бирже?",
          "a": "Тикеры и свечи рынка, баланс кошелька, открытые позиции, ордера и историю исполненных сделок того аккаунта, чей ключ подключён."
        },
        {
          "q": "Может ли агент торговать?",
          "a": "По умолчанию нет: для всей аналитики достаточно ключа уровня «Read-Only», а права на вывод средств коннектору не нужны вовсе. Торговые права выдаются только вашим решением на стороне биржи."
        },
        {
          "q": "Почему ключ перестал работать?",
          "a": "Без белого списка IP ключ Bybit истекает через 90 дней: после этого API отвечает отказом, и ключ нужно перевыпустить в разделе «API Management»."
        }
      ]
    },
    "seo_en": {
      "headline": "Track your Bybit balance and open positions right in chat",
      "scenarios": [
        {
          "title": "Balance and open positions",
          "desc": "The agent shows your wallet balance and every open position with its current PnL in a single answer, without you flipping between exchange tabs."
        },
        {
          "title": "Trades and realised PnL",
          "desc": "The agent collects executed trades for a period and breaks the realised result down by symbol and by trade side."
        },
        {
          "title": "Tickers and candles",
          "desc": "The agent pulls tickers and candles for the pairs you care about and works out how the price moved over the period you choose."
        },
        {
          "title": "Scheduled summary",
          "desc": "The agent sends a summary on schedule: prices for your pairs, the change in balance and the orders still sitting unfilled."
        },
        {
          "title": "Spot and futures kept apart",
          "desc": "The agent queries spot, perpetuals and options as separate categories and shows balance and positions for each, never rolling different ledgers into one total."
        },
        {
          "title": "Check the key before a report",
          "desc": "The agent runs a test ticker request and tells you whether the key is alive: expired after 90 days, revoked or a rejected signature — a reason, not an empty table."
        }
      ],
      "how_it_works": [
        "The agent works with the unified v5 Bybit API: market tickers and candles for the pairs you care about, wallet balance, open positions with their current PnL, active orders and the executed trade history. From that it calculates the realised result for a period broken down by symbol and trade side, the change in balance between dates and the list of orders still sitting unfilled — all for the account the connected key belongs to.",
        "In Bybit almost every request has to name a market category: spot, perpetual contracts and options are separate ledgers, and a position in one is invisible in another. The agent queries the categories separately and never merges them into a single total. One more subtlety: the PnL on an open position is a mark-to-market figure that moves every second, so in reports the agent keeps it apart from the realised result of actual trades.",
        "Reading matters more here than writing. Balances, positions, orders, history and scheduled summaries are assembled by reading alone: the connector moves no funds and asks for no withdrawal rights. Trading rights appear only if you granted them to the key on the exchange side; without them the agent counts and shows, but places and cancels nothing, and an attempt comes back as a refusal from the exchange rather than silence.",
        "The connection runs on an API Key and Secret pair: every request is signed with HMAC-SHA256 together with a timestamp, so the agent keeps its clock in step with the exchange — otherwise the signature is rejected as stale. Bybit hands over trade history in date windows and cursor pages, so a long period is walked in parts and added up by the agent itself. It holds the request rate on its own, and an expired or revoked key is reported directly instead of an empty table."
      ],
      "requirements": [
        "A Bybit account that actually holds the funds",
        "A static IP address if the key must not expire after 90 days"
      ],
      "faq": [
        {
          "q": "How do I connect ByBit?",
          "a": "With an API key: in your Bybit account open API Management, then Create New Key, and pick the System-generated API Keys type — an RSA key will not work. Paste the API Key and Secret; the API address can stay at its default. Read-Only level is enough for balance, positions and history."
        },
        {
          "q": "What can the agent see on the exchange?",
          "a": "Market tickers and candles, wallet balance, open positions, orders and the executed trade history of whichever account the key belongs to."
        },
        {
          "q": "Can the agent trade?",
          "a": "Not by default: a Read-Only key covers all the analytics, and the connector never needs withdrawal rights at all. Trading permissions are granted only by your own decision on the exchange side."
        },
        {
          "q": "Why did my key stop working?",
          "a": "Without an IP allowlist a Bybit key expires after 90 days: the API starts refusing requests and the key has to be reissued under API Management."
        }
      ]
    }
  },
  {
    "key": "cdek",
    "name": "СДЭК",
    "description": "Доставка — заказы, расчёт тарифов, отслеживание, ПВЗ, вызов курьера",
    "category": "logistics",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "ИИ для логистики: тарифы и сроки доставки СДЭК в чате",
      "scenarios": [
        {
          "title": "Расчёт тарифа и срока",
          "desc": "Агент рассчитает стоимость и срок доставки по нужному направлению, весу и габаритам и подберёт ближайший к клиенту пункт выдачи."
        },
        {
          "title": "Оформление отправки",
          "desc": "Агент оформит заказ на доставку, вызовет курьера и вернёт трек-номер, не открывая личный кабинет lk.cdek.ru вручную."
        },
        {
          "title": "Контроль посылок в пути",
          "desc": "Агент поймает смену статуса каждой посылки по вебхуку и пришлёт сводку о тех, что застряли в пути дольше обычного."
        },
        {
          "title": "Подбор пункта выдачи",
          "desc": "Агент подберёт ПВЗ по городу и адресу клиента с учётом габаритов посылки и режима работы пункта."
        },
        {
          "title": "Накладные по готовности",
          "desc": "Агент дождётся события о готовности печатной формы и фото по заказу, заберёт их и покажет вместе с посылкой — искать в личном кабинете вручную не придётся."
        },
        {
          "title": "Города по справочнику",
          "desc": "Агент сверит города и адреса из заявок со справочником регионов и городов СДЭК и покажет те, на которых оформление заказа не сойдётся."
        }
      ],
      "how_it_works": [
        "Агент ходит в API СДЭК на api.cdek.ru: считает стоимость и срок доставки по направлению, весу и габаритам, поднимает справочники регионов, городов и пунктов выдачи, читает заказы вместе с историей их статусов и забирает печатные формы и фото по готовности. Подбор ПВЗ он делает не по одному городу, а с оглядкой на габариты посылки и режим работы пункта — иначе клиент приедет к закрытой двери.",
        "Статусы в доставке приходят не по расписанию, и опрашивать заказ по кругу бессмысленно, поэтому СДЭК шлёт события сам: смену статуса заказа, готовность печатной формы и готовность фото. Агент ловит их вебхуком, привязывает к номеру заказа СДЭК и по накопленной истории видит, какая посылка стоит на одном статусе дольше обычного — то есть застряла, а не просто едет.",
        "На запись агент умеет ровно две вещи: оформить заказ на доставку и вызвать курьера. Обе он показывает вам до отправки — направление, габариты, получателя, дату вызова — и делает шаг только после подтверждения, потому что ошибка здесь стоит реального рейса и денег. После создания заказа агент возвращает трек-номер и дальше ведёт посылку уже на чтение.",
        "Токен коннектор получает и обновляет сам, поэтому ключи вводятся один раз и дальше о них можно забыть. Частота запросов держится в пределах пяти в секунду: массовый расчёт тарифов агент разбивает на пачки, а города берёт из справочника СДЭК, а не из текста заявки, иначе адрес не сойдётся. Про данные, которых в ответе нет, он говорит прямо, вместо пустой таблицы."
      ],
      "requirements": [
        "Подтверждение с вашей стороны на создание заказа и вызов курьера",
        "Тестовый контур api.edu.cdek.ru, если нужно проверить без реальной отправки"
      ],
      "faq": [
        {
          "q": "Как подключить СДЭК?",
          "a": "Парой ключей из личного кабинета lk.cdek.ru: раздел «Интеграция» → «Создать новый ключ». Account — это client_id, Secure password — client_secret, и он показывается один раз при создании. Доступ к API открывается только по договору на юрлицо или ИП."
        },
        {
          "q": "Что агент видит в СДЭК?",
          "a": "Заказы и историю их статусов, расчёт тарифов, справочники регионов, городов и пунктов выдачи, а также печатные формы и фото, приходящие по вебхуку."
        },
        {
          "q": "Пишет ли агент в СДЭК?",
          "a": "Да: агент может создать заказ на доставку и вызвать курьера, и такие действия он подтверждает с вами перед отправкой. Остальная работа — чтение статусов и расчёты."
        },
        {
          "q": "Есть ли тестовый контур?",
          "a": "Да, кроме боевого api.cdek.ru коннектор знает тестовый адрес api.edu.cdek.ru — заказы, созданные там, в реальную доставку не уходят."
        }
      ]
    },
    "seo_en": {
      "headline": "Calculate CDEK delivery prices and transit times in chat",
      "scenarios": [
        {
          "title": "Delivery quote and transit time",
          "desc": "The agent calculates the cost and delivery time for a given route, weight and dimensions, and picks the pickup point closest to your customer."
        },
        {
          "title": "Creating a shipment",
          "desc": "The agent creates the delivery order, books a courier and returns the tracking number, with no manual trips to the lk.cdek.ru account."
        },
        {
          "title": "Parcels in transit under control",
          "desc": "The agent catches every parcel status change over a webhook and sends a summary of the ones stuck in transit longer than usual."
        },
        {
          "title": "Picking a pickup point",
          "desc": "The agent finds a pickup point by the customer city and address, taking parcel dimensions and the point opening hours into account."
        },
        {
          "title": "Waybills once they are ready",
          "desc": "The agent waits for the print form and photo ready events on an order, collects both and shows them next to the parcel — no manual hunting in the account."
        },
        {
          "title": "Cities from the reference list",
          "desc": "The agent checks the cities and addresses from your requests against the CDEK region and city lists and flags the ones order creation will not match."
        }
      ],
      "how_it_works": [
        "The agent calls the CDEK API at api.cdek.ru: it calculates the cost and transit time for a route, weight and dimensions, pulls up the reference lists of regions, cities and pickup points, reads orders along with their status history and collects print forms and photos once they are ready. A pickup point is chosen not by city alone but with an eye on parcel dimensions and the opening hours of the point — otherwise the customer arrives at a closed door.",
        "Delivery statuses do not arrive on a schedule and polling an order in circles is pointless, so CDEK sends the events itself: an order status change, a print form ready and a photo ready. The agent catches them over a webhook, ties them to the CDEK order number and, from the accumulated history, sees which parcel has been sitting on one status longer than usual — that is, stuck rather than simply in transit.",
        "On the write side the agent does exactly two things: create a delivery order and book a courier. It shows both to you before sending — route, dimensions, recipient, pickup date — and takes the step only after confirmation, because a mistake here costs a real trip and real money. Once the order is created the agent returns the tracking number and follows the parcel read-only from there.",
        "The connector obtains and refreshes the token on its own, so the keys are entered once and can be forgotten afterwards. The request rate is held within five per second: a bulk tariff calculation is split into batches, and cities are taken from the CDEK reference list rather than from the text of a request, or the address will not match. About data missing from a response the agent says so directly instead of showing an empty table."
      ],
      "requirements": [
        "Your confirmation before an order is created or a courier is booked",
        "The api.edu.cdek.ru sandbox if you want to test without real shipments"
      ],
      "faq": [
        {
          "q": "How do I connect CDEK?",
          "a": "With a key pair from the lk.cdek.ru account: go to the Integration section and choose Create new key. Account is your client_id, Secure password is your client_secret, and it is shown only once at creation. API access is granted only under a contract with a company or sole trader."
        },
        {
          "q": "What can the agent see in CDEK?",
          "a": "Orders and their status history, tariff calculations, reference lists of regions, cities and pickup points, plus the print forms and photos delivered by webhook."
        },
        {
          "q": "Does the agent write to CDEK?",
          "a": "Yes: the agent can create a delivery order and book a courier, and it confirms such actions with you before sending them. Everything else is reading statuses and running calculations."
        },
        {
          "q": "Is there a sandbox environment?",
          "a": "Yes — alongside the production api.cdek.ru the connector knows the test address api.edu.cdek.ru, and orders created there never enter real delivery."
        }
      ]
    }
  },
  {
    "key": "chat2desk",
    "name": "Chat2Desk",
    "description": "Омниканальная платформа — сообщения, диалоги, каналы (WhatsApp, Telegram и др.)",
    "category": "messengers",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Находите диалоги без ответа во всех каналах Chat2Desk",
      "scenarios": [
        {
          "title": "Диалоги без ответа",
          "desc": "Агент пройдёт по открытым диалогам всех подключённых каналов и покажет, какие обращения висят без ответа дольше остальных."
        },
        {
          "title": "История переписки с клиентом",
          "desc": "Агент найдёт клиента по номеру телефона, поднимет историю диалога и перескажет, о чём договорились, не открывая чат вручную."
        },
        {
          "title": "Ответ и маршрутизация диалога",
          "desc": "Агент отправит клиенту сообщение в его канал, переведёт диалог на нужного оператора или закроет его, когда вопрос решён."
        },
        {
          "title": "Сводка обращений за сутки",
          "desc": "Агент посчитает, сколько обращений пришло за сутки и по каким каналам — WhatsApp, Telegram и остальным — и сколько диалогов осталось открытыми."
        },
        {
          "title": "Кто из операторов перегружен",
          "desc": "Агент разложит открытые и закрытые диалоги по операторам и покажет, у кого очередь длиннее и чьих ответов клиенты ждут дольше всего."
        },
        {
          "title": "О чём пишут чаще всего",
          "desc": "Агент соберёт теги диалогов за период и покажет, какие темы обращений выросли, а какие сошли на нет — отдельно по каждому подключённому каналу."
        }
      ],
      "how_it_works": [
        "Агент работает с API Chat2Desk по адресу api.chat2desk.com/v1: читает карточки клиентов, открытые диалоги и историю переписки, список подключённых каналов, операторов и теги. На этих данных он считает, сколько обращений пришло за сутки и по каким каналам — WhatsApp, Telegram и остальным, — сколько диалогов осталось открытыми и какие из них ждут ответа дольше всех.",
        "Платформа омниканальная, и это меняет разбор: клиент здесь один, а переписка с ним может тянуться сразу в нескольких каналах. Агент находит клиента по номеру телефона и собирает историю целиком, а не по одному чату. «Без ответа» он определяет не по пометке, а по последнему сообщению в диалоге и времени его отправки: диалог остаётся открытым, пока его не закрыли, поэтому одного статуса для отчёта недостаточно.",
        "На запись агент отправляет клиенту сообщение, заводит карточку нового клиента, переводит диалог на другого оператора и закрывает его, когда вопрос решён. Канал он не выбирает произвольно — ответ уходит туда, откуда клиент написал. По умолчанию агент работает на чтение и разбор, а перед отправкой показывает получателя и текст, чтобы сообщение клиенту не ушло без вашего согласия.",
        "Токен аккаунта открывает агенту все подключённые каналы сразу, а не один мессенджер, поэтому границу выборки задаёт не ключ, а фильтр по каналу и периоду. Клиентов и сообщения API отдаёт страницами, и разбор недели на большой базе — это десятки запросов, а лимит здесь один на весь аккаунт: 100 000 вызовов в месяц на всех тарифах. Поэтому агент выдерживает частоту и читает выборкой под задачу, а если данных за период нет, говорит об этом прямо, а не показывает пустую таблицу."
      ],
      "requirements": [
        "Права администратора аккаунта Chat2Desk",
        "Общий API-токен аккаунта, а не токен отдельного канала",
        "Запас в лимите 100 000 запросов к API в месяц"
      ],
      "faq": [
        {
          "q": "Как подключить Chat2Desk?",
          "a": "API-токеном аккаунта: войдите администратором, откройте «Настройки» → «API и скрипты» → «API», нажмите «Показать» и скопируйте строку. Токен отдельного канала не подойдёт — нужен общий токен аккаунта."
        },
        {
          "q": "Что агент видит в Chat2Desk?",
          "a": "Подключённые каналы, карточки клиентов, открытые диалоги и историю переписки, операторов и теги — в объёме, который открывает API-токен аккаунта."
        },
        {
          "q": "Пишет ли агент в Chat2Desk?",
          "a": "Может: отправить сообщение клиенту, завести карточку клиента, перевести диалог на другого оператора и закрыть диалог. По умолчанию работает на чтение и разбор."
        },
        {
          "q": "Есть ли лимит на запросы к API?",
          "a": "Во все тарифы входит 100 000 вызовов в месяц, остаток показан на той же странице, где лежит токен. Генерация нового токена мгновенно гасит прежний."
        }
      ]
    },
    "seo_en": {
      "headline": "Find dialogs left without a reply across all Chat2Desk channels",
      "scenarios": [
        {
          "title": "Dialogs left without a reply",
          "desc": "The agent walks through the open dialogs of every connected channel and shows which requests have been waiting for an answer the longest."
        },
        {
          "title": "Chat history with a customer",
          "desc": "The agent finds the customer by phone number, pulls up the dialog history and retells what was agreed, without you opening the chat by hand."
        },
        {
          "title": "Replying and routing a dialog",
          "desc": "The agent sends the customer a message in their own channel, hands the dialog over to the right operator or closes it once the question is settled."
        },
        {
          "title": "Daily request summary",
          "desc": "The agent counts how many requests arrived in the last 24 hours and through which channels — WhatsApp, Telegram and the rest — and how many dialogs are still open."
        },
        {
          "title": "Which operators are swamped",
          "desc": "The agent splits open and closed dialogs by operator and shows whose queue runs longer and whose replies customers have been waiting for the longest."
        },
        {
          "title": "What customers write about most",
          "desc": "The agent gathers dialog tags for the period and shows which request topics grew and which faded away — separately for every connected channel."
        }
      ],
      "how_it_works": [
        "The agent works with the Chat2Desk API at api.chat2desk.com/v1: it reads customer cards, open dialogs and chat history, the list of connected channels, operators and tags. On that data it counts how many requests arrived in the last 24 hours and through which channels — WhatsApp, Telegram and the rest — how many dialogs are still open and which of them have been waiting for an answer the longest.",
        "The platform is omnichannel, and that changes the analysis: the customer here is a single person, while the correspondence with them may run through several channels at once. The agent finds the customer by phone number and assembles the whole history rather than one chat at a time. «Left without a reply» is decided not by a label but by the last message in the dialog and the time it was sent: a dialog stays open until someone closes it, so a status alone is not enough for a report.",
        "On the write side the agent sends the customer a message, creates a card for a new customer, hands the dialog over to another operator and closes it once the question is settled. It does not pick the channel freely — the reply goes back to wherever the customer wrote from. By default the agent works read-only and just analyses, and before sending it shows the recipient and the text, so no message reaches a customer without your consent.",
        "The account token opens every connected channel to the agent at once rather than a single messenger, so the boundary of a sample is set by the channel and period filter, not by the key. Customers and messages come back in pages, and a week of analysis on a large base is dozens of calls, while the limit is a single one for the whole account: 100,000 calls a month on every plan. So the agent holds the rate and reads a sample sized to the task, and when there is no data for the period it says so directly instead of showing an empty table."
      ],
      "requirements": [
        "Chat2Desk account administrator rights",
        "The account-wide API token, not a single channel token",
        "Room in the limit of 100,000 API requests a month"
      ],
      "faq": [
        {
          "q": "How do I connect Chat2Desk?",
          "a": "With the account API token: sign in as an administrator, open Settings, then API and scripts, then API, click Show and copy the string. A token for a single channel will not do — you need the shared account token."
        },
        {
          "q": "What can the agent see in Chat2Desk?",
          "a": "Connected channels, customer cards, open dialogs and chat history, operators and tags — as far as the account API token allows."
        },
        {
          "q": "Does the agent write to Chat2Desk?",
          "a": "It can: send a message to a customer, create a customer card, hand a dialog to another operator and close a dialog. By default it works read-only and just analyses."
        },
        {
          "q": "Is there a limit on API requests?",
          "a": "Every plan includes 100,000 calls a month, and the remaining balance is shown on the same page as the token. Generating a new token instantly kills the previous one."
        }
      ]
    }
  },
  {
    "key": "chestnyznak",
    "name": "Честный ЗНАК",
    "description": "Маркировка товаров — коды маркировки, документы, карточки товаров, остатки",
    "category": "docflow",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Проверяйте коды маркировки пачками, не открывая ГИС МТ",
      "scenarios": [
        {
          "title": "Проверка кодов маркировки пачкой",
          "desc": "Агент прогонит список кодов через True API и скажет, какие в обороте, какие выбыли, а какие ещё не введены в оборот."
        },
        {
          "title": "Зависшие документы оборота",
          "desc": "Агент соберёт документы отгрузки и приёмки за период и покажет, какие не обработаны системой маркировки или отклонены с ошибкой."
        },
        {
          "title": "Остатки маркированного товара",
          "desc": "Агент сверит балансы и складские остатки кодов по товарным группам и покажет, где данные разошлись с вашим учётом."
        },
        {
          "title": "Карточки товаров в национальном каталоге",
          "desc": "Агент проверит карточки по GTIN, найдёт неопубликованные и те, где не хватает обязательных атрибутов товарной группы."
        },
        {
          "title": "Выбытие через кассу",
          "desc": "Агент сверит коды с чеками ККТ и покажет, что уже выбыло через кассу, а что ещё числится в обороте — с поправкой на задержку передачи данных."
        },
        {
          "title": "Список под подписание УКЭП",
          "desc": "Агент соберёт зависшие и отклонённые документы в один список под подпись — останется подписать носителем, а не искать их по кабинету поштучно."
        }
      ],
      "how_it_works": [
        "Агент ходит в True API ГИС МТ на markirovka.crpt.ru: прогоняет коды маркировки пачками и снимает их статусы, читает список документов оборота, поднимает карточки товаров по GTIN из национального каталога и сверяет балансы со складскими остатками по товарным группам. Из этого он считает, какие коды в обороте, какие выбыли, а какие ещё не введены, и где ваш складской учёт разошёлся с данными системы маркировки.",
        "Приём документа и его обработка в ГИС МТ — разные события: система принимает отгрузку или приёмку сразу, а результат появляется позже, и часть документов оседает необработанной или отклонённой с ошибкой. Агент разделяет эти состояния и показывает не факт подачи, а фактическую судьбу документа. Со статусами кодов он осторожен по той же причине: выбытие фиксируется чеками ККТ и доходит до системы не мгновенно.",
        "На запись агент здесь почти не работает, и это свойство самой системы: подача документов в оборот подтверждается усиленной квалифицированной подписью, которую формирует ваш носитель, а не агент. Поэтому он собирает данные, находит расхождения и готовит списки под подписание — проверенные коды, зависшие и отклонённые документы, карточки без обязательных атрибутов товарной группы, — а подписать и отправить решаете вы.",
        "Коды агент проверяет пачками по несколько сотен в запросе: поштучный опрос упёрся бы в ограничение по частоте, а так ответ собирается в один список, где сразу видно, каких кодов система не знает вовсе. Когда срок действия токена выходит, запросы возвращают ошибку авторизации, и агент прямо скажет об этом вместо молчаливых повторов. Видит он ровно те товарные группы, что открыты вашей организации, а при отсутствии данных говорит об этом, а не показывает пустую таблицу."
      ],
      "requirements": [
        "Организация, зарегистрированная в системе маркировки ГИС МТ.",
        "УКЭП руководителя или сотрудника с доверенностью.",
        "Готовность обновлять токен: он живёт до 10 часов."
      ],
      "faq": [
        {
          "q": "Как подключить Честный ЗНАК?",
          "a": "Одним токеном из личного кабинета ГИС МТ: «Профиль» → вкладка «Данные участника» → блок «Участие в системе» → «Сгенерировать токен», действие подтверждается УКЭП. Скопируйте значение сразу — после обновления страницы поле пустеет."
        },
        {
          "q": "Как часто нужно обновлять токен?",
          "a": "Токен живёт до 10 часов, после чего запросы возвращают ошибку авторизации. Сгенерируйте его в кабинете заново и обновите в настройках подключения — агент прямо скажет, что срок истёк, а не будет молча повторять запросы."
        },
        {
          "q": "Что агент видит в Честном ЗНАКе?",
          "a": "Коды маркировки и их статусы, документы оборота, карточки товаров и национальный каталог, балансы и складские остатки, чеки ККТ — по тем товарным группам, которые добавлены в профиле участника."
        },
        {
          "q": "Может ли агент подавать документы в оборот?",
          "a": "Подача документов требует усиленной квалифицированной подписи, которую формирует ваш носитель, а не агент. Агент работает на чтение и проверку: собирает данные, находит ошибки и готовит списки под подписание."
        }
      ]
    },
    "seo_en": {
      "headline": "Check marking codes in batches without opening GIS MT",
      "scenarios": [
        {
          "title": "Batch check of marking codes",
          "desc": "The agent runs a list of codes through True API and tells you which are in circulation, which have been retired and which have not entered circulation yet."
        },
        {
          "title": "Stalled turnover documents",
          "desc": "The agent collects shipment and acceptance documents for a period and shows which ones the marking system has not processed or has rejected with an error."
        },
        {
          "title": "Stock of marked goods",
          "desc": "The agent reconciles code balances and warehouse stock by product group and shows where the numbers diverge from your own records."
        },
        {
          "title": "Product cards in the national catalogue",
          "desc": "The agent checks cards by GTIN and finds the unpublished ones and those missing mandatory attributes for their product group."
        },
        {
          "title": "Retired at the till",
          "desc": "The agent matches codes against cash register receipts and shows what has already been retired at the till and what is still in circulation, allowing for the reporting lag."
        },
        {
          "title": "A list ready for signing",
          "desc": "The agent gathers stalled and rejected documents into a single list ready for signing, so all that is left is to sign it with your token instead of hunting through the account."
        }
      ],
      "how_it_works": [
        "The agent calls the GIS MT True API at markirovka.crpt.ru: it runs marking codes through in batches and reads their statuses, pulls the list of turnover documents, looks up product cards by GTIN in the national catalogue and reconciles balances against warehouse stock by product group. From that it works out which codes are in circulation, which have been retired and which have not entered circulation yet, and where your own stock records diverge from the marking system.",
        "Accepting a document and processing it are two different events in GIS MT: the system takes a shipment or an acceptance immediately, the outcome shows up later, and some documents settle as unprocessed or rejected with an error. The agent keeps those states apart and reports not the fact of submission but the actual fate of the document. It treats code statuses with the same caution: retirement is recorded through cash register receipts and does not reach the system instantly.",
        "The agent barely writes anything here, and that is a property of the system itself: submitting documents into circulation is confirmed with a qualified electronic signature created by your own token, not by the agent. So it gathers data, finds discrepancies and prepares lists ready for signing — checked codes, stalled and rejected documents, cards missing mandatory attributes for their product group — and signing and sending stays your decision.",
        "Codes are checked in batches of several hundred per request: asking one by one would run straight into the rate limit, while a batch comes back as a single list that shows at once which codes the system does not know at all. Once the token's lifetime runs out, requests return an authorisation error and the agent says so outright instead of retrying in silence. It sees exactly the product groups open to your organisation, and when data is missing it says so rather than showing an empty table."
      ],
      "requirements": [
        "An organisation registered in the GIS MT marking system.",
        "A qualified e-signature of the CEO or an authorised employee.",
        "Readiness to refresh the token: it lives up to 10 hours."
      ],
      "faq": [
        {
          "q": "How do I connect Chestny ZNAK?",
          "a": "With a single token from your GIS MT account: open Profile, the Participant data tab, the Participation in the system block, then Generate token, confirming the action with a qualified electronic signature. Copy the value straight away — the field empties once the page reloads."
        },
        {
          "q": "How often does the token need refreshing?",
          "a": "A token lives up to 10 hours, after which requests come back with an authorisation error. Generate it again in your account and update it in the connection settings — the agent will tell you outright that it expired instead of silently retrying."
        },
        {
          "q": "What can the agent see in Chestny ZNAK?",
          "a": "Marking codes and their statuses, turnover documents, product cards and the national catalogue, balances and warehouse stock, and cash register receipts — for the product groups added in your participant profile."
        },
        {
          "q": "Can the agent submit documents into circulation?",
          "a": "Submitting documents requires a qualified electronic signature, which your own token creates, not the agent. The agent reads and verifies: it gathers data, finds errors and prepares lists ready for signing."
        }
      ]
    }
  },
  {
    "key": "creatomate",
    "name": "Creatomate",
    "description": "Генерация видео и изображений из шаблонов, рендеринг контента",
    "category": "content",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Собирайте партии роликов из шаблонов Creatomate",
      "scenarios": [
        {
          "title": "Партия роликов по шаблону",
          "desc": "Агент возьмёт шаблон Creatomate, подставит в его элементы ваш список товаров и запустит рендер сразу на всю партию, а не по одному ролику."
        },
        {
          "title": "Ревизия шаблонов проекта",
          "desc": "Агент соберёт список шаблонов проекта и покажет, какие элементы в каждом можно подставлять — заголовки, цены, картинки и цвета."
        },
        {
          "title": "Обложки из свежих данных",
          "desc": "Агент по расписанию пересоберёт промо-картинки и обложки из актуальных цифр и вернёт ссылки на готовые файлы без ручного рендера."
        },
        {
          "title": "Контроль очереди рендеров",
          "desc": "Агент проверит статусы заданий рендера, покажет упавшие вместе с причиной отказа и перезапустит их с теми же подстановками."
        },
        {
          "title": "Сколько стоит пачка",
          "desc": "Агент посчитает кредиты до запуска — сколько уйдёт на картинки, сколько на минуты видео — и назовёт цену партии прежде, чем задания встанут в очередь."
        },
        {
          "title": "Уборка в истории рендеров",
          "desc": "Агент пройдёт по старым заданиям, покажет, какие файлы уже забрали, а какие остались мусором, и удалит ненужные из истории проекта."
        }
      ],
      "how_it_works": [
        "Агент ходит в API Creatomate по ключу проекта и начинает со списка шаблонов: у каждого он разбирает элементы и изменяемые поля — заголовки, цены, картинки, цвета, — чтобы понимать, что именно можно подставить. Вторая половина работы — задания рендера: агент видит их статус, ссылку на готовый файл и причину отказа, поэтому очередь роликов и обложек разбирается в чате, а не в кабинете.",
        "Устроен Creatomate так, что дизайн и данные разведены: шаблон собирается руками в редакторе, а через API меняются только значения его элементов. Отсюда правило, которого агент держится: он не переделывает композицию и не заводит новые шаблоны, а подставляет данные в подготовленные поля. Поля он находит по именам, которые заданы в редакторе, поэтому переименованный слой в подстановку не попадёт — и агент назовёт, какого поля он не нашёл.",
        "Партия — обычный режим работы: агент подставляет в шаблон весь список товаров или строк и запускает рендер сразу на всю пачку, а не по одному ролику. Дальше он ведёт очередь: проверяет статусы заданий, показывает упавшие вместе с причиной отказа и перезапускает их с теми же подстановками. На запись доступны запуск рендеров и удаление их из истории — сами шаблоны остаются нетронутыми.",
        "Подключение — API-ключом проекта, а дальше всё идёт по HTTP: ограничение в 30 запросов за 10 секунд агент выдерживает сам, а рендер запускает асинхронно — задание встаёт в очередь, и ссылка на файл появляется не в ответе, а по мере обработки. Рендер списывает кредиты: картинка — один, минута видео 720p — около четырнадцати, поэтому цену пачки агент называет до запуска. Если шаблонов в проекте нет или рендер не прошёл, он скажет об этом прямо."
      ],
      "requirements": [
        "Аккаунт на creatomate.com — API доступен на всех тарифах",
        "Кредиты на рендер на балансе проекта"
      ],
      "faq": [
        {
          "q": "Как подключить Creatomate?",
          "a": "API-ключом проекта: в кабинете Creatomate выберите проект, откройте «Project Settings» и нажмите на поле «API Key» — значение скрыто и раскрывается по клику. Ключ свой у каждого проекта: ключ соседнего вернёт чужой список шаблонов."
        },
        {
          "q": "Что агент видит в Creatomate?",
          "a": "Шаблоны выбранного проекта вместе с их элементами и изменяемыми полями, а также задания рендера: статус, ссылку на готовый файл и причину отказа."
        },
        {
          "q": "Пишет ли агент в Creatomate?",
          "a": "Запускает рендеры и может удалять их из истории, но сами шаблоны не редактирует — их вы собираете в редакторе Creatomate, агент только подставляет значения."
        },
        {
          "q": "Что с лимитами и кредитами?",
          "a": "API отвечает на всех тарифах, ограничение — 30 запросов за 10 секунд. Рендер списывает кредиты: одна картинка — 1 кредит, минута видео 720p — около 14."
        }
      ]
    },
    "seo_en": {
      "headline": "Render whole batches of videos from Creatomate templates",
      "scenarios": [
        {
          "title": "A whole batch of videos from one template",
          "desc": "The agent takes a Creatomate template, feeds your product list into its elements and fires off the render for the entire batch at once instead of one clip at a time."
        },
        {
          "title": "Template review for a project",
          "desc": "The agent lists the project templates and shows which elements in each one you can fill in — headlines, prices, images and colours."
        },
        {
          "title": "Covers built from fresh data",
          "desc": "The agent rebuilds promo images and covers from current numbers on a schedule and hands back links to the finished files with no manual rendering."
        },
        {
          "title": "Keeping the render queue in check",
          "desc": "The agent checks render job statuses, shows the failed ones together with the reason and relaunches them with the same substitutions."
        },
        {
          "title": "What a batch will cost",
          "desc": "The agent counts the credits before the launch — how many go on images, how many on minutes of video — and names the price of the batch before jobs join the queue."
        },
        {
          "title": "Tidying up the render history",
          "desc": "The agent walks through the older jobs, shows which files have already been collected and which are left as clutter, and deletes the unneeded ones from the history."
        }
      ],
      "how_it_works": [
        "The agent calls the Creatomate API with the project key and starts from the template list: for each one it goes through the elements and editable fields — headlines, prices, images, colours — so it knows exactly what can be filled in. The other half of the work is render jobs: the agent sees their status, the link to the finished file and the reason for a failure, so the queue of clips and covers is handled in chat rather than in the account.",
        "Creatomate is built so that design and data are kept apart: the template is assembled by hand in the editor, and the API only changes the values of its elements. Hence the rule the agent sticks to: it does not rework the composition and does not create new templates, it fills data into prepared fields. It finds those fields by the names set in the editor, so a renamed layer drops out of the substitution — and the agent names the field it could not find.",
        "A batch is the normal mode of work: the agent feeds the whole list of products or rows into the template and fires off the render for the entire batch at once instead of one clip at a time. Then it keeps the queue: checks job statuses, shows the failed ones together with the reason and relaunches them with the same substitutions. Writing covers launching renders and deleting them from the history — the templates themselves stay untouched.",
        "The connection uses the project API key, and from there everything runs over HTTP: the agent holds the cap of 30 requests per 10 seconds itself, and it launches renders asynchronously — the job joins a queue and the link to the file shows up as processing goes on, not in the response. Rendering spends credits: an image costs one, a minute of 720p video around fourteen, so the agent names the price of a batch before it starts. If the project has no templates or a render did not go through, it says so directly."
      ],
      "requirements": [
        "A creatomate.com account — the API works on every plan",
        "Render credits on the project balance"
      ],
      "faq": [
        {
          "q": "How do I connect Creatomate?",
          "a": "With the project API key: in your Creatomate account pick the project, open Project Settings and click the API Key field — the value is hidden and reveals on click. Each project has its own key: a neighbouring project key returns someone else's template list."
        },
        {
          "q": "What can the agent see in Creatomate?",
          "a": "The templates of the selected project along with their elements and editable fields, plus render jobs: status, link to the finished file and the reason for a failure."
        },
        {
          "q": "Does the agent write to Creatomate?",
          "a": "It launches renders and can delete them from the history, but it never edits the templates themselves — you build those in the Creatomate editor and the agent only fills in the values."
        },
        {
          "q": "What about limits and credits?",
          "a": "The API answers on every plan, with a cap of 30 requests per 10 seconds. Rendering spends credits: one image costs 1 credit, a minute of 720p video around 14."
        }
      ]
    }
  },
  {
    "key": "dadata",
    "name": "DaData",
    "description": "Поиск компаний по ИНН/ОГРН, стандартизация адресов, банковские реквизиты, аффилированные компании",
    "category": "analytics",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Проверяйте контрагентов по ИНН не выходя из чата",
      "scenarios": [
        {
          "title": "Проверка контрагента по ИНН",
          "desc": "Агент найдёт компанию по ИНН или ОГРН и покажет адрес, руководителя, коды ОКВЭД, статус в реестре и дату регистрации."
        },
        {
          "title": "Чистка базы адресов и реквизитов",
          "desc": "Агент разберёт адреса по частям вплоть до квартиры, подтянет банк по БИК и приведёт телефоны и ФИО к единому формату."
        },
        {
          "title": "Поиск аффилированных компаний",
          "desc": "Агент соберёт компании, связанные с контрагентом через учредителей и руководителей, и покажет, кто ещё стоит за той же группой лиц."
        },
        {
          "title": "Регулярная проверка портфеля",
          "desc": "Агент по расписанию пройдёт по списку ИНН и сообщит, кто ликвидирован, сменил адрес или руководителя с прошлой проверки."
        },
        {
          "title": "Кто стоит за почтой",
          "desc": "Агент найдёт компанию по корпоративной почте или домену из письма и покажет, с кем вы на самом деле переписываетесь — с ИНН и адресом."
        },
        {
          "title": "Расшифровка ОКВЭД и ОКТМО",
          "desc": "Агент поднимет справочники ОКВЭД и ОКТМО и объяснит словами, чем по документам занимается контрагент и к какому муниципалитету он приписан."
        }
      ],
      "how_it_works": [
        "Агент обращается к двум сервисам DaData сразу. Через подсказки он ищет компании по ИНН, ОГРН, БИК и корпоративной почте, собирает аффилированные компании по учредителям и руководителям, поднимает справочники ОКВЭД и ОКТМО, определяет адрес по координатам и город по IP. Через стандартизацию — разбирает адреса по частям вплоть до квартиры и приводит телефоны и ФИО к единому формату.",
        "Устроены эти два сервиса по-разному, и агент это учитывает. Подсказки отвечают списком кандидатов по неточной строке: на «ООО Ромашка» их придёт несколько, и брать первый попавшийся нельзя. Поэтому на проверке контрагента агент опирается на точный ИНН или ОГРН, а совпадение по названию помечает как гипотезу. Стандартизация же живёт на отдельном хосте и отвечает не списком кандидатов, а одним разобранным объектом: строка либо разложена по полям, либо помечена как неразобранная.",
        "Менять в DaData нечего: сервис справочный, агент отправляет строку и получает разобранный ответ, ничего не создавая и не редактируя. Записывать он может только в вашу сторону — вести список проверенных ИНН и при регулярном прогоне сообщать, кто ликвидирован, сменил адрес или руководителя с прошлой проверки. Статус в реестре агент подаёт как запись реестра, а не как доказательство, что компания реально работает.",
        "Расход считается по лимитам плана: бесплатных подсказок — 10 000 запросов в сутки, стандартизация оплачивается отдельно, около 20 копеек за адрес, поэтому массовую чистку агент оценивает по объёму заранее и гонит её партиями, а не одним списком целиком. Когда лимит исчерпан или компания в реестре не найдена, он говорит об этом прямо, а не отдаёт пустую строку."
      ],
      "requirements": [
        "Бесплатный лимит подсказок — 10 000 запросов в сутки",
        "Оплаченная «Стандартизация», если нужны чистые адреса и реквизиты"
      ],
      "faq": [
        {
          "q": "Как подключить DaData?",
          "a": "Двумя ключами из профиля: зарегистрируйтесь на dadata.ru, подтвердите почту и на странице dadata.ru/profile/#info скопируйте API-ключ и секретный ключ. Оба поля обязательны — секретный нужен стандартизации адресов и реквизитов."
        },
        {
          "q": "Что агент умеет запрашивать?",
          "a": "Поиск и подсказки по ИНН, ОГРН, БИК и корпоративной почте, аффилированные компании, стандартизацию адресов, телефонов и ФИО, справочники ОКВЭД и ОКТМО, адрес по координатам и город по IP."
        },
        {
          "q": "Меняет ли агент что-то в DaData?",
          "a": "Нет. Сервис отвечает справочными данными: агент отправляет строку на поиск или стандартизацию и получает разобранный ответ, ничего в DaData не создавая и не редактируя."
        },
        {
          "q": "Какие есть лимиты?",
          "a": "Бесплатный доступ к подсказкам ограничен 10 000 запросов в сутки, а стандартизация оплачивается отдельно — около 20 копеек за адрес. Когда лимит исчерпан, агент скажет об этом прямо в чате."
        }
      ]
    },
    "seo_en": {
      "headline": "Vet counterparties by INN without leaving the chat",
      "scenarios": [
        {
          "title": "Vetting a counterparty by INN",
          "desc": "The agent finds the company by INN or OGRN and shows its address, director, OKVED codes, registry status and registration date."
        },
        {
          "title": "Cleaning up addresses and bank details",
          "desc": "The agent parses addresses down to the apartment, pulls the bank by BIC and brings phone numbers and personal names to a single format."
        },
        {
          "title": "Finding affiliated companies",
          "desc": "The agent collects the companies tied to a counterparty through founders and directors and shows who else stands behind the same group of people."
        },
        {
          "title": "Regular portfolio screening",
          "desc": "The agent runs through your list of INNs on a schedule and reports who has been liquidated, changed address or changed director since the last check."
        },
        {
          "title": "Who is behind an email",
          "desc": "The agent looks a company up by its corporate email or the domain from a letter and shows who you are really writing to, INN and address included."
        },
        {
          "title": "OKVED and OKTMO decoded",
          "desc": "The agent pulls the OKVED and OKTMO reference books and explains in plain words what the counterparty does on paper and which municipality it belongs to."
        }
      ],
      "how_it_works": [
        "The agent calls two DaData services at once. Through suggestions it looks companies up by INN, OGRN, BIC and corporate email, collects affiliated companies through founders and directors, pulls the OKVED and OKTMO reference books, resolves an address by coordinates and a city by IP. Through standardisation it parses addresses down to the apartment and brings phone numbers and personal names to a single format.",
        "These two services are built differently, and the agent accounts for that. Suggestions answer a fuzzy string with a list of candidates: a query like OOO Romashka returns several, and taking the first one is not an option. So when vetting a counterparty the agent relies on an exact INN or OGRN, and flags a name match as a hypothesis. Standardisation, meanwhile, lives on a separate host and answers not with a list of candidates but with one parsed object: a string is either split into fields or marked as unparsed.",
        "There is nothing to change in DaData: the service is a reference source, the agent sends a string and gets a parsed response back, creating and editing nothing. It writes only on your side — keeping the list of screened INNs and, on a regular run, reporting who has been liquidated, changed address or changed director since the last check. A registry status is presented as a registry record, not as proof that the company actually operates.",
        "Usage is counted against the plan limits: 10,000 suggestion requests a day for free, while standardisation is billed separately at roughly 20 kopecks per address, so the agent sizes a bulk clean-up by volume up front and runs it in batches rather than firing the whole list at once. When the limit runs out or a company is not found in the registry, it says so directly instead of returning an empty line."
      ],
      "requirements": [
        "The free suggestions limit is 10,000 requests a day",
        "Paid Standardisation if you need clean addresses and bank details"
      ],
      "faq": [
        {
          "q": "How do I connect DaData?",
          "a": "With two keys from your profile: sign up at dadata.ru, confirm your email and copy the API key and the secret key from dadata.ru/profile/#info. Both fields are required — the secret one is what address and bank detail standardisation needs."
        },
        {
          "q": "What can the agent look up?",
          "a": "Search and suggestions by INN, OGRN, BIC and corporate email, affiliated companies, standardisation of addresses, phone numbers and personal names, OKVED and OKTMO reference books, an address by coordinates and a city by IP."
        },
        {
          "q": "Does the agent change anything in DaData?",
          "a": "No. The service answers with reference data: the agent sends a string for lookup or standardisation and gets a parsed response back, creating and editing nothing in DaData."
        },
        {
          "q": "What are the limits?",
          "a": "Free access to suggestions is capped at 10,000 requests a day, and standardisation is billed separately at roughly 20 kopecks per address. Once the limit runs out, the agent says so right in the chat."
        }
      ]
    }
  },
  {
    "key": "diadoc",
    "name": "Контур.Диадок",
    "description": "Электронный документооборот — отправка, получение и подписание документов",
    "category": "docflow",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "short_name": "Диадок",
    "seo": {
      "headline": "ИИ для документооборота: документы Диадока, ждущие подписи",
      "scenarios": [
        {
          "title": "Документы, которые ждут подписи",
          "desc": "Агент покажет входящие документы без ответа и выделит те, что лежат дольше суток, с контрагентом, типом и датой поступления."
        },
        {
          "title": "Что зависло у контрагента",
          "desc": "Агент соберёт по контрагенту документы за период и назовёт те, где вторая сторона не подписала и не отклонила отправленное."
        },
        {
          "title": "Реестр ЭДО для сверки",
          "desc": "Агент сведёт входящие и исходящие документы по типам, датам и контрагентам и подготовит реестр под сверку с учётной системой."
        },
        {
          "title": "Утренняя сводка по документообороту",
          "desc": "Агент по расписанию пришлёт, сколько документов пришло за ночь и что требует подписи сегодня, чтобы ничего не повисло."
        },
        {
          "title": "Пакет к отправке",
          "desc": "Агент подготовит черновик и соберёт пакет к отправке: проверит комплектность, вложения и реквизиты контрагента — и остановится там, где нужна ваша подпись."
        },
        {
          "title": "Отказы и аннулирования",
          "desc": "Агент дочитает ленту событий ящика и соберёт документы, которые контрагент отклонил или просит аннулировать, с причиной и датой; по вашему решению он сформирует предложение об аннулировании или отказ в подписи и отправит их после подписания."
        }
      ],
      "how_it_works": [
        "Агент работает с публичным API Диадока по адресу diadoc-api.kontur.ru в границах одного ящика организации. Он читает входящие, исходящие и внутренние документы вместе с вложениями и статусами документооборота, контрагентов и ленту событий ящика. Из этого собираются реестры под сверку с учётной системой, списки документов без ответа и сводка по тому, что пришло за ночь и требует подписи сегодня.",
        "В ЭДО статус документа — это состояние встречного движения, а не факт закрытой сделки. Отправленное может лежать неподписанным и неотклонённым неделями, а входящее — ждать вашего ответа, ничем не напоминая о себе в интерфейсе. Поэтому агент смотрит не на сам факт отправки, а на возраст ожидания: выделяет документы, лежащие дольше суток, и называет контрагента, тип и дату поступления рядом с каждым.",
        "Подпись — это отдельное решение, и агент его не принимает за вас. Метод отправки подпись не создаёт: она приходит извне. Если КЭП лежит на носителе, её ставит человек, и агент доводит документ ровно до этой точки — готовит черновик, собирает пакет, проверяет комплектность и вложения. Если организация подключила облачную подпись Диадока или Госключ, агент может отправить документ на подписание и дождаться результата, но запускает это по вашей команде, а не сам. Принять двусторонний документ — значит отправить свой титул получателя, и его агент тоже готовит целиком. Отклонение и аннулирование он выносит на ваше решение со всей фактурой и отправляет уже подписанное.",
        "Видит агент ровно то, что разрешает выданный токен, и границу эту обойти не пытается. Ящик не переключается на лету, поэтому одна организация — одно подключение, а список своих юрлиц и их ящиков агент показывает из ответа GetMyOrganizations. Новое он забирает по ленте событий ящика, а не перебором дней, и помнит, до какого события дочитал, так что вторая сводка за утро не пересчитывает всё заново. Если документов за период нет, он скажет об этом прямо, а не покажет пустой реестр."
      ],
      "requirements": [
        "Организация уже работает в Диадоке, и у неё есть ящик",
        "Одно подключение на организацию: ящик задаётся при подключении",
        "Сертификат КЭП у того, кто подписывает: носитель, облако Диадока или Госключ"
      ],
      "faq": [
        {
          "q": "Как подключить Контур.Диадок?",
          "a": "Двумя значениями: токеном доступа и идентификатором ящика. Токен получают по OpenID Connect со scope Diadoc.PublicAPI, а идентификатор ящика — это 32 символа из адресной строки раздела «Входящие документы». Ключи выдаёт менеджер Контура по заявке."
        },
        {
          "q": "Что агент видит в Диадоке?",
          "a": "Входящие, исходящие и внутренние документы подключённого ящика, их вложения и статусы документооборота, контрагентов и ленту событий — в пределах прав выданного токена."
        },
        {
          "q": "Может ли агент подписать документ за меня?",
          "a": "Сам по себе метод отправки подпись не создаёт: она приходит готовой. Если КЭП на носителе, подписывает человек, а агент готовит черновик и пакет к отправке. Если у организации подключена облачная подпись Диадока или Госключ, агент может отправить файлы на подписание и дождаться результата — но делает это по вашей команде."
        },
        {
          "q": "Что делать, если организаций несколько?",
          "a": "Ящик задаётся при подключении, поэтому одна организация — одно подключение. Список своих юридических лиц и идентификаторов их ящиков агент покажет из ответа метода GetMyOrganizations."
        }
      ]
    },
    "seo_en": {
      "headline": "Catch the Diadoc documents that are waiting for your signature",
      "scenarios": [
        {
          "title": "Documents awaiting a signature",
          "desc": "The agent shows inbound documents with no response yet and singles out the ones sitting for more than a day, with counterparty, type and arrival date."
        },
        {
          "title": "What has stalled on the other side",
          "desc": "The agent gathers the documents for a counterparty over a period and names the ones the other party has neither signed nor rejected."
        },
        {
          "title": "An EDI register for reconciliation",
          "desc": "The agent consolidates inbound and outbound documents by type, date and counterparty and prepares a register ready to reconcile against your accounting system."
        },
        {
          "title": "Morning document flow digest",
          "desc": "The agent sends you on schedule how many documents arrived overnight and what needs signing today, so nothing is left hanging."
        },
        {
          "title": "A package ready to send",
          "desc": "The agent prepares the draft and assembles the package for sending — checking completeness, attachments and counterparty details — and stops where your signature is needed."
        },
        {
          "title": "Rejections and annulments",
          "desc": "The agent reads the box event feed and collects the documents a counterparty has rejected or asked to annul, with the reason and the date; on your decision it drafts the annulment proposal or the signature refusal and sends it once signed."
        }
      ],
      "how_it_works": [
        "The agent works with the Diadoc public API at diadoc-api.kontur.ru within the boundaries of a single organisation box. It reads inbound, outbound and internal documents together with their attachments and document flow statuses, the counterparties and the event feed of the box. Out of that come registers for reconciliation against your accounting system, lists of documents with no response and a digest of what arrived overnight and needs signing today.",
        "In EDI a document status is the state of a two-sided movement, not the fact of a closed deal. Something you sent can sit unsigned and unrejected for weeks, and an inbound document can wait for your answer without reminding you of itself anywhere in the interface. So the agent looks not at the fact of sending but at the age of the wait: it singles out documents sitting for more than a day and names the counterparty, type and arrival date beside each one.",
        "Signing is a decision of its own, and the agent does not make it for you. The sending method never creates a signature: it arrives from outside. When the qualified certificate sits on a token, a person signs, and the agent takes the document exactly up to that point — drafting it, assembling the package, checking completeness and attachments. When the organisation has Diadoc's cloud signature or Gosklyuch enabled, the agent can send files off to be signed and wait for the result, but it starts that on your command, not on its own. Accepting a two-sided document means sending your recipient title, and the agent prepares that in full too. Rejection and annulment are put to you with the whole picture and sent once signed.",
        "The agent sees exactly what the issued token permits and does not try to reach past that boundary. The box cannot be switched on the fly, so one organisation means one connection, and the agent lists your legal entities and their boxes from the GetMyOrganizations response. New material it takes from the event feed of the box rather than by walking day after day, and it remembers the last event it read, so a second digest in one morning does not recount everything. If there are no documents for the period, it says so directly instead of showing an empty register."
      ],
      "requirements": [
        "The organisation already works in Diadoc and has a box",
        "One connection per organisation: the box is fixed when you connect",
        "A qualified certificate for the signer: a token, Diadoc's cloud or Gosklyuch"
      ],
      "faq": [
        {
          "q": "How do I connect Kontur.Diadoc?",
          "a": "With two values: an access token and a box identifier. The token is obtained via OpenID Connect with the Diadoc.PublicAPI scope, and the box identifier is the 32 characters from the address bar of the Inbound documents section. Kontur issues the keys through a manager on request."
        },
        {
          "q": "What can the agent see in Diadoc?",
          "a": "Inbound, outbound and internal documents of the connected box, their attachments and document flow statuses, counterparties and the event feed — within the rights of the issued token."
        },
        {
          "q": "Can the agent sign a document for me?",
          "a": "The sending method itself never creates a signature: it arrives ready-made. With a certificate on a token, a person signs and the agent prepares the draft and the package. With Diadoc's cloud signature or Gosklyuch enabled, the agent can send the files off to be signed and wait for the result — but only on your command."
        },
        {
          "q": "What if there are several organisations?",
          "a": "The box is fixed at connection time, so one organisation means one connection. The agent will list your legal entities and their box identifiers from the GetMyOrganizations response."
        }
      ]
    }
  },
  {
    "key": "github",
    "name": "GitHub",
    "description": "Репозитории, issues, pull requests, коммиты и GitHub Actions",
    "category": "dev",
    "auth_flow": "popup_oauth",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Разбирайте pull request и упавшие сборки GitHub из чата",
      "scenarios": [
        {
          "title": "Что висит без ревью",
          "desc": "Агент соберёт открытые pull request по вашим репозиториям и покажет, что дольше всех ждёт ревью и кого стоит подтолкнуть."
        },
        {
          "title": "Разбор упавших сборок",
          "desc": "Агент найдёт упавшие прогоны GitHub Actions и покажет, в каком коммите и на каком шаге сломалась сборка."
        },
        {
          "title": "Сводка по репозиторию",
          "desc": "Агент пришлёт ежедневную сводку: новые PR, закрытые issues и статус сборок по согласованному с вами расписанию."
        },
        {
          "title": "События в рабочий чат",
          "desc": "Агент поймает push, новый issue или запрос ревью по вебхуку и напишет об этом в чат команды сразу, а не утром."
        },
        {
          "title": "Что вошло в релиз",
          "desc": "Агент соберёт коммиты и слитые pull request между двумя тегами и покажет, что именно вошло в релиз и кто автор каждого изменения."
        },
        {
          "title": "Задачи, о которых забыли",
          "desc": "Агент пройдёт по issues репозитория и покажет те, что висят без ответственного и без комментариев дольше месяца — с автором и последней активностью."
        }
      ],
      "how_it_works": [
        "Агент работает с GitHub через его API: репозитории, issues, pull request с комментариями и ревью, коммиты и прогоны GitHub Actions. Поверх этого он считает то, чего в интерфейсе не видно одним взглядом: какие PR дольше всех ждут ревью и кого стоит подтолкнуть, на каком коммите и на каком шаге сломалась сборка, что за сутки открылось и закрылось по репозиторию.",
        "У прогона Actions статус и заключение — разные вещи: событие о завершении workflow означает, что прогон закончился, а не что он прошёл, поэтому агент смотрит на результат отдельно и не записывает упавшую сборку в зелёные. С событиями та же логика: сам по себе pull_request ни о чём не говорит, значение несёт действие — открыт, переоткрыт, закрыт, обновлён новым коммитом или запрошено ревью.",
        "События приходят вебхуком, подписанным HMAC-SHA256: без общего секрета доставка отклоняется, а повторную доставку одного и того же события агент отсекает по её идентификатору. Поэтому опрашивать API по кругу не нужно. На запись агент осторожен: комментарий в PR, новый issue, перезапуск упавшего прогона или закрытие задачи — это отдельные действия по вашему явному запросу, а не побочный эффект разбора.",
        "Видимость агента ограничена установкой приложения: репозитория, которого в ней нет, для него не существует, и вместо пустой сводки он скажет, что доступа туда не выдано. Историю он читает страницами и по одному репозиторию за раз, а не всю организацию сразу, и держит частоту запросов в пределах лимитов GitHub — поэтому большой отчёт собирается дольше, чем короткий вопрос про один pull request. Прав у агента ровно столько, сколько у установки."
      ],
      "requirements": [
        "Роль владельца организации или её согласие на установку приложения",
        "Список репозиториев, к которым агент получит доступ"
      ],
      "faq": [
        {
          "q": "Как подключить GitHub?",
          "a": "Входом через GitHub: нажмите кнопку подключения и подтвердите установку приложения, ключи вводить не нужно. В организации приложение ставит владелец, а при SAML SSO сначала откройте сессию на github.com/orgs/ORG/sso, иначе организации не будет в списке."
        },
        {
          "q": "Что агент видит в GitHub?",
          "a": "Только репозитории, отмеченные при установке: issues, pull request, комментарии, коммиты и прогоны GitHub Actions по ним."
        },
        {
          "q": "Как расширить доступ?",
          "a": "При установке выбирается «All repositories» или «Only select repositories». Список можно поменять позже через «Configure» у приложения — агент сразу начнёт видеть добавленные репозитории."
        },
        {
          "q": "Что с событиями и лимитами?",
          "a": "Вебхук приносит push, PR, issues, ревью и завершённые workflow, поэтому опрашивать API не нужно. Сами запросы идут не чаще 10 в секунду, чтобы не упереться в лимиты GitHub."
        }
      ]
    },
    "seo_en": {
      "headline": "Clear stuck pull requests and failed GitHub builds from chat",
      "scenarios": [
        {
          "title": "What is stuck without a review",
          "desc": "The agent collects the open pull requests across your repositories and shows what has been waiting for review the longest and who is worth a nudge."
        },
        {
          "title": "Digging into failing builds",
          "desc": "The agent finds failed GitHub Actions runs and shows which commit and which step the build broke on."
        },
        {
          "title": "Repository digest",
          "desc": "The agent sends a daily digest: new PRs, closed issues and build status, on whatever schedule you agree with it."
        },
        {
          "title": "Events straight into the team chat",
          "desc": "The agent catches a push, a new issue or a review request over a webhook and posts it to the team chat right away instead of the next morning."
        },
        {
          "title": "What went into the release",
          "desc": "The agent gathers the commits and merged pull requests between two tags and shows what actually shipped and who authored each change."
        },
        {
          "title": "Issues everyone forgot about",
          "desc": "The agent walks the repository issues and shows the ones sitting with no assignee and no comments for over a month, with the author and the last activity."
        }
      ],
      "how_it_works": [
        "The agent works with GitHub through its API: repositories, issues, pull requests with their comments and reviews, commits and GitHub Actions runs. On top of that it computes what the interface does not show at a glance: which PRs have been waiting for review the longest and who is worth a nudge, which commit and which step the build broke on, what was opened and closed in a repository over the day.",
        "For an Actions run the status and the conclusion are different things: a workflow completion event means the run finished, not that it passed, so the agent looks at the outcome separately and does not count a failed build as green. Events follow the same logic: pull_request on its own says nothing, the meaning is in the action — opened, reopened, closed, updated with a new commit or a review requested.",
        "Events arrive over a webhook signed with HMAC-SHA256: without a shared secret the delivery is rejected, and a repeat delivery of the same event is dropped by its delivery identifier. That is why there is no need to poll the API in circles. The agent is careful about writing: a comment on a PR, a new issue, a re-run of a failed workflow or closing a task are separate actions on your explicit request, not a side effect of the analysis.",
        "The agent's visibility is bounded by the app installation: a repository outside it does not exist for the agent, and instead of an empty digest it says that access there was never granted. History is read page by page and one repository at a time rather than a whole organisation at once, and the request rate is kept within GitHub limits — so a large report takes longer to assemble than a quick question about one pull request. The agent has exactly the rights the installation has."
      ],
      "requirements": [
        "Organisation owner role, or the owner's consent to install the app",
        "The list of repositories the agent will be given access to"
      ],
      "faq": [
        {
          "q": "How do I connect GitHub?",
          "a": "By signing in through GitHub: press the connect button and approve the app installation — no keys to type in. In an organisation the owner installs the app, and with SAML SSO open a session at github.com/orgs/ORG/sso first, otherwise the organisation will not appear in the list."
        },
        {
          "q": "What can the agent see in GitHub?",
          "a": "Only the repositories ticked during installation: their issues, pull requests, comments, commits and GitHub Actions runs."
        },
        {
          "q": "How do I widen the access?",
          "a": "At installation you choose All repositories or Only select repositories. The list can be changed later through Configure on the app — the agent starts seeing the added repositories straight away."
        },
        {
          "q": "What about events and limits?",
          "a": "The webhook delivers pushes, PRs, issues, reviews and completed workflows, so there is no need to poll the API. Requests themselves go out no faster than 10 per second to stay clear of GitHub rate limits."
        }
      ]
    }
  },
  {
    "key": "gitlab",
    "name": "GitLab",
    "description": "Репозитории, проекты, issues, merge requests, пайплайны и CI/CD",
    "category": "dev",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Находите merge request без ревью и разбирайте пайплайны",
      "scenarios": [
        {
          "title": "MR без ревью",
          "desc": "Агент соберёт открытые merge request по проектам и покажет, какие висят без ревью дольше всех и за кем очередь."
        },
        {
          "title": "Упавшие пайплайны",
          "desc": "Агент разберёт упавшие пайплайны: на каком job сломалось, чей коммит его запустил и повторялось ли это раньше."
        },
        {
          "title": "Утренняя сводка по проектам",
          "desc": "Агент пришлёт сводку по расписанию: новые issue, принятые merge request и статус ночных пайплайнов CI/CD."
        },
        {
          "title": "События в чат команды",
          "desc": "Агент поймает push, новый merge request или упавший pipeline по вебхуку и напишет об этом в рабочий чат."
        },
        {
          "title": "Разбор бэклога issues",
          "desc": "Агент разложит открытые issues по меткам, ответственным и давности и покажет, что висит без единого комментария дольше месяца."
        },
        {
          "title": "Кто трогал этот файл",
          "desc": "Агент пройдёт по истории коммитов нужного файла, покажет диффы последних правок и назовёт, кто менял его чаще остальных."
        }
      ],
      "how_it_works": [
        "Агент ходит в API GitLab — того инстанса, адрес которого указан при подключении: gitlab.com или корень вашей установки. Читает он проекты, issues, merge request с комментариями, коммиты и пайплайны CI/CD, а дальше считает: какие MR висят без ревью дольше всех и за кем очередь, на каком job сломался ночной пайплайн, чей коммит его запустил и повторялось ли это раньше.",
        "Упавший пайплайн сам по себе мало что объясняет: агент спускается на уровень job и называет конкретный шаг и коммит, а не только красный статус целого прогона. Вторая особенность GitLab — нумерация: у merge request и issue есть номер внутри проекта и сквозной идентификатор, и это разные числа, поэтому агент всегда держит рядом проект, иначе «MR номер 5» существует в каждом репозитории по-своему.",
        "Вебхук GitLab агент принимает только подписанным: без общего секрета или секретного токена в заголовке доставка отклоняется, а повторную доставку одного события он отсекает по его идентификатору. Так push, новый MR и упавший pipeline попадают в чат без опроса по расписанию. На запись со scope «api» агент технически способен, но комментарий, смену статуса или перезапуск job согласует с вами до выполнения.",
        "Видит агент ровно то, что видит аккаунт, чьим токеном он подключён: обойти права проекта запросом он не может и вместо догадки отвечает, что раздел закрыт. Списки issues, merge request и пайплайнов API отдаёт страницами, поэтому крупный проект агент обходит порциями и сам выдерживает частоту запросов. Репозиторий целиком он не выкачивает — читает нужные файлы и диффы конкретных коммитов, а если данных за период нет, скажет об этом прямо, а не покажет пустую сводку."
      ],
      "requirements": [
        "Роль не ниже Reporter в нужных проектах, Developer — для merge request.",
        "Сетевой доступ к вашему GitLab, если он развёрнут у вас."
      ],
      "faq": [
        {
          "q": "Как подключить GitLab?",
          "a": "Персональным токеном: аватар → «Edit profile» → «Access» → «Personal access tokens», в списке «Generate token» выберите «Legacy token» и отметьте scope «api» — «read_api» оставит только просмотр. Адрес указывается отдельным полем, по умолчанию https://gitlab.com."
        },
        {
          "q": "Что агент видит в GitLab?",
          "a": "Проекты, issues, merge request, комментарии, коммиты и пайплайны CI/CD — ровно в пределах прав вашего аккаунта, больше токен не даёт."
        },
        {
          "q": "Работает ли со своим инстансом?",
          "a": "Да: корень своего инстанса указывается при подключении вместо https://gitlab.com, без /api/v4 на конце. Токен при этом выпускается в том же инстансе, куда ходит агент."
        },
        {
          "q": "Пишет ли агент в GitLab?",
          "a": "По умолчанию агент читает проекты и отчитывается в чате. Со scope «api» запись технически возможна, но такие действия он согласует с вами перед выполнением."
        }
      ]
    },
    "seo_en": {
      "headline": "Find merge requests without review and dig into pipelines",
      "scenarios": [
        {
          "title": "MRs waiting on review",
          "desc": "The agent collects open merge requests across your projects and shows which ones have sat without review the longest and whose turn it is."
        },
        {
          "title": "Failed pipelines",
          "desc": "The agent digs into failed pipelines: which job broke, whose commit triggered it and whether it has happened before."
        },
        {
          "title": "Morning project digest",
          "desc": "The agent sends a scheduled digest: new issues, merged merge requests and the status of overnight CI/CD pipelines."
        },
        {
          "title": "Events in the team chat",
          "desc": "The agent catches a push, a new merge request or a failed pipeline via webhook and posts about it in your work chat."
        },
        {
          "title": "Issue backlog breakdown",
          "desc": "The agent sorts open issues by label, assignee and age and shows what has been sitting without a single comment for over a month."
        },
        {
          "title": "Who touched this file",
          "desc": "The agent walks the commit history of a given file, shows the diffs of the latest changes and names who has edited it more often than anyone."
        }
      ],
      "how_it_works": [
        "The agent calls the GitLab API — of whichever instance was entered at connection: gitlab.com or the root of your own install. It reads projects, issues, merge requests with their comments, commits and CI/CD pipelines, and then works things out: which MRs have hung without review the longest and whose turn it is, which job the overnight pipeline broke on, whose commit triggered it and whether it has happened before.",
        "A failed pipeline on its own explains little: the agent goes down to the job level and names the specific step and commit rather than just the red status of the whole run. The second GitLab peculiarity is numbering: a merge request and an issue each have a number within the project and a global identifier, and these are different numbers, so the agent always keeps the project alongside — otherwise MR number 5 exists differently in every repository.",
        "The agent accepts a GitLab webhook only when it is signed: without a shared secret or a secret token in the header the delivery is rejected, and a repeat delivery of the same event is dropped by its identifier. That is how a push, a new MR and a failed pipeline reach the chat without polling on a schedule. With the api scope writing is technically within reach, but a comment, a status change or a job re-run is agreed with you before it happens.",
        "The agent sees exactly what the account whose token is connected sees: no request gets it around a project's permissions, and instead of guessing it answers that the section is closed. Lists of issues, merge requests and pipelines come back in pages, so a large project is walked in portions with the agent holding its own request rate. It never downloads a whole repository — it reads the files it needs and the diffs of specific commits, and if there is no data for the period it says so directly instead of showing an empty digest."
      ],
      "requirements": [
        "At least the Reporter role in the projects, Developer for merge requests.",
        "Network access to your GitLab if it is self-managed."
      ],
      "faq": [
        {
          "q": "How do I connect GitLab?",
          "a": "With a personal token: avatar → Edit profile → Access → Personal access tokens, then Generate token in the list, pick Legacy token and tick the api scope — read_api leaves you with view access only. The address is a separate field and defaults to https://gitlab.com."
        },
        {
          "q": "What does the agent see in GitLab?",
          "a": "Projects, issues, merge requests, comments, commits and CI/CD pipelines — exactly within your account permissions, the token grants nothing more."
        },
        {
          "q": "Does it work with a self-hosted instance?",
          "a": "Yes: enter the root URL of your own instance instead of https://gitlab.com when connecting, without /api/v4 at the end. The token has to be issued in the same instance the agent talks to."
        },
        {
          "q": "Does the agent write to GitLab?",
          "a": "By default the agent reads projects and reports back in chat. With the api scope writing is technically possible, but the agent confirms such actions with you before performing them."
        }
      ]
    }
  },
  {
    "key": "google_calendar",
    "name": "Google Calendar",
    "description": "Календарь и события Google Workspace",
    "category": "google",
    "auth_flow": "popup_oauth",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Планируйте встречи по календарям Google Workspace",
      "scenarios": [
        {
          "title": "План на сегодня и завтра",
          "desc": "Агент пройдёт по календарям аккаунта, включая подписанные командные, и назовёт, что назначено на сегодня и завтра и где накладки."
        },
        {
          "title": "Свободное окно под встречу",
          "desc": "Агент проверит занятость по нескольким календарям сразу и найдёт свободное окно нужной длины для всех участников."
        },
        {
          "title": "Событие с участниками и местом",
          "desc": "Агент заведёт встречу с участниками, местом, описанием и напоминанием, а при переносе сдвинет её вместе с приглашениями."
        },
        {
          "title": "Утренняя сводка по расписанию",
          "desc": "Агент пришлёт по расписанию сводку дня: сколько встреч, где наложения и какие часы остались свободными."
        },
        {
          "title": "Куда ушёл месяц",
          "desc": "Агент пройдёт по календарям за месяц окнами по датам, посчитает часы во встречах и покажет, какие регулярные созвоны съедают больше всего времени."
        },
        {
          "title": "Перенос повторяющейся серии",
          "desc": "Агент найдёт нужный экземпляр повторяющейся встречи, уточнит, править одну дату или всю цепочку, и перенесёт её только после вашего подтверждения."
        }
      ],
      "how_it_works": [
        "Агент ходит в Google Calendar API v3 по вашему запросу: читает список календарей аккаунта, события с участниками, местом, описанием и напоминаниями, экземпляры повторяющихся встреч и занятость сразу по нескольким календарям. Из этого он собирает план на сегодня и завтра, находит накладки, подбирает свободное окно нужной длины для всех участников и по расписанию присылает сводку дня с остатком свободных часов.",
        "Календарь Google устроен вокруг списка календарей конкретного аккаунта: агент видит ровно то, что в этом списке лежит, и обращается к каждому календарю отдельным запросом по его идентификатору. Уровень доступа тоже решает многое: на доступе к свободному времени видны только занятые интервалы без названий и участников, и накладку агент назовёт, а её причину — нет. Повторяющуюся встречу API отдаёт правилом, поэтому конкретные даты серии агент разворачивает сам.",
        "На запись агент создаёт события с участниками, местом, описанием и напоминанием, переносит их и удаляет. Здесь он осторожен: перенос и отмена рассылают приглашённым письма, поэтому изменение чужой встречи агент подтверждает до отправки, а у повторяющейся серии отдельно уточняет, править один экземпляр или всю цепочку. Правки пачкой он делает по одной встрече и показывает список до того, как хоть одно письмо уйдёт.",
        "Подключение — вход в аккаунт Google в отдельном окне, ключи копировать не нужно: доступ живёт токеном, который обновляется сам и гаснет, как только вы отзываете разрешение на странице доступа аккаунта. Частоту запросов агент выдерживает сам, чтобы не упереться в квоту Google, а длинные периоды забирает окнами по датам. Если календарь недоступен, доступ отозван или день действительно пуст, он скажет об этом прямо, а не покажет пустую таблицу."
      ],
      "requirements": [
        "Согласие на доступ ко всем календарям аккаунта: по одному выдать нельзя.",
        "В Google Workspace сторонние приложения не запрещены администратором."
      ],
      "faq": [
        {
          "q": "Как подключить Google Calendar?",
          "a": "Входом в аккаунт Google в отдельном окне: вы подтверждаете доступ, ключи копировать не нужно. Видны только календари из списка этого аккаунта, поэтому чужой подпишите заранее: «Другие календари» → «Подписаться на календарь»."
        },
        {
          "q": "Что агент видит в календаре?",
          "a": "Список календарей аккаунта, события с участниками, местом и описанием, экземпляры повторяющихся встреч и занятость по нескольким календарям сразу."
        },
        {
          "q": "Пишет ли агент в календарь?",
          "a": "Да: создаёт, переносит и удаляет события, если владелец выдал уровень «Изменять и просматривать все сведения о мероприятиях». На уровне доступа к свободному времени видна только занятость без названий."
        },
        {
          "q": "Что делать на корпоративном домене?",
          "a": "В Google Workspace администратор может закрыть сторонние приложения. Тогда окно авторизации заканчивается блокировкой, и доступ открывается в консоли администратора в разделе «Управление API»."
        }
      ]
    },
    "seo_en": {
      "headline": "Plan meetings across your Google Workspace calendars",
      "scenarios": [
        {
          "title": "Your plan for today and tomorrow",
          "desc": "The agent walks through the calendars in the account, subscribed team ones included, and tells you what is scheduled today and tomorrow and where the clashes are."
        },
        {
          "title": "A free slot for a meeting",
          "desc": "The agent checks busy time across several calendars at once and finds a free slot of the length you need for everyone involved."
        },
        {
          "title": "An event with attendees and a place",
          "desc": "The agent books a meeting with attendees, location, description and a reminder, and moves it together with the invitations when the time changes."
        },
        {
          "title": "Morning schedule summary",
          "desc": "The agent sends a scheduled summary of the day: how many meetings there are, where they overlap and which hours are still free."
        },
        {
          "title": "Where the month went",
          "desc": "The agent walks a month of calendars in date windows, counts the hours spent in meetings and shows which recurring calls eat the most time."
        },
        {
          "title": "Moving a recurring series",
          "desc": "The agent finds the right instance of a recurring meeting, asks whether to edit one date or the whole chain, and moves it only after you confirm."
        }
      ],
      "how_it_works": [
        "The agent calls the Google Calendar API v3 on your request: it reads the account calendar list, events with attendees, location, description and reminders, instances of recurring meetings and busy time across several calendars at once. Out of that it assembles the plan for today and tomorrow, finds the clashes, picks a free slot of the length everyone involved needs and sends a scheduled summary of the day with the free hours left.",
        "Google Calendar is built around the calendar list of one specific account: the agent sees exactly what that list holds and queries each calendar separately by its identifier. The access level decides a lot too: at the free/busy level only busy intervals are visible, without titles or attendees, so the agent will name a clash but not its reason. A recurring meeting arrives as a rule, so the agent expands the concrete dates of the series itself.",
        "For writing, the agent creates events with attendees, location, description and a reminder, moves them and deletes them. It is careful here: a move or a cancellation mails everyone invited, so a change to someone else meeting is confirmed before it goes out, and on a recurring series the agent asks separately whether to edit a single instance or the whole chain. Batched edits go one meeting at a time, with the list shown before a single mail leaves.",
        "Connecting is a sign-in to a Google account in a separate window, with no keys to copy: access lives as a token that refreshes itself and dies the moment you revoke the grant on the account access page. The agent holds the request rate itself so as not to run into the Google quota, and fetches long periods in date windows. If a calendar is unavailable, the grant was revoked or the day really is empty, it says so directly instead of showing an empty table."
      ],
      "requirements": [
        "Consent covering every calendar of the account: single ones cannot be excluded.",
        "In Google Workspace, third-party apps are not blocked by the admin."
      ],
      "faq": [
        {
          "q": "How do I connect Google Calendar?",
          "a": "By signing in to your Google account in a separate window: you approve access, there are no keys to copy. Only calendars from that account list are visible, so subscribe to someone else calendar in advance: Other calendars → Subscribe to calendar."
        },
        {
          "q": "What does the agent see in the calendar?",
          "a": "The list of calendars in the account, events with attendees, location and description, instances of recurring meetings, and busy time across several calendars at once."
        },
        {
          "q": "Does the agent write to the calendar?",
          "a": "Yes: it creates, moves and deletes events if the owner granted the Make changes to events level. At the free/busy access level only busy time is visible, without titles."
        },
        {
          "q": "What should I do on a corporate domain?",
          "a": "In Google Workspace the administrator can block third-party apps. The authorization window then ends in a block, and access is opened in the admin console under API controls."
        }
      ]
    }
  },
  {
    "key": "google_docs",
    "name": "Google Docs",
    "description": "Документы Google Docs — создание, редактирование, совместная работа",
    "category": "google",
    "auth_flow": "popup_oauth",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Собирайте договоры и отчёты в Google Docs по вводным",
      "scenarios": [
        {
          "title": "Черновик договора или отчёта",
          "desc": "Агент соберёт документ по вашим вводным — с разделами, таблицами и списками — и вернёт ссылку на готовый файл."
        },
        {
          "title": "Правки в документе по ссылке",
          "desc": "Агент внесёт изменения в существующий документ: перепишет разделы, обновит таблицы и заголовки, поправит стили абзацев."
        },
        {
          "title": "Замена цифр и дат по шаблону",
          "desc": "Агент найдёт по всему документу повторяющиеся значения и заменит их разом — суммы, даты и реквизиты не придётся править вручную."
        },
        {
          "title": "Регулярное обновление файла",
          "desc": "Агент по расписанию перепишет один и тот же документ свежими данными, и ссылка на него у получателей не изменится."
        },
        {
          "title": "Пересказ длинного документа",
          "desc": "Агент прочитает файл по ссылке, пройдёт по заголовкам, спискам и таблицам и вернёт выжимку: о чём разделы, какие сроки и суммы в них зашиты."
        },
        {
          "title": "Единый вид перед отправкой",
          "desc": "Агент сверит стили заголовков и абзацев по всему документу, приведёт их к одному виду и добавит колонтитулы и разрывы страниц там, где их не хватает."
        }
      ],
      "how_it_works": [
        "Агент работает с Google Docs API v1 и открывает документ по ссылке или идентификатору: читает текст и абзацы, таблицы, списки, колонтитулы, именованные диапазоны и стили. На этом он собирает черновик договора или отчёта по вашим вводным, переписывает разделы существующего файла, обновляет таблицы и заголовки и разом меняет по всему документу повторяющиеся суммы, даты и реквизиты.",
        "Документ для API — не сплошной текст, а последовательность элементов с числовыми позициями, и любая вставка сдвигает всё, что идёт следом. Поэтому агент не правит вслепую: сначала перечитывает структуру, выстраивает изменения так, чтобы соседние не ломали позиции друг друга, и отправляет их одной пачкой. Замена по всему файлу идёт по точному совпадению — часть слова или иной регистр под неё не попадут.",
        "На запись агент вставляет и удаляет текст по месту, меняет стили текста и абзацев, добавляет таблицы, списки, разрывы страниц и колонтитулы. Правка попадает сразу в живой документ, и отменить её через API нельзя — остаётся только история версий Google. Поэтому перед переписыванием целого раздела агент проговаривает, что именно заменяет, а после правки перечитывает файл и показывает результат.",
        "Подключение — вход в аккаунт Google в отдельном окне; запрашиваются права на документы и на адрес аккаунта. Google Диск в доступ не входит, поэтому найти документ по названию нельзя: нужна ссылка вида docs.google.com/document/d/ID/edit или сам идентификатор. Отказ по правам API возвращает кодом, а не пустым документом, и агент передаёт его как есть, вместо того чтобы сделать вид, что сохранил. Длинную правку он режет на пачки и выдерживает паузу между ними, чтобы не упереться в лимит запросов."
      ],
      "requirements": [
        "Документы в формате Google Docs, а не загруженные файлы .docx",
        "Право делиться документом: вы его владелец или редактор",
        "Личный аккаунт Google либо доступ к администратору домена"
      ],
      "faq": [
        {
          "q": "Как подключить Google Docs?",
          "a": "Входом в аккаунт Google в отдельном окне: вы подтверждаете доступ к документам, ключи копировать не нужно. На каждом рабочем документе назначьте этому аккаунту роль «Редактор» — с ролями «Читатель» и «Комментатор» правки не пройдут."
        },
        {
          "q": "Что агент видит в документе?",
          "a": "Структуру документа по ссылке: текст и абзацы, таблицы, списки, колонтитулы, именованные диапазоны и стили. Соседние документы аккаунта в выдачу не попадают."
        },
        {
          "q": "Пишет ли агент в документ?",
          "a": "Да: вставляет и удаляет текст по месту, заменяет значения по всему файлу, меняет стили текста и абзацев, добавляет таблицы, списки, разрывы страниц и колонтитулы."
        },
        {
          "q": "Почему нужна ссылка на документ?",
          "a": "Запрашиваемый доступ не включает Google Диск, поэтому поиска по названию нет. Документ адресуется ссылкой вида docs.google.com/document/d/ID/edit или самим идентификатором."
        }
      ]
    },
    "seo_en": {
      "headline": "Draft contracts and reports in Google Docs from your notes",
      "scenarios": [
        {
          "title": "A draft contract or report",
          "desc": "The agent assembles a document from your input — with sections, tables and lists — and returns a link to the finished file."
        },
        {
          "title": "Edits in a document you link to",
          "desc": "The agent changes an existing document: rewrites sections, updates tables and headings, and fixes paragraph styles."
        },
        {
          "title": "Swapping figures and dates in a template",
          "desc": "The agent finds repeated values across the whole document and replaces them in one pass — amounts, dates and legal details no longer need editing by hand."
        },
        {
          "title": "Scheduled refresh of a file",
          "desc": "On a schedule the agent rewrites the same document with fresh data, and the link recipients already have stays unchanged."
        },
        {
          "title": "A recap of a long document",
          "desc": "The agent reads the file you link to, walks its headings, lists and tables and returns a digest: what each section covers, which dates and amounts sit inside."
        },
        {
          "title": "One consistent look before sending",
          "desc": "The agent compares heading and paragraph styles across the document, brings them to a single look and adds headers, footers and page breaks where they are missing."
        }
      ],
      "how_it_works": [
        "The agent works with the Google Docs API v1 and opens a document by link or identifier: it reads text and paragraphs, tables, lists, headers and footers, named ranges and styles. On that basis it assembles a draft contract or report from your input, rewrites sections of an existing file, updates tables and headings, and swaps repeated amounts, dates and legal details across the whole document in one pass.",
        "To the API a document is not continuous text but a sequence of elements with numeric positions, and any insertion shifts everything that follows. So the agent does not edit blind: it re-reads the structure first, arranges the changes so that neighbouring ones do not break each other positions, and sends them as a single batch. A replacement across the file goes by exact match — part of a word or a different letter case will not be caught by it.",
        "For writing, the agent inserts and deletes text in place, changes text and paragraph styles, and adds tables, lists, page breaks, headers and footers. An edit lands straight in the live document and cannot be undone through the API — only the Google version history remains. That is why, before rewriting a whole section, the agent spells out what exactly it is replacing, and after the edit it re-reads the file and shows the result.",
        "Connecting is a sign-in to a Google account in a separate window; access to documents and to the account address is requested. Google Drive is not part of that access, so a document cannot be found by title: it takes a link like docs.google.com/document/d/ID/edit or the identifier itself. A refusal on permissions comes back from the API as a code rather than as an empty document, and the agent passes it on as it is instead of pretending it saved. A long edit is cut into batches with a pause between them, so the request quota is not exhausted mid-way."
      ],
      "requirements": [
        "Native Google Docs files, not uploaded .docx documents",
        "The right to share the document: you own it or edit it",
        "A personal Google account, or an admin you can reach"
      ],
      "faq": [
        {
          "q": "How do I connect Google Docs?",
          "a": "By signing in to your Google account in a separate window: you approve access to documents, there are no keys to copy. Give that account the Editor role on every working document — with the Viewer and Commenter roles the edits will not go through."
        },
        {
          "q": "What does the agent see in a document?",
          "a": "The structure of the document you link to: text and paragraphs, tables, lists, headers and footers, named ranges and styles. Other documents in the account never show up in the results."
        },
        {
          "q": "Does the agent write to a document?",
          "a": "Yes: it inserts and deletes text in place, replaces values across the whole file, changes text and paragraph styles, and adds tables, lists, page breaks, headers and footers."
        },
        {
          "q": "Why does it need a link to the document?",
          "a": "The access we request does not include Google Drive, so there is no search by title. A document is addressed by a link like docs.google.com/document/d/ID/edit or by the identifier itself."
        }
      ]
    }
  },
  {
    "key": "google_sheets",
    "name": "Google Sheets",
    "description": "Таблицы Google — листы, ячейки, диапазоны",
    "category": "google",
    "auth_flow": "popup_oauth",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "ИИ для Google Таблиц: считайте отчёты и спрашивайте по цифрам",
      "scenarios": [
        {
          "title": "Готовый отчёт в таблице",
          "desc": "Агент соберёт цифры, заведёт лист и запишет отчёт диапазонами — с шапкой, автошириной колонок и подсветкой значений выше порога."
        },
        {
          "title": "Ответы по данным листа",
          "desc": "Агент прочитает нужные листы и диапазоны и ответит на вопрос по цифрам, не заставляя открывать файл и листать вкладки."
        },
        {
          "title": "Дозапись итогов по расписанию",
          "desc": "Агент допишет строку с итогами дня в конец сводного листа по расписанию, не трогая то, что уже внесено руками выше."
        },
        {
          "title": "Сверка двух листов",
          "desc": "Агент сопоставит два диапазона по ключу, соберёт расхождения на отдельный лист и отсортирует их по величине разницы."
        },
        {
          "title": "Перезапись без потерь",
          "desc": "Агент перед перезаписью диапазона прочитает, что в нём лежит, и покажет, какие формулы сотрутся, — заменит значения только после вашего подтверждения."
        },
        {
          "title": "Формулы и их значения",
          "desc": "Агент покажет, где в ячейке лежит формула, а где вбитое руками число, и вернёт то из двух, что нужно задаче, — без подмены расчёта результатом."
        }
      ],
      "how_it_works": [
        "Агент ходит в Google Sheets API v4 и работает с той таблицей, ссылку или идентификатор которой вы дали: читает листы, диапазоны и значения ячеек. По ним он отвечает на вопрос по цифрам без открытия файла, собирает готовый отчёт с шапкой, автошириной колонок и подсветкой значений выше порога, сопоставляет два диапазона по ключу и выносит расхождения на отдельный лист, отсортировав по величине разницы.",
        "Списка файлов у Sheets API нет: он открывает ровно ту таблицу, адрес которой вы назвали, и по названию она не ищется. Отдельная ловушка Google: загруженный .xlsx в браузере открывается, а по API отдаёт ошибку, пока он не пересохранён в формат Google Таблиц. И ячейка с формулой хранит две вещи сразу — саму формулу и посчитанное значение, — так что агент запрашивает то из них, что нужно задаче.",
        "Дописать и перезаписать — разные операции, и агент их не путает: дозапись итогов дня добавляет строку в конец листа, не трогая внесённое руками выше, а перезапись диапазона стирает всё, что в нём было, включая формулы. Поэтому перед перезаписью агент читает диапазон, а когда исходные данные лучше не трогать — складывает результат на отдельный лист: сверка двух диапазонов не портит ни один из них.",
        "Подключение — вход в аккаунт Google в отдельном окне; запрашиваются права на таблицы и на адрес аккаунта, Google Диск в доступ не входит. Диапазоны агент адресует нотацией A1 и забирает их пачкой за один запрос, а не по ячейке, поэтому широкий отчёт не упирается в лимит частоты на середине. Если доступа к файлу нет или лист пуст, он говорит об этом прямо, а не показывает пустую таблицу."
      ],
      "requirements": [
        "Ссылка на таблицу или её идентификатор: по названию агент не ищет.",
        "Права на таблицы и адрес аккаунта: Google Диск в доступ не входит."
      ],
      "faq": [
        {
          "q": "Как подключить Google Sheets?",
          "a": "Входом в аккаунт Google в отдельном окне: вы подтверждаете доступ к таблицам, копировать ключи не нужно. Агент увидит ровно те файлы, что видит этот аккаунт, поэтому чужие таблицы попросите открыть кнопкой «Открыть доступ» с ролью «Редактор»."
        },
        {
          "q": "Что агент видит в таблицах?",
          "a": "Листы, диапазоны и значения ячеек той таблицы, ссылку на которую вы дали. Списка файлов у Sheets API нет, поэтому таблица адресуется только ссылкой или идентификатором из неё."
        },
        {
          "q": "Пишет ли агент в таблицу?",
          "a": "Да: перезаписывает диапазоны, дописывает строки в конец листа, очищает ячейки, добавляет и переименовывает листы, ставит форматирование, сортировку и условные правила."
        },
        {
          "q": "Почему не читается загруженный Excel?",
          "a": "Файл .xlsx открывается в браузере, но по API не читается и отдаёт ошибку. Откройте его и выберите «Файл» → «Сохранить как таблицу Google» — дальше агент работает с полученной копией."
        },
        {
          "q": "Работает ли агент с гугл-таблицами?",
          "a": "Гугл-таблицы и есть Google Sheets: агент читает листы и диапазоны той таблицы, ссылку на которую вы дали, отвечает по цифрам и записывает результат обратно — дозаписью в конец листа или перезаписью диапазона после вашего подтверждения."
        }
      ]
    },
    "seo_en": {
      "headline": "Crunch reports in Google Sheets and ask about the numbers",
      "scenarios": [
        {
          "title": "A finished report in a spreadsheet",
          "desc": "The agent gathers the numbers, creates a sheet and writes the report range by range — with a header row, auto-sized columns and values above your threshold highlighted."
        },
        {
          "title": "Answers from the data on a sheet",
          "desc": "The agent reads the sheets and ranges it needs and answers your question about the numbers, without making you open the file and flip through tabs."
        },
        {
          "title": "Scheduled append of daily totals",
          "desc": "On a schedule the agent appends a row with the totals of the day to the end of the summary sheet, leaving everything entered by hand above it untouched."
        },
        {
          "title": "Reconciling two sheets",
          "desc": "The agent matches two ranges by key, collects the discrepancies on a separate sheet and sorts them by the size of the difference."
        },
        {
          "title": "Overwriting a range without losses",
          "desc": "The agent reads a range before overwriting it and shows which formulas would be erased, replacing the values only once you have confirmed the change."
        },
        {
          "title": "Formulas and their values",
          "desc": "The agent shows where a cell holds a formula and where a hand-typed number, and returns whichever of the two the task needs instead of quietly swapping one for the other."
        }
      ],
      "how_it_works": [
        "The agent calls the Google Sheets API v4 and works with the spreadsheet whose link or identifier you gave: it reads sheets, ranges and cell values. From those it answers your question about the numbers without the file being opened, assembles a finished report with a header row, auto-sized columns and values above your threshold highlighted, matches two ranges by key and puts the discrepancies on a separate sheet sorted by the size of the difference.",
        "The Sheets API has no file listing: it opens exactly the spreadsheet you addressed, and it is not searchable by title. One Google trap of its own: an uploaded .xlsx opens in the browser but returns an error over the API until it has been re-saved into the Google Sheets format. And a cell with a formula holds two things at once — the formula itself and the calculated value — so the agent requests whichever of them the task needs.",
        "Appending and overwriting are different operations, and the agent does not confuse them: appending the totals of the day adds a row at the end of the sheet and leaves what was entered by hand above it untouched, while overwriting a range erases everything that was in it, formulas included. So before an overwrite the agent reads the range, and when the source data is better left alone it puts the result on a separate sheet: reconciling two ranges spoils neither of them.",
        "Connecting is a sign-in to a Google account in a separate window; access to spreadsheets and to the account address is requested, and Google Drive is not part of it. The agent addresses ranges in A1 notation and fetches them in one batched call rather than cell by cell, so a wide report does not run into the rate limit halfway through. If there is no access to the file or the sheet is empty, it says so directly instead of showing an empty table."
      ],
      "requirements": [
        "A link to the spreadsheet or its ID: the agent cannot search by title.",
        "Access to spreadsheets and the account address; Google Drive is not included."
      ],
      "faq": [
        {
          "q": "How do I connect Google Sheets?",
          "a": "By signing in to your Google account in a separate window: you approve access to spreadsheets, there are no keys to copy. The agent sees exactly the files that account sees, so ask for other people spreadsheets to be opened up with the Share button and the Editor role."
        },
        {
          "q": "What does the agent see in spreadsheets?",
          "a": "Sheets, ranges and cell values of the spreadsheet you gave a link to. The Sheets API has no file listing, so a spreadsheet is addressed only by a link or the identifier inside it."
        },
        {
          "q": "Does the agent write to a spreadsheet?",
          "a": "Yes: it overwrites ranges, appends rows to the end of a sheet, clears cells, adds and renames sheets, and applies formatting, sorting and conditional rules."
        },
        {
          "q": "Why is an uploaded Excel file not readable?",
          "a": "An .xlsx file opens in the browser but cannot be read over the API and returns an error. Open it and choose File → Save as Google Sheets — the agent then works with the resulting copy."
        },
        {
          "q": "Does the agent work with Google spreadsheets?",
          "a": "Google spreadsheets are exactly what it works with: the agent reads the sheets and ranges of the spreadsheet you gave a link to, answers on the figures and writes the result back — appending to the end of a sheet, or overwriting a range after your confirmation."
        }
      ]
    }
  },
  {
    "key": "google_slides",
    "name": "Google Slides",
    "description": "Презентации Google Slides — создание, редактирование, совместная работа",
    "category": "google",
    "auth_flow": "popup_oauth",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Превращайте текст в презентацию Google Slides",
      "scenarios": [
        {
          "title": "Черновик презентации из текста",
          "desc": "Агент разложит ваш текст по слайдам — титульный, тезисы, итоги — и вернёт ссылку на собранную колоду."
        },
        {
          "title": "Обновление цифр в колоде",
          "desc": "Агент обновит показатели и подписи сразу по всем слайдам существующей презентации, не перебирая их вручную и не ломая вёрстку."
        },
        {
          "title": "Заполнение шаблона слайдов",
          "desc": "Агент подставит данные в готовый шаблон: заменит текст в плейсхолдерах и картинки, оставив оформление колоды нетронутым."
        },
        {
          "title": "Ежемесячная презентация по расписанию",
          "desc": "Агент по расписанию пересоберёт отчётную колоду свежими цифрами: шаблон согласуете один раз, дальше обновление идёт само."
        },
        {
          "title": "Пересказ чужой колоды",
          "desc": "Агент прочитает слайды по ссылке — текст фигур, таблицы и подписи — и перескажет, о чём колода и какие цифры в ней заявлены, вместо листания шестидесяти страниц."
        },
        {
          "title": "Короткая версия колоды",
          "desc": "Агент уберёт слайды, которые не нужны этой аудитории: покажет список на удаление, дождётся подтверждения и сверит получившуюся колоду по миниатюрам."
        }
      ],
      "how_it_works": [
        "Агент работает с Google Slides API v1 и открывает колоду по ссылке или идентификатору между /presentation/d/ и /edit: читает слайды, текст в фигурах и таблицах, изображения, оформление страниц и миниатюры отдельных слайдов. На этом он раскладывает ваш текст по слайдам — титульный, тезисы, итоги, — обновляет показатели и подписи сразу по всей колоде и подставляет данные в готовый шаблон, не трогая его оформление.",
        "Презентация устроена иначе, чем документ: это не поток текста, а страницы с объектами, у каждого из которых своё место и размер, а сам текст живёт внутри фигур и ячеек таблиц. Поэтому «заменить по всей колоде» для агента означает пройти по текстовым фигурам каждого слайда. Вид страницы задают макет и тема: слайд, добавленный по макету шаблона, наследует оформление, а собранный из голых фигур — нет.",
        "Отсюда и осторожность на записи. Агент добавляет, дублирует и удаляет слайды, вставляет и заменяет текст, создаёт фигуры, таблицы и картинки, меняет стили текста и заливку страниц — но для отчётной колоды предпочитает продублировать слайд шаблона и подменить в нём текст, а не верстать заново координатами. Удаление слайда через API не отменить, поэтому его агент подтверждает, а результат сверяет по миниатюре.",
        "Подключение — вход в аккаунт Google в отдельном окне; запрашиваются права на презентации и на адрес аккаунта. Google Диск в доступ не входит, поэтому по названию колоду не найти — нужна ссылка или идентификатор. Правки уходят пачкой: несколько операций над колодой отправляются одним запросом, и если хоть одна из них не проходит, не применяется ни одна — колода не остаётся переделанной наполовину. Частоту запросов агент держит сам, а о нехватке прав или пустом шаблоне говорит прямо."
      ],
      "requirements": [
        "Аккаунт Google, в котором лежат нужные презентации",
        "Разрешённый доступ сторонних приложений в Google Workspace"
      ],
      "faq": [
        {
          "q": "Как подключить Google Slides?",
          "a": "Входом в аккаунт Google в отдельном окне: вы подтверждаете доступ к презентациям, ключи копировать не нужно. Для чужой колоды владелец даёт этому аккаунту роль «Редактор» через «Настройки доступа», иначе агент только прочитает слайды."
        },
        {
          "q": "Что агент видит в презентации?",
          "a": "Слайды колоды по ссылке: текст в фигурах и таблицах, изображения, оформление страниц и миниатюры отдельных слайдов. Другие презентации аккаунта не видны."
        },
        {
          "q": "Пишет ли агент в презентацию?",
          "a": "Да: добавляет, дублирует и удаляет слайды, вставляет и заменяет текст, создаёт фигуры, таблицы и картинки, меняет стили текста и заливку страниц."
        },
        {
          "q": "Почему нужна ссылка на колоду?",
          "a": "Запрашиваемый доступ не включает Google Диск, поэтому найти презентацию по названию нельзя. Нужна ссылка или идентификатор между /presentation/d/ и /edit."
        }
      ]
    },
    "seo_en": {
      "headline": "Turn your text into a Google Slides deck",
      "scenarios": [
        {
          "title": "A draft deck from your text",
          "desc": "The agent lays your text out across slides — title, key points, conclusions — and returns a link to the assembled deck."
        },
        {
          "title": "Refreshing the numbers in a deck",
          "desc": "The agent updates metrics and captions across every slide of an existing deck at once, without going through them by hand and without breaking the layout."
        },
        {
          "title": "Filling in a slide template",
          "desc": "The agent drops your data into a ready template: it replaces text in placeholders and images, leaving the design of the deck untouched."
        },
        {
          "title": "A monthly deck on schedule",
          "desc": "On a schedule the agent rebuilds the reporting deck with fresh numbers: you approve the template once, and the updates run on their own after that."
        },
        {
          "title": "Someone else's deck, retold",
          "desc": "The agent reads the slides you link to — shape text, tables and captions — and retells what the deck argues and which numbers it claims, instead of you clicking through sixty pages."
        },
        {
          "title": "A shorter cut of the deck",
          "desc": "The agent drops the slides this audience does not need: it lists what would be deleted, waits for your confirmation and checks the result against the thumbnails."
        }
      ],
      "how_it_works": [
        "The agent works with the Google Slides API v1 and opens a deck by link or by the identifier between /presentation/d/ and /edit: it reads slides, text in shapes and tables, images, page design and thumbnails of individual slides. On that basis it lays your text out across slides — title, key points, conclusions — refreshes metrics and captions across the whole deck at once, and drops data into a ready template without touching its design.",
        "A presentation is built differently from a document: it is not a stream of text but pages of objects, each with its own position and size, and the text itself lives inside shapes and table cells. So replacing something across the whole deck means, for the agent, walking the text shapes of every slide. The look of a page comes from its layout and theme: a slide added from a template layout inherits the design, one assembled out of bare shapes does not.",
        "Hence the caution when writing. The agent adds, duplicates and deletes slides, inserts and replaces text, creates shapes, tables and images, and changes text styles and page backgrounds — but for a reporting deck it prefers to duplicate a template slide and swap the text inside it rather than lay the slide out again by coordinates. Deleting a slide cannot be undone through the API, so the agent confirms it and checks the result against the thumbnail.",
        "Connecting is a sign-in to a Google account in a separate window; access to presentations and to the account address is requested. Google Drive is not part of it, so a deck cannot be found by title — a link or an identifier is needed. Edits travel in a batch: several operations on a deck go out as one request, and if any of them fails none is applied, so the deck is never left half-rebuilt. The agent holds the request rate itself, and states missing permissions or an empty template directly."
      ],
      "requirements": [
        "A Google account that holds the presentations you need",
        "Third-party app access allowed in Google Workspace"
      ],
      "faq": [
        {
          "q": "How do I connect Google Slides?",
          "a": "By signing in to your Google account in a separate window: you approve access to presentations, there are no keys to copy. For someone else deck the owner grants that account the Editor role in the sharing settings, otherwise the agent can only read the slides."
        },
        {
          "q": "What does the agent see in a presentation?",
          "a": "The slides of the deck you link to: text in shapes and tables, images, page design and thumbnails of individual slides. Other presentations in the account are not visible."
        },
        {
          "q": "Does the agent write to a presentation?",
          "a": "Yes: it adds, duplicates and deletes slides, inserts and replaces text, creates shapes, tables and images, and changes text styles and page backgrounds."
        },
        {
          "q": "Why does it need a link to the deck?",
          "a": "The access we request does not include Google Drive, so a presentation cannot be found by title. You need a link or the identifier between /presentation/d/ and /edit."
        }
      ]
    }
  },
  {
    "key": "gravitel",
    "name": "Гравител Облачная АТС",
    "description": "Облачная АТС Гравител — звонки, SMS, история, сотрудники, отделы, номера, АОН, баланс, кампании обзвона",
    "category": "messengers",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Считайте пропущенные звонки Гравител, не открывая кабинет АТС",
      "scenarios": [
        {
          "title": "Пропущенные и принятые звонки",
          "desc": "Агент поднимет историю звонков за нужный период и покажет, сколько вызовов приняли, сколько пропустили и по каким номерам."
        },
        {
          "title": "Звонок и SMS клиенту",
          "desc": "Агент позвонит клиенту с добавочного сотрудника, при необходимости подменит АОН и отправит SMS прямо из диалога, без входа в кабинет АТС."
        },
        {
          "title": "Кампании обзвона роботом",
          "desc": "Агент запустит звонок робота клиенту в кампании обзвона, проверит статус вызова и уберёт из очереди тех, кому звонить уже не нужно."
        },
        {
          "title": "Баланс и структура АТС",
          "desc": "Агент покажет остаток на счёте АТС, список сотрудников с добавочными, отделы и номера — чтобы понимать, кто на какой линии сидит."
        },
        {
          "title": "Кому так и не перезвонили",
          "desc": "Агент пройдёт по пропущенным за день и вычтет тех, кому уже перезвонили, — останется короткий список клиентов, до которых так и не дошли."
        },
        {
          "title": "Нагрузка по отделам",
          "desc": "Агент разложит звонки за неделю по отделам и добавочным и покажет, на кого приходится основной поток, а кто почти не поднимает трубку."
        }
      ],
      "how_it_works": [
        "Агент обращается к REST API Гравител и начинает со структуры АТС: сотрудники с добавочными, отделы, номера, персональные АОН и остаток на счёте. Дальше идёт история звонков за нужный период — сколько вызовов приняли, сколько пропустили и по каким номерам, — а рядом лежат очереди кампаний обзвона, так что видно и живые разговоры, и то, кому робот ещё не дозвонился.",
        "Звонок в облачной АТС никогда не уходит «из системы»: он инициируется от добавочного конкретного сотрудника, и АТС сначала поднимает его линию, а уже потом соединяет с клиентом. Поэтому результат не известен в момент запуска — агент проверяет статус вызова отдельным шагом. Пропущенные он тоже считает по истории за период, а не по счётчику на экране: только в истории видно, кто перезвонил, а кто нет.",
        "На запись агент звонит клиенту с добавочного сотрудника, отправляет SMS прямо из диалога, задаёт или снимает сотруднику персональный АОН и управляет звонками в кампании обзвона — запускает вызов робота и убирает из очереди тех, кому звонить уже не нужно. Подмену АОН он берёт из номеров вашей же АТС. По умолчанию агент работает на чтение, а перед звонком и SMS называет номер и текст.",
        "Ключ уходит в заголовке каждого запроса, отдельного логина у коннектора нет, а объём доступного равен объёму самой АТС: сотрудники, номера и история звонков той организации, на которую ключ выпущен. Историю за длинный период агент забирает страницами, а не одним запросом, и держит частоту в рамках лимита. Если данных за период нет, он скажет это прямо, а не покажет пустую таблицу."
      ],
      "requirements": [
        "Права администратора в кабинете Облачной АТС Гравител",
        "Сотрудники и номера заведены в АТС"
      ],
      "faq": [
        {
          "q": "Как подключить Гравител Облачную АТС?",
          "a": "API-ключом и доменом АТС. В кабинете установите «Интеграция по REST API» в меню «Интеграции», откройте её «Настройки» → подраздел «Авторизация» и скопируйте ключ и адрес. Из адреса нужен только домен вашей АТС."
        },
        {
          "q": "Что агент видит в Гравител?",
          "a": "Сотрудников с добавочными, отделы, номера АТС, историю и пропущенные звонки, персональные АОН, остаток на счёте и очереди кампаний обзвона."
        },
        {
          "q": "Пишет ли агент в АТС?",
          "a": "Может: инициировать звонок, отправить SMS, задать или снять персональный АОН сотруднику и управлять звонками в кампании обзвона. По умолчанию работает на чтение."
        },
        {
          "q": "Какая интеграция нужна в кабинете?",
          "a": "Именно «Интеграция по REST API». Соседний пункт «Интеграция по API Гравител» — предыдущее поколение API, с ним подключение не заработает."
        }
      ]
    },
    "seo_en": {
      "headline": "Count missed Gravitel calls without opening the PBX console",
      "scenarios": [
        {
          "title": "Missed and answered calls",
          "desc": "The agent pulls up call history for the period you need and shows how many calls were answered, how many were missed and from which numbers."
        },
        {
          "title": "A call and an SMS to a customer",
          "desc": "The agent dials a customer from an employee extension, substitutes the caller ID if needed and sends an SMS straight from the chat, without logging into the PBX account."
        },
        {
          "title": "Robot dialing campaigns",
          "desc": "The agent launches a robot call to a customer inside a dialing campaign, checks the call status and drops from the queue everyone who no longer needs a call."
        },
        {
          "title": "PBX balance and structure",
          "desc": "The agent shows the balance of the PBX account, the list of employees with extensions, departments and numbers — so you know who sits on which line."
        },
        {
          "title": "Who never got a call back",
          "desc": "The agent goes through the day's missed calls and subtracts everyone already called back, leaving a short list of customers nobody has reached."
        },
        {
          "title": "Load across departments",
          "desc": "The agent breaks the week's calls down by department and extension and shows who carries the main flow and who barely picks up the phone."
        }
      ],
      "how_it_works": [
        "The agent calls the Gravitel REST API and starts with the structure of the PBX: employees with extensions, departments, numbers, personal caller IDs and the account balance. Then comes call history for the period you need — how many calls were answered, how many were missed and from which numbers — and next to it sit the dialing campaign queues, so both live conversations and the people the robot has not reached yet are visible.",
        "A call in a cloud PBX never goes out «from the system»: it is started from the extension of a specific employee, and the PBX first raises their line and only then connects the customer. So the outcome is not known at launch — the agent checks the call status as a separate step. Missed calls are likewise counted from the history for the period rather than from an on-screen counter: only the history shows who called back and who did not.",
        "On the write side the agent dials a customer from an employee extension, sends an SMS straight from the chat, sets or clears a personal caller ID for an employee and manages calls inside a dialing campaign — launching a robot call and dropping from the queue everyone who no longer needs one. A substituted caller ID is taken from the numbers of your own PBX. By default the agent works read-only, and before a call or an SMS it names the number and the text.",
        "The key travels in the header of every request, the connector has no separate login of its own, and the scope available equals the scope of the PBX itself: the employees, numbers and call history of the organization the key was issued for. History over a long period is fetched page by page rather than in one request, and the rate is kept inside the limit. If there is no data for the period, the agent says so directly instead of showing an empty table."
      ],
      "requirements": [
        "Administrator rights in the Gravitel cloud PBX cabinet",
        "Employees and phone numbers already set up in the PBX"
      ],
      "faq": [
        {
          "q": "How do I connect Gravitel Cloud PBX?",
          "a": "With an API key and the PBX domain. In the account install Integration over REST API from the Integrations menu, open its Settings → the Authorization subsection and copy the key and the address. From that address you only need the domain of your PBX."
        },
        {
          "q": "What does the agent see in Gravitel?",
          "a": "Employees with extensions, departments, PBX numbers, call history and missed calls, personal caller IDs, the account balance and dialing campaign queues."
        },
        {
          "q": "Does the agent write to the PBX?",
          "a": "It can: start a call, send an SMS, set or clear a personal caller ID for an employee and manage calls inside a dialing campaign. By default it works read-only."
        },
        {
          "q": "Which integration do I need in the account?",
          "a": "Integration over REST API specifically. The neighbouring item, Integration over Gravitel API, is the previous generation of the API and the connection will not work with it."
        }
      ]
    }
  },
  {
    "key": "headhunter",
    "name": "HeadHunter (hh.ru)",
    "description": "Поиск вакансий, управление откликами и база резюме на hh.ru",
    "category": "hr",
    "auth_flow": "popup_oauth",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "short_name": "HeadHunter",
    "seo": {
      "headline": "Разбирайте отклики на вакансии и зовите сильных первыми",
      "scenarios": [
        {
          "title": "Разбор откликов",
          "desc": "Агент соберёт свежие отклики по активным вакансиям, разложит их по вакансиям и покажет, кого звать на интервью первым."
        },
        {
          "title": "Подбор по базе резюме",
          "desc": "Агент найдёт в базе резюме hh.ru кандидатов под открытую вакансию и вернёт короткий список с причиной по каждому."
        },
        {
          "title": "Переписка с кандидатами",
          "desc": "Агент напишет кандидату в отклике, отправит приглашение на интервью или переведёт отклик в отказ по вашему решению."
        },
        {
          "title": "Сводка по вакансиям",
          "desc": "Агент каждое утро пришлёт, сколько откликов пришло за сутки, по каким вакансиям тишина и что скоро уйдёт в архив."
        },
        {
          "title": "Просмотры против откликов",
          "desc": "Агент сопоставит статистику просмотров вакансии с числом откликов и покажет, где описание не цепляет: смотрят сотни, а доходит до отклика один-два."
        },
        {
          "title": "Продлить или убрать в архив",
          "desc": "Агент покажет вакансии на исходе срока, предложит продлить те, что ещё дают отклики, и уберёт в архив закрытые — после вашего подтверждения."
        }
      ],
      "how_it_works": [
        "Агент работает с hh.ru через официальный API api.hh.ru: активные и архивные вакансии, отклики вместе с перепиской по ним, статистику просмотров, базу резюме и список менеджеров компании. Из этого складывается разбор откликов по вакансиям, короткий список кандидатов под открытую позицию с причиной по каждому имени и утренняя сводка: сколько откликов пришло за сутки, по каким вакансиям тишина и что скоро уйдёт в архив.",
        "Отклик на hh.ru — не письмо, а отдельная сущность с собственной перепиской, поэтому агент читает ветку целиком, а не последнее сообщение, и различает, ответили кандидату или только открыли резюме. База резюме живёт отдельно от откликов: там своя выдача с фильтрами и своей постраничностью, а карточка приходит обезличенной, пока контакты не открыты. Поэтому кандидатов из поиска и кандидатов из откликов агент держит разными списками и не выдаёт одних за других.",
        "На запись агент умеет многое: создать и обновить вакансию, продлить её или убрать в архив, ответить в отклике, пригласить на интервью, перевести отклик в отказ. Делает он это по вашему решению, а не сам: приглашение и отказ уходят кандидату вживую и назад не отыгрываются, поэтому агент сначала показывает, кому и что собирается написать, и отправляет после подтверждения.",
        "Доступ выдаётся входом через hh.ru: вы подтверждаете его во всплывающем окне, токен возвращается сам и продлевается без вашего участия. Видит агент ровно то, что разрешено вашему менеджеру, частоту запросов к API держит в допустимых пределах, а поиск по базе укладывает в суточный лимит — 500 уникальных резюме на менеджера, поэтому сужает фильтры, а не выгребает базу подряд. Если данных нет из-за прав или лимита, он скажет об этом прямо, а не покажет пустую таблицу."
      ],
      "requirements": [
        "Аккаунт работодателя на hh.ru, а не соискателя",
        "Права администратора компании для выдачи прав менеджеру",
        "Запас суточного лимита — 500 резюме на менеджера"
      ],
      "faq": [
        {
          "q": "Как подключить HeadHunter (hh.ru)?",
          "a": "Входом через hh.ru: нажмите «Подключить» и подтвердите доступ во всплывающем окне — токен вернётся сам, вводить его руками не нужно. Подтверждайте под аккаунтом работодателя: доступ получит та учётка, под которой вы сидите в браузере."
        },
        {
          "q": "Что агент видит в hh.ru?",
          "a": "Активные и архивные вакансии, отклики и переписку по ним, статистику просмотров, базу резюме и список менеджеров компании — в пределах прав вашего менеджера."
        },
        {
          "q": "Пишет ли агент в hh.ru?",
          "a": "Может: создавать и обновлять вакансии, продлевать их и убирать в архив, отвечать в откликах, приглашать на интервью и менять статус отклика."
        },
        {
          "q": "Почему в резюме нет контактов?",
          "a": "Менеджеру не включено «Открытие контактов в резюме из базы» на странице «Менеджеры вакансий». Поиск по базе идёт в пределах суточного лимита — 500 уникальных резюме на менеджера."
        }
      ]
    },
    "seo_en": {
      "headline": "Triage vacancy responses and call the strongest ones first",
      "scenarios": [
        {
          "title": "Triaging responses",
          "desc": "The agent collects fresh responses to your active vacancies, groups them by vacancy and shows who to call in for an interview first."
        },
        {
          "title": "Sourcing from the resume database",
          "desc": "The agent finds candidates for an open vacancy in the HeadHunter resume database and returns a shortlist with a reason for every name."
        },
        {
          "title": "Messaging candidates",
          "desc": "The agent writes to a candidate inside a response, sends an interview invitation or moves the response to rejected once you decide."
        },
        {
          "title": "Vacancy digest",
          "desc": "Every morning the agent reports how many responses came in over the last day, which vacancies are silent and what is about to go into the archive."
        },
        {
          "title": "Views against responses",
          "desc": "The agent puts vacancy view statistics next to the number of responses and shows where the description falls flat: hundreds look, one or two actually apply."
        },
        {
          "title": "Prolong it or archive it",
          "desc": "The agent shows the vacancies running out of time, suggests prolonging the ones still bringing responses and archives the closed ones once you confirm."
        }
      ],
      "how_it_works": [
        "The agent works with hh.ru through the official api.hh.ru API: active and archived vacancies, responses together with the correspondence inside them, view statistics, the resume database and the list of company managers. Out of that come a triage of responses by vacancy, a shortlist of candidates for an open position with a reason for every name, and a morning digest: how many responses came in over the last day, which vacancies are silent and what is about to go into the archive.",
        "A response on hh.ru is not a letter but a separate entity with its own correspondence, so the agent reads the whole thread rather than the last message, and tells apart a candidate who was answered from one whose resume was merely opened. The resume database lives apart from responses: it has its own result list with filters and its own paging, and a card arrives depersonalised until the contacts are opened. So the agent keeps candidates from search and candidates from responses in separate lists and never passes one off as the other.",
        "On the writing side the agent can do a lot: create and update a vacancy, prolong it or move it to the archive, reply inside a response, invite a candidate to an interview, move a response to rejected. It does this on your decision, not on its own: an invitation and a rejection reach the candidate for real and cannot be played back, so the agent first shows who it is about to write to and what, and sends only after confirmation.",
        "Access is granted by signing in through hh.ru: you approve it in the popup, the token comes back on its own and is renewed without your involvement. The agent sees exactly what your manager account is allowed to see, holds the API request rate within the permitted range, and fits database search into the daily cap — 500 unique resumes per manager — so it narrows the filters instead of sweeping the database row by row. If data is missing because of permissions or the cap, it says so directly instead of showing an empty table."
      ],
      "requirements": [
        "An employer account on hh.ru, not a job seeker one",
        "Company administrator rights to grant manager permissions",
        "Room in the daily cap of 500 resumes per manager"
      ],
      "faq": [
        {
          "q": "How do I connect HeadHunter (hh.ru)?",
          "a": "By signing in through hh.ru: click Connect and approve access in the popup — the token comes back on its own, there is nothing to type by hand. Approve it under the employer account: access goes to whichever account you are signed into in the browser."
        },
        {
          "q": "What does the agent see in HeadHunter?",
          "a": "Active and archived vacancies, responses and the correspondence inside them, view statistics, the resume database and the list of company managers — within the permissions of your manager account."
        },
        {
          "q": "Does the agent write to HeadHunter?",
          "a": "It can: create and update vacancies, prolong them and move them to the archive, reply inside responses, invite candidates to interviews and change the status of a response."
        },
        {
          "q": "Why are there no contacts in a resume?",
          "a": "The manager does not have Opening contacts in resumes from the database enabled on the Vacancy managers page. Database search also runs within a daily cap of 500 unique resumes per manager."
        }
      ]
    }
  },
  {
    "key": "hrlink",
    "name": "HRlink КЭДО",
    "description": "Кадровый электронный документооборот — документы, сотрудники, заявления",
    "category": "hr",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "short_name": "HRlink",
    "seo": {
      "headline": "ИИ для HR: находите кадровые документы, зависшие без подписи",
      "scenarios": [
        {
          "title": "Документы без подписи",
          "desc": "Агент покажет, какие кадровые документы зависли без подписи и за кем из сотрудников числится задержка."
        },
        {
          "title": "Сверка реестра сотрудников",
          "desc": "Агент сверит сотрудников по юрлицам, подразделениям и должностям и найдёт пропуски в карточках."
        },
        {
          "title": "Заявления и график отпусков",
          "desc": "Агент соберёт поданные заявления и график отпусков и покажет, чьи отпуска начинаются на ближайшей неделе."
        },
        {
          "title": "Ознакомление с ЛНА",
          "desc": "Агент сверит реестр локальных нормативных актов с документами сотрудников и назовёт тех, кто ещё не ознакомлен."
        },
        {
          "title": "Печатная форма документа",
          "desc": "Агент найдёт нужный приказ или допсоглашение по сотруднику и дате, поднимет печатную форму и перескажет, что именно в ней записано."
        },
        {
          "title": "Понедельничная сводка кадровика",
          "desc": "Агент по понедельникам собирает свежие заявления, новые документы и просроченные подписания по всем юрлицам и присылает одним списком."
        }
      ],
      "how_it_works": [
        "Агент ходит в API HRlink на адрес вашего тенанта — по умолчанию portal.hr-link.ru — и читает кадровый контур целиком: документы и их печатные формы, заявления, сотрудников, юрлица, подразделения и должности, типы документов, реестр ЛНА и график отпусков. Из этих реестров он собирает то, ради чего их обычно и открывают: что зависло без подписи, у кого пропуски в карточке и чьи отпуска начинаются на ближайшей неделе.",
        "В КЭДО общий статус документа мало что говорит: подписание — это маршрут, и задержка всегда персональна. Поэтому агент раскрывает документ по участникам и называет конкретного сотрудника, за которым числится ожидание, а не просто помечает пачку неподписанной. Ознакомление с ЛНА устроено так же: отдельного флажка «ознакомлен» нет, есть документ у сотрудника, и агент сверяет реестр актов со списками документов, чтобы найти пропущенных.",
        "Записи агент не делает: подключение работает на чтение. Он не создаёт документы, не отправляет их на подписание и не подписывает за сотрудников — это остаётся в HRlink и на людях с полномочиями. Его результат — сведённый список: кто задерживает, чего не хватает в карточках, кого нужно догнать по ЛНА, со ссылками на конкретные документы, чтобы кадровик закрыл вопрос в своей системе.",
        "Реестры HRlink отдаются страницами, и агент дочитывает выборку до конца: иначе зависших документов оказалось бы ровно столько, сколько поместилось в один ответ. Печатные формы он поднимает только по тем документам, о которых спросили, а не выкачивает архив целиком. Объём видимого задаёт владелец токена — агент работает с теми юрлицами и подразделениями, что открыты ему. Частоту запросов он выдерживает сам, а про нехватку прав говорит прямо, а не показывает пустую таблицу."
      ],
      "requirements": [
        "Действующая лицензия HRlink КЭДО у вашей компании.",
        "Роль «Кадровик» у сотрудника, чьим токеном подключаетесь."
      ],
      "faq": [
        {
          "q": "Как подключить HRlink КЭДО?",
          "a": "Тремя полями: clientId, API-токен и адрес тенанта. Токен выпускает сотрудник с ролью «Кадровик» в меню профиля — «Получить API-токен», действует он год. clientId возьмите из ответа GET /api/v2/currentUser, а адрес укажите, если ваш тенант отличается от portal.hr-link.ru."
        },
        {
          "q": "Что агент видит в HRlink?",
          "a": "Кадровые документы и их печатные формы, заявления, сотрудников, юрлица, подразделения и должности, типы документов, реестр ЛНА и график отпусков."
        },
        {
          "q": "Пишет ли агент в HRlink?",
          "a": "Нет: подключение работает на чтение. Агент собирает и сверяет данные, но не создаёт документы и не подписывает их за сотрудников."
        },
        {
          "q": "Почему реестры отвечают 403?",
          "a": "У сотрудника, чьим токеном подключён HRlink, нет роли «Кадровик» в юрлице. Без неё пункт выдачи токена не появляется в меню, а реестры сотрудников и документов закрыты."
        },
        {
          "q": "Что делают ИИ-агенты для HR?",
          "a": "Агенты ведут рутину кадрового контура: показывают документы, зависшие без подписи, и называют, за кем именно задержка; сверяют реестр сотрудников по юрлицам, подразделениям и должностям; собирают заявления и график отпусков; находят тех, кто не ознакомлен с ЛНА. Подписывать за сотрудников агент не будет — подключение работает на чтение."
        },
        {
          "q": "Подойдёт ли ИИ для отдела кадров?",
          "a": "Да, если кадровый документооборот у вас ведётся в HRlink. Отдел кадров получает понедельничную сводку по свежим заявлениям, новым документам и просроченным подписаниям сразу по всем юрлицам — вместо ручного обхода реестров по каждому."
        }
      ]
    },
    "seo_en": {
      "headline": "Find the HR documents stuck without a signature",
      "scenarios": [
        {
          "title": "Documents left unsigned",
          "desc": "The agent shows which HR documents are stuck without a signature and which employees the delay sits with."
        },
        {
          "title": "Checking the employee register",
          "desc": "The agent cross-checks employees against legal entities, departments and positions and finds the gaps in their records."
        },
        {
          "title": "Applications and the vacation schedule",
          "desc": "The agent collects submitted applications and the vacation schedule and shows whose time off starts in the coming week."
        },
        {
          "title": "Acknowledgement of internal policies",
          "desc": "The agent compares the register of local regulations with employee documents and names everyone who has not acknowledged them yet."
        },
        {
          "title": "The printable form of a document",
          "desc": "The agent finds the order or addendum you need by employee and date, pulls up its printable form and retells what is actually written in it."
        },
        {
          "title": "Monday digest for HR",
          "desc": "The agent collects fresh applications, new documents and overdue signatures across every legal entity each Monday and sends them over as one list."
        }
      ],
      "how_it_works": [
        "The agent calls the HRlink API at your tenant address — portal.hr-link.ru by default — and reads the whole HR perimeter: documents and their printable forms, applications, employees, legal entities, departments and positions, document types, the register of local regulations and the vacation schedule. Out of those registers it assembles what people usually open them for: what is stuck without a signature, whose record has gaps and whose time off starts in the coming week.",
        "In HR document flow the overall document status says little: signing is a route, and a delay is always personal. So the agent breaks a document down by participant and names the specific employee the wait sits with, instead of simply marking a batch as unsigned. Acknowledgement of local regulations works the same way: there is no separate acknowledged flag, there is a document on the employee's side, and the agent compares the register of regulations against document lists to find who was missed.",
        "The agent does not write: the connection is read-only. It does not create documents, does not send them out for signing and does not sign on behalf of employees — that stays inside HRlink and with the people who hold the authority. Its output is a reconciled list: who is holding things up, what is missing from records, who still has to be caught up on the regulations, with links to the specific documents so an HR officer can close the matter in their own system.",
        "HRlink hands its registers back in pages, and the agent reads a selection to the end: otherwise there would be exactly as many stuck documents as fitted into one response. Printable forms are pulled only for the documents actually asked about, rather than downloading the whole archive. The scope of what is visible is set by the token's owner — the agent works with the legal entities and departments open to them. It holds the request rate itself, and about missing permissions it says so directly instead of showing an empty table."
      ],
      "requirements": [
        "An active HRlink HR EDF licence for your company.",
        "The HR officer role for the employee whose token you use."
      ],
      "faq": [
        {
          "q": "How do I connect HRlink HR EDF?",
          "a": "With three fields: clientId, an API token and the tenant address. The token is issued by an employee with the HR officer role from the profile menu — Get API token — and it is valid for a year. Take clientId from the response of GET /api/v2/currentUser, and enter the address if your tenant differs from portal.hr-link.ru."
        },
        {
          "q": "What does the agent see in HRlink?",
          "a": "HR documents and their printable forms, applications, employees, legal entities, departments and positions, document types, the register of local regulations and the vacation schedule."
        },
        {
          "q": "Does the agent write to HRlink?",
          "a": "No: the connection is read-only. The agent gathers and reconciles data, but it does not create documents and does not sign them on behalf of employees."
        },
        {
          "q": "Why do the registers return 403?",
          "a": "The employee whose token connects HRlink has no HR officer role in the legal entity. Without it the token issue item never appears in the menu, and the employee and document registers stay closed."
        },
        {
          "q": "What do AI agents do for HR?",
          "a": "They carry the routine of the HR circuit: they show the documents stuck without a signature and name exactly who the delay sits with; reconcile the employee register across legal entities, departments and positions; collect applications and the vacation schedule; and find who has not acknowledged the local regulations. The agent will not sign on behalf of employees — the connection is read-only."
        },
        {
          "q": "Does it suit a personnel department?",
          "a": "Yes, if your HR document flow runs in HRlink. The personnel department gets a Monday digest of fresh applications, new documents and overdue signings across every legal entity at once, instead of walking the registers by hand for each one."
        }
      ]
    }
  },
  {
    "key": "instagram",
    "name": "Instagram",
    "description": "Публикации, stories, комментарии и аналитика Instagram-аккаунта",
    "category": "messengers",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Отвечайте на комментарии Instagram, не листая ленту вручную",
      "scenarios": [
        {
          "title": "Комментарии без ответа",
          "desc": "Агент соберёт комментарии под последними публикациями, отделит вопросы от спама и ответит на те, что остались без реакции."
        },
        {
          "title": "Публикация поста и Reels",
          "desc": "Агент соберёт контейнер с фото, каруселью или Reel, дождётся его готовности и опубликует в аккаунт в назначенное время."
        },
        {
          "title": "Охваты и вовлечённость",
          "desc": "Агент выгрузит метрики аккаунта за период и по отдельным Reels и покажет, какие публикации сработали, а какие прошли мимо аудитории."
        },
        {
          "title": "Разбор чужого аккаунта",
          "desc": "Агент через business discovery посмотрит публичный профиль конкурента и найдёт топ-медиа по нужному хэштегу для сравнения с вашим."
        },
        {
          "title": "Откуда ваша аудитория",
          "desc": "Агент разложит подписчиков по странам и городам и сопоставит географию с охватом последних публикаций, чтобы стало видно, кто вас действительно читает."
        },
        {
          "title": "Токен на исходе",
          "desc": "Агент следит за сроком жизни токена и предупредит заранее — за дни до того, как подключение перестанет работать и отчёты оборвутся посреди недели."
        }
      ],
      "how_it_works": [
        "Агент ходит в Instagram Graph API от имени профессионального аккаунта — бизнеса или автора: читает профиль, ленту публикаций и Reels, комментарии под ними, метрики аккаунта и отдельных медиа, географию подписчиков. Поверх этого он считает охваты и вовлечённость за выбранный период, сравнивает публикации между собой и показывает, какие форматы аудитория досмотрела, а какие прошли мимо неё.",
        "Публикация в Instagram — это не один запрос, а два шага: сначала собирается медиа-контейнер с фото, каруселью или Reel, и только после того как Instagram его обработал, контейнер можно опубликовать. Агент выдерживает эту паузу и дожидается готовности, вместо того чтобы отправить пост вслепую и разбирать ошибку. Вторая особенность: суточная квота публикаций считается на аккаунт, а не на приложение.",
        "На запись агент делает ровно две вещи: публикует подготовленные посты, Reels и карусели и отвечает на комментарии. Перед публикацией он проверяет остаток суточной квоты и скажет, если она уже исчерпана. Комментарии сначала разбирает: отделяет вопросы от спама и показывает, на что собирается ответить. Отвечать он может только под публикациями самого аккаунта — упоминания в чужих постах API на ответ не отдаёт.",
        "Токен, на котором держится доступ, живёт ограниченный срок, и агент следит за ним сам: о приближающемся конце он предупреждает заранее, а не роняет отчёт посреди недели. Чужие аккаунты он смотрит только через business discovery — это публичные данные профессиональных профилей и топ-медиа по хэштегу, комментариев и приватной статистики там нет. Метрики Instagram отдаёт с задержкой в несколько часов и хранит их ограниченный период, поэтому длинную историю агент собирает по кускам и называет границу, дальше которой цифр уже не будет."
      ],
      "requirements": [
        "Профессиональный аккаунт Instagram — бизнес или автор",
        "Бизнес-портфолио Meta, к которому привязан аккаунт",
        "Токен живёт 60 дней — потом подключение нужно обновить",
        "Суточный лимит публикаций на аккаунт не исчерпан"
      ],
      "faq": [
        {
          "q": "Как подключить Instagram?",
          "a": "Токеном доступа: переведите аккаунт в профессиональный, создайте приложение на developers.facebook.com, в разделе «Instagram» включите нужные права и нажмите «Generate token». Токен начинается с IGAA и живёт 60 дней."
        },
        {
          "q": "Что агент видит в Instagram?",
          "a": "Профиль аккаунта, публикации и Reels, комментарии, метрики аккаунта и отдельных медиа, географию подписчиков, а также публичные данные по хэштегам."
        },
        {
          "q": "Пишет ли агент в Instagram?",
          "a": "Может: публиковать фото, Reels и карусели и отвечать на комментарии — если приложению выданы права instagram_business_content_publish и manage_comments."
        },
        {
          "q": "Какие лимиты у публикаций?",
          "a": "Instagram ограничивает число постов в сутки на аккаунт; агент проверяет остаток лимита перед публикацией и скажет, если квота на сегодня уже исчерпана."
        }
      ]
    },
    "seo_en": {
      "headline": "Reply to Instagram comments without scrolling the feed by hand",
      "scenarios": [
        {
          "title": "Comments with no reply",
          "desc": "The agent collects comments under your latest posts, separates real questions from spam and answers the ones nobody has reacted to."
        },
        {
          "title": "Publishing a post or a Reel",
          "desc": "The agent builds a container with a photo, a carousel or a Reel, waits for it to be ready and publishes it to the account at the time you set."
        },
        {
          "title": "Reach and engagement",
          "desc": "The agent pulls account metrics for a period and for individual Reels and shows which posts landed and which passed the audience by."
        },
        {
          "title": "A look at someone else account",
          "desc": "Through business discovery the agent checks a competitor public profile and finds the top media for a hashtag you name, to compare against your own."
        },
        {
          "title": "Where your audience lives",
          "desc": "The agent breaks followers down by country and city and lines that geography up against the reach of recent posts, so you can see who actually reads you."
        },
        {
          "title": "Before the token expires",
          "desc": "The agent watches the lifetime of the access token and warns you days ahead, before the connection stops working and reports break off mid-week."
        }
      ],
      "how_it_works": [
        "The agent calls the Instagram Graph API on behalf of a professional account — a business or a creator: it reads the profile, the feed of posts and Reels, the comments under them, metrics for the account and for individual media, and follower geography. On top of that it calculates reach and engagement for the period you choose, compares posts against each other and shows which formats the audience watched through and which passed it by.",
        "Publishing on Instagram is not one request but two steps: first a media container with a photo, a carousel or a Reel is assembled, and only after Instagram has processed it can the container be published. The agent holds that pause and waits for readiness instead of firing the post off blind and then dealing with the error. The second specific: the daily publishing quota is counted per account, not per app.",
        "There are exactly two things the agent does as writes: it publishes prepared posts, Reels and carousels, and it replies to comments. Before publishing it checks how much of the daily quota is left and says so if it is already used up. Comments are sorted through first: real questions are separated from spam, and it shows what it intends to answer. It can only reply under the account's own posts — the API hands over no reply to a mention in someone else's.",
        "The token the access rests on lives for a limited time, and the agent watches it itself: it warns ahead of the expiry instead of dropping a report in the middle of the week. Other accounts are visible only through business discovery, that is, public data of professional profiles and top media for a hashtag, with no comments and no private statistics. Instagram serves metrics with a delay of several hours and keeps them for a limited window, so a long history is assembled in pieces and the agent names the boundary beyond which there are no figures."
      ],
      "requirements": [
        "An Instagram professional account — business or creator",
        "A Meta business portfolio the account is linked to",
        "The token lives 60 days — after that reconnect the integration",
        "The daily per-account publishing quota not used up"
      ],
      "faq": [
        {
          "q": "How do I connect Instagram?",
          "a": "With an access token: switch the account to professional, create an app at developers.facebook.com, enable the permissions you need in the Instagram section and click Generate token. The token starts with IGAA and lives for 60 days."
        },
        {
          "q": "What does the agent see in Instagram?",
          "a": "The account profile, posts and Reels, comments, metrics for the account and for individual media, follower geography, and public hashtag data."
        },
        {
          "q": "Does the agent write to Instagram?",
          "a": "It can: publish photos, Reels and carousels and reply to comments — provided the app has been granted instagram_business_content_publish and manage_comments."
        },
        {
          "q": "What are the publishing limits?",
          "a": "Instagram caps the number of posts per account per day; the agent checks the remaining limit before publishing and tells you if the quota for today is already used up."
        }
      ]
    }
  },
  {
    "key": "kaiten",
    "name": "Kaiten",
    "description": "Управление проектами — доски, карточки, спринты, пространства",
    "category": "pm",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Разбирайте карточки Kaiten по доскам и держите сроки",
      "scenarios": [
        {
          "title": "Разбор карточек по доскам",
          "desc": "Агент соберёт карточки по всем доступным доскам и покажет, что просрочено и что висит без ответственного."
        },
        {
          "title": "Карточка из обсуждения",
          "desc": "Агент заведёт карточку в нужном пространстве и колонке, проставит ответственного, срок и теги и допишет комментарий."
        },
        {
          "title": "Движение по колонкам",
          "desc": "Агент перенесёт карточку в другую колонку, обновит её поля и уберёт в архив то, что команда уже сделала."
        },
        {
          "title": "Утренняя сводка по доске",
          "desc": "Агент пришлёт сводку по доске к началу дня и отдельно предупредит о новой карточке, комментарии или файле."
        },
        {
          "title": "Кто чем загружен",
          "desc": "Агент разложит карточки пространства по ответственным и покажет, у кого сколько в работе и чьи сроки горят на этой неделе."
        },
        {
          "title": "Что решили в комментариях",
          "desc": "Агент прочитает комментарии и вложения по карточке, соберёт из обсуждения принятые решения и покажет, что осталось несогласованным."
        }
      ],
      "how_it_works": [
        "Агент ходит в API вашего Kaiten по адресу, который вы указали при подключении, — облачный https://ваша-компания.kaiten.ru или собственный домен, если Kaiten стоит на ваших серверах. Он читает пространства, доски и колонки, карточки со сроками, ответственными, тегами, чек-листами и пользовательскими свойствами, комментарии и приложенные файлы, а из этого собирает разбор по доскам: что просрочено, что висит без ответственного, что не двигалось.",
        "Устройство Kaiten агент учитывает буквально: состояние работы здесь задаётся не отдельным полем статуса, а колонкой, в которой лежит карточка, поэтому «сделано» он определяет по положению на доске, а не по надписи в самой карточке. Структуру он читает так же буквально: пространство, доска, колонка, карточка — четыре уровня, и один и тот же вопрос про просроченное на уровне доски и на уровне пространства даёт разные списки, поэтому агент всегда называет срез, по которому считал.",
        "На запись агент делает ровно то, о чём его попросили: заводит карточку в нужном пространстве и колонке, проставляет ответственного, срок и теги, дописывает комментарий, переносит карточку между колонками и досками, убирает готовое в архив. Перед переносом он проверяет, что доска и колонка существуют и открыты ключу, а после изменения перечитывает карточку — чтобы показать её фактическое состояние, а не то, что отправил.",
        "Частоту обращений агент выдерживает сам, чтобы не упереться в ограничения сервера, и большие доски забирает страницами, а не одним запросом. О новых карточках, комментариях и файлах он узнаёт вебхуками Kaiten, а не опросом по кругу, поэтому свежая карточка попадает в сводку без задержки на следующий обход. Если данных нет или ключ их не видит, агент скажет об этом прямо, а не покажет пустую таблицу."
      ],
      "requirements": [
        "Права на нужные пространства и доски у вашей учётной записи",
        "Вебхуки Kaiten, если о новой карточке нужно узнавать сразу"
      ],
      "faq": [
        {
          "q": "Как подключить Kaiten?",
          "a": "Двумя полями: API-ключ и адрес вашего Kaiten. Ключ создаётся в «Настройки профиля» → «Ключ доступа API» → «+ Создать ключ» и выглядит как UUID из 36 символов. Адрес возьмите из адресной строки — это https://ваша-компания.kaiten.ru или свой домен, если Kaiten стоит на ваших серверах."
        },
        {
          "q": "Что агент видит в Kaiten?",
          "a": "Пространства, доски, карточки, комментарии, чек-листы, теги, пользовательские свойства и участников — ровно те, что открыты владельцу ключа."
        },
        {
          "q": "Пишет ли агент в Kaiten?",
          "a": "Да: создаёт и обновляет карточки, переносит их между колонками и досками, добавляет комментарии и убирает готовые карточки в архив."
        },
        {
          "q": "Узнает ли агент о новой карточке сам?",
          "a": "Да, если настроить вебхуки Kaiten: агент получает события о создании и обновлении карточек, новых комментариях и приложенных файлах."
        }
      ]
    },
    "seo_en": {
      "headline": "Triage Kaiten cards across boards and hold the deadlines",
      "scenarios": [
        {
          "title": "Card triage across boards",
          "desc": "The agent pulls cards from every board you can access and shows what is overdue and what has no assignee."
        },
        {
          "title": "A card straight from the discussion",
          "desc": "The agent creates a card in the right space and column, sets the assignee, due date and tags, and adds a comment."
        },
        {
          "title": "Moving cards through columns",
          "desc": "The agent moves a card to another column, updates its fields and archives whatever the team has already finished."
        },
        {
          "title": "Morning board digest",
          "desc": "The agent sends a board digest at the start of the day and pings you separately about a new card, comment or file."
        },
        {
          "title": "Who is carrying what",
          "desc": "The agent breaks the cards of a space down by assignee and shows how much each person has in flight and whose deadlines are burning this week."
        },
        {
          "title": "What was agreed in the comments",
          "desc": "The agent reads the comments and attachments on a card, pulls the decisions out of the discussion and shows what is still unsettled."
        }
      ],
      "how_it_works": [
        "The agent calls the API of your Kaiten at the address you entered when connecting — the cloud https://your-company.kaiten.ru or your own domain if Kaiten runs on your servers. It reads spaces, boards and columns, cards with their due dates, assignees, tags, checklists and custom properties, comments and attached files, and out of that assembles a triage across boards: what is overdue, what has no assignee, what has not moved.",
        "The agent takes the way Kaiten is built literally: the state of work here is set not by a separate status field but by the column the card sits in, so it reads «done» from the position on the board rather than from a label inside the card itself. It reads the structure just as literally: space, board, column and card are four levels, and the same question about what is overdue gives different lists at board level and at space level, so the agent always names the slice it counted on.",
        "When writing, the agent does exactly what it was asked for: it creates a card in the right space and column, sets the assignee, due date and tags, adds a comment, moves the card between columns and boards, and archives what is finished. Before a move it checks that the board and the column exist and are open to the key, and after a change it re-reads the card — so it shows the actual state rather than what it sent.",
        "The agent holds the request rate itself so as not to run into the server limits, and takes large boards page by page rather than in a single call. About new cards, comments and files it learns from Kaiten webhooks rather than by polling in circles, so a fresh card reaches the digest without waiting for the next sweep. If data is missing or the key cannot see it, the agent says so directly instead of showing an empty table."
      ],
      "requirements": [
        "Rights to the spaces and boards you need on your account",
        "Kaiten webhooks, if new cards must reach you immediately"
      ],
      "faq": [
        {
          "q": "How do I connect Kaiten?",
          "a": "Two fields: an API key and the address of your Kaiten. Create the key under Profile settings, then API access key, then Create key — it looks like a 36-character UUID. Take the address from the address bar: it is https://your-company.kaiten.ru or your own domain if Kaiten runs on your servers."
        },
        {
          "q": "What does the agent see in Kaiten?",
          "a": "Spaces, boards, cards, comments, checklists, tags, custom properties and members — exactly the ones the key owner can open."
        },
        {
          "q": "Does the agent write to Kaiten?",
          "a": "Yes: it creates and updates cards, moves them between columns and boards, adds comments and archives finished cards."
        },
        {
          "q": "Will the agent notice a new card on its own?",
          "a": "Yes, if you set up Kaiten webhooks: the agent receives events about created and updated cards, new comments and attached files."
        }
      ]
    }
  },
  {
    "key": "kaspi",
    "name": "Kaspi.kz",
    "description": "Магазин на Kaspi.kz — заказы, позиции, товары, отзывы, города и точки выдачи (Shop API v2, JSON:API)",
    "category": "marketplaces",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Держите заказы Kaspi под контролем прямо в чате",
      "scenarios": [
        {
          "title": "Контроль заказов Kaspi по статусам",
          "desc": "Агент проверит новые заказы, найдёт зависшие в обработке и напомнит, где горят сроки передачи в доставку."
        },
        {
          "title": "Анализ продаж магазина",
          "desc": "Агент сведёт продажи по товарам и периодам, покажет топ-позиции и динамику выручки в тенге."
        },
        {
          "title": "Мониторинг отзывов",
          "desc": "Агент соберёт свежие отзывы по товарам, выделит негатив и подготовит ответы."
        },
        {
          "title": "Города и точки выдачи",
          "desc": "Агент разложит заказы по городам и точкам выдачи и покажет, где забирают чаще всего, а в какие точки доставка почти не идёт."
        },
        {
          "title": "Что в среднем чеке",
          "desc": "Агент пройдёт по позициям заказов, посчитает средний чек и число товаров в заказе и покажет, какие позиции чаще всего берут вместе."
        },
        {
          "title": "Разбор отказов",
          "desc": "Агент отберёт заказы в отменённых состояниях, сведёт их по карточкам товаров и покажет, на каких позициях отказы повторяются чаще остальных."
        }
      ],
      "how_it_works": [
        "Агент работает с магазином через Shop API v2 — тот же интерфейс, что стоит за кабинетом продавца Kaspi.kz. Он читает заказы и их позиции, карточки товаров, отзывы, города и точки выдачи, а суммы считает в тенге, как они и приходят из казахстанского кабинета. Продажи сводятся по товарам и периодам, заказы — по статусам, и в ответ вы получаете разбор, а не выгрузку, которую нужно открывать в таблице.",
        "Устройство данных здесь трёхступенчатое: сам заказ не несёт списка товаров — сначала агент забирает его позиции, а от каждой позиции переходит к карточке товара. Поэтому вопрос «что именно у нас купили за неделю» стоит нескольких обходов, и агент проходит их постранично, а не пытается вытянуть всё одним запросом. Фильтр по состоянию заказа он ставит на стороне Kaspi, чтобы не тащить архив ради свежих сделок.",
        "Уведомлений Kaspi не присылает, так что новые и зависшие заказы агент видит в момент, когда вы спрашиваете или когда он проверяет их по расписанию. Прежде чем назвать заказ проблемным, он перечитывает текущее состояние — статус в Kaspi меняется быстрее, чем успевает устареть прошлая сводка. Ответы на отзывы агент готовит текстом и показывает вам: публикация остаётся вашим шагом в кабинете.",
        "Токен уходит отдельным заголовком, без OAuth и без входа под вашей учётной записью, и отзывается в любой момент, что мгновенно закрывает агенту доступ. Видит агент ровно тот магазин, которому принадлежит токен, — чужой заказ по номеру он не достанет. Выборки идут постранично и с фильтром по датам на стороне Kaspi, поэтому длинный период не превращается в одну неподъёмную выгрузку. Частоту запросов агент выдерживает сам, а если раздел пуст или токен отозван — скажет об этом прямо, а не покажет пустую таблицу."
      ],
      "requirements": [
        "Статус продавца Kaspi.kz с доступом в кабинет магазина",
        "Магазин в казахстанском кабинете: суммы и заказы берутся оттуда"
      ],
      "faq": [
        {
          "q": "Что нужно для подключения Kaspi.kz?",
          "a": "API-токен из кабинета продавца Kaspi (Shop API v2). Токен хранится в зашифрованном виде и отзывается в кабинете в любой момент."
        },
        {
          "q": "Какие разделы кабинета видит агент?",
          "a": "Заказы и позиции, товары, отзывы, города и точки выдачи — то, что отдаёт Shop API. Агент работает с данными по запросу и не выгружает их «про запас»."
        },
        {
          "q": "Подходит ли для продавцов из Казахстана?",
          "a": "Да, коннектор рассчитан на продавцов Kaspi.kz: суммы в тенге, статусы заказов и логика точек выдачи соответствуют казахстанскому кабинету."
        }
      ]
    },
    "seo_en": {
      "headline": "Keep Kaspi orders under control right in the chat",
      "scenarios": [
        {
          "title": "Kaspi order control by status",
          "desc": "The agent checks new orders, finds the ones stuck in processing and reminds you where the handover-to-delivery deadlines are running out."
        },
        {
          "title": "Shop sales analysis",
          "desc": "The agent aggregates sales by product and period, shows the top positions and the revenue trend in tenge."
        },
        {
          "title": "Review monitoring",
          "desc": "The agent collects fresh product reviews, highlights the negative ones and drafts replies."
        },
        {
          "title": "Cities and pickup points",
          "desc": "The agent breaks orders down by city and pickup point and shows where buyers collect most often and which points barely see any deliveries."
        },
        {
          "title": "What the average basket holds",
          "desc": "The agent walks the order entries, works out the average check and the number of items per order and shows which products are bought together most often."
        },
        {
          "title": "Digging into refusals",
          "desc": "The agent picks out orders in cancelled states, aggregates them by product card and shows which positions get refused more often than the rest."
        }
      ],
      "how_it_works": [
        "The agent works with the shop through Shop API v2 — the same interface that sits behind the Kaspi.kz seller account. It reads orders and their entries, product cards, reviews, cities and pickup points, and counts amounts in tenge, exactly as they come from the Kazakh account. Sales are aggregated by product and period, orders by status, and what you get back is an analysis rather than an export you then have to open in a spreadsheet.",
        "The data here is built in three steps: an order itself carries no list of goods — the agent first fetches its entries, and from every entry moves on to the product card. So the question of what exactly was bought over the week costs several passes, and the agent walks them page by page instead of trying to pull everything in one request. The order state filter is applied on the Kaspi side, so the archive is not dragged along for the sake of recent deals.",
        "Kaspi sends no notifications, so the agent sees new and stuck orders at the moment you ask or when it checks them on a schedule. Before calling an order a problem, it re-reads the current state — a status in Kaspi changes faster than the previous summary manages to go stale. Replies to reviews the agent prepares as text and shows to you: publishing them stays your step in the account.",
        "The token travels in a header of its own, with no OAuth and no sign-in under your account, and it can be revoked at any moment, which cuts the agent off instantly. The agent sees exactly the shop the token belongs to — someone else's order will not come back by number. Selections run page by page with the date filter applied on the Kaspi side, so a long period never turns into one unliftable export. The agent holds the request rate itself, and if a section is empty or the token has been revoked it says so directly instead of showing an empty table."
      ],
      "requirements": [
        "Kaspi.kz seller status with access to the shop account",
        "A store in the Kazakh account: amounts and orders come from there"
      ],
      "faq": [
        {
          "q": "What do I need to connect Kaspi.kz?",
          "a": "An API token from the Kaspi seller account (Shop API v2). The token is stored encrypted and can be revoked in the account at any moment."
        },
        {
          "q": "Which parts of the account does the agent see?",
          "a": "Orders and their entries, products, reviews, cities and pickup points — whatever Shop API returns. The agent works with the data on request and never exports it just in case."
        },
        {
          "q": "Is it suitable for sellers in Kazakhstan?",
          "a": "Yes, the connector is built for Kaspi.kz sellers: amounts in tenge, order statuses and pickup point logic all match the Kazakh seller account."
        }
      ]
    }
  },
  {
    "key": "kontur_extern",
    "name": "Контур.Экстерн",
    "description": "Электронная отчётность — черновики, документообороты, организации, сертификаты",
    "category": "docflow",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "ИИ для налоговой: держите сроки ответа по всем организациям",
      "scenarios": [
        {
          "title": "Сроки ответа контролирующим органам",
          "desc": "Агент соберёт документообороты по всем организациям учётной записи и покажет, где срок ответа налоговой или фонду истекает первым."
        },
        {
          "title": "Статусы сданной отчётности",
          "desc": "Агент покажет по каждому отправленному отчёту, принят он, отклонён или ждёт квитанции, и соберёт причины отказов в один список."
        },
        {
          "title": "Истекающие сертификаты подписи",
          "desc": "Агент найдёт организации, у которых сертификат подписанта истекает в ближайший месяц, — раньше, чем на нём встанет отправка."
        },
        {
          "title": "Черновики, которые не отправлены",
          "desc": "Агент сведёт черновики отчётов по организациям и формам и покажет, какие остались неотправленными к отчётной дате."
        },
        {
          "title": "Черновик перед подписью",
          "desc": "Агент проверит комплектность черновика и вложенных документов, сверит организацию и форму, поднимет найденные ошибки и остановится перед подписанием."
        },
        {
          "title": "Репетиция на песочнице",
          "desc": "Агент пройдёт весь путь отчёта на тестовой площадке testkontur.ru с тестовым сертификатом — ничего не сдавая в налоговую и не трогая боевые данные."
        }
      ],
      "how_it_works": [
        "Агент ходит в API Экстерна сразу по всем организациям учётной записи: читает черновики отчётов и вложенные в них документы, документообороты с налоговой и фондами вместе с ответными квитанциями и список сертификатов подписантов. Из этого он строит картину, которой в кабинете нет одним экраном: где срок ответа контролирующему органу истекает первым, какие отчёты приняты, какие отклонены и какие черновики не ушли к отчётной дате.",
        "В электронной отчётности отправка — не событие, а цепочка: отчёт уходит, потом приходит подтверждение оператора, потом квитанция о приёме или отказ, и между шагами проходят часы. Поэтому отправленный отчёт ещё не сданный, и агент различает эти состояния, а причины отказов собирает в один список, а не оставляет каждую внутри своего документооборота. Истекающий сертификат подписанта он показывает заранее, до того как на нём встанет отправка.",
        "Отправить отчёт за вас агент не берётся: сдача идёт цепочкой асинхронных задач и требует подписи КЭП, которую Экстерн сам не создаёт. Агент проверяет комплектность черновика, сверяет организацию и форму, поднимает найденные ошибки и останавливается перед подписанием — дальше действует человек с сертификатом. Пройти сценарий целиком, ничего не сдав, можно на отдельной песочнице testkontur.ru с тестовым сертификатом.",
        "Каждый запрос агент подписывает двумя ключами сразу — коротким токеном и постоянным api-key, — и когда час жизни токена истекает, обновляет его сам, не прерывая разбор. Видит он ровно те организации, которые открыты учётной записи, и по каждой ходит отдельно: сводка по группе компаний складывается из нескольких обходов и занимает больше времени, чем вопрос про одно юрлицо. Если по организации за период ничего нет, агент скажет об этом прямо, а не покажет пустую таблицу."
      ],
      "requirements": [
        "Договор с Контуром — без него боевая площадка закрыта",
        "Учётная запись Контура с доступом к нужным организациям",
        "Действующий сертификат электронной подписи у подписанта"
      ],
      "faq": [
        {
          "q": "Как подключить Контур.Экстерн?",
          "a": "Двумя ключами: токеном доступа со scope extern.api, который выдаёт OpenID-провайдер Контура, и api-key вида GUID из кабинета интеграций. И то и другое открывает менеджер по заявке на сайте Экстерна — самостоятельно ключи не выпускаются."
        },
        {
          "q": "Что агент видит в Экстерне?",
          "a": "Организации учётной записи, черновики отчётов и вложенные в них документы, документообороты с контролирующими органами и ответные квитанции, а также список сертификатов — в пределах прав учётной записи."
        },
        {
          "q": "Может ли агент отправить отчёт?",
          "a": "Отправка идёт цепочкой асинхронных задач и требует подписи КЭП, которую Экстерн не создаёт сам. Агент проверяет и собирает данные, а подписание и отправку оставляет человеку с сертификатом."
        },
        {
          "q": "Есть ли тестовая площадка?",
          "a": "Да, у подключения предусмотрен отдельный адрес песочницы на testkontur.ru с собственной учётной записью и тестовым сертификатом. Боевая площадка открывается по договору с Контуром."
        },
        {
          "q": "Поможет ли ИИ с ответом на требование налоговой?",
          "a": "Требование агент найдёт среди документооборотов, покажет срок ответа и соберёт по нему картину: что запрошено, какие документы уже есть в базе, чего не хватает. Подписание КЭП и саму отправку он не делает — это остаётся человеку с сертификатом."
        }
      ]
    },
    "seo_en": {
      "headline": "Keep tax response deadlines in view across all organisations",
      "scenarios": [
        {
          "title": "Response deadlines for regulators",
          "desc": "The agent collects docflows across every organisation in the account and shows where the deadline to answer the tax office or a fund runs out first."
        },
        {
          "title": "Status of filed reporting",
          "desc": "For each submitted report the agent shows whether it was accepted, rejected or is still waiting for a receipt, and gathers the rejection reasons into one list."
        },
        {
          "title": "Signing certificates about to expire",
          "desc": "The agent finds organisations whose signer certificate expires within the next month — before it blocks submissions."
        },
        {
          "title": "Drafts that were never sent",
          "desc": "The agent aggregates report drafts by organisation and form and shows which ones are still unsent as the filing date arrives."
        },
        {
          "title": "A draft before signing",
          "desc": "The agent checks that the draft and its attached documents are complete, verifies the organisation and the form, raises the errors it finds and stops before signing."
        },
        {
          "title": "A dry run in the sandbox",
          "desc": "The agent walks the whole reporting path on the testkontur.ru sandbox with a test certificate — filing nothing with the tax office and touching no production data."
        }
      ],
      "how_it_works": [
        "The agent calls the Extern API across every organisation in the account at once: it reads report drafts and the documents attached to them, the docflows with the tax office and the funds together with their response receipts, and the list of signer certificates. Out of that it builds the picture the account never shows on one screen: where the deadline to answer a regulator runs out first, which reports were accepted, which were rejected and which drafts never left before the filing date.",
        "In electronic reporting a submission is not an event but a chain: the report goes out, then the operator confirmation arrives, then an acceptance receipt or a refusal, with hours passing between the steps. A submitted report is therefore not yet a filed one, and the agent keeps those states apart, gathering the rejection reasons into a single list instead of leaving each one buried inside its own docflow. An expiring signer certificate is surfaced early, before it blocks a submission.",
        "The agent does not take on submitting a report for you: filing runs as a chain of asynchronous tasks and requires a qualified electronic signature, which Extern does not create by itself. The agent checks that a draft is complete, verifies the organisation and the form, raises the errors it finds and stops before signing — from there a person with the certificate acts. The whole scenario can be walked through without filing anything on the separate testkontur.ru sandbox with a test certificate.",
        "Every request carries both keys at once — the short-lived token and the permanent api-key — and when the token's hour runs out the agent refreshes it itself without interrupting the analysis. It sees exactly the organisations the account has access to, and walks each of them separately: a summary across a group of companies is assembled from several passes and takes longer than a question about one legal entity. If there is nothing for an organisation over the period, the agent says so directly instead of showing an empty table."
      ],
      "requirements": [
        "A contract with Kontur — without it production stays closed",
        "A Kontur account with access to the organisations you need",
        "A valid electronic signature certificate for the signer"
      ],
      "faq": [
        {
          "q": "How do I connect Kontur.Extern?",
          "a": "With two keys: an access token with the extern.api scope issued by the Kontur OpenID provider, and a GUID-style api-key from the integrations account. Both are opened by a manager after a request on the Extern website — you cannot issue the keys yourself."
        },
        {
          "q": "What does the agent see in Extern?",
          "a": "Organisations in the account, report drafts and the documents attached to them, docflows with the regulators and their response receipts, plus the list of certificates — within the permissions of the account."
        },
        {
          "q": "Can the agent submit a report?",
          "a": "Submission runs as a chain of asynchronous tasks and requires a qualified electronic signature, which Extern does not create by itself. The agent checks and assembles the data, and leaves signing and submission to a person with the certificate."
        },
        {
          "q": "Is there a test environment?",
          "a": "Yes, the connection supports a separate sandbox address on testkontur.ru with its own account and a test certificate. The production environment is opened under a contract with Kontur."
        },
        {
          "q": "Can the AI help answer a tax authority demand?",
          "a": "The agent finds the demand among the docflows, shows the response deadline and assembles the picture around it: what was asked for, which documents already exist, what is missing. Signing with a qualified certificate and the submission itself stay with a person who holds the certificate."
        }
      ]
    }
  },
  {
    "key": "kontur_focus",
    "name": "Контур.Фокус",
    "description": "Проверка контрагентов по ИНН/ОГРН — реквизиты, аналитика рисков, мониторинг",
    "category": "docflow",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Проверяйте контрагента по ИНН до того, как подпишете договор",
      "scenarios": [
        {
          "title": "Проверка контрагента перед сделкой",
          "desc": "Агент по ИНН вернёт реквизиты, статус, руководителя, адрес и ОКВЭД и скажет, действующая ли компания и что настораживает."
        },
        {
          "title": "Скрининг списка поставщиков",
          "desc": "Агент прогонит сотни ИНН пачками и вернёт тех, кто ликвидирован, реорганизуется или сменил адрес и руководителя."
        },
        {
          "title": "Суды, банкротства и приставы",
          "desc": "Агент соберёт по компании арбитражные дела, признаки банкротства и исполнительные производства и оценит, чем это грозит сделке."
        },
        {
          "title": "Мониторинг изменений по контрагентам",
          "desc": "Агент по расписанию сверит список мониторинга и пришлёт, у кого с прошлой проверки сменились статус, руководитель или адрес."
        },
        {
          "title": "Связи и общие учредители",
          "desc": "Агент раскрутит связанные организации контрагента — общих учредителей, директоров и адреса — и покажет, не тянется ли цепочка к уже проблемной компании."
        },
        {
          "title": "Масштаб бизнеса по отчётности",
          "desc": "Агент возьмёт финансовые показатели по годам и историю госзакупок и покажет, сходится ли обещанный оборот с тем, что видно в реестрах."
        }
      ],
      "how_it_works": [
        "Агент обращается к API Фокуса по ИНН или ОГРН: тянет реквизиты и сведения ЕГРЮЛ и ЕГРИП, экспресс-отчёт по рискам, аналитику по арбитражным делам, банкротствам, финансам, исполнительным производствам и госзакупкам, связанные организации и списки мониторинга. Списки поставщиков он прогоняет пачками, а не по одному, и возвращает не выгрузку целиком, а тех, кто ликвидирован, реорганизуется или сменил адрес и руководителя.",
        "Фокус — витрина государственных реестров, и это задаёт границу доверия. Запись в ЕГРЮЛ отстаёт от события: смена директора или адреса появляется после регистрации, а не в день решения, поэтому статус «действующая» — это состояние реестра, а не доказательство живого бизнеса. Агент читает признаки в связке — дела в судах, производства у приставов, финансы, недостоверность сведений — и объясняет, чем набор грозит сделке, а не выносит вердикт одним словом.",
        "Писать в Фокус почти нечего: данные о компаниях в нём справочные и агентом не меняются. Единственное действие на запись — добавление ИНН в список мониторинга, чтобы отслеживать изменения по контрагенту дальше; по расписанию агент сверяет этот список и присылает, у кого с прошлой проверки сменились статус, руководитель или адрес. Всё остальное — чтение, проверка и сведение фактов в понятный ответ.",
        "Суточный лимит запросов агент считает своим бюджетом: длинный список контрагентов он разбивает на пачки, одну и ту же компанию в пределах проверки не запрашивает дважды и предупреждает, когда остаток лимита подходит к концу. Ответ Фокуса — это поля реестра, поэтому агент сводит их в человеческий текст: расшифровывает коды видов деятельности и статусы, а суммы по делам и производствам собирает в итог по контрагенту. Если метод в тариф не входит или данных по компании нет, он говорит об этом прямо, вместо пустого ответа."
      ],
      "requirements": [
        "Договор с Контуром на Фокус, оформленный на вашу компанию.",
        "Тариф Фокуса с суточным лимитом запросов под вашу нагрузку."
      ],
      "faq": [
        {
          "q": "Как подключить Контур.Фокус?",
          "a": "Одним ключом доступа. Ключ приходит письмом от Контура после заявки на сайте Фокуса — в интерфейсе сервиса он не показывается. В заявке сразу просите метод «Реквизиты», иначе запросы вернутся отказом по правам."
        },
        {
          "q": "Что агент видит в Фокусе?",
          "a": "Реквизиты и сведения ЕГРЮЛ и ЕГРИП, экспресс-отчёт по рискам, аналитику по судам, банкротствам, финансам, приставам и госзакупкам, связанные организации и списки мониторинга — в пределах методов вашего тарифа."
        },
        {
          "q": "Пишет ли агент что-то в Фокус?",
          "a": "Фокус — справочный сервис, данные о компаниях в нём не меняются. Единственная запись — добавление ИНН в список мониторинга, чтобы отслеживать изменения по контрагенту."
        },
        {
          "q": "Что с лимитами и набором методов?",
          "a": "Суточный лимит запросов и доступные методы определяются тарифом, а не подключением. Если метод в тариф не входит, агент скажет об этом прямо, а не вернёт пустой ответ."
        }
      ]
    },
    "seo_en": {
      "headline": "Vet a counterparty by tax number before you sign the contract",
      "scenarios": [
        {
          "title": "Vetting a counterparty before a deal",
          "desc": "By tax number the agent returns the company details, status, director, address and activity codes, and tells you whether the company is active and what looks off."
        },
        {
          "title": "Screening a supplier list",
          "desc": "The agent runs hundreds of tax numbers in batches and returns the companies that were liquidated, are being reorganised or changed their address and director."
        },
        {
          "title": "Lawsuits, bankruptcies and bailiffs",
          "desc": "The agent collects arbitration cases, signs of bankruptcy and enforcement proceedings for a company and assesses what that means for the deal."
        },
        {
          "title": "Monitoring changes across counterparties",
          "desc": "On a schedule the agent rechecks the monitoring list and reports whose status, director or address has changed since the last check."
        },
        {
          "title": "Ties and shared founders",
          "desc": "The agent unwinds the related organisations of a counterparty — shared founders, directors and addresses — and shows whether the chain leads to an already troubled company."
        },
        {
          "title": "Business size from the filings",
          "desc": "The agent takes the yearly financials and the public procurement history and shows whether the turnover you were promised matches what the registers actually hold."
        }
      ],
      "how_it_works": [
        "The agent queries the Focus API by tax number or state registration number: it pulls company details and records from the state registers of legal entities and sole traders, an express risk report, analytics on arbitration cases, bankruptcies, financials, enforcement proceedings and public procurement, related organisations and monitoring lists. Supplier lists are run in batches rather than one at a time, and what comes back is not the whole export but the companies that were liquidated, are being reorganised or changed their address and director.",
        "Focus is a window onto state registers, and that sets the limit of trust. A register entry lags behind the event: a change of director or address appears once it is registered, not on the day it was decided, so an active status is the state of the register, not proof of a living business. The agent reads the signals together — court cases, bailiff proceedings, financials, flagged unreliable data — and explains what the combination means for the deal instead of passing a one-word verdict.",
        "There is almost nothing to write into Focus: the company data in it is reference data and the agent does not change it. The only write action is adding a tax number to a monitoring list to keep tracking a counterparty; on a schedule the agent rechecks that list and reports whose status, director or address has changed since the last check. Everything else is reading, verifying and pulling the facts together into a clear answer.",
        "The agent treats the daily request limit as its budget: a long counterparty list is split into batches, the same company is never queried twice within one check, and it warns you when the remaining quota runs low. What Focus returns are register fields, so the agent turns them into readable text: it spells out activity codes and statuses and adds up the amounts across court cases and enforcement proceedings into a single figure per counterparty. If a method is outside the plan or there is no data on a company, it says so directly instead of returning an empty answer."
      ],
      "requirements": [
        "A Kontur contract for Focus signed for your company.",
        "A Focus plan whose daily request limit covers your load."
      ],
      "faq": [
        {
          "q": "How do I connect Kontur.Focus?",
          "a": "With a single access key. Kontur sends the key by email after a request on the Focus website — it is never shown in the service interface. Ask for the Requisites method right in the request, otherwise the queries will come back as permission errors."
        },
        {
          "q": "What does the agent see in Focus?",
          "a": "Company details and records from the state registers of legal entities and sole traders, an express risk report, analytics on lawsuits, bankruptcies, financials, bailiffs and public procurement, related organisations and monitoring lists — within the methods of your plan."
        },
        {
          "q": "Does the agent write anything to Focus?",
          "a": "Focus is a reference service, and company data in it does not change. The only write is adding a tax number to a monitoring list to track changes for a counterparty."
        },
        {
          "q": "What about limits and the set of methods?",
          "a": "The daily request limit and the available methods are set by your plan, not by the connection. If a method is not in the plan, the agent says so directly instead of returning an empty answer."
        }
      ]
    }
  },
  {
    "key": "langfuse",
    "name": "Langfuse",
    "description": "Langfuse LLM observability — трейсы, генерации, скоры, сессии, промпты, датасеты",
    "category": "dev",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Разбирайте трейсы Langfuse и ловите просадки качества",
      "scenarios": [
        {
          "title": "Разбор трейсов за сутки",
          "desc": "Агент разберёт трейсы за сутки и покажет, где генерации падали и на каких шагах терялось больше всего времени."
        },
        {
          "title": "Просадка качества ответов",
          "desc": "Агент сопоставит скоры с сессиями и назовёт диалоги, в которых качество ответов просело сильнее всего."
        },
        {
          "title": "Сводка по наблюдаемости",
          "desc": "Агент пришлёт сводку по расписанию: сколько трейсов, какая доля ошибок и как изменились скоры за выбранный период."
        },
        {
          "title": "Промпты и датасеты",
          "desc": "Агент поднимет версии промптов и элементы датасетов проекта, чтобы связать правку промпта с изменением скоров."
        },
        {
          "title": "Разбор одного диалога",
          "desc": "Агент склеит трейсы сессии в один диалог и развернёт дерево наблюдений — видно, на каком шаге ответ ушёл не туда и сколько времени это стоило."
        },
        {
          "title": "Что покрыто датасетом",
          "desc": "Агент поднимет элементы датасета вместе с привязанными трейсами и скорами и покажет, какие случаи уже проверены, а какие остались без единой оценки."
        }
      ],
      "how_it_works": [
        "Агент читает публичный API Langfuse: трейсы и вложенные в них генерации, скоры, сессии, версии промптов и элементы датасетов проекта. На этом он строит разбор — сколько трейсов было за период и какая доля из них завершилась ошибкой, на каких шагах терялось время, как двигались скоры и какие диалоги просели по качеству сильнее остальных. Тот же разбор он присылает сводкой по расписанию.",
        "Трейс здесь не плоская запись, а дерево наблюдений, поэтому «медленно» на уровне трейса ещё не значит медленную генерацию: время может уходить в соседний шаг, и агент называет конкретное звено. Скор тоже живёт отдельной сущностью, привязанной к трейсу, а сессия склеивает много трейсов в один диалог — просадку качества агент ищет по этой связке, а не по одной оценке в отрыве от разговора.",
        "Наблюдаемость агент только читает: собственных трейсов он в ваш проект не отправляет и версии промптов не меняет без явного запроса — правка промпта остаётся вашим действием, агент лишь связывает её с изменением скоров. Вебхуков у Langfuse в этом подключении нет, поэтому о просадке он сообщает по вашему вопросу или по согласованному расписанию сводок, а не в момент, когда она случилась.",
        "Ключи агент хранит зашифрованными и передаёт basic-авторизацией на каждый запрос; отзыв пары в списке ключей гасит подключение сразу, без ожидания истечения срока. Пара действует на один проект: соседние проекты той же организации агент не видит, под каждый нужна своя пара. Длинные периоды он забирает страницами и держит невысокую частоту запросов, чтобы один отчёт не съел лимит проекта. Когда данных за период нет, агент говорит об этом прямо, а не рисует пустой график."
      ],
      "requirements": [
        "Роль Owner или Admin в проекте Langfuse.",
        "Проект Langfuse, в который уже пишутся трейсы."
      ],
      "faq": [
        {
          "q": "Как подключить Langfuse?",
          "a": "Парой ключей проекта: откройте нужный проект → Settings → «API Keys» и создайте пару. Публичный ключ начинается с pk-lf-, секретный — с sk-lf-. Если проект не в EU-регионе, укажите host: например, https://us.cloud.langfuse.com или домен своей установки."
        },
        {
          "q": "Что агент видит в Langfuse?",
          "a": "Трейсы и генерации, скоры, сессии, версии промптов и датасеты одного проекта: ключи выдаются на проект, а не на всю организацию."
        },
        {
          "q": "Пишет ли агент в Langfuse?",
          "a": "По умолчанию агент читает наблюдаемость и отчитывается в чате: собственных трейсов он не отправляет и промпты не меняет без вашего запроса."
        },
        {
          "q": "Нужна ли отдельная роль?",
          "a": "Пару ключей создаёт только Owner или Admin проекта — Member и Viewer раздел настроек не откроют. Самому агенту достаточно уже созданной пары ключей."
        }
      ]
    },
    "seo_en": {
      "headline": "Go through Langfuse traces and catch quality drops",
      "scenarios": [
        {
          "title": "Trace review for the last 24 hours",
          "desc": "The agent goes through a day of traces and shows where generations failed and which steps lost the most time."
        },
        {
          "title": "Answer quality drop",
          "desc": "The agent matches scores to sessions and names the conversations where answer quality fell the most."
        },
        {
          "title": "Observability digest",
          "desc": "The agent sends a digest on schedule: how many traces there were, what share of them failed and how scores moved over the chosen period."
        },
        {
          "title": "Prompts and datasets",
          "desc": "The agent pulls the prompt versions and dataset items of the project so you can tie a prompt edit to a change in scores."
        },
        {
          "title": "Digging into one conversation",
          "desc": "The agent glues the traces of a session into one conversation and unfolds the tree of observations — you see which step the answer went wrong on and what it cost in time."
        },
        {
          "title": "What the dataset covers",
          "desc": "The agent pulls dataset items together with the traces and scores attached to them and shows which cases are already checked and which have no rating at all."
        }
      ],
      "how_it_works": [
        "The agent reads the Langfuse public API: traces and the generations nested inside them, scores, sessions, prompt versions and the dataset items of the project. On top of that it builds the analysis — how many traces there were over the period and what share of them ended in an error, which steps lost time, how scores moved and which conversations dropped in quality the most. The same analysis arrives as a digest on schedule.",
        "A trace here is not a flat record but a tree of observations, so slow at the trace level does not yet mean a slow generation: the time may be going into a neighbouring step, and the agent names the specific link. A score likewise lives as its own entity attached to a trace, while a session glues many traces into one conversation — the agent looks for a quality drop across that connection, not at a single rating detached from the dialogue.",
        "The agent only reads observability data: it sends no traces of its own into your project and does not change prompt versions without an explicit request — editing a prompt stays your action, the agent merely ties it to the change in scores. This connection has no webhooks from Langfuse, so it reports a drop when you ask or on the digest schedule you agreed, not at the moment the drop happened.",
        "The keys are stored encrypted and sent as basic auth with every request; revoking the pair in the key list kills the connection at once, with no waiting for an expiry. The pair covers a single project: neighbouring projects of the same organisation stay invisible, and each one needs its own pair. Long periods are fetched page by page at a deliberately modest request rate, so one report does not eat the project quota. When there is no data for the period, the agent says so directly instead of drawing an empty chart."
      ],
      "requirements": [
        "The Owner or Admin role in the Langfuse project.",
        "A Langfuse project that already receives traces."
      ],
      "faq": [
        {
          "q": "How do I connect Langfuse?",
          "a": "With a project key pair: open the project, go to Settings, then API Keys, and create a pair. The public key starts with pk-lf-, the secret one with sk-lf-. If the project is not in the EU region, set host: for example, https://us.cloud.langfuse.com or the domain of your own installation."
        },
        {
          "q": "What does the agent see in Langfuse?",
          "a": "Traces and generations, scores, sessions, prompt versions and datasets of one project: keys are issued per project, not for the whole organisation."
        },
        {
          "q": "Does the agent write to Langfuse?",
          "a": "By default the agent reads observability data and reports in chat: it sends no traces of its own and does not change prompts without your request."
        },
        {
          "q": "Is a separate role required?",
          "a": "Only a project Owner or Admin can create a key pair — Member and Viewer cannot open the settings section. The agent itself only needs a key pair that already exists."
        }
      ]
    }
  },
  {
    "key": "linear",
    "name": "Linear",
    "description": "Linear: задачи (issues), проекты, команды, циклы, лейблы, комментарии, workflow-статусы",
    "category": "pm",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Держите цикл Linear под контролем прямо из чата",
      "scenarios": [
        {
          "title": "Состояние текущего цикла",
          "desc": "Агент покажет по циклу, какие issue стоят без движения, что просрочено и на кого из команды навешано больше всего."
        },
        {
          "title": "Issue из обсуждения",
          "desc": "Агент заведёт issue в нужной команде и проекте, проставит лейблы, приоритет и workflow-статус и добавит комментарий."
        },
        {
          "title": "Сводка по проектам",
          "desc": "Агент соберёт по проектам, что закрыто за неделю, что переехало дальше и какие issue висят дольше срока."
        },
        {
          "title": "Реакция на новые issue",
          "desc": "Агент по вебхукам Linear отследит новые issue, правки и комментарии и сообщит о них сразу, как они появились."
        },
        {
          "title": "Что на мне на этой неделе",
          "desc": "Агент соберёт issue, назначенные на вас во всех доступных командах, разложит их по приоритету и сроку и скажет, что горит сегодня, а что подождёт."
        },
        {
          "title": "Разбор необработанных issue",
          "desc": "Агент найдёт issue без ответственного, лейбла или цикла, покажет их одним списком и, если у ключа есть право Write, проставит лейблы и приоритет."
        }
      ],
      "how_it_works": [
        "Агент работает с Linear через один GraphQL-эндпоинт api.linear.app/graphql: там же issue, проекты, команды, циклы, лейблы, комментарии, workflow-статусы и участники. Запрос перечисляет нужные поля явно, поэтому за состоянием цикла агент идёт одним обращением, а не собирает картину из десятка выгрузок: что стоит без движения, что просрочено, на кого из команды навешано больше всего.",
        "Важная особенность Linear — workflow-статусы принадлежат командам, а не воркспейсу: у каждой команды свой набор состояний со своими названиями, и одинаково подписанные колонки в двух командах остаются двумя разными статусами. Поэтому агент сначала определяет команду issue и только потом подбирает статус из её набора, а не переносит задачу в состояние соседней команды по совпадению названия.",
        "На запись агент заводит issue в нужной команде и проекте, проставляет лейблы, приоритет и workflow-статус, пишет комментарии и убирает issue в архив — но только если у ключа есть право Write. Ключ без него читает и считает, и об этом агент скажет заранее, а не будет молча упираться в отказ. После изменения он перечитывает issue, чтобы показать её фактическое состояние, а не отправленный запрос.",
        "Границы видимого задаёт сам ключ: если при выпуске доступ сужен до конкретных команд, остальной воркспейс агенту виден не будет, и разговор идёт только о них. Длинные выборки Linear отдаёт страницами по курсору, поэтому список issue агент дочитывает до конца, а не обрывает на первой сотне. Частоту запросов он выдерживает сам, о новых issue и комментариях узнаёт вебхуками, а при нехватке прав говорит прямо, а не показывает пустую таблицу."
      ],
      "requirements": [
        "Аккаунт участника воркспейса Linear",
        "Настройка «Member API keys» включена администратором",
        "Роль администратора, если ключу нужен доступ Admin"
      ],
      "faq": [
        {
          "q": "Как подключить Linear?",
          "a": "Персональным API-ключом: в Linear откройте Settings → «Security & access» → «Personal API keys» → «New API key», выдайте ключу права и скопируйте строку, которая начинается с lin_api_ — она показывается только один раз."
        },
        {
          "q": "Что агент видит в Linear?",
          "a": "Issue, проекты, команды, циклы, лейблы, комментарии, workflow-статусы и участников через GraphQL API — в пределах доступа ключа, который можно сузить до конкретных команд."
        },
        {
          "q": "Пишет ли агент в Linear?",
          "a": "Да, если у ключа есть право Write: агент создаёт и обновляет issue, меняет статусы, пишет комментарии и убирает issue в архив. Без Write доступно только чтение."
        },
        {
          "q": "Почему в настройках нет кнопки создания ключа?",
          "a": "Администратор воркспейса выключил «Member API keys» в Settings → Administration → API. Попросите включить настройку или выпустить ключ за вас."
        }
      ]
    },
    "seo_en": {
      "headline": "Keep the current Linear cycle under control from chat",
      "scenarios": [
        {
          "title": "State of the current cycle",
          "desc": "For the cycle the agent shows which issues are not moving, what is overdue and who on the team is carrying the most."
        },
        {
          "title": "An issue from the discussion",
          "desc": "The agent files an issue in the right team and project, sets labels, priority and workflow state, and adds a comment."
        },
        {
          "title": "Project digest",
          "desc": "Across projects the agent collects what was closed this week, what moved on and which issues have been open past their due date."
        },
        {
          "title": "Reacting to new issues",
          "desc": "Through Linear webhooks the agent tracks new issues, edits and comments and reports them the moment they appear."
        },
        {
          "title": "What is on me this week",
          "desc": "The agent collects the issues assigned to you across every team the key can reach, sorts them by priority and due date and says what is burning today."
        },
        {
          "title": "Clearing the untriaged pile",
          "desc": "The agent finds issues with no assignee, label or cycle, shows them as one list and, if the key carries Write, sets labels and priority on them."
        }
      ],
      "how_it_works": [
        "The agent works with Linear through a single GraphQL endpoint, api.linear.app/graphql: issues, projects, teams, cycles, labels, comments, workflow states and members all live there. A query lists the fields it needs explicitly, so the agent goes after the state of a cycle in one call instead of assembling the picture from a dozen exports: what is not moving, what is overdue, who on the team is carrying the most.",
        "An important trait of Linear is that workflow states belong to teams rather than to the workspace: every team has its own set of states with its own names, and identically labelled columns in two teams remain two different states. So the agent first works out which team an issue belongs to and only then picks a state from that team set, rather than moving the task into a neighbouring team state because the names match.",
        "In writing, the agent files an issue in the right team and project, sets labels, priority and workflow state, posts comments and archives issues — but only if the key carries the Write permission. A key without it reads and counts, and the agent says so up front rather than quietly running into a refusal. After a change it re-reads the issue, so it shows the actual state instead of the request it sent.",
        "What the agent can see is bounded by the key itself: when access was narrowed to specific teams at issue time, the rest of the workspace stays invisible and the answers cover those teams only. Linear returns long selections in cursor-paged chunks, so an issue list is read through to the end rather than cut off at the first hundred. The agent holds the request rate itself, learns about new issues and comments from webhooks, and when permissions fall short it says so directly instead of showing an empty table."
      ],
      "requirements": [
        "A member account in the Linear workspace",
        "The “Member API keys” setting enabled by an admin",
        "Admin role if the key needs the Admin scope"
      ],
      "faq": [
        {
          "q": "How do I connect Linear?",
          "a": "With a personal API key: in Linear open Settings, then Security & access, then Personal API keys, then New API key, grant the key its permissions and copy the string that starts with lin_api_ — it is shown only once."
        },
        {
          "q": "What does the agent see in Linear?",
          "a": "Issues, projects, teams, cycles, labels, comments, workflow states and members through the GraphQL API — within the access of the key, which can be narrowed down to specific teams."
        },
        {
          "q": "Does the agent write to Linear?",
          "a": "Yes, if the key has the Write permission: the agent creates and updates issues, changes states, posts comments and archives issues. Without Write only reading is available."
        },
        {
          "q": "Why is there no button to create a key in settings?",
          "a": "The workspace admin turned off Member API keys in Settings, then Administration, then API. Ask them to enable the setting or to issue a key for you."
        }
      ]
    }
  },
  {
    "key": "mailru_cloud",
    "name": "Облако Mail.ru",
    "description": "Облачное хранилище Mail.ru по WebDAV — папки, файлы, загрузка и выгрузка",
    "category": "other",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Разбирайте файлы в Облаке Mail.ru, не открывая браузер",
      "scenarios": [
        {
          "title": "Поиск документа в Облаке",
          "desc": "Агент обойдёт папки, найдёт файл по части названия и назовёт путь, размер и дату изменения — без ручного листания дерева."
        },
        {
          "title": "Расчёт по выгрузке из Облака",
          "desc": "Агент заберёт выгрузку или отчёт прямо из Облака, посчитает по ней цифры и положит результат обратно в нужную папку."
        },
        {
          "title": "Загрузка готового файла",
          "desc": "Агент зальёт подготовленный документ в Облако содержимым, а не ссылкой, и скажет, по какому пути он теперь лежит."
        },
        {
          "title": "Наведение порядка в папках",
          "desc": "Агент заведёт папку, перенесёт или скопирует в неё файлы и уберёт лишнее, называя каждый путь явно."
        },
        {
          "title": "Сколько осталось места",
          "desc": "Агент покажет занятое и свободное место в Облаке, чтобы загрузка не упёрлась в квоту в самый неподходящий момент."
        },
        {
          "title": "Дубли и старые версии",
          "desc": "Агент сверит имена, размеры и даты в рабочей папке и покажет дубли и устаревшие версии одного документа."
        }
      ],
      "how_it_works": [
        "Агент работает с Облаком по протоколу WebDAV через webdav.cloud.mail.ru — тем же способом, которым облако подключают как сетевой диск. Он перечисляет папки и файлы, читает метаданные — имя, размер, тип, дату изменения, — находит документ по части названия и показывает, сколько места занято и сколько осталось. Это же даёт разбор выгрузки: файл забирается из Облака целиком и считается, а не пересказывается по имени.",
        "В отличие от Яндекс Диска, файл сюда кладётся содержимым: агент передаёт байты напрямую методом PUT, внешняя ссылка не нужна, поэтому результат расчёта возвращается файлом, а не адресом для скачивания. Копирование и перенос WebDAV выполняет синхронно — ответ приходит, когда операция уже завершилась, и «готово» на полпути тут невозможно в принципе.",
        "У протокола есть и обратная сторона, которую агент не скрывает. Серверного поиска в WebDAV нет: агент обходит дерево папку за папкой и держит обход в границах — по глубине, числу папок и числу совпадений. Упершись в границу, он говорит, что список неполный, вместо того чтобы выдать частичный результат за исчерпывающий. Публичных ссылок и корзины в протоколе тоже нет — это функции самого Облака, не WebDAV.",
        "Подключается не пароль от аккаунта, а отдельный пароль для внешних приложений, и отзывается он в настройках Mail.ru отдельно, без смены основного пароля. Доступ ограничен Облаком того ящика, чей пароль подключён. Перед перезаписью файла с тем же именем и перед удалением агент спрашивает: удаление убирает и файл, и целиком папку со всем содержимым, а вернуть удалённое тем же путём, каким оно ушло, агент не может — восстановления в протоколе нет, и лежит ли копия в Корзине Облака, ему не видно."
      ],
      "requirements": [
        "Полный адрес ящика Mail.ru и доступ к его настройкам.",
        "Место в Облаке под новые файлы.",
        "Публичные ссылки и корзина по WebDAV недоступны."
      ],
      "faq": [
        {
          "q": "Как подключить Облако Mail.ru?",
          "a": "Адресом ящика и паролем для внешних приложений. В «Настройки» → «Безопасность» откройте «Пароли для внешних приложений», создайте пароль и скопируйте его сразу — он показывается один раз."
        },
        {
          "q": "Что агент видит в Облаке?",
          "a": "Папки и файлы Облака того ящика, чей пароль подключён: имя, путь, размер, тип и дату изменения, а также занятое и свободное место."
        },
        {
          "q": "Может ли агент загружать файлы?",
          "a": "Да, содержимым напрямую: агент кладёт файл в Облако методом PUT, создаёт папки, переносит, копирует и удаляет. Внешняя ссылка для загрузки не нужна."
        },
        {
          "q": "Почему агент не даёт публичную ссылку?",
          "a": "Публикация и корзина — функции интерфейса Облака, а не протокола WebDAV. По WebDAV их выразить нечем, поэтому агент за них не берётся и говорит об этом прямо."
        }
      ]
    },
    "seo_en": {
      "headline": "Sort out your Mail.ru Cloud files without a browser",
      "scenarios": [
        {
          "title": "Finding a document in the Cloud",
          "desc": "The agent walks the folders, finds a file by part of its name and states the path, size and modification date — no manual scrolling."
        },
        {
          "title": "Crunching an export from the Cloud",
          "desc": "The agent picks up an export or report straight from the Cloud, runs the numbers on it and files the result back into the right folder."
        },
        {
          "title": "Uploading a finished file",
          "desc": "The agent puts a prepared document into the Cloud as contents rather than a link, and says which path it now sits at."
        },
        {
          "title": "Tidying up the folders",
          "desc": "The agent creates a folder, moves or copies files into it and clears out the rest, naming every path explicitly."
        },
        {
          "title": "How much space is left",
          "desc": "The agent reports used and free space in the Cloud so an upload never hits the quota at the worst possible moment."
        },
        {
          "title": "Duplicates and old versions",
          "desc": "The agent compares names, sizes and dates in a work folder and shows duplicates and stale versions of the same document."
        }
      ],
      "how_it_works": [
        "The agent works with the Cloud over the WebDAV protocol through webdav.cloud.mail.ru — the same way the cloud is mounted as a network drive. It lists folders and files, reads metadata — name, size, type, modification date — finds a document by part of its name and shows how much space is used and how much is left. That is also what makes an export readable: the file is fetched whole and crunched, not retold by its file name.",
        "Unlike Yandex Disk, a file goes in here as contents: the agent sends the bytes directly with PUT, no external link is needed, so the result of a calculation comes back as a file rather than as a download address. Copying and moving are performed synchronously by WebDAV — the response arrives once the operation is already finished, so a half-way «done» is impossible here by construction.",
        "The protocol has a flip side the agent does not hide. WebDAV has no server-side search: the agent walks the tree folder by folder and keeps the walk inside bounds — on depth, on folder count and on the number of matches. Once it hits a bound it says the list is incomplete instead of passing a partial result off as exhaustive. Public links and the trash are absent from the protocol too — those are features of the Cloud itself, not of WebDAV.",
        "What gets connected is not the account password but a separate app password, and it is revoked in the Mail.ru settings on its own, without changing the main one. Access is limited to the Cloud of the mailbox whose password is connected. The agent asks before overwriting a file with the same name and before deleting: a delete removes a file and a whole folder with everything in it, and the agent cannot bring it back the way it went — the protocol has no restore, and whether a copy sits in the Cloud's own trash is not visible to it."
      ],
      "requirements": [
        "The full Mail.ru mailbox address and access to its settings.",
        "Free space in the Cloud for new files.",
        "Public links and the trash are out of reach over WebDAV."
      ],
      "faq": [
        {
          "q": "How do I connect Mail.ru Cloud?",
          "a": "With the mailbox address and an app password. In Settings, then Security, open the app passwords section, create a password and copy it straight away — it is shown only once."
        },
        {
          "q": "What does the agent see in the Cloud?",
          "a": "The folders and files of the Cloud belonging to the mailbox whose password is connected: name, path, size, type and modification date, plus used and free space."
        },
        {
          "q": "Can the agent upload files?",
          "a": "Yes, as contents directly: the agent puts a file into the Cloud with PUT, creates folders, moves, copies and deletes. No external link is needed for an upload."
        },
        {
          "q": "Why does the agent not give a public link?",
          "a": "Publishing and the trash are features of the Cloud interface, not of the WebDAV protocol. There is nothing in WebDAV to express them, so the agent does not attempt it and says so directly."
        }
      ]
    }
  },
  {
    "key": "mailru_mail",
    "name": "Mail.ru Почта",
    "description": "Электронная почта Mail.ru — письма, папки, отправка и пересылка",
    "category": "messengers",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Разбирайте входящие Mail.ru, не открывая почтовый ящик",
      "scenarios": [
        {
          "title": "Разбор входящих за утро",
          "desc": "Агент пройдёт по непрочитанным письмам и покажет, какие ждут ответа — с темой, отправителем и датой, без открытия почтового ящика."
        },
        {
          "title": "Счета и акты из вложений",
          "desc": "Агент найдёт письмо по отправителю или теме, достанет вложение — счёт, акт или договор — и разберёт его содержимое."
        },
        {
          "title": "Ответ и пересылка письма",
          "desc": "Агент напишет ответ в нужную переписку, перешлёт письмо коллеге или отправит новое письмо с вашего ящика через SMTP."
        },
        {
          "title": "Наведение порядка в папках",
          "desc": "Агент разложит письма по папкам, отметит разобранные как прочитанные и удалит то, что явно не нужно хранить дальше."
        },
        {
          "title": "Переписка по сделке",
          "desc": "Агент соберёт письма с нужным адресатом за период, выстроит их по датам и покажет, о чём договорились и что осталось без ответа."
        },
        {
          "title": "Кто пишет чаще всего",
          "desc": "Агент посчитает месяц почты по отправителям и папкам и покажет, кто наполняет ящик и какая часть этих писем так и осталась непрочитанной."
        }
      ],
      "how_it_works": [
        "Агент подключается к ящику по IMAP и SMTP: первым делом читает список папок, а дальше работает с самими письмами — темой, отправителем, датой, телом и вложениями. Он проходит по непрочитанным и показывает, какие ждут ответа, находит письмо по отправителю или теме и достаёт из него счёт, акт или договор, чтобы разобрать содержимое, а не пересказать имя файла.",
        "Подключается не пароль от аккаунта, а отдельный пароль для внешних приложений, и его тип решает всё: с полным доступом к почте агент читает папки и пишет письма, а на отправке без чтения папки не откроются вовсе. Одна пара адреса и пароля обслуживает и IMAP, и SMTP, поэтому разбор переписки и отправка ответов идут через одно подключение, а не через два разных.",
        "IMAP — это не копия почты, а сам ящик: отметка о прочтении, перенос в другую папку и удаление применяются на сервере и сразу видны во всех ваших почтовых клиентах. Поэтому агент разбирает входящие по шагам: сначала показывает, что нашёл, и только потом раскладывает, помечает прочитанным или удаляет. Ответ в переписку, пересылку и новое письмо через SMTP он отправляет с вашего адреса.",
        "Доступ ограничен одним ящиком — тем, чей адрес и пароль приложения подключены; чужие ящики и общие папки компании агенту не видны. Сам пароль отзывается в настройках Mail.ru отдельно, без смены пароля от аккаунта. Частоту обращений к серверу агент выдерживает сам, а если письма по запросу не нашлись или папка недоступна, он скажет об этом прямо, а не покажет пустой список."
      ],
      "requirements": [
        "Полный адрес ящика Mail.ru и доступ к его настройкам.",
        "Агент читает все папки ящика и отправляет письма от вашего имени."
      ],
      "faq": [
        {
          "q": "Как подключить Mail.ru Почту?",
          "a": "Адресом ящика и паролем для внешних приложений. В «Настройки» → «Безопасность» включите доступ по IMAP и SMTP, создайте пароль с типом «Полный доступ к Почте» и скопируйте его сразу — он показывается один раз."
        },
        {
          "q": "Что агент видит в почте?",
          "a": "Список папок, письма с темой, отправителем и датой, тела писем и вложения — всё через IMAP, в объёме того ящика, чей пароль приложения подключён."
        },
        {
          "q": "Пишет ли агент в почту?",
          "a": "Может: отправить письмо, ответить в переписку, переслать сообщение, переложить письмо в другую папку, отметить прочитанным или удалить."
        },
        {
          "q": "Что делать, если вход не проходит?",
          "a": "Проверьте, что к ящику привязан телефон и включён переключатель доступа по IMAP, POP и SMTP. Пароль типа «Только отправка писем» читать папки не даёт."
        }
      ]
    },
    "seo_en": {
      "headline": "Triage your Mail.ru inbox without opening the mailbox",
      "scenarios": [
        {
          "title": "Morning inbox triage",
          "desc": "The agent goes through unread messages and shows which ones are waiting for a reply — with subject, sender and date, without opening the mailbox."
        },
        {
          "title": "Invoices and acts out of attachments",
          "desc": "The agent finds a message by sender or subject, pulls out the attachment — an invoice, an act or a contract — and reads what is inside."
        },
        {
          "title": "Replying and forwarding",
          "desc": "The agent writes a reply in the right thread, forwards a message to a colleague or sends a new email from your mailbox over SMTP."
        },
        {
          "title": "Tidying up the folders",
          "desc": "The agent sorts messages into folders, marks the handled ones as read and deletes what clearly does not need keeping."
        },
        {
          "title": "The thread behind a deal",
          "desc": "The agent gathers the messages with one contact over a period, lines them up by date and shows what was agreed and what was left unanswered."
        },
        {
          "title": "Who writes the most",
          "desc": "The agent counts a month of mail by sender and folder and shows who fills the mailbox and how much of it was never even opened."
        }
      ],
      "how_it_works": [
        "The agent connects to the mailbox over IMAP and SMTP: the first thing it reads is the folder list, and from there it works with the messages themselves — subject, sender, date, body and attachments. It goes through the unread ones and shows which are waiting for a reply, finds a message by sender or subject and pulls the invoice, act or contract out of it to read what is inside rather than retell the file name.",
        "What gets connected is not the account password but a separate app password, and its type decides everything: with full mailbox access the agent reads folders and writes messages, while on the send-only type the folders do not open at all. One pair of address and password serves both IMAP and SMTP, so reading a thread and sending the reply run over a single connection rather than two.",
        "IMAP is not a copy of the mail but the mailbox itself: a read flag, a move to another folder and a deletion are applied on the server and show up immediately in all of your mail clients. So the agent triages the inbox step by step: first it shows what it found, and only then sorts, marks as read or deletes. A reply in a thread, a forward and a new email over SMTP are sent from your own address.",
        "Access is limited to a single mailbox — the one whose address and app password are connected; other mailboxes and shared company folders stay invisible to the agent. The password itself is revoked separately in the Mail.ru settings, without changing the account password. The agent holds the request rate to the server on its own, and if the messages you asked for were not found or a folder is unavailable, it says so directly instead of showing an empty list."
      ],
      "requirements": [
        "The full Mail.ru mailbox address and access to its settings.",
        "The agent reads every folder and sends mail on your behalf."
      ],
      "faq": [
        {
          "q": "How do I connect Mail.ru Mail?",
          "a": "With the mailbox address and an app password. In Settings, then Security, turn on IMAP and SMTP access, create a password of the Full mailbox access type and copy it straight away — it is shown only once."
        },
        {
          "q": "What does the agent see in the mailbox?",
          "a": "The folder list, messages with subject, sender and date, message bodies and attachments — all over IMAP, limited to the mailbox whose app password is connected."
        },
        {
          "q": "Does the agent write to the mailbox?",
          "a": "It can: send an email, reply in a thread, forward a message, move a message to another folder, mark it as read or delete it."
        },
        {
          "q": "What should I do if sign-in fails?",
          "a": "Check that a phone number is linked to the mailbox and that access over IMAP, POP and SMTP is switched on. A password of the send-only type does not give access to folders."
        }
      ]
    }
  },
  {
    "key": "mango_office",
    "name": "Mango Office",
    "description": "Виртуальная АТС — звонки, callback, SMS, статистика, записи разговоров",
    "category": "messengers",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Считайте пропущенные звонки и уровень сервиса Mango Office",
      "scenarios": [
        {
          "title": "Пропущенные и уровень сервиса",
          "desc": "Агент закажет статистику звонков за период и покажет, сколько обращений осталось без ответа и в какие часы их теряется больше всего."
        },
        {
          "title": "Разбор работы менеджера",
          "desc": "Агент выгрузит CDR по добавочному сотрудника, соберёт записи его разговоров и расшифрует их через Речевую Аналитику."
        },
        {
          "title": "Конспект разговора с клиентом",
          "desc": "Агент найдёт нужный звонок, возьмёт конспект и тематики разговора и перескажет, о чём договорились с клиентом."
        },
        {
          "title": "Обратный звонок и SMS",
          "desc": "Агент закажет callback клиенту от внутреннего номера или от группы, отправит SMS и при необходимости завершит или переведёт активный вызов."
        },
        {
          "title": "Куда ведут входящие линии",
          "desc": "Агент разберёт входящие линии, группы и схемы переадресации и покажет, на кого падает каждый номер и какие добавочные в схемах давно не берут трубку."
        },
        {
          "title": "Баланс ВАТС под присмотром",
          "desc": "Агент проверит остаток на счёте по расписанию и предупредит заранее, если денег хватит ненадолго, — до того как встанут исходящие звонки и SMS."
        }
      ],
      "how_it_works": [
        "Агент работает с API виртуальной АТС Mango Office: читает сотрудников, группы и входящие линии, SIP-аккаунты и схемы переадресации, статистику звонков и CDR, записи разговоров с конспектами и остаток на счёте. На этих данных он считает, сколько обращений осталось без ответа, в какие часы теряется больше всего звонков и как выглядит нагрузка по конкретному добавочному сотрудника.",
        "Статистика в Mango отдаётся не одним ответом: выгрузка двухшаговая — агент сначала заказывает отчёт за период и получает ключ, затем опрашивает его до готовности и только потом разбирает строки. Поэтому отчёт появляется не мгновенно, зато приходит целиком, а не куском. Записи разговоров лежат отдельными файлами, а конспекты и тематики агент берёт из Речевой Аналитики, если она у вас включена.",
        "На запись агент заказывает клиенту обратный звонок от внутреннего номера или от группы, отправляет SMS, включает запись активного разговора, завершает или переводит вызов и заводит контакт в адресной книге. Действия над живым вызовом отменить нельзя, поэтому перед переводом и завершением агент называет номер и добавочный и ждёт подтверждения. По умолчанию он работает на чтение и отчёты.",
        "Каждый запрос подписывается: ключ и соль складываются с телом запроса в единую хеш-сумму, поэтому подпись зависит от самих данных и годится ровно для одного вызова. Перепутанные местами ключ и соль дают отказ авторизации, а не пустой ответ, и агент называет именно эту причину. Даты API считает по московскому времени, так что границы периода агент приводит к нему сам, а не к вашему часовому поясу. Если данных за период нет, он скажет об этом прямо, а не покажет пустую таблицу."
      ],
      "requirements": [
        "Учётная запись владельца или администратора виртуальной АТС",
        "Активная виртуальная АТС в аккаунте Mango Office"
      ],
      "faq": [
        {
          "q": "Как подключить Mango Office?",
          "a": "Ключом API и солью для подписи. В личном кабинете откройте «Интеграции» → «API коннектор» и подключите его: «Уникальный код вашей АТС» — это ключ, «Ключ для создания подписи» — соль. Путать их нельзя."
        },
        {
          "q": "Что агент видит в Mango Office?",
          "a": "Сотрудников, группы и входящие линии ВАТС, SIP-аккаунты и схемы переадресации, статистику звонков и CDR, записи разговоров с конспектами и остаток на счёте."
        },
        {
          "q": "Пишет ли агент в Mango Office?",
          "a": "Может: заказать обратный звонок, отправить SMS, включить запись активного разговора, завершить или перевести вызов, завести контакт в адресной книге."
        },
        {
          "q": "Почему статистика приходит не сразу?",
          "a": "Выгрузка статистики в API двухшаговая: агент сначала заказывает отчёт и получает ключ, а затем опрашивает его до готовности и только потом разбирает данные."
        }
      ]
    },
    "seo_en": {
      "headline": "Count missed calls and service level in Mango Office",
      "scenarios": [
        {
          "title": "Missed calls and service level",
          "desc": "The agent orders call statistics for a period and shows how many enquiries went unanswered and which hours lose the most of them."
        },
        {
          "title": "Reviewing how a manager works",
          "desc": "The agent exports the CDR for an employee extension, collects the recordings of their calls and transcribes them with Speech Analytics."
        },
        {
          "title": "Summary of a client call",
          "desc": "The agent finds the call, takes its summary and conversation topics and retells what was agreed with the client."
        },
        {
          "title": "Callback and SMS",
          "desc": "The agent orders a callback to the client from an internal number or from a group, sends an SMS and, if needed, ends or transfers an active call."
        },
        {
          "title": "Where the inbound lines lead",
          "desc": "The agent walks the inbound lines, groups and forwarding schemes and shows who each number lands on and which extensions in those schemes stopped picking up long ago."
        },
        {
          "title": "Keeping an eye on the balance",
          "desc": "The agent checks the PBX account balance on a schedule and warns you in advance when the money will not last — before outgoing calls and SMS come to a halt."
        }
      ],
      "how_it_works": [
        "The agent works with the Mango Office cloud PBX API: it reads employees, groups and inbound lines, SIP accounts and forwarding schemes, call statistics and CDR, call recordings with their summaries and the account balance. On that data it counts how many enquiries went unanswered, which hours lose the most calls and what the load looks like on a particular employee extension.",
        "Statistics in Mango are not handed over in a single response: the export takes two steps — the agent first orders the report for the period and receives a key, then polls it until it is ready and only then parses the rows. So the report does not appear instantly, but it arrives whole rather than in pieces. Call recordings are separate files, and summaries and conversation topics are taken from Speech Analytics if you have it enabled.",
        "On the write side the agent orders a callback to the client from an internal number or from a group, sends an SMS, starts recording an active call, ends or transfers a call and adds a contact to the address book. Actions on a live call cannot be undone, so before a transfer or a hang-up the agent names the number and the extension and waits for confirmation. By default it works read-only and builds reports.",
        "Every request is signed: the key and the salt are folded together with the request body into a single hash, so the signature depends on the data itself and fits exactly one call. Swapped around, the key and the salt produce an authorisation failure rather than an empty response, and the agent names that reason. The API counts dates in Moscow time, so the agent converts the period boundaries itself instead of leaving them in your time zone. If there is no data for the period, it says so directly instead of showing an empty table."
      ],
      "requirements": [
        "The owner or administrator account of your virtual PBX",
        "An active virtual PBX in your Mango Office account"
      ],
      "faq": [
        {
          "q": "How do I connect Mango Office?",
          "a": "With an API key and a salt for the signature. In your account open Integrations, then API connector, and enable it: the unique code of your PBX is the key, and the signature key is the salt. Do not mix the two up."
        },
        {
          "q": "What does the agent see in Mango Office?",
          "a": "Employees, groups and inbound lines of the cloud PBX, SIP accounts and forwarding schemes, call statistics and CDR, call recordings with their summaries and the account balance."
        },
        {
          "q": "Does the agent write to Mango Office?",
          "a": "It can: order a callback, send an SMS, start recording an active call, end or transfer a call, add a contact to the address book."
        },
        {
          "q": "Why do statistics not arrive right away?",
          "a": "Exporting statistics through the API takes two steps: the agent first orders the report and receives a key, then polls it until it is ready and only then parses the data."
        }
      ]
    }
  },
  {
    "key": "max_messenger",
    "name": "MAX Messenger",
    "description": "Корпоративный мессенджер — чаты, сообщения, файлы",
    "category": "messengers",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "short_name": "MAX",
    "seo": {
      "headline": "Отвечайте в рабочих чатах MAX от имени своего бота",
      "scenarios": [
        {
          "title": "Ответы в рабочем чате",
          "desc": "Агент получит сообщение из чата MAX через вебхук, разберёт вопрос и ответит от имени бота, не дожидаясь, пока вы освободитесь."
        },
        {
          "title": "Разбор присланных файлов",
          "desc": "Агент прочитает вложения из чата — накладную, выгрузку, скриншот отчёта — и ответит по их содержимому прямо в переписке."
        },
        {
          "title": "Сводка по расписанию",
          "desc": "Агент отправит утреннюю сводку в нужный чат MAX в согласованное время, чтобы цифры приходили сами, без напоминаний."
        },
        {
          "title": "Кнопки и уточнения",
          "desc": "Агент задаст вопрос кнопками, обработает нажатие через callback и отредактирует своё сообщение, когда ответ уже не актуален."
        },
        {
          "title": "Что обсуждали без меня",
          "desc": "Агент прочитает историю чата страницами, от свежих сообщений к старым, и перескажет, о чём там договорились, пока вас не было в переписке."
        },
        {
          "title": "Файл прямо в чат",
          "desc": "Агент загрузит готовый отчёт или выгрузку в MAX и назовёт, в какой чат положил файл, — вместо ссылки на сторонний диск."
        }
      ],
      "how_it_works": [
        "Агент работает через Bot API MAX на platform-api2.max.ru, а токен бота передаёт в заголовке авторизации. Первым запросом он вызывает get_me: так проверяется, что токен живой, и видно, от чьего имени будут уходить сообщения. Дальше в работе только те чаты, куда бот добавлен, — их переписка, вложения и нажатия кнопок: накладную, выгрузку или скриншот отчёта агент читает прямо из ленты сообщений.",
        "Бот в MAX — участник чата, а не наблюдатель со стороны: пока его не добавили в беседу, ни одного сообщения оттуда агент не получит, и никакие права это не обойдут. Входящие приходят не опросом, а вебхуком: адрес регистрируется при подключении, MAX присылает новые сообщения и нажатия кнопок сам, а каждый запрос подписывает секретом в заголовке x-max-bot-api-secret.",
        "На запись это основной режим коннектора. Агент отвечает в переписке, показывает индикатор набора, пока готовит ответ, загружает файлы, задаёт уточняющие вопросы кнопками и обрабатывает нажатие через callback. Редактировать и удалять он может только собственные сообщения — чужие реплики в чате остаются нетронутыми, а сводку по расписанию отправляет в тот чат, который вы указали.",
        "Токен даёт права ровно этого бота и ничего сверх: личная переписка владельца профиля через него недоступна. Историю чата агент читает страницами, от свежих сообщений к старым, вложения забирает по ссылке из события, а частоту запросов выдерживает сам. Файл он отправляет загрузкой в MAX, а не ссылкой на сторонний диск, и называет, в какой чат его положил, вместо короткого «отправлено»."
      ],
      "requirements": [
        "Резидентство РФ: организация, ИП или самозанятый",
        "ИНН организации — из него формируется ник бота",
        "Права администратора в чатах, куда добавляете бота"
      ],
      "faq": [
        {
          "q": "Как подключить MAX Messenger?",
          "a": "Токеном бота. Заведите бизнес-профиль на business.max.ru, создайте бота в разделе «Чат-боты» и дождитесь модерации: токен появляется в карточке бота только после неё. Скопируйте строку целиком."
        },
        {
          "q": "Что агент видит в MAX?",
          "a": "Сообщения и вложения тех чатов, куда добавлен бот, и данные самого бота. Переписку, в которой бота нет, он не читает."
        },
        {
          "q": "Пишет ли агент в MAX?",
          "a": "Да, это основной сценарий: отправляет и редактирует сообщения, удаляет свои, загружает файлы, показывает индикатор набора и отвечает на нажатия кнопок."
        },
        {
          "q": "Кто может создать бота в MAX?",
          "a": "Только резиденты РФ — организация, ИП или самозанятый. Профиль проходит верификацию, а сам бот — модерацию до 48 часов по рабочим дням."
        }
      ]
    },
    "seo_en": {
      "headline": "Answer in MAX work chats as your own bot",
      "scenarios": [
        {
          "title": "Replies in a work chat",
          "desc": "The agent receives a message from a MAX chat over a webhook, works out the question and answers as the bot without waiting for you to free up."
        },
        {
          "title": "Reading the files people send",
          "desc": "The agent reads attachments from the chat — a delivery note, an export, a screenshot of a report — and answers on their content right in the thread."
        },
        {
          "title": "Scheduled digest",
          "desc": "The agent posts the morning digest to the right MAX chat at the agreed time, so the numbers arrive on their own, without reminders."
        },
        {
          "title": "Buttons and follow-up questions",
          "desc": "The agent asks a question with buttons, handles the tap through a callback and edits its own message once the answer is no longer relevant."
        },
        {
          "title": "What was discussed without you",
          "desc": "The agent reads chat history page by page, from the newest messages backwards, and retells what was agreed there while you were away from the thread."
        },
        {
          "title": "A file straight into the chat",
          "desc": "The agent uploads a finished report or export into MAX and names the chat it put the file in — instead of passing around a link to an outside drive."
        }
      ],
      "how_it_works": [
        "The agent works through the MAX Bot API at platform-api2.max.ru and passes the bot token in the authorization header. Its first request is get_me: that checks the token is alive and shows whose name the messages will go out under. From there only the chats the bot has been added to are in play — their conversations, attachments and button taps: a delivery note, an export or a screenshot of a report is read by the agent straight from the message feed.",
        "A bot in MAX is a chat participant, not an observer on the side: until it is added to a conversation the agent receives not a single message from there, and no permission gets around that. Incoming messages arrive not by polling but over a webhook: the address is registered at connection time, MAX pushes new messages and button taps itself, and signs every request with a secret in the x-max-bot-api-secret header.",
        "Writing is the main mode for this connector. The agent answers in the thread, shows the typing indicator while it prepares a reply, uploads files, asks follow-up questions with buttons and handles the tap through a callback. It can edit and delete only its own messages — other people's lines in the chat stay untouched — and a scheduled digest goes to the chat you named.",
        "The token carries exactly this bot's rights and nothing beyond: the profile owner's personal correspondence is out of reach through it. Chat history is read page by page, from the newest messages backwards, attachments are fetched by the link from the event, and the agent holds the request rate itself. A file goes out as an upload to MAX rather than a link to an outside drive, and the agent names the chat it landed in instead of a short «sent»."
      ],
      "requirements": [
        "Russian residency: a company, a sole trader or a self-employed person",
        "The company INN — the bot nickname is built from it",
        "Admin rights in the chats where the bot will be added"
      ],
      "faq": [
        {
          "q": "How do I connect MAX Messenger?",
          "a": "With a bot token. Create a business profile at business.max.ru, create a bot in the Chatbots section and wait for moderation: the token appears in the bot card only after it. Copy the whole string."
        },
        {
          "q": "What does the agent see in MAX?",
          "a": "Messages and attachments in the chats the bot has been added to, and the data of the bot itself. It does not read conversations where the bot is absent."
        },
        {
          "q": "Does the agent write to MAX?",
          "a": "Yes, that is the main scenario: it sends and edits messages, deletes its own, uploads files, shows the typing indicator and responds to button taps."
        },
        {
          "q": "Who can create a bot in MAX?",
          "a": "Only residents of Russia — a company, a sole trader or a self-employed person. The profile goes through verification and the bot itself through moderation, which takes up to 48 hours on business days."
        }
      ]
    }
  },
  {
    "key": "medialogia",
    "name": "Медиалогия",
    "description": "Медиа-мониторинг — упоминания в СМИ и соцмедиа, тональность, аналитика",
    "category": "analytics",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Отслеживайте упоминания в СМИ и соцмедиа прямо в чате",
      "scenarios": [
        {
          "title": "Упоминания бренда в СМИ и соцмедиа",
          "desc": "Агент выгрузит публикации отчёта за выбранные даты и покажет сообщения с самой большой аудиторией и вовлечённостью."
        },
        {
          "title": "Тональность против конкурентов",
          "desc": "Агент разложит публикации по тональности и объектам мониторинга и покажет, у кого негатив растёт быстрее — у вас или у конкурента."
        },
        {
          "title": "Новый мониторинг из формулировки словами",
          "desc": "Агент переведёт человеческий запрос на синтаксис Медиалогии через ConvertQuery и заведёт по нему отчёт-мониторинг."
        },
        {
          "title": "Ежедневная сводка по мониторингу",
          "desc": "Агент заберёт публикации, появившиеся с прошлого запуска, посчитает их по дням и назовёт площадки и авторов, давших основной объём."
        },
        {
          "title": "Отчёт по своим ссылкам",
          "desc": "Агент заведёт отчёт по списку URL публикаций — например, по подборке из пресс-клиппинга — и покажет их аудиторию, вовлечённость и тональность."
        },
        {
          "title": "Правка мониторинга без потери истории",
          "desc": "Агент проверит ссылки на площадки, перепишет поисковый запрос существующего отчёта и дозаберёт публикации с прошлой даты, а удалит отчёт только по отдельному подтверждению."
        }
      ],
      "how_it_works": [
        "Агент работает с SOAP-сервисом Медиалогии под логином и паролем кабинета СоцМедиа. Он выгружает публикации отчёта за выбранные даты, снимает метрики отдельных сообщений — лайки, репосты, комментарии и просмотры — и счётчики публикаций по дням и по объектам мониторинга. Аудитория, вовлечённость и тональность приходят полями самой публикации, поэтому сводка за сутки и сравнение динамики негатива собираются перебором публикаций, а не готовой агрегатой.",
        "Данных «вообще по бренду» здесь не существует: всё живёт внутри отчётов, а границы отчёта задаёт поисковый запрос на собственном синтаксисе Медиалогии. Поэтому человеческую формулировку агент сначала прогоняет через ConvertQuery и получает корректный запрос, а не подбирает синтаксис наугад. Тональность он тоже не пересчитывает: оценки приходят от Медиалогии, и агент показывает их как есть.",
        "Списка отчётов у сервиса нет — каждая операция чтения требует номера отчёта, который агент либо получил, создав отчёт, либо услышал от вас. Поэтому первый разговор о новой теме начинается с создания мониторинга, а не с поиска подходящего среди существующих.",
        "На запись агент трогает только мониторинги: создаёт отчёт по поисковому запросу или по списку URL публикаций, переписывает запрос существующего и по вашей просьбе удаляет его. До создания он проверяет запрос через ConvertQuery, а ссылки на площадки прогоняет через нормализацию, чтобы отчёт не встал на битый адрес; удаление подтверждает отдельно — вместе с отчётом уходит и его история. Сами публикации и оценки тональности остаются на чтение.",
        "Выгрузка публикаций приходит страницами, и ни общего числа, ни курсора сервис не сообщает — агент читает до страницы короче запрошенной и называет интервал, за который посчитал. Отказ Медиалогия возвращает внутри успешного ответа отдельным полем, поэтому пустую выдачу агент отличает от отказа и не выдаёт второе за отсутствие упоминаний."
      ],
      "requirements": [
        "Действующий договор и доступ в кабинет СоцМедиа",
        "Персональный менеджер Медиалогии, включающий доступ к API",
        "Незакончившийся тарифный лимит тем и сообщений"
      ],
      "faq": [
        {
          "q": "Как подключить Медиалогию?",
          "a": "Логином и паролем кабинета СоцМедиа: API принимает ту же пару, что и вход на sm.mlg.ru, отдельного токена у сервиса нет. Заведите под интеграцию пользователя с ролью «Администратор» или «Редактор» и попросите менеджера включить API."
        },
        {
          "q": "Что агент видит в Медиалогии?",
          "a": "Отчёт-мониторинг по его номеру и публикации этого отчёта за период — с тональностью, охватом и вовлечённостью в самой публикации, — метрики отдельных сообщений и счётчики публикаций по дням и по объектам мониторинга. Списка отчётов API не отдаёт: номер отчёта агент либо получает при создании, либо узнаёт от вас."
        },
        {
          "q": "Пишет ли агент в Медиалогию?",
          "a": "Да, в части мониторингов: агент может создать отчёт по поисковому запросу или списку URL публикаций, переписать запрос существующего и удалить отчёт. Сами публикации и оценки тональности он только читает."
        },
        {
          "q": "Что чаще всего мешает подключению?",
          "a": "Просроченная учётная запись, выбранный по тарифу лимит тем и сообщений или невключённый менеджером API — тогда SOAP-сервис на запросы не отвечает. Срок и остаток лимитов видны в разделе «Профиль»."
        }
      ]
    },
    "seo_en": {
      "headline": "Track mentions across media and social right in the chat",
      "scenarios": [
        {
          "title": "Brand mentions across media and social",
          "desc": "The agent pulls the publications of a report for the dates you pick and shows the messages with the largest audience and engagement."
        },
        {
          "title": "Sentiment versus your competitors",
          "desc": "The agent breaks publications down by sentiment and monitoring object and shows whose negative coverage is growing faster, yours or a competitor's."
        },
        {
          "title": "A new monitor from a plain-language brief",
          "desc": "The agent translates a human request into Medialogia query syntax through ConvertQuery and sets up a monitoring report on it."
        },
        {
          "title": "Daily digest for a monitor",
          "desc": "The agent picks up the publications that appeared since the last run, counts them by day and names the blogs and authors that drove most of the volume."
        },
        {
          "title": "A report from your own links",
          "desc": "The agent sets up a report from a list of publication URLs — a press clipping, say — and shows their audience, engagement and sentiment side by side."
        },
        {
          "title": "Editing a monitor without losing its history",
          "desc": "The agent normalises the blog links, rewrites the search query of an existing report and back-fills publications from an earlier date, and deletes a report only on a separate confirmation."
        }
      ],
      "how_it_works": [
        "The agent works with the Medialogia SOAP service under the login and password of the SocMedia account. It exports the publications of a report for the dates you pick, takes the metrics of individual messages — likes, reposts, comments and views — and the publication counts by day and by monitoring object. Audience, engagement and sentiment arrive as fields of the publication itself, so the daily digest and the comparison of negativity dynamics are assembled by walking the publications rather than from a ready-made aggregate.",
        "There is no such thing as data about the brand in general here: everything lives inside reports, and the boundaries of a report are set by a search query in Medialogia's own syntax. So the agent first runs a plain-language brief through ConvertQuery and gets a valid query instead of guessing at the syntax. It does not recompute sentiment either: the scores come from Medialogia, and the agent shows them as they are.",
        "The service serves no list of reports — every read operation needs a report number the agent has either received when creating one or heard from you. So the first conversation about a new topic starts by setting a monitor up, not by picking a fitting one from those that exist.",
        "The agent writes only to monitors: it creates a report from a search query or from a list of publication URLs, rewrites the query of an existing one, and deletes it when you ask. Before creating it checks the query through ConvertQuery and normalises the blog links so the report does not settle on a broken address, and it confirms a deletion separately — the report takes its history with it. The publications themselves and the sentiment scores stay read-only.",
        "The export of publications arrives in pages, and the service reports neither a total nor a cursor — the agent reads until a page comes back shorter than it asked for and names the interval it counted. A refusal comes back inside an otherwise successful response as a separate field, so the agent tells an empty result from a refusal and never passes the second off as an absence of mentions."
      ],
      "requirements": [
        "A valid contract and access to the SocMedia workspace",
        "A personal Medialogia manager who switches API access on",
        "Plan limits on topics and messages that are not used up"
      ],
      "faq": [
        {
          "q": "How do I connect Medialogia?",
          "a": "With the login and password of your SocMedia account: the API accepts the same pair as the sign-in at sm.mlg.ru, the service has no separate token. Create a dedicated user for the integration with the Administrator or Editor role and ask your manager to switch the API on."
        },
        {
          "q": "What does the agent see in Medialogia?",
          "a": "A monitoring report by its number and that report's publications for a period — with sentiment, audience and engagement carried by the publication itself — plus the metrics of individual messages and publication counts by day and by monitoring object. The API serves no list of reports: the agent either receives the number when creating one or learns it from you."
        },
        {
          "q": "Does the agent write to Medialogia?",
          "a": "Yes, for monitors: the agent can create a report from a search query or a list of publication URLs, rewrite the query of an existing one and delete a report. The publications themselves and sentiment scores are read-only."
        },
        {
          "q": "What usually blocks the connection?",
          "a": "An expired account, a plan limit on topics and messages that has run out, or an API your manager has not enabled yet, in which case the SOAP service stops answering. The expiry date and remaining limits are shown in the Profile section."
        }
      ]
    }
  },
  {
    "key": "megamarket",
    "name": "МегаМаркет",
    "description": "Мегамаркет: товары, заказы, остатки, цены, категории, FBO поставки, DBS доставка, отчёты",
    "category": "marketplaces",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "short_name": "Мегамаркет",
    "seo": {
      "headline": "Следите за заказами и отгрузками МегаМаркета в одном чате",
      "scenarios": [
        {
          "title": "Сводка заказов и отгрузок",
          "desc": "Агент соберёт заказы МегаМаркета по статусам, найдёт зависшие отгрузки и посчитает выручку за период по схемам FBO и DBS."
        },
        {
          "title": "Сверка цен и остатков с учёткой",
          "desc": "Агент сверит цены и остатки на витрине с 1С или МойСклад и покажет расхождения до того, как они превратятся в отмены."
        },
        {
          "title": "Отчёт по продажам для планёрки",
          "desc": "Агент подготовит недельный отчёт: динамика заказов, топ-товары, отмены и причины — и пришлёт его в Telegram по расписанию."
        },
        {
          "title": "Проверка карточек по категориям",
          "desc": "Агент пройдёт по каталогу, сверит характеристики карточек с требованиями их категорий и покажет, где не хватает обязательных полей для витрины."
        },
        {
          "title": "Товары на грани нуля",
          "desc": "Агент сопоставит остатки со скоростью заказов за последние недели и назовёт товары, которых хватит на пару дней, — пока поставку ещё можно успеть."
        },
        {
          "title": "Обновление цен пакетом",
          "desc": "Агент возьмёт новый прайс, покажет, что уедет на витрину, отправит цены пакетом после подтверждения и перечитает результат по каждой позиции."
        }
      ],
      "how_it_works": [
        "Агент обращается к Seller API МегаМаркета и держит в поле зрения весь контур кабинета: товары и категории, цены и остатки, заказы по схемам FBO и DBS, поставки, отгрузки и отчёты. Он считает выручку за период, разбирает заказы по статусам, находит зависшие отгрузки и называет причины отмен — не выгрузкой на скачивание, а разбором, из которого понятно, где именно магазин теряет деньги.",
        "Каталог МегаМаркета держится на дереве категорий: набор характеристик у карточки задаётся её категорией, поэтому агент начинает с чтения категорий и только потом трогает товары. Цены и остатки при этом живут отдельными разделами: отправленная цена не двигает остаток, а обновлённый остаток не меняет цену. Расхождения витрины с учётной системой агент показывает до того, как они превращаются в отмены.",
        "Уведомлений МегаМаркет не присылает, поэтому новые заказы и застрявшие отгрузки агент забирает опросом — по вашему вопросу или по расписанию, если нужна регулярная сводка. Изменения цен и остатков он отправляет пакетами и перечитывает результат вместо того, чтобы поверить успешному коду ответа, а перед массовой правкой цен останавливается и показывает, что именно уедет на витрину.",
        "Работа идёт одним токеном продавца, который уходит отдельным заголовком: входа под вашей учётной записью не происходит, а удаление токена в кабинете закрывает доступ сразу — и агент об этом скажет, а не вернёт молча ноль. Заказы и отчёты Seller API отдаёт окнами по датам, поэтому длинный период агент режет на отрезки и склеивает результат сам. Частоту запросов он выдерживает сам, а про недоступный раздел скажет прямо, а не покажет пустую таблицу."
      ],
      "requirements": [
        "Права администратора в кабинете продавца МегаМаркета.",
        "Включённый доступ к Seller API — иначе раздел скрыт.",
        "Подключённая схема работы FBO или DBS."
      ],
      "faq": [
        {
          "q": "Как подключить МегаМаркет?",
          "a": "API-токеном из кабинета продавца МегаМаркета. Токен вставляется один раз при подключении и хранится в зашифрованном виде."
        },
        {
          "q": "Какие данные доступны агенту?",
          "a": "Товары, заказы, остатки, цены, категории, поставки FBO, доставка DBS и отчёты — весь контур Seller API МегаМаркета."
        },
        {
          "q": "Можно ли автоматизировать регулярные отчёты?",
          "a": "Да. Задачи по расписанию — часть продукта: агент сам соберёт данные к назначенному времени и пришлёт сводку в Telegram или на почту."
        }
      ]
    },
    "seo_en": {
      "headline": "Follow MegaMarket orders and shipments from a single chat",
      "scenarios": [
        {
          "title": "Orders and shipments at a glance",
          "desc": "The agent collects MegaMarket orders by status, finds shipments that are stuck and totals revenue for the period across the FBO and DBS schemes."
        },
        {
          "title": "Reconcile prices and stock with your books",
          "desc": "The agent reconciles storefront prices and stock against 1C or MoySklad and shows discrepancies before they turn into cancellations."
        },
        {
          "title": "Sales report for the weekly stand-up",
          "desc": "The agent prepares a weekly report with order dynamics, top products, cancellations and their reasons, and sends it to Telegram on schedule."
        },
        {
          "title": "Listings checked against their categories",
          "desc": "The agent walks the catalogue, checks listing attributes against what each category requires and shows where the storefront is missing mandatory fields."
        },
        {
          "title": "Products about to run out",
          "desc": "The agent matches stock against the order pace of the past few weeks and names the products with a couple of days left, while a supply can still make it."
        },
        {
          "title": "A price list pushed in one go",
          "desc": "The agent takes the new price list, shows what is about to reach the storefront, sends the prices in batches once you confirm and re-reads every position."
        }
      ],
      "how_it_works": [
        "The agent calls the MegaMarket Seller API and keeps the whole scope of the account in view: products and categories, prices and stock, orders under the FBO and DBS schemes, supplies, shipments and reports. It totals revenue for a period, breaks orders down by status, finds shipments that are stuck and names the reasons for cancellations — not as a download, but as an analysis that makes it clear where exactly the shop loses money.",
        "The MegaMarket catalogue rests on a category tree: the set of attributes a listing has is defined by its category, so the agent starts by reading the categories and only then touches the products. Prices and stock meanwhile live in sections of their own: a price you send moves no stock, and an updated stock figure changes no price. Discrepancies between the storefront and your books are shown before they turn into cancellations.",
        "MegaMarket sends no notifications, so new orders and stalled shipments are picked up by polling — on your question, or on a schedule when a regular digest is needed. Price and stock changes are sent in batches and the result is re-read rather than taken on trust from a successful response code, and before a bulk price edit the agent stops and shows exactly what is about to reach the storefront.",
        "The work runs on a single seller token passed in a header of its own: there is no sign-in under your account, and deleting the token in the cabinet closes access at once — the agent then says so instead of quietly returning zero. Orders and reports come out of the Seller API in date windows, so a long period is cut into slices and stitched back together by the agent. It holds the request rate itself, and about an unavailable section it says so directly instead of showing an empty table."
      ],
      "requirements": [
        "Cabinet administrator rights in the MegaMarket seller account.",
        "Seller API access enabled — otherwise the section stays hidden.",
        "The FBO or DBS scheme enabled in the account."
      ],
      "faq": [
        {
          "q": "How do I connect MegaMarket?",
          "a": "With an API token from your MegaMarket seller account. The token is entered once at connection time and stored encrypted."
        },
        {
          "q": "What data is available to the agent?",
          "a": "Products, orders, stock, prices, categories, FBO supply, DBS delivery and reports, the whole scope of the MegaMarket Seller API."
        },
        {
          "q": "Can regular reports be automated?",
          "a": "Yes. Scheduled tasks are part of the product: the agent gathers the data by the appointed time and sends the digest to Telegram or by email."
        }
      ]
    }
  },
  {
    "key": "megaplan",
    "name": "Мегаплан",
    "description": "CRM и управление проектами — сделки, задачи, проекты, контакты, события",
    "category": "crm",
    "auth_flow": "credentials",
    "offered_to_newcomers": false,
    "catalog_visibility": "never",
    "superseded_by": "megaplan_app",
    "seo": {
      "headline": "Собирайте сводку по сделкам Мегаплана к утренней планёрке",
      "scenarios": [
        {
          "title": "Сводка по сделкам в воронке",
          "desc": "Агент соберёт сделки Мегаплана по этапам и менеджерам, найдёт зависшие и посчитает суммы в работе за период."
        },
        {
          "title": "Контроль просроченных задач",
          "desc": "Агент проверит задачи и проекты, выделит просроченные и подходящие к дедлайну и пришлёт список ответственным."
        },
        {
          "title": "Отчёт по активности менеджеров",
          "desc": "Агент сведёт сделки, задачи и события по сотрудникам и покажет, кто тянет план, а у кого копятся зависшие сделки."
        },
        {
          "title": "Заявки и обращения в задачи",
          "desc": "Агент разберёт входящие обращения, заведёт по ним задачи или сделки в Мегаплане и назначит ответственных по вашим правилам."
        },
        {
          "title": "Сделка сдвинулась — сразу в чат",
          "desc": "Агент поймает подписанный вебхук о новой сделке или смене её статуса и напишет в чат, какая сделка сдвинулась, на какой этап и за кем она теперь."
        },
        {
          "title": "Клиенты без движения",
          "desc": "Агент пройдёт по контрагентам и их сделкам и покажет, кто не появлялся в новых сделках дольше квартала и на какую сумму покупал раньше."
        }
      ],
      "how_it_works": [
        "Агент обращается к API Мегаплана третьей версии на адресе вашего аккаунта: сделки, задачи, проекты и контрагенты — четыре раздела, из которых собирается почти любой отчёт. По ним считаются суммы в работе по этапам и менеджерам, зависшие сделки, просроченные и подходящие к дедлайну задачи, активность сотрудников за период. Карточку конкретной сделки или задачи он дочитывает отдельным запросом, когда нужны детали, а не тянет всё подряд.",
        "У Мегаплана свой стиль запросов: фильтры, поля и сортировка передаются JSON-структурой прямо в адресе, а связанные сущности приходят ссылками — контрагент в сделке это идентификатор, а не название. Поэтому агент перечисляет нужные поля и подтягивает связи адресно, иначе ответ распухает, а в отчёте вместо клиента остаётся номер. Мегаплан совмещает CRM и трекер, и ответственный за задачу далеко не всегда менеджер сделки — агент их не путает.",
        "На запись агент создаёт сделки и задачи, меняет статусы и назначает ответственных: например, разбирает входящие обращения и заводит по ним карточки по вашим правилам. Смену статуса сделки он подтверждает отдельно — в Мегаплане это событие, на которое навешаны уведомления и переходы. О новых, изменённых и удалённых сделках и о смене их статуса Мегаплан присылает подписанные вебхуки, так что реакция не ждёт следующего опроса.",
        "Подключение — логин и пароль учётной записи: агент обменивает их на токен, который живёт около часа и продлевается сам, — копировать ключи вручную не нужно. Длинные списки Мегаплан отдаёт страницами с ограничением на размер выборки, поэтому период агент проходит постранично и складывает итог сам, а не обрывает отчёт на первой сотне. Запросы к сделкам, задачам, контрагентам и проектам идут в щадящем темпе, групповые операции — ещё реже. Если записей за период нет, агент скажет это прямо, а не покажет пустую таблицу."
      ],
      "requirements": [
        "Аккаунт Мегаплана на собственном поддомене",
        "Учётная запись сотрудника с правами на сделки, задачи и проекты",
        "Права на запись, если агент создаёт задачи и меняет статусы"
      ],
      "faq": [
        {
          "q": "Как подключить Мегаплан?",
          "a": "Входом в аккаунт: вы подтверждаете доступ, и агент видит сделки, задачи и проекты, к которым у вашей учётной записи есть права. Копировать ключи вручную не нужно."
        },
        {
          "q": "Какие данные видит агент?",
          "a": "Сделки, задачи, проекты, контакты и события — в рамках прав вашей учётной записи в Мегаплане. Можно подключить сотрудника с ограниченным доступом."
        },
        {
          "q": "Может ли агент менять данные в Мегаплане?",
          "a": "Да, если у учётной записи есть права: агент может создавать задачи и сделки, менять их статусы и назначать ответственных. С доступом только на чтение агент лишь анализирует."
        },
        {
          "q": "Как быстро появляются данные после подключения?",
          "a": "Сразу: агент обращается к API Мегаплана напрямую по вашему запросу, без промежуточных выгрузок."
        }
      ]
    },
    "seo_en": {
      "headline": "Get the Megaplan deal summary ready before the stand-up",
      "scenarios": [
        {
          "title": "Deal pipeline at a glance",
          "desc": "The agent collects Megaplan deals by stage and manager, finds the ones that are stuck and totals the value in play for the period."
        },
        {
          "title": "Keep overdue tasks in check",
          "desc": "The agent reviews tasks and projects, singles out the ones overdue or nearing a deadline and sends the list to the people responsible."
        },
        {
          "title": "Manager activity report",
          "desc": "The agent combines deals, tasks and events per employee and shows who is carrying the plan and who is piling up stalled deals."
        },
        {
          "title": "Turn inbound requests into tasks",
          "desc": "The agent sorts incoming requests, creates tasks or deals for them in Megaplan and assigns owners by your rules."
        },
        {
          "title": "A deal moves, the chat knows",
          "desc": "The agent catches a signed webhook about a new deal or a status change and posts in chat which deal moved, to which stage and who owns it now."
        },
        {
          "title": "Clients gone quiet",
          "desc": "The agent walks the contractors and their deals and shows who has not turned up in a new deal for over a quarter and how much they used to buy."
        }
      ],
      "how_it_works": [
        "The agent calls the third version of the Megaplan API at your account address: deals, tasks, projects and contractors — four sections that almost any report is assembled from. On them it totals the value in play by stage and manager, stalled deals, tasks overdue or nearing a deadline, and employee activity for the period. The card of a particular deal or task is read with a separate request when the details are needed, rather than pulled in wholesale.",
        "Megaplan has its own request style: filters, fields and sorting are passed as a JSON structure right inside the address, and related entities arrive as references — the contractor on a deal is an identifier, not a name. So the agent lists the fields it needs and pulls relations deliberately, otherwise the response swells and the report shows a number where the client should be. Megaplan combines a CRM and a tracker, and the owner of a task is far from always the manager of the deal — the agent does not confuse the two.",
        "As writes the agent creates deals and tasks, changes statuses and assigns owners: it can sort incoming requests and open cards for them by your rules. A deal status change is confirmed separately — in Megaplan that is an event with notifications and transitions hanging off it. New, changed and deleted deals and their status changes arrive from Megaplan as signed webhooks, so a reaction does not wait for the next poll.",
        "The connection runs on the login and password of an account: the agent exchanges them for a token that lives about an hour and renews itself, with no keys to copy by hand. Megaplan hands out long lists in pages with a cap on the selection size, so the agent walks the period page by page and adds the total up itself instead of cutting the report off at the first hundred. Requests to deals, tasks, contractors and projects go at a gentle pace, and bulk operations rarer still. If there are no records for the period, the agent says so directly instead of showing an empty table."
      ],
      "requirements": [
        "A Megaplan account on its own subdomain",
        "An employee login with access to deals, tasks and projects",
        "Write permissions if the agent creates tasks and changes statuses"
      ],
      "faq": [
        {
          "q": "How do I connect Megaplan?",
          "a": "By signing in to your account: you confirm access and the agent sees the deals, tasks and projects your account has rights to. There are no keys to copy by hand."
        },
        {
          "q": "What data does the agent see?",
          "a": "Deals, tasks, projects, contacts and events, within the permissions of your Megaplan account. You can connect an employee with restricted access."
        },
        {
          "q": "Can the agent change data in Megaplan?",
          "a": "Yes, if the account has the rights: the agent can create tasks and deals, change their statuses and assign owners. With read-only access the agent only analyses."
        },
        {
          "q": "How soon does data appear after connecting?",
          "a": "Right away: the agent calls the Megaplan API directly on your request, with no intermediate exports."
        }
      ]
    }
  },
  {
    "key": "megaplan_app",
    "name": "Мегаплан",
    "description": "Вход по токену приложения Мегаплана — сделки, задачи, проекты, контакты и события без пароля сотрудника",
    "category": "crm",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "variant_of": "megaplan"
  },
  {
    "key": "modulbank",
    "name": "Модульбанк",
    "description": "Банковский API — счета, баланс, история операций, платёжные поручения",
    "category": "banks",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Держите остатки и операции Модульбанка под контролем в чате",
      "scenarios": [
        {
          "title": "Ежедневный отчёт по счетам",
          "desc": "Агент проверит балансы и операции по счетам Модульбанка и пришлёт сводку с ключевыми движениями за день."
        },
        {
          "title": "Сверка оплат с CRM",
          "desc": "Агент сопоставит поступления в банке со сделками в CRM и покажет выигранные сделки без оплаты."
        },
        {
          "title": "Разбор расходов по категориям",
          "desc": "Агент разложит списания за месяц по категориям и контрагентам и покажет, куда утекают деньги."
        },
        {
          "title": "Платёжка на подпись",
          "desc": "Агент соберёт платёжное поручение, проверит реквизиты, сумму и назначение и покажет черновик — подпись и отправка остаются в интернет-банке Модульбанка."
        },
        {
          "title": "Все юрлица одним отчётом",
          "desc": "Агент возьмёт из справки все компании и счета, доступные токену, и сведёт остатки в один отчёт, считая валютные и рублёвые счета раздельно."
        },
        {
          "title": "Что дописалось задним числом",
          "desc": "Агент перечитает уже показанный период и найдёт проводки, которые банк добавил задним числом, — вместе с тем, как из-за них изменился остаток."
        }
      ],
      "how_it_works": [
        "Работа начинается со справки о компаниях и счетах: агент запрашивает account-info, получает список юрлиц и расчётных счетов, доступных токену, и уже от него идёт в историю операций. Дальше он считает остатки на дату, движения за день или месяц, раскладывает списания по контрагентам и категориям и сопоставляет поступления со сделками CRM, чтобы показать выигранные сделки, за которые деньги так и не пришли.",
        "Историю операций Модульбанк отдаёт постранично и по датам, а не одним куском, поэтому месяц агент собирает частями и держит порядок по дате проводки. Валютные и рублёвые счета он считает раздельно, не складывая суммы в одну цифру, а приход и расход различает по направлению платежа, а не по знаку суммы в выписке.",
        "На запись агент доходит только до черновика: платёжное поручение он собирает, проверяет реквизиты, сумму и назначение и показывает вам, но подпись и отправка остаются в интернет-банке Модульбанка. Это не ограничение коннектора, а устройство банка — деньги уходят только после вашего подтверждения на его стороне. Всё остальное, от ежедневной сводки до месячного разбора расходов, агент делает на чтение.",
        "Частоту запросов агент выдерживает сам и длинную выписку растягивает во времени вместо параллельных вызовов. Уже показанный период он перечитывает при следующем заходе, потому что банк дописывает проводки задним числом и вчерашний остаток к утру меняется. Если за период операций нет или токену не хватает доступа, агент скажет об этом прямо, а не покажет пустую таблицу."
      ],
      "requirements": [
        "Учётная запись с доступом к нужным компаниям и счетам",
        "Подключение к API бесплатно на всех тарифах, заявка не нужна",
        "Подпись и отправка платежей остаются в банке — агент только читает"
      ],
      "faq": [
        {
          "q": "Как подключить Модульбанк?",
          "a": "API-токеном из интернет-банка Модульбанка. Токен вводится один раз при подключении и хранится в зашифрованном виде."
        },
        {
          "q": "Что агент может делать со счетами?",
          "a": "Читать счета, балансы и историю операций, готовить черновики платёжных поручений. Подпись и отправка платежей остаются в банке."
        },
        {
          "q": "Подходит ли для нескольких счетов?",
          "a": "Да, агент видит все счета, доступные токену, и умеет сводить их в один отчёт."
        }
      ]
    },
    "seo_en": {
      "headline": "Keep Modulbank balances and transactions under control in chat",
      "scenarios": [
        {
          "title": "Daily report across your accounts",
          "desc": "The agent checks balances and transactions on your Modulbank accounts and sends a digest of the key movements for the day."
        },
        {
          "title": "Match payments against CRM",
          "desc": "The agent matches incoming bank payments with CRM deals and shows won deals that have not been paid."
        },
        {
          "title": "Spend broken down by category",
          "desc": "The agent splits the outgoing payments of the month by category and counterparty and shows where the money is leaking."
        },
        {
          "title": "A payment order to sign",
          "desc": "The agent assembles a payment order, checks the details, the amount and the purpose and shows you the draft — signing and sending stay in the Modulbank online bank."
        },
        {
          "title": "Every entity in one report",
          "desc": "The agent takes every company and account the token can reach and rolls their balances into one report, counting currency and rouble accounts apart."
        },
        {
          "title": "Entries posted after the fact",
          "desc": "The agent re-reads a period it has already shown and finds the entries the bank added with a back date, along with how they moved the balance."
        }
      ],
      "how_it_works": [
        "The work starts from the reference on companies and accounts: the agent requests account-info, gets the list of legal entities and settlement accounts the token can reach, and moves on to the transaction history from there. Then it calculates balances as of a date, movements for a day or a month, splits outgoing payments by counterparty and category and matches incoming funds against CRM deals to show the won deals the money never arrived for.",
        "Modulbank returns the transaction history page by page and by date rather than in one lump, so a month is collected in parts and kept in the order of the posting date. Foreign-currency and rouble accounts are counted separately instead of being added into a single figure, and money in and money out are told apart by the direction of the payment, not by the sign of the amount in the statement.",
        "On the write side the agent goes only as far as a draft: it assembles a payment order, checks the details, the amount and the purpose and shows it to you, but signing and sending stay in the Modulbank online bank. That is not a connector limitation but how the bank is built — money leaves only after your confirmation on its side. Everything else, from the daily digest to the monthly spend breakdown, the agent does read-only.",
        "The agent holds the request rate itself and spreads a long statement over time instead of firing parallel calls. A period it has already shown is re-read on the next run, because the bank posts entries with a back date and yesterday's balance changes by morning. If there are no transactions for the period or the token lacks access, the agent says so directly instead of showing an empty table."
      ],
      "requirements": [
        "A login with access to the companies and accounts you need",
        "API access is free on every plan, with nothing to apply for",
        "Signing and sending payments stays in the bank — the agent reads"
      ],
      "faq": [
        {
          "q": "How do I connect Modulbank?",
          "a": "With an API token from the Modulbank online bank. The token is entered once at connection time and stored encrypted."
        },
        {
          "q": "What can the agent do with accounts?",
          "a": "Read accounts, balances and transaction history and prepare draft payment orders. Signing and sending payments stays in the bank."
        },
        {
          "q": "Does it work with several accounts?",
          "a": "Yes, the agent sees every account the token has access to and can roll them up into a single report."
        }
      ]
    }
  },
  {
    "key": "moysklad",
    "name": "МойСклад",
    "description": "Торговля и склад — товары, контрагенты, заказы, остатки, отчёты",
    "category": "docflow",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Считайте остатки, прибыль и закупки МойСклад прямо в чате",
      "scenarios": [
        {
          "title": "Остатки и точка заказа",
          "desc": "Агент проверит остатки по складам, сравнит со скоростью продаж и покажет, что пора дозаказывать у поставщика."
        },
        {
          "title": "Оборачиваемость и неликвиды",
          "desc": "Агент посчитает оборачиваемость по товарам, найдёт неликвиды, замороженные в складских остатках, и оценит замороженные деньги."
        },
        {
          "title": "Сверка продаж с маркетплейсами",
          "desc": "Агент сверит отгрузки МойСклад с заказами Ozon и WB, найдёт расхождения по количеству и не отражённые в учёте продажи."
        },
        {
          "title": "Отчёт по прибыльности заказов",
          "desc": "Агент соберёт отчёт по прибыли с учётом себестоимости из МойСклад — по товарам, контрагентам и периодам."
        },
        {
          "title": "Заказ поставщику черновиком",
          "desc": "Агент соберёт дефицит, разложит его по поставщикам из карточек товара, посчитает потребность по скорости продаж и создаст черновики только после вашего «да»."
        },
        {
          "title": "Деньги, долги и обязательства",
          "desc": "Агент сведёт остатки на счетах с дебиторкой и кредиторкой и покажет одной картиной, сколько денег есть, кто должен вам и кому должны вы."
        }
      ],
      "how_it_works": [
        "Агент подключается к МойСклад по API-токену сотрудника и работает со всей учёткой: продажи и прибыль, остатки и склады, контрагенты, деньги на счетах, документы. Права агента равны правам сотрудника, чей токен подключён, — роль решает, какие разделы JSON API 1.2 он вообще увидит. Связанные сущности он подтягивает параметром expand, одним запросом вместо десятка, поэтому разбор документов не превращается в перебор карточек. Само подключение проверяется запросом к списку организаций, так что неверный или отозванный токен виден сразу, а не всплывает посреди первого отчёта.",
        "Продажи агент считает по-настоящему: выручка за период складывается из оптовых отгрузок и розничных продаж, а прибыль и маржа по товарам считаются от себестоимости FIFO. Если прав на себестоимость нет, агент сам переключится на расчёт от закупочной цены и прямо скажет об этом. Динамика продаж по дням, деньги на счетах, дебиторка и кредиторка, покупатели конкретного товара с телефонами — всё из учётки, без ручных выгрузок. Валюту учёта агент определяет автоматически — рубли, тенге или другую — и не путает копейки с рублями: в МойСклад суммы приходят в копейках, и это учтено везде.",
        "Остатки агент показывает единым обзором: штуки и рубли, разбивка по складам, нулевые и минусовые позиции отдельными счётчиками. Самое полезное для закупок — позиции ниже неснижаемого остатка, и здесь есть ловушка, которой не видно в API с первого взгляда: пороги по складам МойСклад в обычных запросах не отдаёт, и наивная проверка решает, что «неснижаемый не настроен», хотя под минимумом десятки позиций. Агент использует правильный серверный фильтр и находит их все — включая случаи, когда остаток положительный, но ниже порога конкретного склада.",
        "По найденному дефициту агент готовит документы: черновик внутреннего заказа на пополнение склада или черновики заказов поставщикам, сгруппированные по поставщику из карточки товара, с прогнозом потребности по скорости продаж и сроку поставки. Создание документов в учётке — только после вашего явного «да»: агент показывает, что именно собирается создать, и ждёт подтверждения. Товары, у которых поставщик в карточке не указан, он выделит отдельной строкой, а не пропустит молча.",
        "Темп запросов агент держит сам: не больше шести обращений в секунду к API и не больше двух в секунду к тяжёлым отчётам по остаткам, поэтому учётка не упирается в лимиты, пока агент собирает данные. Если роли не хватает прав, агент прямо в чате назовёт недостающий раздел и попросит расширить роль сотрудника — вместо загадочной ошибки 403 посреди отчёта. Данные при этом берутся напрямую из справочников, метаданных сущностей и срезов отчётов API, а не из заранее выгруженной копии, поэтому цифры в чате совпадают с тем, что в учётке прямо сейчас."
      ],
      "requirements": [
        "Роль с доступом к товарам, заказам, отгрузкам, остаткам и отчётам",
        "Право на себестоимость, если нужна маржа по FIFO",
        "Право на запись, если агент создаёт заказы и перемещения"
      ],
      "faq": [
        {
          "q": "Как подключить МойСклад?",
          "a": "API-токеном сотрудника: заведите отдельного сотрудника-робота в «Меню пользователя → Настройки → Сотрудники», включите ему «Доступ по API» и получите ключ запросом POST /security/token. Права токена наследуют роль сотрудника, поэтому роль робота и определяет, что увидит агент."
        },
        {
          "q": "Что агент видит в МойСклад?",
          "a": "Товары, контрагентов, заказы, отгрузки, остатки и отчёты JSON API 1.2 — в рамках роли сотрудника, чей токен подключён."
        },
        {
          "q": "Пишет ли агент в МойСклад?",
          "a": "Может — например, создавать заказы поставщику или внутренние перемещения, если роль разрешает запись. По умолчанию агент работает на чтение и аналитику."
        },
        {
          "q": "Что делать, если у токена не хватает прав?",
          "a": "Агент прямо в чате скажет, какого раздела не хватает, и попросит расширить роль сотрудника — без загадочных ошибок 403."
        }
      ]
    },
    "seo_en": {
      "headline": "Track stock, profit and purchasing in MoySklad right in the chat",
      "scenarios": [
        {
          "title": "Stock levels and reorder points",
          "desc": "The agent checks stock across warehouses, compares it with sales velocity and shows what it is time to reorder from your supplier."
        },
        {
          "title": "Turnover and dead stock",
          "desc": "The agent calculates turnover per product, finds the dead stock frozen in your warehouse balances and estimates the cash tied up in it."
        },
        {
          "title": "Reconcile sales with marketplaces",
          "desc": "The agent reconciles MoySklad shipments with Ozon and WB orders and finds quantity discrepancies and sales missing from the books."
        },
        {
          "title": "Order profitability report",
          "desc": "The agent builds a profit report using cost prices from MoySklad, broken down by product, counterparty and period."
        },
        {
          "title": "Purchase orders as drafts",
          "desc": "The agent gathers the shortages, groups them by the supplier from each product card, forecasts demand from sales velocity and creates the drafts only after your yes."
        },
        {
          "title": "Cash, receivables and payables",
          "desc": "The agent brings the money in your accounts together with receivables and payables and shows in one picture how much cash you hold, who owes you and whom you owe."
        }
      ],
      "how_it_works": [
        "The agent connects to MoySklad with an employee API token and works with the whole account: sales and profit, stock and warehouses, counterparties, money in the accounts, documents. The agent's permissions equal those of the employee whose token is connected — the role decides which sections of the JSON API 1.2 the agent sees at all. Related entities it pulls in with the expand parameter, one request instead of a dozen, so going through documents never turns into walking card by card. The connection itself is verified with a request for the list of organizations, so an invalid or revoked token shows up immediately instead of surfacing in the middle of the first report.",
        "The agent counts sales properly: revenue for a period adds up from wholesale shipments and retail sales, while profit and margin per product are calculated from the FIFO cost price. If there are no permissions for cost prices, the agent switches to the purchase price on its own and says so explicitly. Daily sales dynamics, money in the accounts, receivables and payables, the buyers of a specific product with their phone numbers — all straight from the account, with no manual exports. The agent detects the accounting currency automatically, be it rubles, tenge or another one, and never confuses kopecks with rubles: MoySklad returns amounts in kopecks, and that is accounted for everywhere.",
        "Stock comes as a single overview: units and money, a breakdown by warehouse, zero and negative positions as separate counters. The most useful part for purchasing is the positions below the minimum stock level, and there is a trap here that is not visible in the API at first glance: MoySklad does not return per-warehouse thresholds in ordinary requests, so a naive check decides that no minimum is configured while dozens of positions sit below it. The agent uses the proper server-side filter and finds them all — including cases where the balance is positive but still below the threshold of that particular warehouse.",
        "For the shortages it finds the agent prepares documents: a draft internal order to replenish a warehouse, or draft purchase orders grouped by the supplier from the product card, with demand forecast based on sales velocity and lead time. Documents are created in the account only after your explicit yes: the agent shows exactly what it is about to create and waits for confirmation. Products with no supplier in the card are listed as a separate line instead of being silently skipped.",
        "The agent paces its own requests: no more than seven calls per second to the API and no more than three per second to the heavy stock reports, so the account does not hit the limits while the agent collects data. If the role lacks permissions, the agent names the missing section right in the chat and asks you to extend the employee role — instead of a cryptic 403 error in the middle of a report. The data itself comes straight from the API directories, entity metadata and report slices rather than from a pre-exported copy, so the numbers in the chat match what is in the account right now."
      ],
      "requirements": [
        "A role with access to products, orders, shipments, stock and reports",
        "Permission for cost prices if you need FIFO margin",
        "Write permission if the agent creates orders and transfers"
      ],
      "faq": [
        {
          "q": "How do I connect MoySklad?",
          "a": "With an employee API token: create a dedicated robot employee under User menu, Settings, Employees, switch on API access for them and get the key with a POST /security/token request. Token permissions inherit the employee role, so the robot role is what defines what the agent will see."
        },
        {
          "q": "What does the agent see in MoySklad?",
          "a": "Products, counterparties, orders, shipments, stock and reports of the JSON API 1.2, within the role of the employee whose token is connected."
        },
        {
          "q": "Does the agent write to MoySklad?",
          "a": "It can, creating purchase orders or internal transfers for example, if the role allows writing. By default the agent works in read and analytics mode."
        },
        {
          "q": "What if the token lacks permissions?",
          "a": "The agent tells you right in the chat which section is missing and asks you to extend the employee role, with no cryptic 403 errors."
        }
      ]
    }
  },
  {
    "key": "mpstats",
    "name": "MPStats",
    "description": "Аналитика маркетплейсов Wildberries/Ozon — категории, товары, продажи, тренды",
    "category": "analytics",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Разбирайте нишу на Wildberries и Ozon прямо в чате",
      "scenarios": [
        {
          "title": "Разбор ниши на Wildberries",
          "desc": "Агент пройдёт по дереву категорий, соберёт топ товаров по выручке и покажет, где спрос растёт, а где деньги уходят к конкурентам."
        },
        {
          "title": "Сравнение с конкурентами",
          "desc": "Агент сопоставит ваши карточки с соседями по категории — цена, выручка, динамика продаж — и сравнит бренды за два периода."
        },
        {
          "title": "Семантика категории",
          "desc": "Агент выгрузит топ поисковых запросов по предмету Wildberries и покажет частотность фраз, по которым ищут товары вашей ниши."
        },
        {
          "title": "Сезонность перед закупкой",
          "desc": "Агент поднимет годовую сезонность категории и ценовую сегментацию, чтобы было видно, когда и в каком ценовом сегменте заходить в закупку."
        },
        {
          "title": "Та же ниша на Ozon",
          "desc": "Агент соберёт ту же категорию на Ozon и сведёт её с Wildberries по выручке, числу брендов и ценовым сегментам — видно, где ниша свободнее."
        },
        {
          "title": "Продажи карточки по дням",
          "desc": "Агент поднимет карточку товара с продажами по дням и покажет, как двигались выручка и цена, — это рыночная оценка, а не выгрузка из вашего кабинета."
        }
      ],
      "how_it_works": [
        "Агент ходит в API MPStats по токену из личного кабинета: разбирает дерево категорий и предметов Wildberries и Ozon, поднимает карточки товаров с продажами по дням, ценовую сегментацию, бренды, поисковые запросы товара и категории и годовую сезонность. На этом он строит топ ниши по выручке, сравнение ваших карточек с соседями по категории за два периода и картину того, в каком ценовом сегменте сосредоточены деньги.",
        "Главное про MPStats: это аналитика поверх данных маркетплейсов, а не выгрузка из вашего кабинета продавца. Плюс в том, что видно весь рынок, включая конкурентов, к чьим кабинетам доступа нет. Минус — цифры по вашим же товарам агент подаёт как рыночную оценку и, если речь о собственной выручке или остатках, отправляет сверяться с кабинетом Wildberries или Ozon, а не выдаёт их за учётные данные.",
        "Писать здесь некуда: агент только запрашивает отчёты и ничего в MPStats не создаёт и не меняет. Решения, к которым приводит разбор — поднять цену, зайти в сезон, добавить фразы в карточку, — исполняются в кабинетах Wildberries и Ozon, и агент прямо говорит, где именно нужна правка. Там, где данных по категории мало для вывода, он называет это ограничением выборки, а не подаёт как тренд.",
        "Объём доступных отчётов ограничен тарифом: при исчерпании лимита сервис отвечает кодом 429 с заголовком Retry-After, и агент выжидает указанное время, а не долбит запросами. Поэтому широкий разбор — категория целиком, десятки брендов — он делит на части, собирает дольше, чем справку по одной карточке, и заранее говорит, сколько данных собирается взять. А если лимит выбран до конца, он назовёт это ограничением выборки, а не выдаст неполные цифры за полные."
      ],
      "requirements": [
        "Оплаченный тариф MPStats — на аккаунте без подписки данных нет",
        "Запас лимита запросов по тарифу: исчерпан — сервис отвечает отказом"
      ],
      "faq": [
        {
          "q": "Как подключить MPStats?",
          "a": "API-токеном из личного кабинета: на mpstats.io/account в блоке «API токен» скопируйте значение целиком — это две hex-строки через точку, и точка входит в токен. При смене пароля токен пересоздаётся, и подключение придётся обновить."
        },
        {
          "q": "Какие данные видит агент?",
          "a": "Категории и предметы Wildberries и Ozon, карточки товаров с продажами по дням, ценовую сегментацию, бренды, поисковые запросы товара и категории, годовую сезонность — в объёме вашего тарифа."
        },
        {
          "q": "Пишет ли агент в MPStats?",
          "a": "Нет. Это аналитика поверх данных маркетплейсов, агент только запрашивает отчёты. Цены, остатки и карточки меняются в кабинетах Wildberries и Ozon, а не здесь."
        },
        {
          "q": "Что будет при исчерпании лимита?",
          "a": "Сервис ответит кодом 429 и заголовком Retry-After — агент подождёт указанное время и повторит запрос. На аккаунте без активной подписки данные не отдаются вовсе."
        }
      ]
    },
    "seo_en": {
      "headline": "Break down a Wildberries or Ozon niche right in the chat",
      "scenarios": [
        {
          "title": "Break down a niche on Wildberries",
          "desc": "The agent walks the category tree, collects the top products by revenue and shows where demand is growing and where the money goes to competitors."
        },
        {
          "title": "Compare yourself with competitors",
          "desc": "The agent matches your product cards against neighbours in the category by price, revenue and sales dynamics and compares brands across two periods."
        },
        {
          "title": "Category semantics",
          "desc": "The agent pulls the top search queries for a Wildberries subject and shows the frequency of the phrases people use to find products in your niche."
        },
        {
          "title": "Seasonality before you buy stock",
          "desc": "The agent brings up annual category seasonality and price segmentation so you can see when and in which price segment to enter with a purchase."
        },
        {
          "title": "The same niche on Ozon",
          "desc": "The agent collects the same category on Ozon and lines it up against Wildberries by revenue, brand count and price segments — you see where the niche is freer."
        },
        {
          "title": "Daily sales of one card",
          "desc": "The agent brings up a product card with daily sales and shows how revenue and price moved — as a market estimate, not an export from your seller account."
        }
      ],
      "how_it_works": [
        "The agent calls the MPStats API with the token from your personal account: it walks the tree of Wildberries and Ozon categories and subjects, brings up product cards with daily sales, price segmentation, brands, product and category search queries and annual seasonality. On top of that it builds the niche top by revenue, a comparison of your cards against neighbours in the category across two periods and a picture of which price segment the money sits in.",
        "The main thing about MPStats: it is analytics on top of marketplace data, not an export from your own seller account. The upside is that the whole market is visible, competitors whose accounts you have no access to included. The downside is that figures for your own products are presented as a market estimate, and when it comes to your revenue or stock the agent sends you to reconcile with the Wildberries or Ozon account instead of passing them off as accounting data.",
        "There is nothing to write to here: the agent only requests reports and creates or changes nothing in MPStats. The decisions the analysis leads to — raise the price, enter the season, add phrases to the card — are carried out in the Wildberries and Ozon accounts, and the agent states plainly where the edit belongs. Where there is too little category data for a conclusion, it calls that a limitation of the sample rather than presenting it as a trend.",
        "The set of available reports is capped by your plan: once the limit runs out the service answers with code 429 and a Retry-After header, and the agent waits the stated time instead of hammering with requests. A wide analysis — a whole category, dozens of brands — is therefore split into parts, takes longer to assemble than a note on a single card, and the agent says up front how much data it intends to pull. And if the quota is spent, it calls that a limit of the sample instead of passing partial figures off as complete."
      ],
      "requirements": [
        "A paid MPStats plan — an account without one gets no data",
        "Request quota left on the plan: once it is spent, the service refuses"
      ],
      "faq": [
        {
          "q": "How do I connect MPStats?",
          "a": "With an API token from your personal account: at mpstats.io/account, in the API token block, copy the value in full, it is two hex strings separated by a dot and the dot is part of the token. Changing your password regenerates the token, so the connection has to be updated."
        },
        {
          "q": "What data does the agent see?",
          "a": "Wildberries and Ozon categories and subjects, product cards with daily sales, price segmentation, brands, product and category search queries and annual seasonality, within the scope of your plan."
        },
        {
          "q": "Does the agent write to MPStats?",
          "a": "No. This is analytics on top of marketplace data, the agent only requests reports. Prices, stock and product cards are changed in the Wildberries and Ozon accounts, not here."
        },
        {
          "q": "What happens when the limit runs out?",
          "a": "The service answers with code 429 and a Retry-After header, and the agent waits the stated time and repeats the request. An account without an active subscription gets no data at all."
        }
      ]
    }
  },
  {
    "key": "onec",
    "name": "1С:Предприятие",
    "description": "Обмен данными с 1С через стандартный интерфейс OData — справочники, документы, регистры",
    "category": "docflow",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Спрашивайте свою базу 1С без новых обработок от программиста",
      "scenarios": [
        {
          "title": "Разбор состава публикации",
          "desc": "Агент прочитает схему /$metadata вашей базы и перечислит, какие справочники, документы и регистры реально отдаются через OData."
        },
        {
          "title": "Обороты и сальдо по счетам",
          "desc": "Агент снимет обороты и остатки по счетам бухучёта за период, раскроет их по субконто и назовёт счета с нетипичным движением."
        },
        {
          "title": "Готовность к закрытию месяца",
          "desc": "Агент проверит, все ли документы месяца проведены, покажет незакрытые авансы и остатки на технических счетах перед закрытием."
        },
        {
          "title": "Остатки и потребность в закупках",
          "desc": "Агент проверит остатки по складам, сопоставит их со скоростью продаж и покажет, какие позиции пора дозаказывать, чтобы не уйти в минус."
        },
        {
          "title": "Контроль дебиторки и просроченных оплат",
          "desc": "Агент соберёт взаиморасчёты, найдёт просроченную дебиторскую задолженность по контрагентам и подготовит список на обзвон."
        },
        {
          "title": "Обеспечение заказов клиентов",
          "desc": "Агент сопоставит заказы клиентов со свободными остатками и заказами поставщикам и покажет, по каким позициям обеспечение не закрыто."
        },
        {
          "title": "Фонд оплаты труда по подразделениям",
          "desc": "Агент посчитает начисления за месяц в разрезе подразделений и видов расчёта и покажет, где выплаты выросли сильнее всего."
        },
        {
          "title": "Неоплаченные счета и зависшие деньги",
          "desc": "Агент соберёт заказы покупателей и счета за период и покажет, какие не оплачены и сколько денег зависло у клиентов."
        },
        {
          "title": "Просроченные согласования",
          "desc": "Агент найдёт документы, которые висят на согласовании дольше регламентного срока, и назовёт сотрудников, у которых остановился маршрут."
        },
        {
          "title": "Регулярная сводка из вашей базы",
          "desc": "Агент по расписанию соберёт показатели вашей конфигурации и пришлёт их в чат, даже если типового отчёта под такую задачу нет."
        },
        {
          "title": "Почему объекта нет в ответе",
          "desc": "Агент сверит состав публикации с правами роли и скажет, объект не включён в публикацию или закрыт правами, — вместо непонятной ошибки OData."
        }
      ],
      "how_it_works": [
        "Подойдёт любая конфигурация на платформе 1С:Предприятие 8, в которой можно опубликовать стандартный интерфейс OData, — отраслевая, дописанная под себя или полностью самописная. Агент ходит в неё обычными HTTP-запросами к опубликованному адресу, авторизуясь на каждом обращении, и пользуется только тем, что OData умеет сам: отбором, сортировкой, разворотом ссылок и постраничной выборкой. Никакого кода в базе для этого не появляется.",
        "Прикладные имена объектов агент не угадывает: он читает схему /$metadata и перечисляет, какие справочники, документы, журналы и регистры сведений, накопления, бухгалтерии и расчёта реально отдаются наружу. Для нетиповой базы это первый полезный шаг сам по себе — видно, что публикация действительно отдаёт, ещё до того, как задавать содержательные вопросы по данным.",
        "Дальше агент работает с вашей структурой напрямую: отбирает документы по периоду, контрагенту или произвольному реквизиту и отвечает в чате, не требуя новой обработки от программиста; берёт виртуальные таблицы регистров накопления и возвращает остатки и обороты на дату в разрезе нужных измерений; по расписанию собирает показатели вашей конфигурации в регулярную сводку, даже если типового отчёта под такую задачу в базе нет.",
        "Видимость ограничена дважды: составом публикации и правами роли пользователя, чьи логин и пароль подключены. Эти два ограничения агент различает — пустой /$metadata или отсутствие объекта означает, что он не включён в состав публикации, а не отказ по правам, и агент скажет, что именно нужно поправить. Запись через OData доступна только при соответствующих правах роли, поэтому подключение на чтение в базе ничего не изменит."
      ],
      "requirements": [
        "Конфигурация на платформе 1С:Предприятие 8.",
        "Веб-сервер IIS или Apache с модулями расширения 1С.",
        "Права администратора базы и доступ к конфигуратору."
      ],
      "faq": [
        {
          "q": "Как подключить базу 1С?",
          "a": "Адресом публикации, логином и паролем пользователя базы. Базу публикуют на веб-сервере с включённым стандартным интерфейсом OData, в настройке состава отмечают нужные объекты и заводят отдельного пользователя с ролью удалённого доступа OData."
        },
        {
          "q": "Подойдёт ли моя конфигурация?",
          "a": "Подойдёт любая конфигурация на платформе 1С:Предприятие 8, где можно опубликовать стандартный интерфейс OData: 1С:Бухгалтерия, Управление торговлей, ERP, Зарплата и управление персоналом, Управление нашей фирмой, Документооборот, отраслевые решения и дописанные под себя базы. Коннектор один на все: OData-поверхность у платформы общая, а прикладные имена объектов агент берёт из /$metadata, а не угадывает."
        },
        {
          "q": "Что видит агент в такой базе?",
          "a": "Ровно то, что отмечено на вкладке «Состав» настройки OData и разрешено ролью пользователя: справочники, документы, журналы, регистры сведений, накопления, бухгалтерии и расчёта."
        },
        {
          "q": "Что делать, если объекта нет в ответе?",
          "a": "Пустой /$metadata или отсутствие нужного объекта означает, что он не включён в состав публикации, а не отказ по правам. Агент различает эти случаи и скажет, что именно нужно поправить."
        }
      ]
    },
    "seo_en": {
      "headline": "Query your own 1C database without new custom data processors",
      "scenarios": [
        {
          "title": "See what the publication actually exposes",
          "desc": "The agent reads the /$metadata schema of your database and lists which catalogues, documents and registers are really served over OData."
        },
        {
          "title": "Turnovers and balances by account",
          "desc": "The agent pulls turnovers and balances for accounting accounts over a period, breaks them down by subconto and names the accounts with unusual movement."
        },
        {
          "title": "Month-end close readiness",
          "desc": "The agent checks that every document of the month is posted and shows open advances and balances on technical accounts before the close."
        },
        {
          "title": "Stock levels and purchasing needs",
          "desc": "The agent checks stock across warehouses, compares it with the sales rate and shows which items to reorder before you run out."
        },
        {
          "title": "Receivables and overdue payments",
          "desc": "The agent collects settlements, finds overdue receivables by counterparty and prepares a call list."
        },
        {
          "title": "Covering customer orders",
          "desc": "The agent matches customer orders against free stock and purchase orders and shows which lines are still not covered."
        },
        {
          "title": "Wage fund by department",
          "desc": "The agent totals the accruals for the month by department and calculation type and shows where payments grew the most."
        },
        {
          "title": "Unpaid invoices and cash stuck with clients",
          "desc": "The agent collects customer orders and invoices for the period and shows which ones are unpaid and how much money is stuck with clients."
        },
        {
          "title": "Overdue approvals",
          "desc": "The agent finds documents that have been sitting in approval longer than the regulated deadline and names the employees where the route stalled."
        },
        {
          "title": "A regular digest from your database",
          "desc": "The agent gathers the metrics of your configuration on schedule and sends them to the chat, even when no standard report covers the task."
        },
        {
          "title": "Why an object is missing",
          "desc": "The agent checks the publication composition against the role permissions and says whether an object is simply not published or closed off by rights, instead of a cryptic OData error."
        }
      ],
      "how_it_works": [
        "Any configuration on the 1C:Enterprise 8 platform that can publish the standard OData interface will do — industry-specific, customised in-house or written from scratch. The agent reaches it with ordinary HTTP requests to the published address, authenticating on every call, and uses only what OData offers by itself: filtering, ordering, expanding references and paging through results. No code is added inside the database for this.",
        "The agent does not guess applied object names: it reads the /$metadata schema and lists which catalogues, documents, journals and information, accumulation, accounting and calculation registers are actually served outward. For a non-standard database that is a useful step in itself — you see what the publication really exposes before asking any substantive question about the data.",
        "From there the agent works with your structure directly: it selects documents by period, counterparty or an arbitrary attribute and answers in the chat, with no new data processor needed from a developer; it takes the virtual tables of accumulation registers and returns balances and turnovers as of a date across the dimensions you need; and on a schedule it gathers the metrics of your configuration into a regular digest, even when the database has no standard report for the task.",
        "Visibility is limited twice over: by the publication composition and by the permissions of the role of the user whose login and password are connected. The agent tells those two limits apart — an empty /$metadata or a missing object means it is not included in the publication composition rather than a permissions refusal, and the agent says exactly what needs fixing. Writing over OData is available only with the matching role permissions, so a read-only connection changes nothing in the database."
      ],
      "requirements": [
        "A configuration on the 1C:Enterprise 8 platform.",
        "An IIS or Apache web server with the 1C extension modules.",
        "Infobase admin rights and access to the Configurator."
      ],
      "faq": [
        {
          "q": "How do I connect a 1C database?",
          "a": "With the publication address plus the login and password of a database user. The database is published on a web server with the standard OData interface enabled, the objects you need are ticked in the composition settings, and a separate user with the OData remote access role is created."
        },
        {
          "q": "Will my configuration work?",
          "a": "Any configuration on the 1C:Enterprise 8 platform that can publish the standard OData interface will work: 1C:Accounting, Trade Management, ERP, Payroll and HR, Small Firm Management, Document Management, industry-specific solutions and heavily customised databases. One connector covers them all — the platform's OData surface is shared — and the agent takes applied object names from /$metadata rather than guessing them."
        },
        {
          "q": "What does the agent see in such a database?",
          "a": "Exactly what is ticked on the Composition tab of the OData settings and allowed by the user role: catalogues, documents, journals, information registers, accumulation registers, accounting registers and calculation registers."
        },
        {
          "q": "What if an object is missing from the response?",
          "a": "An empty /$metadata or a missing object means it is not included in the publication composition, not that permissions were denied. The agent tells these cases apart and says exactly what needs fixing."
        }
      ]
    }
  },
  {
    "key": "ord",
    "name": "1ОРД (Билайн)",
    "description": "Реестр рекламных данных — креативы, контракты, площадки, участники, акты, отчётность",
    "category": "ads",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Регистрируйте креативы и получайте erid без ручной формы",
      "scenarios": [
        {
          "title": "Регистрация креатива и erid",
          "desc": "Агент заведёт креатив вместе с медиаданными и вернёт erid, который нужно поставить в ссылку до старта размещения."
        },
        {
          "title": "Проверка выгрузки в ЕРИР",
          "desc": "Агент покажет, какие договоры, креативы и акты не ушли в ЕРИР, и назовёт поле, из-за которого запись не прошла."
        },
        {
          "title": "Акты и статистика показов",
          "desc": "Агент соберёт статистику показов по площадкам и акты к сроку месячной отчётности и пришлёт сводку по тому, что ещё не сдано."
        },
        {
          "title": "Договоры и цепочка участников",
          "desc": "Агент найдёт изначальный договор по ИНН сторон, проверит дубликаты и покажет, где в цепочке контрагентов не хватает звена."
        },
        {
          "title": "Площадки под размещение",
          "desc": "Агент заведёт площадку размещения по вашим данным, привяжет её к креативу и обновит статистику показов, когда открутка пойдёт."
        },
        {
          "title": "Ревизия перед стартом кампании",
          "desc": "Агент выгрузит креативы пачкой, найдёт те, у которых нет erid или не хватает медиаданных, и назовёт, какого блока не хватает каждому."
        }
      ],
      "how_it_works": [
        "Агент работает с 1ОРД по API второй версии на адресе https://ord.beeline.ru/ordapi и читает весь реестр рекламных данных: изначальные договоры и договоры между участниками цепочки, креативы вместе с медиаданными, площадки размещения, самих участников, акты и статистику показов. Из этого он собирает картину того, что уже зарегистрировано, что ушло в ЕРИР и что осталось висеть без отчётности к концу месяца.",
        "Порядок регистрации в 1ОРД неочевиден, и агент его учитывает: erid присваивается креативу не в момент создания, а только после того, как к нему добавлены медиаданные, поэтому свежая запись какое-то время живёт без идентификатора. Выгрузка в ЕРИР — отдельный шаг со своим флагом, и запись, принятая реестром, ещё не значит сданную отчётность: агент сверяет, что именно ушло, и называет поле, из-за которого запись не прошла.",
        "На запись агент заводит и обновляет креативы и медиаданные, площадки, акты и статистику показов, ставит флаг выгрузки в ЕРИР. Реквизиты для регистрации — ИНН сторон, номера и даты договоров, тексты и ссылки креативов — он берёт у вас, а не придумывает. Перед созданием договора агент ищет уже существующий по ИНН сторон, чтобы не плодить дубликаты, а при неполных данных останавливается и спрашивает недостающее.",
        "Логин и пароль обмениваются на токен, который агент продлевает сам, поэтому вводить их заново не приходится, а смена пароля в кабинете обрывает доступ сразу. Объём видимого и изменяемого задают права того пользователя, чьим доступом идёт работа, и расширяются они в кабинете, а не в чате. Частоту запросов агент держит в пределах десяти в секунду, чтобы массовая выгрузка креативов не упёрлась в ограничение. Если данных нет или прав не хватает, он скажет об этом прямо, а не покажет пустую таблицу."
      ],
      "requirements": [
        "Юрлицо или ИП, отчитывающиеся о рекламе в ЕРИР.",
        "Данные организации для заявки: ИНН, тип и контактная почта.",
        "Права администратора организации в 1ОРД.",
        "Адрес API по умолчанию — https://ord.beeline.ru/ordapi."
      ],
      "faq": [
        {
          "q": "Как подключить 1ОРД (Билайн)?",
          "a": "Логином и паролем пользователя: в кабинете 1ОРД откройте «Пользователи» → «Добавить пользователя» с ролью «Пользователь API», логин и пароль придут на указанную почту. Адрес API можно оставить по умолчанию. Оферту до этого принимает администратор организации."
        },
        {
          "q": "Что агент видит в 1ОРД?",
          "a": "Договоры и изначальные договоры, креативы с медиаданными, площадки, участников, акты и статистику показов — в объёме прав того пользователя, чьи логин и пароль подключены."
        },
        {
          "q": "Пишет ли агент в 1ОРД?",
          "a": "Может: заводит и обновляет креативы, медиаданные, площадки, акты и статистику показов, ставит флаг выгрузки в ЕРИР. Реквизиты для регистрации агент берёт у вас, а не придумывает."
        },
        {
          "q": "Почему креатив без erid?",
          "a": "Идентификатор присваивается только после того, как к креативу добавлены медиаданные. Агент покажет, какого блока не хватает, и добавит его тем же вызовом."
        }
      ]
    },
    "seo_en": {
      "headline": "Register creatives and get an erid without the manual form",
      "scenarios": [
        {
          "title": "Registering a creative and getting erid",
          "desc": "The agent creates the creative together with its media data and returns the erid that has to go into the link before the placement starts."
        },
        {
          "title": "Checking the upload to ERIR",
          "desc": "The agent shows which contracts, creatives and acts have not reached ERIR and names the field that stopped the record."
        },
        {
          "title": "Acts and impression stats",
          "desc": "The agent collects impression stats by platform and the acts due for the monthly reporting deadline and sends a summary of what is still outstanding."
        },
        {
          "title": "Contracts and the chain of participants",
          "desc": "The agent finds the initial contract by the tax IDs of the parties, checks for duplicates and shows where a link is missing in the counterparty chain."
        },
        {
          "title": "Platforms for a placement",
          "desc": "The agent registers a placement platform from the details you give, links it to the creative and updates the impression stats once the campaign starts running."
        },
        {
          "title": "An audit before launch",
          "desc": "The agent exports creatives in bulk, finds the ones with no erid or with media data missing and names exactly which block each of them is short of."
        }
      ],
      "how_it_works": [
        "The agent works with 1ORD over the second version of the API at https://ord.beeline.ru/ordapi and reads the whole registry of advertising data: initial contracts and contracts between the participants of the chain, creatives together with their media data, placement platforms, the participants themselves, acts and impression stats. Out of that it assembles the picture of what is already registered, what has reached ERIR and what is still hanging without reporting by the end of the month.",
        "The registration order in 1ORD is not obvious, and the agent takes it into account: an erid is assigned to a creative not at the moment of creation but only after media data has been added to it, so a fresh record lives for a while without an identifier. The upload to ERIR is a separate step with its own flag, and a record accepted by the registry does not yet mean submitted reporting: the agent checks what exactly went through and names the field that stopped the record.",
        "On the write side the agent creates and updates creatives and media data, platforms, acts and impression stats, and sets the flag for the upload to ERIR. The details needed for registration — the tax IDs of the parties, contract numbers and dates, creative texts and links — come from you, the agent does not invent them. Before creating a contract it looks for an existing one by the tax IDs of the parties so as not to breed duplicates, and with incomplete data it stops and asks for what is missing.",
        "The login and password are exchanged for a token that the agent renews itself, so they never have to be entered again, while changing the password in the account cuts access off at once. The scope of what is visible and changeable is set by the permissions of the user it works under, and they are extended in the account, not in chat. The agent holds the request rate within ten per second so that a bulk export of creatives does not run into the limit. If data is missing or permissions fall short, it says so directly instead of showing an empty table."
      ],
      "requirements": [
        "A company or sole trader reporting advertising data to ERIR.",
        "Company details for the request: INN, type and contact email.",
        "Organisation administrator rights in 1ORD.",
        "The default API address, https://ord.beeline.ru/ordapi."
      ],
      "faq": [
        {
          "q": "How do I connect 1ORD (Beeline)?",
          "a": "With a user login and password: in the 1ORD account open Users, then Add user with the API User role, and the login and password will arrive at the email you specify. The API address can be left at its default. The offer agreement is accepted before that by the organisation administrator."
        },
        {
          "q": "What does the agent see in 1ORD?",
          "a": "Contracts and initial contracts, creatives with their media data, platforms, participants, acts and impression stats — within the permissions of the user whose login and password are connected."
        },
        {
          "q": "Does the agent write to 1ORD?",
          "a": "It can: it creates and updates creatives, media data, platforms, acts and impression stats, and sets the flag for upload to ERIR. The details needed for registration come from you, the agent does not invent them."
        },
        {
          "q": "Why does a creative have no erid?",
          "a": "The identifier is assigned only after media data has been added to the creative. The agent shows which block is missing and adds it in the same call."
        }
      ]
    }
  },
  {
    "key": "ozon",
    "name": "Ozon Seller API",
    "description": "Товары, заказы и аналитика Ozon — вход через аккаунт продавца, без копирования ключей",
    "category": "marketplaces",
    "auth_flow": "popup_oauth",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "short_name": "Ozon",
    "seo": {
      "headline": "Считайте юнит-экономику Ozon и отвечайте покупателям в чате",
      "scenarios": [
        {
          "title": "Разобрать падение продаж по SKU",
          "desc": "Агент сведёт заказы и воронку показов Ozon за период, найдёт категории и карточки, где просела выручка, и покажет причину: цена, остатки или показы."
        },
        {
          "title": "Ответить на отзывы и вопросы покупателей",
          "desc": "Агент разберёт новые отзывы и вопросы, подготовит ответы в тоне бренда и поднимет наверх негатив, который бьёт по рейтингу карточки."
        },
        {
          "title": "Поставка FBO по кластерам",
          "desc": "Агент посчитает, на сколько хватит остатков в каждом кластере, отберёт SKU с рекомендацией к отгрузке и соберёт заявку на поставку FBO: черновик, таймслот, заявка."
        },
        {
          "title": "Сводка по рекламе без кабинета",
          "desc": "Агент подтянет статистику Performance API, посчитает ДРР по кампаниям и скажет, где реклама окупается, а где сливает бюджет."
        },
        {
          "title": "Прибыль по каждому SKU",
          "desc": "Агент соберёт помесячный P&L из финансовых транзакций и разложит по SKU выручку, комиссию, логистику, возвраты и налог — до чистой прибыли."
        },
        {
          "title": "Дежурство по срокам отправлений",
          "desc": "Агент ловит уведомления Ozon об отменах, переносе даты доставки и смене дедлайна сборки и сразу говорит, по каким отправлениям горит срок."
        }
      ],
      "how_it_works": [
        "Агент ходит в Ozon Seller API напрямую — финансы, аналитика, товары, заказы FBS и FBO, отзывы и вопросы, поставки. Финансы здесь сильная сторона: помесячный P&L собирается одним запросом к финансовым транзакциям, а сумма строк сверяется с итогами Ozon — расхождение агент покажет, а не спрячет. Юнит-экономика считается по каждому SKU: выручка, комиссия, логистика, возвраты, налог, прибыль — с аллокацией сервисных списаний пропорционально отправлениям. Поверх ложатся ABC×XYZ-классификация портфеля, прогноз прибыли план/факт и сверка компенсаций по возвратам и потерям: агент прогоняет все классы претензий и честно помечает, что посчитать не удалось, вместо того чтобы молча занизить сумму.",
        "С отзывами и вопросами агент работает так, как Ozon устроен на самом деле: признак неотвеченного вопроса — счётчик ответов, а не статус, потому что статус в Ozon это ручная пометка продавца. Негативные отзывы фильтруются по оценке, рядом считается скорость вашей реакции, а ответы агент готовит в тоне бренда и поднимает наверх то, что бьёт по рейтингу карточки. Вопросы к карточкам и чаты с покупателями он ведёт одной лентой неотвеченного, чтобы ничего не терялось между разделами кабинета.",
        "В отгрузке FBS агент знает главную ловушку: HTTP 200 от Ozon не означает, что отгрузка прошла. После каждой отгрузки он проверяет фактический статус отправления и при сбое повторяет сборку, а маркировку «Честный ЗНАК» валидирует до отгрузки. Заявки на поставку FBO создаются по актуальному v2-процессу: черновик, таймслот, заявка и только затем подтверждённый номер заказа. Новые отправления, отмены, смену дедлайна сборки, перенос даты доставки и дефицит остатков Ozon присылает уведомлениями, так что агент узнаёт о них, не опрашивая кабинет по кругу.",
        "Про цены и карточки агент осторожен, потому что API Ozon перезаписывает, а не дополняет. Массовое обновление цен идёт с обязательной минимальной ценой, чтобы промо-акция не увезла цену ниже себестоимости. Импорт карточки — полная замена: агент собирает её целиком, проверяет статус модерации до правки и перечитывает карточку после. Фото заливаются только полным списком — старые плюс новые, иначе Ozon их сотрёт, а лимиты на создание товаров агент проверяет до массовой загрузки, а не узнаёт из ошибки после половины.",
        "Частоту запросов агент держит по каждой ручке Seller API отдельно: отчёты по размещению Ozon отдаёт считанные разы в сутки, аналитику и поисковые запросы — заметно чаще, и лимит не сжигается на повторных выгрузках. Тяжёлые отчёты приходят асинхронно: агент ставит задачу, дожидается готового файла и разбирает его сам. Даты он приводит к московскому времени, в котором Ozon считает свои сутки, чтобы граница периода не сдвигала выручку в соседний месяц. Если данных за период нет, он скажет об этом прямо, а не покажет пустую таблицу."
      ],
      "requirements": [
        "Роль «Администратор» или «Управляющий» в кабинете Ozon Seller",
        "Продажи, финансы, заказы и остатки читаются на любом тарифе",
        "Премиум-тариф нужен только для воронки показов, возвратов и разрезов",
        "Отзывы по API — подписка «Управление отзывами» или Premium Pro",
        "На части кабинетов раздел отзывов закрыт даже с подпиской"
      ],
      "faq": [
        {
          "q": "Нужен ли API-ключ, чтобы подключить Ozon?",
          "a": "Обычно нет: подключение идёт входом в аккаунт Ozon Seller (OAuth) — вы подтверждаете доступ в кабинете продавца, копировать ключи не нужно. Доступ выдаётся под ролью «Администратор» или «Управляющий»: под остальными ролями окно подтверждения не появится, и тогда остаётся подключение по Client-Id и API-ключу."
        },
        {
          "q": "Какие данные Ozon видит агент?",
          "a": "Товары, заказы, остатки, возвраты, отзывы и вопросы, аналитику продаж и статистику рекламы Performance API — ровно те разделы, на которые выданы права при входе. Можно выдать только read-only доступ."
        },
        {
          "q": "Может ли агент менять что-то в кабинете?",
          "a": "Только если вы выдали права на запись: тогда агент сможет отвечать в чатах и на вопросы, работать с заявками на скидку и поставками. С read-only правами агент только читает и анализирует."
        },
        {
          "q": "Как быстро появляются данные после подключения?",
          "a": "Сразу: агент ходит в Seller API напрямую по вашему запросу, без промежуточных выгрузок. Ограничения по частоте запросов Ozon соблюдаются автоматически."
        }
      ]
    },
    "seo_en": {
      "headline": "Calculate Ozon unit economics and answer buyers in chat",
      "scenarios": [
        {
          "title": "Break down a sales drop by SKU",
          "desc": "The agent brings Ozon orders and the impression funnel for the period together, finds the categories and listings where revenue fell and shows the reason: price, stock or impressions."
        },
        {
          "title": "Answer customer reviews and questions",
          "desc": "The agent goes through new reviews and questions, drafts replies in the brand tone of voice and surfaces the negative ones that hit the listing rating."
        },
        {
          "title": "FBO supply by cluster",
          "desc": "The agent works out how long stock lasts in each cluster, picks the SKUs recommended for shipment and assembles the FBO supply request: draft, timeslot, request."
        },
        {
          "title": "Ad summary without opening the account",
          "desc": "The agent pulls Performance API stats, calculates the ad cost share by campaign and tells you where advertising pays off and where it burns budget."
        },
        {
          "title": "Profit for every SKU",
          "desc": "The agent assembles a monthly P&L from financial transactions and splits revenue, commission, logistics, returns and tax down to net profit for each SKU."
        },
        {
          "title": "Watch over shipping deadlines",
          "desc": "The agent catches Ozon notifications about cancellations, moved delivery dates and changed assembly cutoffs and says right away which postings are running out of time."
        }
      ],
      "how_it_works": [
        "The agent calls the Ozon Seller API directly — finance, analytics, products, FBS and FBO orders, reviews and questions, supplies. Finance is the strong side here: a monthly P&L is assembled with a single request to financial transactions, and the sum of the rows is reconciled against Ozon's own totals — a discrepancy gets shown, not hidden. Unit economics is calculated per SKU: revenue, commission, logistics, returns, tax, profit — with service charges allocated proportionally to postings. On top of that sit an ABC×XYZ classification of the portfolio, a plan/fact profit forecast and a reconciliation of compensations for returns and losses: the agent runs through every class of claim and honestly flags what could not be calculated instead of quietly understating the amount.",
        "With reviews and questions the agent works the way Ozon is actually built: an unanswered question is identified by the answer counter, not by the status, because status in Ozon is a manual seller flag. Negative reviews are filtered by rating, your reaction speed is measured alongside, and the agent drafts replies in the brand tone of voice and surfaces whatever hits the listing rating. Listing questions and buyer chats are kept in a single unanswered feed so nothing gets lost between sections of the account.",
        "In FBS shipping the agent knows the main trap: an HTTP 200 from Ozon does not mean the shipment went through. After every shipment it checks the actual posting status and repeats the assembly on failure, and it validates Chestny ZNAK marking codes before shipping. FBO supply requests are created through the current v2 process: draft, timeslot, request and only then a confirmed order number. New postings, cancellations, a changed assembly cutoff, a moved delivery date and a stock deficit arrive from Ozon as notifications, so the agent learns about them without polling the account in circles.",
        "The agent is careful with prices and listings, because the Ozon API overwrites rather than merges. Bulk price updates always carry a minimum price so a promo cannot drag the price below cost. A listing import is a full replacement: the agent assembles the whole card, checks the moderation status before editing and re-reads the card afterwards. Photos are uploaded only as a complete list — the old ones plus the new ones, otherwise Ozon wipes them — and product creation limits are checked before a bulk upload rather than discovered from an error halfway through.",
        "The agent holds the request rate for each Seller API endpoint separately: placement reports are handed out by Ozon only a few times a day, analytics and search queries far more often, and the quota is not burned on repeat exports. Heavy reports arrive asynchronously: the agent queues the job, waits for the finished file and parses it itself. Dates are converted to Moscow time, the day Ozon counts by, so the edge of a period does not push revenue into the neighbouring month. If there is no data for the period, it says so directly instead of showing an empty table."
      ],
      "requirements": [
        "The Administrator or Manager role in the Ozon Seller account",
        "Sales, finance, orders and stock read on any plan",
        "A premium plan is needed only for the impression funnel, returns and breakdowns",
        "Review API access comes with the review management subscription or Premium Pro",
        "On some accounts the review section stays closed even with the subscription"
      ],
      "faq": [
        {
          "q": "Do I need an API key to connect Ozon?",
          "a": "Usually not: the connection runs through a sign-in to the Ozon Seller account (OAuth) — you approve access in the seller account and copy no keys. Access is granted under the Administrator or Manager role: other roles never see the confirmation window, and then the Client-Id and API key route remains."
        },
        {
          "q": "What Ozon data does the agent see?",
          "a": "Products, orders, stock, returns, reviews and questions, sales analytics and Performance API ad stats — exactly the sections you granted rights to at sign-in. You can grant read-only access."
        },
        {
          "q": "Can the agent change anything in the account?",
          "a": "Only if you granted write permissions: then the agent can reply in chats and to questions, handle discount requests and work with supplies. With read-only permissions the agent only reads and analyses."
        },
        {
          "q": "How soon does data appear after connecting?",
          "a": "Straight away: the agent calls the Seller API directly on your request, with no intermediate exports. Ozon rate limits are respected automatically."
        }
      ]
    }
  },
  {
    "key": "ozon_api_key",
    "name": "Ozon Seller API (API-ключ)",
    "description": "Подключение по Client-Id и API-ключу из кабинета продавца — если вход через аккаунт Ozon не подошёл",
    "category": "marketplaces",
    "auth_flow": "credentials",
    "offered_to_newcomers": false,
    "catalog_visibility": "inside_primary",
    "short_name": "Ozon API",
    "variant_of": "ozon"
  },
  {
    "key": "ozon_performance",
    "name": "Ozon Performance API (рекламный кабинет)",
    "description": "Рекламные кампании Ozon по client_id и client_secret из рекламного кабинета — статистика, ставки и управление продвижением",
    "category": "marketplaces",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "short_name": "Ozon Реклама",
    "variant_of": "ozon"
  },
  {
    "key": "pachca",
    "name": "Пачка",
    "description": "Корпоративный мессенджер Пачка — агент отвечает в беседах и тредах от имени вашего бота, читает присланные файлы и отправляет свои",
    "category": "messengers",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "short_name": "Пачка",
    "seo": {
      "headline": "Отвечайте в беседах Пачки от имени своего бота",
      "scenarios": [
        {
          "title": "Ответы в рабочей беседе",
          "desc": "Агент получит сообщение из беседы Пачки через исходящий вебхук, разберёт вопрос и ответит от имени бота, не дожидаясь, пока вы освободитесь."
        },
        {
          "title": "Разбор присланных файлов",
          "desc": "Агент дочитает вложения сообщения по его идентификатору — накладную, выгрузку, скриншот отчёта — и ответит по их содержимому прямо в переписке."
        },
        {
          "title": "Сводка по расписанию",
          "desc": "Агент отправит утреннюю сводку в нужную беседу Пачки в согласованное время, чтобы цифры приходили сами, без напоминаний."
        },
        {
          "title": "Кнопки и уточнения",
          "desc": "Агент задаст вопрос кнопками, обработает нажатие по trigger_id и отредактирует своё сообщение, когда ответ уже не актуален."
        },
        {
          "title": "Видно, что бот работает",
          "desc": "Пока агент готовит ответ, он ставит реакцию на исходное сообщение и снимает её по завершении — в Пачке нет индикатора набора, и реакция заменяет его."
        },
        {
          "title": "Файл прямо в беседу",
          "desc": "Агент загрузит готовый отчёт или выгрузку в Пачку и назовёт, в какую беседу положил файл, — вместо ссылки на сторонний диск."
        }
      ],
      "how_it_works": [
        "Агент работает через Bot API Пачки на api.pachca.com, а токен бота передаёт в заголовке Authorization как Bearer. Первым запросом он вызывает GET /profile: так проверяется, что токен живой, и видно, от чьего имени будут уходить сообщения. Дальше в работе только те беседы, куда бот добавлен, — их переписка, вложения и нажатия кнопок.",
        "Бот в Пачке — участник беседы, а не наблюдатель со стороны: пока его не добавили в разговор, ни одного сообщения оттуда агент не получит, и никакие права это не обойдут. Входящие приходят не опросом, а исходящим вебхуком: адрес регистрируется при подключении, Пачка присылает новые сообщения и нажатия кнопок сама, а каждый запрос подписывает HMAC-подписью в заголовке Pachca-Signature.",
        "На запись это основной режим коннектора. Агент отвечает в переписке, загружает файлы, задаёт уточняющие вопросы кнопками и обрабатывает нажатие по trigger_id. Пока он думает, на исходном сообщении висит реакция — в Пачке нет индикатора набора, и она честно показывает, что запрос взят в работу. Редактировать и удалять он может только собственные сообщения.",
        "Токен даёт права ровно этого бота и ничего сверх: личная переписка владельца профиля через него недоступна. Вложения агент забирает, дочитывая сообщение по его идентификатору, а частоту запросов выдерживает сам — на чтение у Пачки свой лимит, и лишний запрос на каждое сообщение агент не делает. Файл он отправляет загрузкой в Пачку, а не ссылкой на сторонний диск, и называет, в какую беседу его положил."
      ],
      "requirements": [
        "Рабочее пространство Пачки с правами администратора",
        "Чат-бот, созданный в разделе интеграций, и его токен доступа",
        "Бот добавлен в те беседы, где он должен отвечать"
      ],
      "faq": [
        {
          "q": "Как подключить Пачку?",
          "a": "Токеном бота. В настройках рабочего пространства откройте раздел интеграций, создайте чат-бота и скопируйте его токен доступа целиком. Подпись исходящих вебхуков включается там же — её секрет можно указать вторым полем."
        },
        {
          "q": "Что агент видит в Пачке?",
          "a": "Сообщения и вложения тех бесед, куда добавлен бот, и данные самого бота. Переписку, в которой бота нет, он не читает."
        },
        {
          "q": "Пишет ли агент в Пачку?",
          "a": "Да, это основной сценарий: отправляет и редактирует сообщения, удаляет свои, загружает файлы, ставит реакции и отвечает на нажатия кнопок."
        },
        {
          "q": "Почему бот ставит реакцию вместо «печатает…»?",
          "a": "В Пачке нет индикатора набора для ботов. Реакция на исходном сообщении — ближайший честный эквивалент: она появляется, когда запрос взят в работу, и снимается, когда ответ отправлен."
        }
      ]
    },
    "seo_en": {
      "headline": "Answer in Pachca conversations as your own bot",
      "scenarios": [
        {
          "title": "Replies in a work conversation",
          "desc": "The agent receives a message from a Pachca conversation over an outgoing webhook, works out the question and answers as the bot without waiting for you to free up."
        },
        {
          "title": "Reading the files people send",
          "desc": "The agent fetches the message's attachments by its id — a delivery note, an export, a screenshot of a report — and answers on their content right in the thread."
        },
        {
          "title": "Scheduled digest",
          "desc": "The agent posts the morning digest to the right Pachca conversation at the agreed time, so the numbers arrive on their own, without reminders."
        },
        {
          "title": "Buttons and follow-up questions",
          "desc": "The agent asks a question with buttons, handles the tap by its trigger_id and edits its own message once the answer is no longer relevant."
        },
        {
          "title": "Visible proof the bot is working",
          "desc": "While the agent prepares an answer it puts a reaction on the original message and removes it when done — Pachca has no typing indicator for bots, and the reaction stands in for one."
        },
        {
          "title": "A file straight into the conversation",
          "desc": "The agent uploads a finished report or export into Pachca and names the conversation it put the file in — instead of passing around a link to an outside drive."
        }
      ],
      "how_it_works": [
        "The agent works through the Pachca Bot API at api.pachca.com and passes the bot token in the Authorization header as a Bearer token. Its first request is GET /profile: that checks the token is alive and shows whose name the messages will go out under. From there only the conversations the bot has been added to are in play — their threads, attachments and button taps.",
        "A bot in Pachca is a conversation participant, not an observer on the side: until it is added to a conversation the agent receives not a single message from there, and no permission gets around that. Incoming messages arrive not by polling but over an outgoing webhook: the address is registered at connection time, Pachca pushes new messages and button taps itself, and signs every request with an HMAC in the Pachca-Signature header.",
        "Writing is the main mode for this connector. The agent answers in the thread, uploads files, asks follow-up questions with buttons and handles the tap by its trigger_id. While it thinks, a reaction sits on the original message — Pachca has no typing indicator, and the reaction honestly shows the request was picked up. It can edit and delete only its own messages.",
        "The token carries exactly this bot's rights and nothing beyond: the profile owner's personal correspondence is out of reach through it. Attachments are fetched by re-reading the message by its id, and the agent holds the request rate itself — Pachca meters reads separately, and the agent does not spend an extra call on every message. A file goes out as an upload to Pachca rather than a link to an outside drive, and the agent names the conversation it landed in."
      ],
      "requirements": [
        "A Pachca workspace with administrator rights",
        "A chatbot created in the integrations section, and its access token",
        "The bot added to the conversations where it should answer"
      ],
      "faq": [
        {
          "q": "How do I connect Pachca?",
          "a": "With a bot token. In the workspace settings open the integrations section, create a chatbot and copy its access token in full. Outgoing-webhook signing is switched on in the same place — its secret goes into the second field."
        },
        {
          "q": "What does the agent see in Pachca?",
          "a": "Messages and attachments in the conversations the bot has been added to, and the data of the bot itself. It does not read conversations where the bot is absent."
        },
        {
          "q": "Does the agent write to Pachca?",
          "a": "Yes, that is the main scenario: it sends and edits messages, deletes its own, uploads files, sets reactions and responds to button taps."
        },
        {
          "q": "Why does the bot set a reaction instead of «typing…»?",
          "a": "Pachca has no typing indicator for bots. A reaction on the original message is the closest honest equivalent: it appears when the request is picked up and comes off when the answer has been sent."
        }
      ]
    }
  },
  {
    "key": "parus_exchange",
    "name": "ПАРУС 8 (Сервис интеграции)",
    "description": "Обмен с ПАРУС 8 через сервер приложений «Сервис интеграции с WEB API»",
    "category": "docflow",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "short_name": "ПАРУС 8",
    "seo": {
      "headline": "Данные ПАРУС 8 в чате через сервис интеграции с WEB API",
      "scenarios": [
        {
          "title": "Выборка по объявленной функции",
          "desc": "Агент вызовет функцию сервиса обмена — остатки, контрагентов, лицевые счета — и разложит ответ в таблицу, не заставляя администратора выгружать её руками."
        },
        {
          "title": "Опись функций сервиса обмена",
          "desc": "Агент соберёт с ваших слов перечень функций (код, адрес, метод) и будет держать его в диалоге, чтобы не подбирать пути наугад и не ловить 404."
        },
        {
          "title": "Проверка живости сервера приложений",
          "desc": "Агент дёрнет корень сервиса обмена и по ответу скажет, жив ли сервер приложений и его ли это 404 — до того, как вы начнёте искать ошибку в правах."
        },
        {
          "title": "Разбор отказов PL/SQL-обработчика",
          "desc": "Агент прочитает код ERR_ из тела ответа и назовёт причину: отказ в правах, ошибка обработчика в базе или неверная форма запроса."
        },
        {
          "title": "Регистрация документа из чата",
          "desc": "Если у сервиса объявлена пишущая функция, агент покажет тело будущего запроса и отправит его только после вашего подтверждения."
        },
        {
          "title": "Связка Паруса с остальными системами",
          "desc": "Агент сведёт выборку из Паруса с данными банка, маркетплейса или почты и покажет расхождения одной картиной, без промежуточных выгрузок."
        }
      ],
      "how_it_works": [
        "Агент ходит в ПАРУС 8 через сервер приложений «Сервис интеграции с WEB API» — тот самый Node-сервис, который ставится рядом с базой. В подключении два поля: адрес сервера приложений и корень сервиса обмена, и путь функции агент считает уже относительно корня. Живость проверяется запросом к самому корню: он отвечает HTML с версией сервера приложений и именем сервиса на любой метод, поэтому доработок на стороне заказчика для подключения не требуется.",
        "Состав функций у каждой инсталляции свой, и это главное отличие от облачных сервисов. Маршрутов у сервера приложений нет собственных: при старте он читает справочники самой базы — «Сервисы обмена» задают корень URL, «Функции сервиса» задают адрес, HTTP-метод и обработчики «до» и «после». Наружу этот перечень не публикуется, поэтому агент не подбирает пути наугад, а просит у вас выгрузку из настроек Паруса и работает по ней.",
        "Отказы сервер приложений отдаёт одинаковым способом: HTTP 500 и текст вида ERR_КОД с сообщением, то есть статус не несёт смысла вообще. Агент разбирает префикс и различает то, что различить обязан: ERR_UNAUTH — отказ PL/SQL-обработчика в правах, который не лечится сменой логина, ERR_DB_SERVER — ошибка обработчика в базе, ERR_APP_SERVER_BEFORE и ERR_OBJECT_BAD_INTERFACE — неверная форма запроса. Повтор после них бессмысленен, и агент его не делает.",
        "Форму ответа задаёт обработчик на стороне заказчика, а не вендор: одна функция вернёт JSON, соседняя — XML или произвольный текст, и агент не считает ответ JSON'ом заранее. Свои потолки он тоже держит: пул подключений сервера приложений к базе — десять по умолчанию, входящее сообщение — до десяти мегабайт, поэтому тяжёлые обработчики упираются в базу, а не в HTTP. Функции, чей адрес начинается с собаки, — раздача статики, и в перечне они пропускаются."
      ],
      "requirements": [
        "Развёрнутый сервер приложений «Сервис интеграции с WEB API»",
        "Заведённый сервис обмена с корнем URL в справочниках Паруса",
        "Объявленные функции сервиса: адрес, метод, обработчик в базе",
        "Сетевой доступ до сервера приложений с нашей стороны"
      ],
      "faq": [
        {
          "q": "Как подключить ПАРУС 8?",
          "a": "Двумя полями: адресом сервера приложений «Сервис интеграции с WEB API» и корнем сервиса обмена из справочника «Сервисы обмена». Логин и пароль здесь не нужны — входящие запросы сервер приложений не аутентифицирует."
        },
        {
          "q": "Почему агент спрашивает список функций?",
          "a": "Потому что взять его больше неоткуда: перечень лежит в самой базе Паруса и наружу не отдаётся. Ответ 404 означает «такой функции не объявлено», а не опечатку в пути, поэтому угадывание здесь бесполезно."
        },
        {
          "q": "Пишет ли агент в Парус?",
          "a": "Только через те функции сервиса обмена, которые ваш администратор объявил на запись. Тело будущего запроса агент показывает заранее и отправляет его после явного подтверждения."
        },
        {
          "q": "Что делать при ошибке ERR_UNAUTH?",
          "a": "Обратиться к администратору Паруса: права проверяет PL/SQL-обработчик конкретной функции обмена, а не сервер приложений. Смена логина и пароля в карточке подключения на этот отказ не влияет."
        }
      ]
    },
    "seo_en": {
      "headline": "PARUS 8 data in chat through its WEB API integration service",
      "scenarios": [
        {
          "title": "A query through a declared function",
          "desc": "The agent calls a function of the exchange service — stock, counterparties, accounts — and lays the answer out as a table instead of asking the admin for a manual export."
        },
        {
          "title": "An inventory of exchange functions",
          "desc": "The agent collects the list of functions from you (code, address, method) and keeps it for the conversation, so paths are never guessed and 404s stop happening."
        },
        {
          "title": "A liveness check of the application server",
          "desc": "The agent pings the root of the exchange service and tells you whether the application server is alive and whether the 404 is its own, before you start looking for a permission problem."
        },
        {
          "title": "Reading refusals from the PL/SQL handler",
          "desc": "The agent reads the ERR_ code out of the response body and names the cause: denied permissions, a handler error in the database or a malformed request."
        },
        {
          "title": "Registering a document from the chat",
          "desc": "If the service has a writing function declared, the agent shows the body of the request it is about to send and sends it only after your confirmation."
        },
        {
          "title": "PARUS next to your other systems",
          "desc": "The agent puts a PARUS query next to bank, marketplace or mail data and shows the discrepancies in one picture, with no intermediate exports."
        }
      ],
      "how_it_works": [
        "The agent reaches PARUS 8 through the application server called the WEB API integration service — the Node service installed next to the database. The connection takes two fields: the address of the application server and the root of the exchange service, and every function path is resolved relative to that root. Liveness is checked against the root itself: it answers with an HTML page carrying the application server version and the service name for any method, so connecting needs no development work on your side.",
        "The set of functions differs per installation, and this is the main difference from a cloud service. The application server has no routes of its own: at startup it reads the directories of the database itself — Exchange services define the URL root, Service functions define the address, the HTTP method and the before and after handlers. That list is never published outwards, so the agent does not guess paths: it asks you for the export from the PARUS settings and works from it.",
        "Refusals always arrive the same way: HTTP 500 with a text body of the form ERR_CODE plus a message, which means the status code carries no meaning at all. The agent parses the prefix and separates what has to be separated: ERR_UNAUTH is the PL/SQL handler denying permissions, which no change of login will fix, ERR_DB_SERVER is a handler error inside the database, ERR_APP_SERVER_BEFORE and ERR_OBJECT_BAD_INTERFACE mean a malformed request. Retrying after those is pointless, and the agent does not retry.",
        "The shape of a successful response is defined by your own handler rather than by the vendor: one function returns JSON, the next one XML or arbitrary text, and the agent never assumes JSON in advance. It also respects the real ceilings: the application server keeps ten database connections by default and accepts messages up to ten megabytes, so heavy handlers hit the database rather than HTTP. Functions whose address starts with an at sign serve static files and are skipped in the list."
      ],
      "requirements": [
        "A deployed WEB API integration service application server",
        "An exchange service with a URL root in the PARUS directories",
        "Declared service functions: address, method, handler in the database",
        "Network access to the application server from our side"
      ],
      "faq": [
        {
          "q": "How do I connect PARUS 8?",
          "a": "With two fields: the address of the WEB API integration service application server and the root of the exchange service from the Exchange services directory. No login or password is needed here — the application server does not authenticate incoming requests."
        },
        {
          "q": "Why does the agent ask for the list of functions?",
          "a": "Because there is nowhere else to take it from: the list lives in the PARUS database and is never exposed. A 404 means that no such function is declared rather than a typo in the path, so guessing is useless."
        },
        {
          "q": "Does the agent write to PARUS?",
          "a": "Only through the exchange functions your administrator declared for writing. The agent shows the body of the request in advance and sends it after an explicit confirmation."
        },
        {
          "q": "What should I do about ERR_UNAUTH?",
          "a": "Talk to your PARUS administrator: permissions are checked by the PL/SQL handler of that specific exchange function, not by the application server. Changing the login and password in the connection card has no effect on this refusal."
        }
      ]
    }
  },
  {
    "key": "pochta_russia",
    "name": "Почта России",
    "description": "Почтовые отправления — заказы, тарифы, трекинг, нормализация адресов, поиск ОПС",
    "category": "logistics",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Считайте тарифы и сроки Почты России до оформления отправки",
      "scenarios": [
        {
          "title": "Тариф до оформления",
          "desc": "Агент посчитает стоимость и срок доставки по индексу, весу и габаритам ещё до того, как отправление будет оформлено."
        },
        {
          "title": "Нормализация адресов",
          "desc": "Агент приведёт адреса из заказов к почтовому формату, разложит их на индекс и элементы и покажет строки, которые Почта не распознала."
        },
        {
          "title": "Отправления в пути",
          "desc": "Агент соберёт трекинг по отправлениям и пришлёт сводку: что в пути, что вручено и что застряло на сортировке."
        },
        {
          "title": "Куда сдавать партию",
          "desc": "Агент найдёт отделения по индексу или адресу и подскажет ОПС, куда удобнее сдавать очередную партию отправлений."
        },
        {
          "title": "Партия к сдаче",
          "desc": "Агент соберёт отправления в партию, покажет её целиком — состав, вес, тариф — и отправит в кабинет только после вашего подтверждения."
        },
        {
          "title": "Настройки отправителя",
          "desc": "Агент поднимет настройки кабинета otpravka.pochta.ru и покажет, с какими параметрами отправителя пойдёт расчёт и чего не хватает для оформления."
        }
      ],
      "how_it_works": [
        "Агент работает с кабинетом otpravka.pochta.ru через его API: считает стоимость и срок по индексу, весу и габаритам, читает заказы и отправления, поднимает статусы трекинга, прогоняет адреса через нормализацию и ищет отделения связи по индексу или адресу. Начинает он с настроек кабинета — так проверяется само подключение и становится видно, с какими параметрами отправителя предстоит считать.",
        "Почта отличается от курьерских служб тем, что адрес здесь не строка, а разложенный на элементы почтовый объект: пока адрес не нормализован, отправление не оформить. Поэтому агент прогоняет адреса из заказов через нормализацию и отдельно показывает строки, которые Почта не распознала, — это не ошибка агента, а адрес, который придётся править руками. Статусы трекинга приходят с задержкой сортировки, и агент читает их как историю, а не как факт текущей минуты.",
        "По умолчанию агент считает, ищет и отчитывается в чате: собирает сводку по отправлениям в пути, отделяет вручённые от застрявших на сортировке и подсказывает ОПС для очередной партии. Всё, что меняет данные кабинета — заказ, партия, — он сначала показывает целиком и отправляет только после вашего подтверждения, а на отказ не отвечает повторным запросом.",
        "Почта требует два заголовка одновременно — токен приложения и данные учётной записи, — поэтому агент подписывает ими каждый вызов, а не открывает сессию. Частота держится в пределах пяти запросов в секунду, крупные выгрузки идут частями, а стоимость считается по каждой посылке отдельно: тариф зависит от индекса, веса и габаритов. Про закрытый раздел агент говорит прямо, вместо пустой таблицы."
      ],
      "requirements": [
        "Подтверждённые заявка на доступ и договор — до 3 рабочих дней",
        "Права агента равны правам вашей учётной записи в кабинете"
      ],
      "faq": [
        {
          "q": "Как подключить Почта России?",
          "a": "Тремя значениями из кабинета otpravka.pochta.ru: токен приложения из «Настройки» → «API», а также логин и пароль самой учётной записи. Логин надёжнее указывать телефоном в формате +7XXXXXXXXXX. Ключи появляются после подтверждения заявки и договора."
        },
        {
          "q": "Что агент видит в кабинете?",
          "a": "Заказы и отправления кабинета otpravka.pochta.ru, расчёт тарифов, статусы трекинга, результаты нормализации адресов и справочник отделений связи."
        },
        {
          "q": "Пишет ли агент в Почту России?",
          "a": "По умолчанию агент считает, ищет и отчитывается в чате. Действия, меняющие данные кабинета, он согласует с вами и делает только в пределах прав вашей учётной записи."
        },
        {
          "q": "Что с правами и лимитами?",
          "a": "Токен и логин дают ровно те права, что есть у учётной записи otpravka.pochta.ru. Запросы идут не чаще 5 в секунду, поэтому крупные выгрузки агент собирает частями."
        }
      ]
    },
    "seo_en": {
      "headline": "Quote Russian Post prices and times before you ship anything",
      "scenarios": [
        {
          "title": "A price quote before you ship",
          "desc": "The agent calculates the delivery cost and time from the postcode, weight and dimensions before the shipment has even been created."
        },
        {
          "title": "Address normalisation",
          "desc": "The agent brings addresses from your orders into postal format, splits them into a postcode and components and shows the lines Russian Post did not recognise."
        },
        {
          "title": "Shipments in transit",
          "desc": "The agent collects tracking for your shipments and sends a summary: what is on the way, what has been delivered and what is stuck in sorting."
        },
        {
          "title": "Where to hand over the batch",
          "desc": "The agent finds branches by postcode or address and suggests the post office most convenient for handing over the next batch of shipments."
        },
        {
          "title": "A batch ready to hand over",
          "desc": "The agent gathers shipments into a batch, shows it in full — contents, weight, price — and sends it to the account only after you have confirmed it."
        },
        {
          "title": "Sender settings check",
          "desc": "The agent pulls the otpravka.pochta.ru account settings and shows which sender parameters the calculations run on and what is still missing to create a shipment."
        }
      ],
      "how_it_works": [
        "The agent works with the otpravka.pochta.ru account through its API: it calculates cost and time from the postcode, weight and dimensions, reads orders and shipments, pulls tracking statuses, runs addresses through normalisation and searches post offices by postcode or address. It starts from the account settings — that is how the connection itself is checked and how it becomes clear which sender parameters the calculations will run on.",
        "Russian Post differs from courier services in that an address here is not a string but a postal object split into components: until an address is normalised, no shipment can be created. So the agent runs the addresses from your orders through normalisation and separately shows the lines Russian Post did not recognise — that is not an agent error but an address that will have to be fixed by hand. Tracking statuses arrive with the delay of sorting, and the agent reads them as a history, not as a fact of the current minute.",
        "By default the agent calculates, searches and reports in chat: it builds a summary of shipments in transit, separates the delivered ones from those stuck in sorting and suggests a post office for the next batch. Anything that changes account data — an order, a batch — it first shows in full and sends only after your confirmation, and it does not answer a refusal with a repeat request.",
        "Russian Post requires two headers at once — the application token and the account credentials — so the agent signs every call with them instead of opening a session. The rate stays within five requests per second, large exports go in parts, and the cost is calculated per parcel, because the tariff depends on the postcode, the weight and the dimensions. About a closed section the agent says so directly instead of showing an empty table."
      ],
      "requirements": [
        "An approved access request and contract — up to 3 business days",
        "The agent gets exactly your account's rights in the cabinet"
      ],
      "faq": [
        {
          "q": "How do I connect Russian Post?",
          "a": "With three values from the otpravka.pochta.ru account: the application token from Settings and then API, plus the login and password of the account itself. The login is more reliable as a phone number in the +7XXXXXXXXXX format. The keys appear once the application and the contract are approved."
        },
        {
          "q": "What does the agent see in the account?",
          "a": "Orders and shipments of the otpravka.pochta.ru account, tariff calculations, tracking statuses, address normalisation results and the directory of post offices."
        },
        {
          "q": "Does the agent write to Russian Post?",
          "a": "By default the agent calculates, searches and reports in chat. Anything that changes account data is agreed with you and stays within the permissions of your account."
        },
        {
          "q": "What about permissions and limits?",
          "a": "The token and login give exactly the permissions the otpravka.pochta.ru account has. Requests go out no faster than 5 per second, so the agent collects large exports in parts."
        }
      ]
    }
  },
  {
    "key": "polymarket",
    "name": "Polymarket",
    "description": "Prediction markets — события, рынки, цены, ордербуки, лидерборды и твои позиции по адресу кошелька. Только публичные данные: агент не торгует, секрет не запрашивается.",
    "category": "other",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Следите за ценами и стаканом рынков Polymarket в чате",
      "scenarios": [
        {
          "title": "Цены и глубина по событию",
          "desc": "Агент соберёт по интересующим событиям текущие цены, спред и стакан и покажет, где рынок сдвинулся, а где сдвиг нарисовала одна сделка."
        },
        {
          "title": "Разбор своих позиций",
          "desc": "Агент разложит открытые позиции по сохранённому адресу кошелька: на каких рынках вы стоите, по какой цене входили и сколько стоит портфель."
        },
        {
          "title": "История цены рынка",
          "desc": "Агент выгрузит историю котировок рынка с нужным интервалом и покажет, на каком событии цена развернулась."
        },
        {
          "title": "Сводка по закрывающимся рынкам",
          "desc": "Агент по расписанию пришлёт, какие из ваших рынков заметно ушли по цене за ночь и какие события закрываются на этой неделе."
        },
        {
          "title": "Рынки по интересной теме",
          "desc": "Агент найдёт в Gamma активные рынки по теме или тегу, отсортирует их по объёму и дате закрытия и покажет, где сейчас идёт настоящая торговля."
        },
        {
          "title": "История своих сделок",
          "desc": "Агент поднимет активность по сохранённому адресу — что покупали и продавали за период и по каким ценам — сведёт сделки по рынкам и покажет место адреса в лидерборде."
        }
      ],
      "how_it_works": [
        "У Polymarket не один API, а несколько, и агент ходит в каждый за своим: в Gamma — за событиями, рынками, поиском и тегами, в CLOB — за стаканом, спредом и историей котировок, в Data API — за позициями, активностью и лидербордами по сохранённому адресу. Отсюда и складывается картина: что за событие, по какой цене торгуется, насколько глубок рынок и как в нём стоите вы.",
        "Цена рынка предсказаний — это оценка вероятности, и агент читает её вместе со стаканом, а не отдельно. На тонком рынке одна сделка уводит последнюю цену далеко от того, по чему реально можно войти, поэтому рядом с котировкой агент показывает спред и глубину и разделяет настоящий сдвиг рынка и движение, нарисованное единственным ордером. История котировок берётся с тем интервалом, на котором событие видно, а не сглажено.",
        "Торговать агент не может по устройству коннектора: создание и отмена ордеров требуют приватного ключа, которого он не хранит и не принимает. Всё, что он делает, — чтение публичных данных и разбор ваших позиций: на каких рынках вы стоите, по какой цене входили, сколько стоит портфель сейчас. Регулярную сводку по закрывающимся рынкам и ночным сдвигам цены можно поставить на расписание — это тоже чтение.",
        "Подключение — одно поле с адресом кошелька: ни API-ключа, ни приватного ключа Polymarket для чтения не выдаёт и не требует, поэтому и отзывать нечего — достаточно убрать адрес. Позиции агент читает по этому адресу и сводит их с текущими котировками рынков, так что стоимость портфеля считается на момент вопроса, а не на момент входа. Данных, закрытых за логином, у него нет вовсе: всё, что он видит, видно и любому другому. Частоту запросов коннектор держит низкой, около одного в секунду с небольшим запасом на всплеск, и разносит обращения по трём API, чтобы не упереться в лимит одного из них."
      ],
      "requirements": [
        "Аккаунт Polymarket, чьи позиции и активность нужно видеть",
        "Ни API-ключа, ни приватного ключа — читаются только публичные данные"
      ],
      "faq": [
        {
          "q": "Как подключить Polymarket?",
          "a": "Одним полем — адресом кошелька: polymarket.com → меню профиля → адрес кошелька аккаунта, это 0x плюс 40 шестнадцатеричных символов. Ни API-ключа, ни приватного ключа Polymarket для чтения не выдаёт и не требует."
        },
        {
          "q": "Что агент видит в Polymarket?",
          "a": "Публичные данные Gamma, CLOB и Data API: события, рынки, поиск и теги, стаканы, спреды и историю цен, лидерборды, а также позиции и активность по сохранённому адресу."
        },
        {
          "q": "Может ли агент торговать?",
          "a": "Нет. Создание и отмена ордеров требуют приватного ключа, который коннектор не хранит и не принимает, поэтому доступно только чтение публичных данных."
        },
        {
          "q": "Какой адрес указывать при входе через Google?",
          "a": "Адрес аккаунта, а не адрес подписанта в MetaMask: при входе через почту или Google Polymarket заводит смарт-кошелёк, и позиции числятся за ним. По адресу подписанта ответ придёт пустым."
        }
      ]
    },
    "seo_en": {
      "headline": "Watch Polymarket prices and order books from the chat",
      "scenarios": [
        {
          "title": "Prices and depth on an event",
          "desc": "The agent collects the current prices, spread and order book for the events you care about and shows where the market really moved and where one trade drew the move."
        },
        {
          "title": "Reviewing your own positions",
          "desc": "The agent breaks down open positions for the saved wallet address: which markets you are in, at what price you entered and what the portfolio is worth."
        },
        {
          "title": "Market price history",
          "desc": "The agent pulls the quote history of a market at the interval you need and shows which event turned the price around."
        },
        {
          "title": "Digest of markets about to close",
          "desc": "On a schedule the agent sends which of your markets moved notably in price overnight and which events close this week."
        },
        {
          "title": "Markets on a topic you follow",
          "desc": "Through Gamma the agent finds active markets by topic or tag, sorts them by volume and closing date and shows where the real trading is going on right now."
        },
        {
          "title": "Your own trading history",
          "desc": "The agent pulls activity for the saved address — what was bought and sold over the period and at what prices — groups the trades by market and finds the address on the leaderboard."
        }
      ],
      "how_it_works": [
        "Polymarket has not one API but several, and the agent calls each for its own part: Gamma for events, markets, search and tags, CLOB for the order book, the spread and the quote history, Data API for positions, activity and leaderboards on the saved address. That is how the picture comes together: what the event is, at what price it trades, how deep the market is and how you are positioned in it.",
        "A prediction market price is an estimate of probability, and the agent reads it together with the order book rather than on its own. In a thin market a single trade drags the last price far from anything you could actually enter at, so alongside the quote the agent shows the spread and the depth and separates a real market move from one drawn by a single order. Quote history is taken at the interval where the event is visible rather than smoothed away.",
        "The agent cannot trade, by the way the connector is built: placing and cancelling orders requires a private key, which it neither stores nor accepts. All it does is read public data and break down your positions: which markets you are in, at what price you entered, what the portfolio is worth now. A recurring digest of markets about to close and of overnight price moves can be put on a schedule — that too is reading.",
        "The connection is a single field with a wallet address: Polymarket neither issues nor requires an API key or a private key for reading, so there is nothing to revoke either — removing the address is enough. Positions are read against that address and matched with current market quotes, so the portfolio is valued as of the question, not as of the entry. Nothing behind a login is available to the agent at all: everything it sees is equally visible to anyone else. The connector keeps the request rate low, around one per second with a small allowance for bursts, and spreads calls across the three APIs so none of them hits its own limit."
      ],
      "requirements": [
        "A Polymarket account whose positions and activity you want to see",
        "No API key and no private key — only public data is read"
      ],
      "faq": [
        {
          "q": "How do I connect Polymarket?",
          "a": "With a single field, the wallet address: polymarket.com, then the profile menu, then the account wallet address — 0x plus 40 hexadecimal characters. Polymarket neither issues nor requires an API key or a private key for reading."
        },
        {
          "q": "What does the agent see in Polymarket?",
          "a": "Public Gamma, CLOB and Data API data: events, markets, search and tags, order books, spreads and price history, leaderboards, plus positions and activity for the saved address."
        },
        {
          "q": "Can the agent trade?",
          "a": "No. Placing and cancelling orders requires a private key, which the connector neither stores nor accepts, so only reading public data is available."
        },
        {
          "q": "Which address do I give if I sign in with Google?",
          "a": "The account address, not the signer address in MetaMask: when you sign in with email or Google, Polymarket creates a smart wallet and the positions belong to it. The signer address returns an empty answer."
        }
      ]
    }
  },
  {
    "key": "postgres",
    "name": "PostgreSQL",
    "description": "Подключение к базе PostgreSQL (Supabase, Neon, Yandex Managed PostgreSQL, RDS) — аналитический read-only SQL по данным клиента.",
    "category": "database",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Спрашивайте свою базу PostgreSQL словами, без SQL",
      "scenarios": [
        {
          "title": "Вопрос к базе без SQL",
          "desc": "Агент сам разберёт схему — таблицы, колонки и связи — и ответит на вопрос по данным, не требуя от вас ни строчки SQL."
        },
        {
          "title": "Метрики прямо в базе",
          "desc": "Агент посчитает выручку, средний чек и конверсию запросом к вашей базе и покажет, из каких таблиц и колонок взяты цифры."
        },
        {
          "title": "Регулярная сводка по данным",
          "desc": "Агент по расписанию прогонит один и тот же запрос — вчерашние продажи или всплеск отказов — и пришлёт результат."
        },
        {
          "title": "Сверка с внешними сервисами",
          "desc": "Агент сопоставит строки вашей базы с данными подключённых сервисов и покажет расхождения по заказам или платежам."
        },
        {
          "title": "Что вообще лежит в базе",
          "desc": "Агент перечислит таблицы, колонки и типы и объяснит, где какие данные лежат, — первое, что нужно на входе в чужую или давно забытую базу."
        },
        {
          "title": "Разбор тяжёлого запроса",
          "desc": "Агент прогонит EXPLAIN по нужному запросу и покажет, где план уходит в полный перебор таблицы, — до того, как отчёт снова упрётся в таймаут."
        }
      ],
      "how_it_works": [
        "Агент подключается к базе напрямую по параметрам — хост, порт, имя базы, пользователь, пароль и режим SSL — и начинает с обзора схемы: список таблиц, их колонки и типы. Дальше SQL он пишет сам: считает выручку, средний чек и конверсию, сопоставляет строки с данными других подключённых сервисов и показывает, из каких таблиц и колонок взята каждая цифра. Тот же запрос можно поставить на расписание и получать результат регулярно.",
        "Особенность именно PostgreSQL, которую агент учитывает: роль с pg_read_all_data не обходит row-level security. Таблица под RLS без политики SELECT вернёт ноль строк — и это не «данных нет», а «доступа нет», о чём агент говорит прямо. Так же он читает и пустой результат обычного запроса: сначала проверяет, есть ли строки вообще, и только потом называет цифру нулём. Схему агент перечитывает перед разбором, поэтому переименованная колонка или новая таблица подхватываются без переподключения.",
        "На запись агент в базу не ходит: коннектор пропускает только SELECT, WITH, SHOW и EXPLAIN, по одному запросу за вызов и с лимитом строк, а INSERT, UPDATE и любые DDL отклоняет до отправки в базу. Это устройство самого коннектора, а не настройка, которую можно снять из чата, поэтому подключение остаётся аналитическим по природе: агент читает, считает и объясняет, из чего сложился результат, но ничего в базе не меняет.",
        "Доступ агент получает не входом через сервис, а логином и паролем отдельной роли, поэтому его границы задаёте вы: агент видит ровно то, что видит эта роль, и расширить их из чата нельзя. Каждый запрос коннектор ограничивает по времени и по числу строк, а слишком тяжёлый обрывает по таймауту, вместо того чтобы висеть на рабочей базе. Если таблицы нет или права не дают её прочитать, агент скажет об этом прямо, а не покажет пустую таблицу."
      ],
      "requirements": [
        "Права владельца базы или суперпользователя для SQL-консоли",
        "PostgreSQL 14 или новее — иначе права выдаются вручную",
        "Поддержка SSL: подключение идёт в режиме require"
      ],
      "faq": [
        {
          "q": "Как подключить PostgreSQL?",
          "a": "Параметрами подключения, а не входом через сервис: хост, порт, имя базы, пользователь, пароль и режим SSL. Заведите роль только на чтение — CREATE ROLE analytics_ro LOGIN PASSWORD и GRANT pg_read_all_data, — её логин и пароль и вводятся в форме."
        },
        {
          "q": "Что агент видит в базе?",
          "a": "Список таблиц, колонки и типы и результаты SELECT в пределах прав роли. Роль pg_read_all_data не обходит row-level security: таблицы под RLS без политики SELECT вернут ноль строк."
        },
        {
          "q": "Пишет ли агент в базу?",
          "a": "Нет. Разрешены только SELECT, WITH, SHOW и EXPLAIN, по одному запросу за вызов и с лимитом строк — INSERT, UPDATE и любые DDL коннектор отклоняет."
        },
        {
          "q": "Что нужно на стороне базы?",
          "a": "Хост должен быть доступен из интернета: в Yandex Managed PostgreSQL включите публичный доступ и откройте TCP 6432, в RDS — publicly accessible и правило на 5432. Supabase и Neon открыты сразу."
        }
      ]
    },
    "seo_en": {
      "headline": "Ask your PostgreSQL database in plain words, no SQL",
      "scenarios": [
        {
          "title": "A question to the database without SQL",
          "desc": "The agent works out the schema itself — tables, columns and relations — and answers your question about the data without a single line of SQL from you."
        },
        {
          "title": "Metrics straight inside the database",
          "desc": "The agent calculates revenue, average order value and conversion with a query to your database and shows which tables and columns the numbers came from."
        },
        {
          "title": "A recurring data digest",
          "desc": "On a schedule the agent runs the same query — yesterday sales or a spike in failures — and sends the result."
        },
        {
          "title": "Reconciliation with external services",
          "desc": "The agent matches the rows of your database against data from connected services and shows discrepancies in orders or payments."
        },
        {
          "title": "What is actually in the database",
          "desc": "The agent lists tables, columns and types and explains where each kind of data lives — the first thing you need in an inherited or long-forgotten database."
        },
        {
          "title": "Reading a slow query",
          "desc": "The agent runs EXPLAIN on the query you care about and shows where the plan drops into a full table scan, before the report hits a timeout again."
        }
      ],
      "how_it_works": [
        "The agent connects to the database directly with parameters — host, port, database name, user, password and SSL mode — and starts with a look at the schema: the list of tables, their columns and types. From there it writes the SQL itself: it calculates revenue, average order value and conversion, matches rows against data from other connected services and shows which tables and columns every number came from. The same query can be put on a schedule and delivered regularly.",
        "The PostgreSQL specific the agent accounts for: a role with pg_read_all_data does not bypass row-level security. A table under RLS with no SELECT policy returns zero rows — and that is not «no data» but «no access», which the agent states directly. It reads an empty result from an ordinary query the same way: it first checks whether any rows exist at all and only then calls the number a zero. The schema is re-read before an analysis, so a renamed column or a new table is picked up without reconnecting.",
        "The agent never writes to the database: the connector passes through only SELECT, WITH, SHOW and EXPLAIN, one statement per call and with a row limit, and rejects INSERT, UPDATE and any DDL before they reach the database. That is how the connector itself is built, not a setting that can be lifted from chat, so the connection stays analytical by nature: the agent reads, calculates and explains what the result is made of, but changes nothing in the database.",
        "Access comes not from a sign-in through a service but from the login and password of a separate role, so you set its boundaries: the agent sees exactly what that role sees, and nothing said in chat can widen them. Every query is bounded by the connector in time and in rows, and one that grows too heavy is cut off by timeout instead of hanging on a production database. If a table is missing or permissions do not allow reading it, the agent says so directly instead of showing an empty table."
      ],
      "requirements": [
        "Owner or superuser rights for the database SQL console",
        "PostgreSQL 14 or newer — otherwise grants are issued by hand",
        "SSL support: the connection runs in require mode"
      ],
      "faq": [
        {
          "q": "How do I connect PostgreSQL?",
          "a": "With connection parameters rather than a sign-in through the service: host, port, database name, user, password and SSL mode. Create a read-only role — CREATE ROLE analytics_ro LOGIN PASSWORD and GRANT pg_read_all_data — and it is that login and password you enter in the form."
        },
        {
          "q": "What does the agent see in the database?",
          "a": "The list of tables, the columns and types and the results of SELECT within the permissions of the role. The pg_read_all_data role does not bypass row-level security: tables under RLS with no SELECT policy return zero rows."
        },
        {
          "q": "Does the agent write to the database?",
          "a": "No. Only SELECT, WITH, SHOW and EXPLAIN are allowed, one statement per call and with a row limit — INSERT, UPDATE and any DDL are rejected by the connector."
        },
        {
          "q": "What is needed on the database side?",
          "a": "The host must be reachable from the internet: in Yandex Managed PostgreSQL enable public access and open TCP 6432, in RDS set publicly accessible and a rule on 5432. Supabase and Neon are open right away."
        }
      ]
    }
  },
  {
    "key": "postiz",
    "name": "Postiz",
    "description": "Self-hosted или cloud планировщик соцсетей — X, LinkedIn, Bluesky, Mastodon, Discord, Telegram, TikTok и др.; ключ из Settings → Developers → Public API",
    "category": "content",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Публикуйте анонс сразу во все каналы Postiz из чата",
      "scenarios": [
        {
          "title": "Анонс во все каналы сразу",
          "desc": "Агент разложит один анонс по подключённым каналам Postiz — X, LinkedIn, Telegram, Mastodon — своим текстом под каждую площадку."
        },
        {
          "title": "План публикаций на неделю",
          "desc": "Агент подберёт свободные слоты в расписании каналов, поставит посты и покажет, что уже стоит в плане на ближайшие дни."
        },
        {
          "title": "Сводка по охватам каналов",
          "desc": "Агент соберёт аналитику подключённых каналов за 7, 30 или 90 дней и назовёт посты, собравшие больше реакций, чем остальные."
        },
        {
          "title": "Проверка, что пост ушёл",
          "desc": "Агент прочитает ленту уведомлений Postiz и покажет, какие публикации прошли, а какие площадка отклонила и с какой ошибкой."
        },
        {
          "title": "Ревизия подключённых каналов",
          "desc": "Агент перечислит соцаккаунты, привязанные в Postiz, покажет, куда за месяц не ушло ни одного поста, и отключит каналы, которыми вы больше не пользуетесь."
        },
        {
          "title": "Сначала черновик, потом слот",
          "desc": "Агент загрузит картинку, соберёт из неё и текста черновик поста и переведёт его в расписание в тот момент, когда вы скажете, что формулировка готова."
        }
      ],
      "how_it_works": [
        "Агент ходит в Public API вашего инстанса Postiz — облачного или self-hosted — и видит там подключённые соцаккаунты, ленту постов за период, свободные слоты расписания и аналитику каналов и отдельных публикаций за 7, 30 или 90 дней. Из этого складывается картина: что уже стоит в плане на ближайшие дни, куда анонс ещё не ушёл и какие посты собрали больше реакций, чем остальные.",
        "Postiz — прослойка над площадками, и запланированный пост это ещё не опубликованный: решение принимают X, LinkedIn, Telegram или Mastodon на своей стороне. Поэтому источником правды агент считает не расписание, а ленту уведомлений — по ней видно, какие публикации прошли, а какие площадка отклонила и с какой ошибкой. Один и тот же текст на все каналы он тоже не разгоняет: под каждую площадку формулировка своя.",
        "На запись агент делает многое: создаёт черновики и запланированные посты, переключает пост между черновиком и расписанием, загружает медиа, а при необходимости удаляет посты и отключает каналы. Веерная публикация собирается в один запрос с массивом постов, так что анонс уходит во все каналы разом. Публикует он только туда, где соцаккаунт уже привязан в самом Postiz: подключением новых каналов агент не занимается.",
        "Лимит у Public API жёсткий — 30 запросов в час сразу на все эндпоинты, и агент расходует их экономно: веер по каналам собирает одним запросом с массивом постов, аналитику берёт целым периодом вместо опроса по дням, а ленту переспрашивает не чаще, чем это меняет ответ. Медиа он сначала загружает и только потом ставит в пост, поэтому битая картинка отваливается до публикации, а не рушит весь веер. Если каналов или данных нет, он скажет об этом прямо, а не покажет пустую таблицу."
      ],
      "requirements": [
        "Лимит Public API — 30 запросов в час на всё рабочее пространство.",
        "Для self-hosted: инстанс Postiz доступен по сети снаружи."
      ],
      "faq": [
        {
          "q": "Как подключить Postiz?",
          "a": "Ключом Public API: в Postiz откройте «Settings» → «Developers» → «Public API» и скопируйте ключ целиком, он передаётся без префикса. Второе поле — адрес API вашего инстанса: для облака https://api.postiz.com, для self-hosted адрес бэкенда, обычно https://ваш-домен/api."
        },
        {
          "q": "Что агент видит в Postiz?",
          "a": "Подключённые соцаккаунты, ленту постов за период, свободные слоты расписания, аналитику каналов и отдельных постов и уведомления о результате публикации."
        },
        {
          "q": "Пишет ли агент в Postiz?",
          "a": "Да: создаёт черновики и запланированные посты, переключает пост между черновиком и расписанием, загружает медиа и может удалять посты и отключать каналы."
        },
        {
          "q": "Что с лимитами?",
          "a": "Public API Postiz даёт 30 запросов в час сразу на все эндпоинты, поэтому веерная публикация на несколько площадок собирается в один запрос с массивом постов."
        }
      ]
    },
    "seo_en": {
      "headline": "Publish one announcement to every Postiz channel from chat",
      "scenarios": [
        {
          "title": "One announcement across every channel",
          "desc": "The agent fans a single announcement out to your connected Postiz channels — X, LinkedIn, Telegram, Mastodon — with wording tuned to each platform."
        },
        {
          "title": "A publishing plan for the week",
          "desc": "The agent finds free slots in the channel schedules, queues the posts and shows what is already lined up for the days ahead."
        },
        {
          "title": "Channel reach at a glance",
          "desc": "The agent pulls analytics for connected channels over 7, 30 or 90 days and names the posts that drew more reactions than the rest."
        },
        {
          "title": "Confirmation that a post went live",
          "desc": "The agent reads the Postiz notification feed and shows which publications went through and which ones the platform rejected, with the error."
        },
        {
          "title": "A check-up on connected channels",
          "desc": "The agent lists the social accounts linked in Postiz, shows where not a single post went out all month and disconnects the channels you no longer use."
        },
        {
          "title": "Draft first, slot later",
          "desc": "The agent uploads the image, builds a draft post out of it and your text, and moves it into the schedule the moment you say the wording is ready."
        }
      ],
      "how_it_works": [
        "The agent calls the Public API of your Postiz instance — cloud or self-hosted — and sees there the connected social accounts, the post feed for a period, the free schedule slots and analytics for channels and individual publications over 7, 30 or 90 days. Out of that a picture forms: what is already lined up for the days ahead, where the announcement has not gone yet and which posts drew more reactions than the rest.",
        "Postiz is a layer over the platforms, and a scheduled post is not yet a published one: the decision is made by X, LinkedIn, Telegram or Mastodon on their side. So the agent treats the notification feed, not the schedule, as the source of truth — it shows which publications went through and which ones the platform rejected, with the error. Nor does it push one and the same text to every channel: the wording is tuned to each platform.",
        "On the writing side the agent does plenty: it creates drafts and scheduled posts, moves a post between draft and schedule, uploads media and, when needed, deletes posts and disconnects channels. Fan-out publishing is packed into a single request with an array of posts, so the announcement goes to every channel at once. It publishes only where a social account is already linked inside Postiz: connecting new channels is not the agent's job.",
        "The Public API limit is hard — 30 requests per hour across all endpoints at once — and the agent spends them sparingly: a fan-out goes as one request with an array of posts, analytics is taken for a whole period instead of day by day, and the feed is re-read no more often than the answer actually changes. Media is uploaded first and attached to the post afterwards, so a broken image fails before publishing rather than taking the whole fan-out down with it. If there are no channels or no data, it says so directly instead of showing an empty table."
      ],
      "requirements": [
        "The Public API limit: 30 requests per hour for the whole workspace.",
        "For self-hosted: the Postiz instance is reachable over the network."
      ],
      "faq": [
        {
          "q": "How do I connect Postiz?",
          "a": "With a Public API key: in Postiz open Settings, then Developers, then Public API, and copy the key in full — it is sent without a prefix. The second field is your instance's API address: https://api.postiz.com for the cloud, or the backend address for self-hosted, usually https://your-domain/api."
        },
        {
          "q": "What does the agent see in Postiz?",
          "a": "Connected social accounts, the post feed for a period, free schedule slots, analytics for channels and individual posts, and notifications about publication results."
        },
        {
          "q": "Does the agent write to Postiz?",
          "a": "Yes: it creates drafts and scheduled posts, moves a post between draft and schedule, uploads media, and can delete posts and disconnect channels."
        },
        {
          "q": "What about rate limits?",
          "a": "The Postiz Public API allows 30 requests per hour across all endpoints, so fan-out publishing to several platforms is packed into a single request with an array of posts."
        }
      ]
    }
  },
  {
    "key": "retailcrm",
    "name": "RetailCRM",
    "description": "E-commerce CRM — заказы, клиенты, товары, справочники, задачи, аналитика",
    "category": "crm",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "ИИ для интернет-магазина: заказы RetailCRM по статусам",
      "scenarios": [
        {
          "title": "Сводка заказов по статусам и магазинам",
          "desc": "Агент соберёт заказы RetailCRM по статусам, источникам и магазинам, найдёт зависшие и посчитает выручку за период."
        },
        {
          "title": "Анализ повторных покупок",
          "desc": "Агент сегментирует клиентов по частоте и давности покупок, найдёт уснувших постоянников и подготовит список для реактивации."
        },
        {
          "title": "Контроль просроченных задач",
          "desc": "Агент проверит задачи менеджеров, выделит просроченные по заказам в работе и пришлёт список ответственным."
        },
        {
          "title": "Отмены и невыкупы",
          "desc": "Агент разберёт отменённые и невыкупленные заказы за период, покажет их отдельно от выручки и назовёт магазины, где потери выше всего."
        },
        {
          "title": "Что на самом деле покупают",
          "desc": "Агент сведёт состав заказов со справочником товаров и покажет, что берут чаще всего, а что лежит в каталоге без единой продажи за период."
        },
        {
          "title": "Правка карточки заказа",
          "desc": "Агент перечитает карточку заказа и поставит новый статус или комментарий — если ключу разрешено изменение; иначе честно скажет, что остаётся читающим."
        }
      ],
      "how_it_works": [
        "Агент ходит в API RetailCRM пятой версии на адресе вашего кабинета — retailcrm.ru или retailcrm.pro — и читает заказы, клиентов, товары, справочники, задачи и аналитику. На них строится сводка заказов по статусам, источникам и магазинам с выручкой за период, сегментация клиентов по частоте и давности покупок вместе с уснувшими постоянниками и разбор задач менеджеров с просрочкой по заказам в работе.",
        "Начинает агент со справочника статусов, и это не формальность: статусы в RetailCRM настраиваются под магазин, названия у всех разные, а смысл несёт группа, к которой статус отнесён. Сравнивать заказы по подписи на кнопке бессмысленно — агент раскладывает их по группам и только потом считает. Так же он разделяет магазины и источники: общая цифра по аккаунту, где сложены несколько площадок, прячет ровно то, ради чего отчёт и заказывали.",
        "Отменённые и невыкупленные заказы агент в выручку не кладёт, а показывает отдельной строкой — иначе сводка выглядит бодрее кассы. Что он умеет помимо чтения, решает набор методов, отмеченных у ключа: если изменение заказов ключу не разрешено, агент останется читающим и скажет об этом, а не будет гадать. Перед правкой заказа он перечитывает карточку — её параллельно двигают менеджеры и обмен с магазином, и затирать чужое изменение нельзя.",
        "Доступ идёт API-ключом кабинета: он передаётся с каждым запросом, ограничен списком методов и списком магазинов и отзывается там же, где был создан. Сужение ключа до одного магазина агент читает как границу данных, а не как поломку, и так и объясняет цифру. Частоту запросов он выдерживает сам, длинные периоды забирает постранично, а если метод ключу не отмечен или заказов за период не было, говорит это прямо, а не показывает пустую таблицу."
      ],
      "requirements": [
        "Права администратора в кабинете RetailCRM.",
        "Магазины, заказы которых нужны агенту, подключены в кабинете."
      ],
      "faq": [
        {
          "q": "Что нужно для подключения RetailCRM?",
          "a": "Адрес аккаунта — поддомен и домен, на котором открывается кабинет (retailcrm.ru или retailcrm.pro), — и API-ключ из «Настройки → Интеграция → Ключи доступа к API». Ключу можно выдать доступ только к нужным методам и магазинам."
        },
        {
          "q": "Какие данные агент читает?",
          "a": "Заказы, клиентов, товары, справочники, задачи и аналитику — по тем магазинам, к которым у ключа есть доступ."
        },
        {
          "q": "Можно ли ограничить доступ одним магазином?",
          "a": "Да, это настраивается прямо в RetailCRM на уровне API-ключа: агент увидит только выбранные магазины."
        },
        {
          "q": "Чем ИИ помогает интернет-магазину?",
          "a": "Считает заказы по статусам, источникам и магазинам с выручкой за период, отделяет отмены и невыкупы от кассы, сегментирует клиентов по частоте и давности покупок и поднимает уснувших постоянников, а по составу заказов показывает, что берут чаще всего и что лежит в каталоге без единой продажи."
        }
      ]
    },
    "seo_en": {
      "headline": "Total RetailCRM orders by status and store right in chat",
      "scenarios": [
        {
          "title": "Orders by status and store",
          "desc": "The agent groups RetailCRM orders by status, source and store, spots the ones that have stalled and totals revenue for the period."
        },
        {
          "title": "Repeat purchase analysis",
          "desc": "The agent segments customers by purchase frequency and recency, finds loyal buyers who have gone quiet and prepares a list for reactivation."
        },
        {
          "title": "Overdue task control",
          "desc": "The agent reviews manager tasks, singles out the overdue ones on orders in progress and sends the list to whoever owns them."
        },
        {
          "title": "Cancellations and unredeemed orders",
          "desc": "The agent takes cancelled and unredeemed orders for the period apart, keeps them off the revenue line and names the stores losing the most."
        },
        {
          "title": "What people actually buy",
          "desc": "The agent matches order lines against the product reference book and shows what sells most often and what has sat in the catalogue without a single sale."
        },
        {
          "title": "Updating an order card",
          "desc": "The agent re-reads the order card and sets a new status or a comment — if the key is allowed to change orders; otherwise it says plainly that it stays a reader."
        }
      ],
      "how_it_works": [
        "The agent calls the fifth version of the RetailCRM API at your workspace address — retailcrm.ru or retailcrm.pro — and reads orders, customers, products, reference books, tasks and analytics. On top of those it builds the order summary by status, source and store with revenue for the period, the segmentation of customers by purchase frequency and recency together with loyal buyers who have gone quiet, and the review of manager tasks with overdue items on orders in progress.",
        "The agent starts from the status reference book, and that is not a formality: statuses in RetailCRM are configured per shop, everyone's names differ, and the meaning is carried by the group a status belongs to. Comparing orders by the label on a button is pointless — the agent sorts them into groups first and counts afterwards. It separates stores and sources the same way: a single account-wide figure that stacks several sales channels hides exactly what the report was asked for.",
        "Cancelled and unredeemed orders are kept out of revenue and shown on a separate line, otherwise the summary looks livelier than the till. What the agent can do beyond reading is decided by the set of methods ticked for the key: if changing orders is not permitted, the agent stays a reader and says so rather than guessing. Before editing an order it re-reads the card — managers and the store exchange move it in parallel, and someone else's change must not be overwritten.",
        "Access runs on an API key of the workspace: it travels with every request, is limited to a list of methods and a list of stores, and is revoked where it was created. A key narrowed down to one store reads to the agent as a data boundary rather than a breakage, and it explains the figure that way. It holds the request rate itself and fetches long periods page by page, and if a method is not ticked for the key or there were no orders in the period, it says so directly instead of showing an empty table."
      ],
      "requirements": [
        "Administrator rights in the RetailCRM workspace.",
        "The shops whose orders the agent needs are connected in the workspace."
      ],
      "faq": [
        {
          "q": "What is needed to connect RetailCRM?",
          "a": "The account address — the subdomain and the domain your workspace opens on (retailcrm.ru or retailcrm.pro) — and an API key from Settings, Integration, API access keys. A key can be limited to only the methods and stores you need."
        },
        {
          "q": "What data does the agent read?",
          "a": "Orders, customers, products, reference books, tasks and analytics — for the stores the key has access to."
        },
        {
          "q": "Can access be limited to a single store?",
          "a": "Yes, it is set in RetailCRM itself at the API key level: the agent will see only the stores you pick."
        },
        {
          "q": "How does AI help an online store?",
          "a": "It counts orders by status, source and store with revenue for the period, keeps cancellations and non-redemptions out of the till figure, segments customers by purchase frequency and recency to surface lapsed regulars, and from the order contents shows what sells most and what sits in the catalogue without a single sale."
        }
      ]
    }
  },
  {
    "key": "robokassa",
    "name": "Robokassa",
    "description": "Приём платежей — генерация ссылок, статус платежа, фискальные чеки (54-ФЗ)",
    "category": "banks",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Выставляйте ссылки на оплату Robokassa прямо в переписке",
      "scenarios": [
        {
          "title": "Ссылка на оплату в переписке",
          "desc": "Агент соберёт ссылку на оплату с суммой, описанием и фискальным чеком по 54-ФЗ — её сразу можно отправить клиенту."
        },
        {
          "title": "Статус выставленного счёта",
          "desc": "Агент скажет по номеру счёта, что с платежом: инициирован, в холде, оплачен или возвращён, — без захода в кабинет."
        },
        {
          "title": "Напоминания по неоплаченным",
          "desc": "Агент по расписанию обойдёт выставленные им счета и напомнит о тех, что так и остались неоплаченными."
        },
        {
          "title": "Валюты и способы оплаты",
          "desc": "Агент покажет доступные магазину валюты и способы оплаты, чтобы ссылка выставлялась в том, чем клиенту удобно платить."
        },
        {
          "title": "Сколько собрали за день",
          "desc": "Агент обойдёт выставленные за сутки счета, посчитает оплаченные и покажет собранную сумму, отдельно назвав те, что ушли в возврат или зависли в холде."
        },
        {
          "title": "Почему платёж не прошёл",
          "desc": "Агент расшифрует числовой код ошибки — разошлась подпись, магазин ещё не прошёл модерацию или такого счёта нет — и скажет, что именно поправить."
        }
      ],
      "how_it_works": [
        "Агент работает с Robokassa через подписанные запросы к auth.robokassa.ru: собирает ссылку на оплату с суммой, описанием заказа и фискальным чеком по 54-ФЗ, читает статус выставленного счёта по его номеру и показывает валюты и способы оплаты, доступные конкретно вашему магазину. Проверочный запрос при подключении — список валют магазина: он же сразу показывает, что подпись сходится и магазин отвечает.",
        "Токена в Robokassa нет — доступ держится на паролях магазина, и они не равнозначны: пароль #1 подписывает сам платёж, пароль #2 — уведомления и проверку статуса. Поэтому агенту нужны оба, иначе половина работы отвалится. Сама подпись собирается из идентификатора магазина, суммы, номера счёта и пароля и считается по MD5, поэтому сумма в подписи и сумма в ссылке обязаны совпадать до копейки — иначе платёж отклоняется на входе, ещё до страницы оплаты.",
        "Деньгами агент не распоряжается: он выставляет счёт и читает его статус — инициирован, в холде, оплачен или возвращён, — а зачисление и вывод остаются на стороне Robokassa и вашего договора с ней. По расписанию он обходит выставленные им же счета и напоминает о неоплаченных. Выписки по расчётному счёту здесь нет и быть не может: Robokassa — это приём платежей от клиентов, банк подключается отдельным коннектором.",
        "Ошибки Robokassa возвращает числовым кодом, и агент расшифровывает его, а не показывает «запрос не прошёл»: по коду видно, разошлась ли подпись, не активирован ли магазин или такого счёта попросту нет. Частоту запросов он выдерживает сам — до пяти в секунду с небольшим запасом на всплеск, — так что серия проверок статуса не упирается в отказ. Если по счёту данных нет или магазин их не отдаёт, агент говорит об этом прямо, а не показывает пустую таблицу."
      ],
      "requirements": [
        "Личный кабинет Robokassa с правами владельца магазина",
        "Магазин прошёл модерацию: до неё работает только тестовый режим",
        "Сайт или страница, куда принимаются платежи"
      ],
      "faq": [
        {
          "q": "Как подключить Robokassa?",
          "a": "Тремя значениями из «Мои магазины» → «Технические настройки»: идентификатор магазина (это логин магазина, а не e-mail входа), пароль #1 и пароль #2. Проверьте, что алгоритм хеша — MD5, иначе подписи не сойдутся, а тестовые пароли дадут ошибку 29."
        },
        {
          "q": "Что агент делает с платежами?",
          "a": "Формирует ссылки на оплату с фискальным чеком по 54-ФЗ, проверяет статус счёта по его номеру и показывает валюты и способы оплаты, доступные магазину."
        },
        {
          "q": "Это же не расчётный счёт?",
          "a": "Нет. Robokassa — приём платежей от клиентов: агент видит выставленные счета и их статусы, а не выписку по расчётному счёту. Для операций по счёту банк подключается отдельным коннектором."
        },
        {
          "q": "Что с деньгами и правами?",
          "a": "Деньгами агент не распоряжается: он выставляет счёт и читает его статус, а зачисление и вывод остаются на стороне Robokassa и вашего договора с ней."
        }
      ]
    },
    "seo_en": {
      "headline": "Issue Robokassa payment links right inside the conversation",
      "scenarios": [
        {
          "title": "A payment link right in the chat",
          "desc": "The agent builds a payment link with the amount, the description and a 54-FZ fiscal receipt — ready to send to the customer straight away."
        },
        {
          "title": "Status of an issued invoice",
          "desc": "The agent tells you by invoice number where the payment stands: initiated, on hold, paid or refunded — without opening the merchant account."
        },
        {
          "title": "Reminders on unpaid invoices",
          "desc": "On a schedule the agent walks through the invoices it issued and reminds you about the ones that are still unpaid."
        },
        {
          "title": "Currencies and payment methods",
          "desc": "The agent shows the currencies and payment methods available to your shop, so a link is issued in whatever is convenient for the customer."
        },
        {
          "title": "How much came in today",
          "desc": "The agent walks the invoices issued over the day, counts the paid ones and shows the total collected, naming separately what went to a refund or stayed on hold."
        },
        {
          "title": "Why a payment failed",
          "desc": "The agent decodes the numeric error code — a signature mismatch, a shop not through moderation yet, an invoice number that does not exist — and says what to fix."
        }
      ],
      "how_it_works": [
        "The agent works with Robokassa through signed requests to auth.robokassa.ru: it assembles a payment link with the amount, the order description and a 54-FZ fiscal receipt, reads the status of an issued invoice by its number and shows the currencies and payment methods available to your particular shop. The check request on connection is the list of shop currencies: it immediately shows that the signature matches and the shop responds.",
        "There is no token in Robokassa — access rests on the shop passwords, and they are not interchangeable: password #1 signs the payment itself, password #2 signs notifications and the status check. So the agent needs both, otherwise half of the work falls away. The signature itself is assembled from the shop identifier, the amount, the invoice number and the password and hashed with MD5, so the amount in the signature and the amount in the link have to match to the kopeck — otherwise the payment is rejected at the entrance, before the checkout page.",
        "The agent does not handle money: it issues an invoice and reads its status — initiated, on hold, paid or refunded — while crediting and withdrawal stay on the Robokassa side and under your contract with them. On a schedule it walks through the invoices it issued itself and reminds you about the unpaid ones. There is no bank account statement here and there cannot be: Robokassa is about accepting payments from customers, a bank is connected as a separate connector.",
        "Robokassa returns its errors as numeric codes, and the agent decodes them rather than showing a bare «the request failed»: the code tells a signature mismatch apart from a shop that is not live yet and from an invoice number that does not exist. It holds the request rate itself — up to five per second with a small allowance for a burst — so a series of status checks does not run into a refusal. If there is no data on an invoice or the shop does not return it, the agent says so directly instead of showing an empty table."
      ],
      "requirements": [
        "A Robokassa account with owner rights on the shop",
        "The shop past moderation: before that only test mode works",
        "A website or page where the payments are accepted"
      ],
      "faq": [
        {
          "q": "How do I connect Robokassa?",
          "a": "With three values from My shops, Technical settings: the shop identifier (this is the shop login, not the sign-in e-mail), password #1 and password #2. Check that the hash algorithm is MD5, otherwise signatures will not match, and test passwords will return error 29."
        },
        {
          "q": "What does the agent do with payments?",
          "a": "It builds payment links with a 54-FZ fiscal receipt, checks the status of an invoice by its number and shows the currencies and payment methods available to the shop."
        },
        {
          "q": "This is not a settlement account, is it?",
          "a": "No. Robokassa is about accepting payments from customers: the agent sees issued invoices and their statuses, not a bank account statement. For account operations a bank is connected as a separate connector."
        },
        {
          "q": "What about money and permissions?",
          "a": "The agent does not handle money: it issues an invoice and reads its status, while crediting and withdrawal stay on the Robokassa side and under your contract with them."
        }
      ]
    }
  },
  {
    "key": "rustore",
    "name": "RuStore",
    "description": "Отзывы и рейтинг приложения в RuStore: чтение отзывов, ответы разработчика и их статус модерации, распределение оценок",
    "category": "dev",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile"
  },
  {
    "key": "sberbank",
    "name": "СберБизнес",
    "description": "Банковский API — счета, выписки, платежи, контрагенты, корпоративные карты, зарплата",
    "category": "banks",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Собирайте остатки и операции по счетам СберБизнеса в чате",
      "scenarios": [
        {
          "title": "Сводка по счетам СберБизнеса",
          "desc": "Агент соберёт остатки и операции по всем счетам компании и пришлёт утреннюю сводку с крупными движениями."
        },
        {
          "title": "Выписка в разрезе контрагентов",
          "desc": "Агент разложит поступления и списания по контрагентам за период и покажет, кто платит вовремя, а кто копит долг."
        },
        {
          "title": "Сверка зарплатного проекта",
          "desc": "Агент сверит зарплатные реестры с ведомостями из 1С:ЗУП и найдёт расхождения до отправки в банк."
        },
        {
          "title": "Платёжка на подпись",
          "desc": "Агент соберёт платёжное поручение по счёту, проверит реквизиты контрагента по справочнику и подготовит документ — подписание остаётся в СберБизнесе."
        },
        {
          "title": "Траты по корпоративным картам",
          "desc": "Агент разложит операции по корпоративным картам за месяц по сотрудникам и покажет, где расходы выбились из привычного уровня."
        },
        {
          "title": "Сверка выписки с 1С",
          "desc": "Агент сопоставит поступления из выписки с оплатами счетов в 1С и покажет по каждому контрагенту платежи, которым не нашлось документа."
        }
      ],
      "how_it_works": [
        "Агент ходит в СберБизнес API и начинает со списка счетов компании — тем же запросом, которым проверяется подключение. Дальше в работу идут выписки, платежи, справочник контрагентов, корпоративные карты и зарплатные сервисы: остатки на дату, крупные движения за сутки, поступления и списания в разрезе контрагентов за период и сверка зарплатных реестров с ведомостями из 1С:ЗУП до того, как реестр ушёл в банк.",
        "Выписка в Сбере — самый тяжёлый раздел API, и лимит на неё жёстче, чем на остальные методы. Агент это учитывает: запрашивает период порциями и держит частоту по выписке отдельно от прочих запросов, чтобы длинный отчёт не упёрся в отказ на середине. Соединение здесь тоже нестандартное — взаимный TLS: сертификат предъявляется на каждом запросе, и обрыв такой сессии агент отличает от отказа в правах, а не сваливает в общую ошибку.",
        "Платёж агент готовит, но не отправляет. Он собирает документ, проверяет реквизиты, сумму и контрагента по справочнику, показывает расхождения — а подписание остаётся в СберБизнесе и идёт по вашим правилам подписи. Без подтверждения на стороне банка платёж не уйдёт, и то же касается зарплатных реестров: агент доводит их до состояния «сверено и готово», а решение об отправке принимаете вы.",
        "Доступ выдаётся по OAuth: приложение со scope, включающим openid, обменивает код авторизации на токен и дальше обновляет его по refresh_token, так что переподключаться каждый раз не нужно. Набор разделов, куда агент вообще может зайти, задан этим же scope: счета, выписки, платежи и зарплатные сервисы включаются по отдельности. Если данных за период нет или scope не покрывает раздел, агент скажет об этом прямо, а не покажет пустую таблицу."
      ],
      "requirements": [
        "Расчётный счёт компании в СберБизнесе.",
        "Право подписи заявления у руководителя (ЕИО)."
      ],
      "faq": [
        {
          "q": "Как подключается СберБизнес?",
          "a": "Через OAuth-доступ SberBusinessAPI: указываете Client ID и Client Secret вашего приложения из кабинета СберБизнес API. Доступ отзывается в кабинете."
        },
        {
          "q": "Что доступно агенту?",
          "a": "Счета, выписки, платежи, справочник контрагентов, корпоративные карты и зарплатные сервисы — в рамках scope, выданного приложению."
        },
        {
          "q": "Может ли агент провести платёж без меня?",
          "a": "Нет. Агент готовит документы, но подписание происходит в СберБизнес по вашим правилам подписи — без подтверждения платёж не уйдёт."
        }
      ]
    },
    "seo_en": {
      "headline": "Pull SberBusiness balances and operations together in chat",
      "scenarios": [
        {
          "title": "SberBusiness account summary",
          "desc": "The agent collects balances and operations across all company accounts and sends a morning summary with the large movements."
        },
        {
          "title": "Statement broken down by counterparty",
          "desc": "The agent splits incoming and outgoing payments by counterparty for the period and shows who pays on time and who is running up debt."
        },
        {
          "title": "Payroll project reconciliation",
          "desc": "The agent reconciles payroll registers against the statements from 1C:ZUP and finds discrepancies before anything goes to the bank."
        },
        {
          "title": "A payment ready for signing",
          "desc": "The agent assembles the payment order from the invoice and checks the counterparty details against the directory — the signing itself stays in SberBusiness."
        },
        {
          "title": "Corporate card spending",
          "desc": "The agent breaks corporate card operations for the month down by employee and shows where the spending has stepped out of its usual range."
        },
        {
          "title": "Statement against the books",
          "desc": "The agent matches incoming payments from the statement with invoice payments in 1C and shows, counterparty by counterparty, which payments have no document behind them."
        }
      ],
      "how_it_works": [
        "The agent calls the SberBusiness API and starts from the list of company accounts — the same request that verifies the connection. From there it works with statements, payments, the counterparty directory, corporate cards and payroll services: balances as of a date, large movements for the day, incoming and outgoing payments by counterparty for a period and a reconciliation of payroll registers against 1C:ZUP statements before the register goes to the bank.",
        "The statement is the heaviest section of the Sber API, and its rate limit is tighter than that of the other methods. The agent accounts for that: it requests the period in portions and holds the statement rate separately from other calls, so a long report does not hit a refusal halfway through. The connection is unusual too — mutual TLS: the certificate is presented on every request, and the agent tells a dropped session apart from a rights refusal instead of lumping both into one error.",
        "The agent prepares payments but does not send them. It assembles the document, checks the details, the amount and the counterparty against the directory and shows any discrepancies — while signing stays in SberBusiness and follows your own signature rules. Without confirmation on the bank's side no payment leaves, and the same holds for payroll registers: the agent brings them to a reconciled, ready state, and the decision to send is yours.",
        "Access is granted over OAuth: an application whose scope includes openid exchanges the authorization code for a token and refreshes it afterwards, so there is no need to reconnect every time. That same scope defines which sections the agent can reach at all: accounts, statements, payments and payroll services are switched on separately. If there is no data for the period or the scope does not cover a section, the agent says so directly instead of showing an empty table."
      ],
      "requirements": [
        "A company settlement account in SberBusiness.",
        "The sole executive officer available to sign the application."
      ],
      "faq": [
        {
          "q": "How is SberBusiness connected?",
          "a": "Through SberBusinessAPI OAuth access: you provide the Client ID and Client Secret of your application from the SberBusiness API workspace. Access is revoked there as well."
        },
        {
          "q": "What is available to the agent?",
          "a": "Accounts, statements, payments, the counterparty directory, corporate cards and payroll services — within the scope granted to the application."
        },
        {
          "q": "Can the agent make a payment without me?",
          "a": "No. The agent prepares the documents, but signing happens in SberBusiness under your signature rules — without confirmation no payment leaves."
        }
      ]
    }
  },
  {
    "key": "sbis",
    "name": "СБИС (Saby)",
    "description": "Электронный документооборот — отправка, получение и подписание документов",
    "category": "docflow",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "short_name": "СБИС",
    "seo": {
      "headline": "Разбирайте документы СБИС, по которым ждут вашего решения",
      "scenarios": [
        {
          "title": "Документы, ждущие подписания",
          "desc": "Агент покажет входящие документы ЭДО, по которым нужно принять решение, с контрагентом, суммой и датой поступления."
        },
        {
          "title": "Реестр исходящих отгрузочных",
          "desc": "Агент соберёт исходящие отгрузочные документы за период и назовёт те, по которым контрагент так и не ответил."
        },
        {
          "title": "Готовность контрагентов к ЭДО",
          "desc": "Агент проверит по ИНН и КПП, подключён ли контрагент к электронному документообороту, и подготовит список приглашений."
        },
        {
          "title": "Контроль сертификатов подписи",
          "desc": "Агент сверит серверные сертификаты компании и покажет, какие из них перестанут действовать раньше ближайшей отчётной даты."
        },
        {
          "title": "Где встали документы",
          "desc": "Агент пройдёт по задачам и служебным этапам документооборота и покажет, на каком шаге и у кого документ стоит дольше остальных."
        },
        {
          "title": "Пакет к отправке",
          "desc": "Агент соберёт пакет к отправке, если приложению выданы права: сохранит документ, приложит вложения и доведёт до подписи — её ставит сотрудник или серверный сертификат компании по вашей команде."
        }
      ],
      "how_it_works": [
        "Агент обращается к сервисным методам СБИС: запрашивает списки документов с фильтром по типу и постраничной навигацией, читает вложения и состояния документооборота, свои организации и подразделения, контрагентов и приглашения, задачи и служебные этапы, сертификаты и машиночитаемые доверенности. Из этого собираются реестр исходящих отгрузочных за период и список входящего, по которому ждут вашего решения, — с контрагентом, суммой и датой поступления.",
        "Выборка в СБИС всегда идёт через фильтр и страницы, поэтому «все документы за период» — это обход, а не один запрос, и агент следит, что дошёл до конца, а не выдал первую страницу за итог. Вторая особенность предметной области: обмен двусторонний, и документ не уйдёт контрагенту, который к ЭДО не подключён. Поэтому готовность второй стороны агент проверяет по ИНН и КПП заранее и готовит список приглашений.",
        "На запись агент идёт ровно настолько, насколько приложению выданы права: сохранить документ, приложить вложения, собрать пакет к отправке. С подписью граница проходит по типу ключа: квалифицированную подпись с носителя ставит человек, и здесь агент доводит документ до подписи и останавливается, а серверный сертификат компании он активирует и подписывает им сам. Запускает он это только по прямой команде — подпись юридически значима и шагом конвейера не бывает. Сроки действия серверных сертификатов агент сверяет заранее и показывает, какие заканчиваются раньше ближайшей отчётной даты.",
        "Сервисный ключ агент обменивает на сессионный токен и продлевает его сам: сессия в СБИС живёт недолго, и по её истечении запрос повторяется с новым токеном, а не падает вам на руки. Права приложения ограничивают выборку на стороне сервиса — закрытый раздел возвращает отказ, а не пустой список, и агент отличает одно от другого. Частоту запросов он выдерживает сам, а если документов за период действительно нет, говорит об этом прямо."
      ],
      "requirements": [
        "Аккаунт СБИС с правами администратора компании",
        "Серверный сертификат с кодом активации, если подписывает агент",
        "Квалифицированную подпись с носителя ставит человек, не агент",
        "Права на запись у приложения, если агент сохраняет документы"
      ],
      "faq": [
        {
          "q": "Как подключить СБИС?",
          "a": "Тремя значениями из карточки внешнего приложения: идентификатором подключения, защищённым ключом и сервисным ключом. Приложение создаётся в разделе «Настройки → Безопасность → Подключения к Saby», тип авторизации — по сервисному ключу."
        },
        {
          "q": "Что агент видит в СБИС?",
          "a": "Документы электронного документооборота с вложениями и состояниями, свои организации и подразделения, контрагентов и приглашения, задачи и служебные этапы, сертификаты и машиночитаемые доверенности."
        },
        {
          "q": "Может ли агент создавать документы?",
          "a": "Может, если приложению выданы права на запись: СБИС позволяет сохранить документ и приложить вложения. Подписать он способен только серверным сертификатом компании и только по вашей команде; квалифицированную подпись с носителя ставит человек."
        },
        {
          "q": "Как ограничить права приложения?",
          "a": "При создании подключения выбирается «Разрешён полностью» или «С ограничением по правам». Второй вариант позволяет оставить приложению только разделы документооборота — агент увидит ровно столько, сколько разрешено."
        }
      ]
    },
    "seo_en": {
      "headline": "Work through the SBIS documents waiting on your decision",
      "scenarios": [
        {
          "title": "Documents waiting for a signature",
          "desc": "The agent shows the incoming EDI documents that need a decision, with the counterparty, the amount and the date received."
        },
        {
          "title": "Register of outgoing shipping documents",
          "desc": "The agent collects outgoing shipping documents for the period and names the ones the counterparty never responded to."
        },
        {
          "title": "Counterparty readiness for EDI",
          "desc": "The agent checks by INN and KPP whether a counterparty is connected to electronic document exchange and prepares a list of invitations."
        },
        {
          "title": "Signing certificate control",
          "desc": "The agent reviews the company server certificates and shows which of them stop being valid before the nearest reporting date."
        },
        {
          "title": "Where documents got stuck",
          "desc": "The agent walks the tasks and internal document flow stages and shows at which step and with whom a document has been sitting longer than the rest."
        },
        {
          "title": "A package ready to send",
          "desc": "The agent assembles a package for sending where the application has write rights: saves the document, attaches the files and takes it up to the signature — put on by an employee or by the company server certificate on your command."
        }
      ],
      "how_it_works": [
        "The agent calls the SBIS service methods: it requests document lists with a type filter and page-by-page navigation, reads attachments and document flow states, your own organizations and units, counterparties and invitations, tasks and service stages, certificates and machine-readable powers of attorney. Out of that come a register of outgoing shipping documents for the period and a list of the incoming ones waiting on your decision — with the counterparty, the amount and the date received.",
        "A selection in SBIS always runs through a filter and pages, so every document for a period is a traversal rather than a single request, and the agent makes sure it reached the end instead of passing off the first page as the total. The second feature of the domain: exchange is two-sided, and a document will not reach a counterparty who is not connected to EDI. So the agent checks the other side by INN and KPP in advance and prepares a list of invitations.",
        "The agent writes exactly as far as the application has permissions to: save a document, attach files, assemble a package for sending. With signing the line runs along the key type: a qualified signature held on a token is put on by a person, and there the agent takes the document up to the signature and stops, while a company server certificate it activates and signs with itself. It starts that only on a direct command — a signature is legally binding and never a pipeline step. It reviews server certificate validity ahead of time and shows which ones run out before the nearest reporting date.",
        "The agent exchanges the service key for a session token and renews it on its own: a session in SBIS is short-lived, and when it runs out the request is repeated with a fresh token rather than landing in your lap. The application permissions narrow the selection on the service side — a closed section returns a refusal rather than an empty list, and the agent tells the two apart. It holds the request rate itself, and when there really are no documents for the period it says so directly."
      ],
      "requirements": [
        "A SBIS account with company administrator rights",
        "A server certificate with its activation code if the agent signs",
        "A qualified signature held on a token is put on by a person",
        "Write rights for the application if the agent saves documents"
      ],
      "faq": [
        {
          "q": "How do I connect SBIS?",
          "a": "With three values from the external application card: the connection identifier, the protected key and the service key. The application is created under Settings, Security, Connections to Saby, with service key authorization."
        },
        {
          "q": "What does the agent see in SBIS?",
          "a": "Electronic document exchange documents with attachments and states, your own organizations and units, counterparties and invitations, tasks and service stages, certificates and machine-readable powers of attorney."
        },
        {
          "q": "Can the agent create documents?",
          "a": "It can, if the application has write permissions: SBIS allows saving a document and attaching files. It can sign only with a company server certificate and only on your command; a qualified signature held on a token is put on by a person."
        },
        {
          "q": "How do I limit the application permissions?",
          "a": "When the connection is created you choose between full access and access limited by permissions. The second option lets you leave the application only the document exchange sections — the agent sees exactly as much as is allowed."
        }
      ]
    }
  },
  {
    "key": "scan_interfax",
    "name": "СКАН Интерфакс",
    "description": "Поиск публикаций по компаниям, медиа-аналитика, риск-факторы, мониторинг СМИ",
    "category": "analytics",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Собирайте публикации о компании и конкурентах в чате",
      "scenarios": [
        {
          "title": "Публикации о компании и конкурентах",
          "desc": "Агент соберёт публикации по компании за период, разложит их по месяцам и источникам и покажет тональность и заметность материалов."
        },
        {
          "title": "Риск-факторы контрагентов",
          "desc": "Агент проверит список компаний по ИНН и подсветит уголовные дела, иски, долги и корпоративные действия вместе с интегральным рейтингом рисков."
        },
        {
          "title": "Мониторинг репутации по расписанию",
          "desc": "Агент пройдёт по фильтрам мониторинга, соберёт новые критичные упоминания по портфелю компаний и пришлёт их в чат без ручных выгрузок."
        },
        {
          "title": "Аналитика информационного поля",
          "desc": "Агент разложит публикации по темам, персонам и компаниям и покажет, вокруг чего строится повестка отрасли за выбранный период."
        },
        {
          "title": "Досье перед переговорами",
          "desc": "Агент соберёт по ИНН карточку контрагента, свежие публикации и риск-факторы и оставит рядом с каждым фактором исходную публикацию и дату."
        },
        {
          "title": "Остаток по тарифу",
          "desc": "Агент посмотрит учётную запись СКАНа и скажет, сколько поисковых термов осталось по договору и сколько компаний ещё можно поставить на мониторинг."
        }
      ],
      "how_it_works": [
        "Агент работает со СКАНом через шлюз Интерфакса: находит карточки компаний по ИНН, собирает публикации о них за период, строит гистограммы по месяцам и источникам, раскладывает материалы по темам, персонам и тональности и снимает интегральный рейтинг рисков вместе с уголовными делами, исками, долгами и корпоративными действиями. Отдельно он читает события фильтров мониторинга, заведённых в кабинете.",
        "Компания в СКАНе опознаётся по ИНН, а не по названию, и это меняет качество выборки: агент сначала получает карточку по ИНН, а уже к ней подтягивает публикации, поэтому однофамильцы и тёзки бренда в отчёт не попадают. Сами фильтры мониторинга живут в кабинете и настраиваются там же — агент их не переписывает, а читает то, что они уже отобрали, и приносит новые критичные упоминания в чат.",
        "На запись агент здесь не выходит: он ищет компании и публикации и собирает риск-отчёты, не трогая мониторинги, фильтры и настройки учётной записи. Рейтинг рисков он подаёт как сигнал по информационному полю, а не как юридический вывод: рядом с каждым фактором остаются исходные публикации и даты, чтобы решение принималось по первоисточнику, а не по одной цифре.",
        "Bearer-токен агент получает и обновляет сам, частоту запросов держит в рамках, а длинные выдачи забирает страницами, а не одним вызовом. Объём выборки ограничен тарифом договора, и на исчерпанном балансе поиск перестаёт возвращать данные — агент назовёт эту причину, а не выдаст пустой отчёт за отсутствие упоминаний. Глубина архива и состав источников тоже заданы договором, поэтому агент показывает, за какой период собрана выборка."
      ],
      "requirements": [
        "Юрлицо или ИП — API СКАН продаётся по договору",
        "Действующий договор с остатком по тарифу",
        "Контактное лицо, которое ведёт договор с Интерфаксом"
      ],
      "faq": [
        {
          "q": "Как подключить СКАН Интерфакс?",
          "a": "Логином и паролем API-учётной записи: её заводит Интерфакс по заявке через форму на scan-interfax.ru или письмом в отдел продаж. В веб-кабинете такую учётку не создать, а bearer-токен агент получает по этой паре сам."
        },
        {
          "q": "Что агент видит в СКАН?",
          "a": "Карточки компаний по ИНН, публикации о них за период, гистограммы по месяцам, аналитику по темам, персонам и тональности, интегральный рейтинг рисков и события фильтров мониторинга."
        },
        {
          "q": "Пишет ли агент в СКАН?",
          "a": "Нет. Доступ используется на чтение: агент ищет компании и публикации и собирает риск-отчёты, не меняя мониторинги, фильтры и настройки учётной записи."
        },
        {
          "q": "Есть ли ограничения по объёму?",
          "a": "Да, и они зависят от договора: тариф считается в поисковых термах либо бывает безлимитным, отдельно ограничено число компаний на мониторингах. На исчерпанном балансе поиск перестаёт возвращать данные."
        }
      ]
    },
    "seo_en": {
      "headline": "Collect coverage of your company and rivals in the chat",
      "scenarios": [
        {
          "title": "Publications about your company and rivals",
          "desc": "The agent collects publications about a company for the period, breaks them down by month and source and shows the sentiment and prominence of the coverage."
        },
        {
          "title": "Counterparty risk factors",
          "desc": "The agent checks a list of companies by INN and highlights criminal cases, lawsuits, debts and corporate actions alongside an integral risk rating."
        },
        {
          "title": "Scheduled reputation monitoring",
          "desc": "The agent walks through the monitoring filters, gathers new critical mentions across your portfolio of companies and sends them to the chat with no manual exports."
        },
        {
          "title": "Analytics of the information field",
          "desc": "The agent breaks publications down by topic, person and company and shows what the industry agenda is built around over the period you pick."
        },
        {
          "title": "A dossier before a negotiation",
          "desc": "The agent pulls a counterparty card by INN, recent coverage and risk factors, keeping the source publication and its date next to every factor."
        },
        {
          "title": "What is left on the plan",
          "desc": "The agent looks into the SCAN account and tells you how many search terms the contract has left and how many more companies can go under monitoring."
        }
      ],
      "how_it_works": [
        "The agent works with SCAN through the Interfax gateway: it finds company cards by INN, collects publications about them for a period, builds histograms by month and source, breaks the material down by topic, person and sentiment and takes the integral risk rating along with criminal cases, lawsuits, debts and corporate actions. Separately it reads the events of the monitoring filters set up in the workspace.",
        "A company in SCAN is identified by INN rather than by name, and that changes the quality of the selection: the agent first gets the card by INN and only then pulls publications onto it, so namesakes and brand lookalikes never reach the report. The monitoring filters themselves live in the workspace and are configured there — the agent does not rewrite them, it reads what they have already selected and brings the new critical mentions into the chat.",
        "The agent never writes here: it searches companies and publications and assembles risk reports without touching monitorings, filters or account settings. It presents the risk rating as a signal from the information field, not as a legal conclusion: the source publications and dates stay next to every factor, so the decision is made on the primary source rather than on a single number.",
        "The agent obtains and refreshes the bearer token itself, keeps the request rate within bounds and collects long result sets page by page rather than in one call. The size of a selection is capped by the contract plan, and once the balance is spent search stops returning data — the agent names that reason instead of passing an empty report off as an absence of mentions. Archive depth and the set of sources are set by the contract too, so the agent states the period a selection covers."
      ],
      "requirements": [
        "A company or sole trader — the SCAN API is sold under a contract",
        "A valid contract with balance left on the plan",
        "A contact person who handles the Interfax contract"
      ],
      "faq": [
        {
          "q": "How do I connect SCAN Interfax?",
          "a": "With the login and password of an API account: Interfax creates it on request through the form on scan-interfax.ru or by e-mail to the sales team. Such an account cannot be created in the web workspace, and the agent obtains the bearer token from that pair itself."
        },
        {
          "q": "What does the agent see in SCAN?",
          "a": "Company cards by INN, publications about them for a period, monthly histograms, analytics by topic, person and sentiment, the integral risk rating and events from monitoring filters."
        },
        {
          "q": "Does the agent write to SCAN?",
          "a": "No. Access is read-only: the agent searches companies and publications and assembles risk reports without changing monitorings, filters or account settings."
        },
        {
          "q": "Are there limits on volume?",
          "a": "Yes, and they depend on the contract: a plan is counted in search terms or can be unlimited, with a separate cap on the number of companies under monitoring. Once the balance is spent, search stops returning data."
        }
      ]
    }
  },
  {
    "key": "sendsay",
    "name": "Sendsay",
    "description": "Email-маркетинг — рассылки, подписчики, сегменты, шаблоны, триггеры, A/B-тесты",
    "category": "ads",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Разбирайте рассылки Sendsay по открытиям и кликам в чате",
      "scenarios": [
        {
          "title": "Разбор последней рассылки",
          "desc": "Агент разложит выпуск по доставкам, открытиям, кликам и отпискам и покажет, какие письма и ссылки сработали, а какие нет."
        },
        {
          "title": "Порядок в базе подписчиков",
          "desc": "Агент сверит группы и сегменты, найдёт отписавшихся и давно неактивных и обновит карточки подписчиков по вашим данным."
        },
        {
          "title": "Подготовка выпуска и A/B-теста",
          "desc": "Агент соберёт выпуск из шаблона, отправит тестовое письмо на проверку и покажет результаты сплит-теста после отправки."
        },
        {
          "title": "Еженедельная сводка по рассылкам",
          "desc": "Агент пришлёт по расписанию сводку: доставляемость, активность подписчиков и рост базы за неделю в сравнении с прошлой."
        },
        {
          "title": "Проверка триггерных сценариев",
          "desc": "Агент пройдёт по триггерным сценариям, покажет, сколько писем ушло по каждому и как их открывают, и выделит те, что давно не срабатывали."
        },
        {
          "title": "Сравнение выпусков за период",
          "desc": "Агент сведёт статистику всех выпусков за квартал в одну таблицу, сравнит открытия, клики и отписки и покажет, какие темы и дни отправки работают лучше."
        }
      ],
      "how_it_works": [
        "Агент обращается к Sendsay по единому JSON-адресу https://api.sendsay.ru/general/api/v100/json: имя действия и ключ уходят в теле запроса, отдельных ручек под каждый раздел здесь нет. Через него он читает подписчиков и их поля, группы и сегменты, выпуски и шаблоны, триггерные сценарии и статистику доставок, открытий, кликов, отписок и возвратов, а из этого собирает разбор выпуска и динамику базы за период.",
        "Статистика рассылки не окончательна в момент отправки: доставки, открытия и клики продолжают дописываться часами и днями после выпуска, поэтому агент называет период, за который снял цифры, и не выдаёт свежий выпуск за подведённый итог. Отписки и возвраты он смотрит отдельно от открытий — по ним видно не оформление письма, а состояние базы, и именно они объясняют, почему доставляемость падает от выпуска к выпуску.",
        "На запись агент обновляет карточки подписчиков и состав групп, собирает выпуск из шаблона и готовит A/B-тест. Порядок здесь один: сначала тестовое письмо на проверку, и только по вашему явному подтверждению — отправка на живую базу; сам он рассылку не запускает. Перед отправкой агент называет сегмент, на который уходит выпуск, и число адресов в нём, потому что отозвать ушедшее письмо уже нельзя.",
        "Все вызовы идут одним JSON-адресом, поэтому границу задаёт не набор ручек, а имя действия в теле запроса: список подписчиков, выгрузка статистики и запуск выпуска отличаются только им. Тяжёлые выборки сервис отдаёт отложенной задачей — агент ставит её в очередь и забирает результат, когда он готов, а не ждёт всё одним ответом. Частоту он держит в пределах десяти запросов в секунду, а при нехватке данных или прав говорит об этом прямо, а не показывает пустую таблицу."
      ],
      "requirements": [
        "Аккаунт Sendsay и доступ владельца к настройкам системы",
        "Свободный слот пользователя в тарифе",
        "Отдельный почтовый ящик для приглашения саблогина"
      ],
      "faq": [
        {
          "q": "Как подключить Sendsay?",
          "a": "Именем аккаунта и API-ключом: заведите отдельный саблогин в «Настройки системы» → «Пользователи» — владельцу аккаунта ключ не выдаётся, — и в его карточке на вкладке «Настройка пользователя» нажмите «Сгенерировать ключ». Имя аккаунта — основной логин."
        },
        {
          "q": "Что агент видит в Sendsay?",
          "a": "Подписчиков и их поля, группы и сегменты, выпуски и шаблоны, триггерные сценарии и статистику доставок, открытий, кликов, отписок и возвратов."
        },
        {
          "q": "Пишет ли агент в Sendsay?",
          "a": "Может: обновлять карточки подписчиков и состав групп, собирать выпуски, отправлять тестовые письма и запускать рассылку. Отправку агент делает по вашему явному подтверждению, а не сам."
        },
        {
          "q": "Почему ключ не работает?",
          "a": "Чаще всего на саблогине включена двухфакторная авторизация — с ней запросы по ключу не выполняются. Второй случай: в поле аккаунта указан логин саблогина вместо основного логина."
        }
      ]
    },
    "seo_en": {
      "headline": "Break down Sendsay campaigns by opens and clicks in chat",
      "scenarios": [
        {
          "title": "Breakdown of the latest campaign",
          "desc": "The agent splits an issue by deliveries, opens, clicks and unsubscribes and shows which emails and links worked and which did not."
        },
        {
          "title": "Order in the subscriber base",
          "desc": "The agent reviews groups and segments, finds unsubscribed and long-inactive contacts and updates subscriber records from your data."
        },
        {
          "title": "Preparing an issue and an A/B test",
          "desc": "The agent assembles an issue from a template, sends a test email for review and shows the split test results once it has gone out."
        },
        {
          "title": "Weekly campaign summary",
          "desc": "On a schedule the agent sends a summary: deliverability, subscriber activity and growth of the base for the week against the previous one."
        },
        {
          "title": "Check on trigger scenarios",
          "desc": "The agent walks through the trigger scenarios, shows how many emails each one sent and how they were opened, and flags the ones that have long gone quiet."
        },
        {
          "title": "Compare issues over a period",
          "desc": "The agent pulls the statistics of every issue in the quarter into one table, compares opens, clicks and unsubscribes and shows which subjects and send days work best."
        }
      ],
      "how_it_works": [
        "The agent calls Sendsay at a single JSON address, https://api.sendsay.ru/general/api/v100/json: the action name and the key travel in the request body, and there are no separate endpoints per section here. Through it the agent reads subscribers and their fields, groups and segments, issues and templates, trigger scenarios and statistics on deliveries, opens, clicks, unsubscribes and bounces, and out of that assembles the breakdown of an issue and the dynamics of the base over a period.",
        "Campaign statistics are not final at the moment of sending: deliveries, opens and clicks keep being written in for hours and days after an issue, so the agent states the period the figures were taken for and does not pass a fresh issue off as a settled result. Unsubscribes and bounces it looks at separately from opens — they show not the design of the email but the state of the base, and they are what explains why deliverability drops from issue to issue.",
        "On the write side the agent updates subscriber records and group membership, assembles an issue from a template and prepares an A/B test. The order here is always the same: first a test email for review, and only on your explicit confirmation a send to the live base; it never launches a campaign on its own. Before sending, the agent names the segment the issue goes to and the number of addresses in it, because an email that has gone out cannot be recalled.",
        "Every call goes to a single JSON address, so the boundary is set not by a set of endpoints but by the action name in the request body: listing subscribers, exporting statistics and launching an issue differ only by that. Heavy selections come back as a deferred task — the agent queues it and picks the result up when it is ready instead of waiting for everything in one response. It holds the rate within ten requests per second, and when data or permissions fall short it says so directly instead of showing an empty table."
      ],
      "requirements": [
        "A Sendsay account with owner access to system settings",
        "A free user slot on your plan",
        "A separate mailbox for the sublogin invite"
      ],
      "faq": [
        {
          "q": "How do I connect Sendsay?",
          "a": "With the account name and an API key: create a separate sublogin under System settings, Users — the account owner is not issued a key — and in its card, on the User setup tab, click Generate key. The account name is the main login."
        },
        {
          "q": "What does the agent see in Sendsay?",
          "a": "Subscribers and their fields, groups and segments, issues and templates, trigger scenarios and statistics on deliveries, opens, clicks, unsubscribes and bounces."
        },
        {
          "q": "Does the agent write to Sendsay?",
          "a": "It can: update subscriber records and group membership, assemble issues, send test emails and launch a campaign. The agent sends only on your explicit confirmation, never on its own."
        },
        {
          "q": "Why is the key not working?",
          "a": "Most often two-factor authorization is enabled on the sublogin — requests by key do not run while it is on. The second case: the account field holds the sublogin instead of the main login."
        }
      ]
    }
  },
  {
    "key": "smsaero",
    "name": "SMS Aero Integration",
    "description": "Рассылки — SMS, WhatsApp, Viber и коды в Telegram, контакты, статусы и баланс",
    "category": "ads",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Рассылайте SMS, WhatsApp и Viber и проверяйте доставку в чате",
      "scenarios": [
        {
          "title": "Рассылка по списку номеров",
          "desc": "Агент отправит сообщения по вашему списку одним запросом с одобренной подписью и вернёт результат по каждому номеру отдельно."
        },
        {
          "title": "Цена до отправки",
          "desc": "Агент прогонит текст тестовым запросом, который не списывает деньги, покажет цену сообщения и итог по списку и уйдёт в рассылку только после подтверждения."
        },
        {
          "title": "Статусы доставки",
          "desc": "Агент проверит статус каждого сообщения — доставлено, передано, отклонено или ещё на модерации — и соберёт список номеров, до которых SMS не дошли."
        },
        {
          "title": "Отписки и чёрный список",
          "desc": "Агент занесёт отказавшихся в чёрный список сервиса и будет исключать их из следующих рассылок, а по запросу вернёт номер обратно."
        },
        {
          "title": "Группы и контакты",
          "desc": "Агент соберёт группу получателей, добавит контакты с именем и полем для подстановки и потом разошлёт по группе целиком, не перечисляя номера руками."
        },
        {
          "title": "Живые номера перед рассылкой",
          "desc": "Агент закажет HLR-проверку и покажет, какие номера доступны, а какие не существуют, чтобы не платить за отправку в пустоту."
        },
        {
          "title": "WhatsApp, Viber и коды в Telegram",
          "desc": "Агент отправит сообщение в WhatsApp или Viber, поднимет переписку по диалогу, а код подтверждения пошлёт в Telegram с откатом в SMS, если он не дошёл."
        },
        {
          "title": "Контроль баланса и тарифа",
          "desc": "Агент по расписанию сверит остаток с ценой по вашему тарифу и предупредит заранее, что средств не хватит на ближайшую рассылку."
        }
      ],
      "how_it_works": [
        "Агент ходит в шлюз SMS Aero по адресу https://gate.smsaero.ru/v2 и работает с тем, что этот API умеет: отправка по номеру или списку номеров сразу, история отправленного, статус каждого сообщения, группы и карточки контактов, чёрный список, проверка живости номера и оператора, остаток и тариф, а также отдельные каналы WhatsApp, Viber и кода в Telegram. Массовая рассылка уходит одним запросом со списком номеров, а не циклом по одному, — так не бывает наполовину отправленной рассылки.",
        "Цена считается по частям: длинный текст разбивается на несколько сообщений, каждое оплачивается отдельно, кириллица укорачивает часть сильнее латиницы, а смешение кириллицы и латиницы внутри одного слова сервис вовсе не пропускает. Числа частей API в ответе не возвращает, поэтому агент считает его сам по длине текста, а цену берёт из тестовой отправки — она возвращает стоимость, но не списывает деньги и не идёт абоненту.",
        "Отправка — действие с деньгами и с чужими телефонами, поэтому агент не запускает её сам. Сначала он показывает текст, подпись отправителя, размер списка и стоимость, и только после вашего подтверждения уходит в рассылку. Дальше он собирает результат по каждому номеру отдельно и отдельным списком выносит те, до которых сообщение не дошло, — с причиной отказа, а не общей фразой об ошибке. Так же он ведёт себя и с необратимым: очистка всех групп или контактов и пополнение баланса с карты идут только по явному подтверждению.",
        "Статус приходит не сразу и не одним шагом: без договора каждое сообщение проходит ручную модерацию до десяти минут, и «на модерации» — это штатное состояние, а не сбой. «Передано оператору» тоже не равно «доставлено», поэтому агент перечитывает статус позже, а не выдаёт одно за другое. Подпись отправителя может быть одобрена не у всех операторов сразу — агент смотрит на разбивку по операторам и предупреждает, если у части абонентов рассылка отобьётся.",
        "Отдельного токена шлюз не выдаёт: каждый запрос подписывается парой значений из кабинета, поэтому перевыпуск ключа обрывает доступ мгновенно — и агент сразу скажет, что подключение нужно обновить, вместо молчаливых повторов. Если в кабинете включён белый список адресов, сервис отвечает отказом, который легко принять за «данных нет», — агент называет причину прямо и не уходит в бесполезные повторы. Списки он дочитывает до конца постранично, а о нехватке данных или прав говорит прямо."
      ],
      "requirements": [
        "Аккаунт компании на smsaero.ru — его email служит логином к API.",
        "Пополненный баланс — сервис работает по предоплате.",
        "Имя отправителя, прошедшее модерацию, — с неодобренным сервис отклонит отправку."
      ],
      "faq": [
        {
          "q": "Как подключить SMS Aero Integration?",
          "a": "Email аккаунта и API-ключом из кабинета: Настройки → «API» на smsaero.ru. Ключ работает только в паре с email. Имя отправителя (sign) в подключении необязательно — его можно указывать при отправке, но подпись в любом случае должна пройти модерацию."
        },
        {
          "q": "Что агент видит в SMS Aero?",
          "a": "Историю отправленных сообщений и статус каждого, остаток и тариф, имена отправителя с их статусом модерации, группы и карточки контактов, чёрный список, результаты HLR-проверки и оператора номера, а также диалоги и сообщения WhatsApp."
        },
        {
          "q": "Отправляет ли агент сообщения сам?",
          "a": "Отправка — действие с деньгами, поэтому агент сначала показывает текст, подпись и стоимость и уходит в рассылку только после вашего подтверждения. То же и с необратимым: очисткой контактов или групп и пополнением баланса."
        },
        {
          "q": "Что если на счету не хватает денег?",
          "a": "Сервис работает по предоплате: при нехватке средств он отвечает ошибкой оплаты и не отправляет сообщение. Агент покажет остаток и назовёт сумму, которой не хватило."
        },
        {
          "q": "Почему сообщение долго висит в статусе «на модерации»?",
          "a": "Без заключённого договора сервис проверяет каждое сообщение вручную, это занимает до десяти минут. Агент не считает такой статус ошибкой и перечитывает его позже; чтобы модерации не было, договор заключается в разделе «Реквизиты и договоры»."
        }
      ]
    },
    "seo_en": {
      "headline": "Send SMS, WhatsApp and Viber and check delivery right in the chat",
      "scenarios": [
        {
          "title": "A campaign to a list of numbers",
          "desc": "The agent sends your list in a single request with an approved sender sign and returns the result for each number separately."
        },
        {
          "title": "The price before sending",
          "desc": "The agent runs the text as a test request that charges nothing, shows the price per message and the total for the list, and sends only after you confirm."
        },
        {
          "title": "Delivery statuses",
          "desc": "The agent checks the status of every message — delivered, handed to the operator, rejected or still in moderation — and collects the numbers the SMS never reached."
        },
        {
          "title": "Opt-outs and the blocklist",
          "desc": "The agent puts everyone who opted out on the service blocklist and keeps them out of later campaigns, and puts a number back when you ask."
        },
        {
          "title": "Groups and contacts",
          "desc": "The agent builds a group of recipients, adds contacts with a name and a field for substitution, and later sends to the whole group instead of listing numbers by hand."
        },
        {
          "title": "Live numbers before a campaign",
          "desc": "The agent orders an HLR check and shows which numbers are reachable and which do not exist, so you do not pay to send into the void."
        },
        {
          "title": "WhatsApp, Viber and Telegram codes",
          "desc": "The agent sends a message over WhatsApp or Viber, pulls up the conversation in a dialog, and delivers a confirmation code via Telegram with a fallback to SMS if it does not arrive."
        },
        {
          "title": "Balance and tariff control",
          "desc": "On a schedule the agent checks the balance against the price on your tariff and warns in advance when the funds will not cover the next campaign."
        }
      ],
      "how_it_works": [
        "The agent calls the SMS Aero gateway at https://gate.smsaero.ru/v2 and works with what that API can do: sending to a number or to a whole list at once, the history of what went out, the status of every message, groups and contact cards, the blocklist, checks on whether a number is live and which operator it belongs to, the balance and the tariff, plus the separate WhatsApp, Viber and Telegram-code channels. A bulk campaign goes out as one request carrying the list rather than a loop of single sends, so there is no such thing as a half-sent campaign.",
        "The price is counted in parts: a long text is split into several messages, each charged separately, Cyrillic shortens a part more than Latin does, and mixing Cyrillic and Latin inside a single word is refused outright. The API does not return the number of parts, so the agent works it out from the length of the text itself and takes the price from a test send — which returns the cost without charging you and without reaching the subscriber.",
        "Sending spends money and reaches other people's phones, so the agent never launches it on its own. First it shows the text, the sender sign, the size of the list and the price, and only after you confirm does it go ahead. Then it collects the result for each number separately and puts the numbers the message never reached into a list of their own — with the reason for the refusal, not a generic error phrase. It treats the irreversible the same way: wiping every group or contact and topping the balance up from a card happen only on an explicit confirmation.",
        "A status does not arrive at once or in a single step: without a contract every message goes through manual moderation for up to ten minutes, and «in moderation» is a normal state rather than a fault. «Handed to the operator» is not the same as «delivered» either, so the agent re-reads the status later instead of passing one off as the other. A sender sign may be approved by some operators and not others — the agent reads the per-operator breakdown and warns when the campaign will bounce for part of your audience.",
        "The gateway issues no separate token: every request is signed with the pair of values from the cabinet, so reissuing the key cuts access off instantly — and the agent says straight away that the connection has to be refreshed instead of retrying in silence. When the cabinet has an IP allowlist switched on, the service answers with a refusal that reads a lot like «no data» — the agent names the real reason instead of retrying pointlessly. It reads lists to the end page by page and states any shortage of data or permissions directly."
      ],
      "requirements": [
        "A company account on smsaero.ru — its email is the API login.",
        "A topped-up balance — the service is prepaid.",
        "A sender name that has passed moderation — unapproved names are rejected."
      ],
      "faq": [
        {
          "q": "How do I connect SMS Aero Integration?",
          "a": "With the account email and an API key from the workspace: Settings, then API on smsaero.ru. The key works only paired with the email. A sender name (sign) in the connection is optional — it can be passed per send — but either way the sign has to pass moderation."
        },
        {
          "q": "What does the agent see in SMS Aero?",
          "a": "The history of sent messages and the status of each, the balance and the tariff, sender names with their moderation status, groups and contact cards, the blocklist, HLR results and the operator behind a number, plus WhatsApp dialogs and messages."
        },
        {
          "q": "Does the agent send messages on its own?",
          "a": "Sending spends money, so the agent first shows the text, the sign and the price, and goes ahead only after you confirm. The same holds for the irreversible: wiping contacts or groups and topping up the balance."
        },
        {
          "q": "What if there is not enough money on the account?",
          "a": "The service runs on prepayment: when funds are short it replies with a payment error and does not send the message. The agent will show the balance and name the amount that was missing."
        },
        {
          "q": "Why does a message sit in «moderation» for so long?",
          "a": "Without a signed contract the service reviews every message by hand, which takes up to ten minutes. The agent does not treat that status as an error and re-reads it later; to remove moderation entirely, sign the contract in the «Реквизиты и договоры» section."
        }
      ]
    }
  },
  {
    "key": "starline",
    "name": "StarLine",
    "description": "Управление автомобилем через StarLine — устройства, GPS-координаты, состояние, дистанционные команды, OBD-диагностика",
    "category": "logistics",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Узнавайте, где машина и что с ней, прямо в чате",
      "scenarios": [
        {
          "title": "Где сейчас машина",
          "desc": "Агент покажет координаты, скорость и время последнего обновления с GPS-модуля комплекса по каждому устройству в аккаунте."
        },
        {
          "title": "Состояние и диагностика",
          "desc": "Агент проверит охрану, двери и зажигание, уровень топлива, напряжение АКБ и температуру двигателя по данным OBD."
        },
        {
          "title": "Дистанционные команды",
          "desc": "Агент выполнит команды комплекса — постановку на охрану или прогрев двигателя — после вашего подтверждения в чате."
        },
        {
          "title": "Сводка по поездкам",
          "desc": "Агент соберёт сводку по расписанию: поездки за день, сработавшие тревоги и параметры, которые просели за неделю."
        },
        {
          "title": "Куда ездила машина вчера",
          "desc": "Агент поднимет трек за день по точкам GPS и покажет маршрут, остановки с их длительностью и пробег — вместо листания карты в приложении."
        },
        {
          "title": "Все машины в одном ответе",
          "desc": "Агент пройдёт по устройствам аккаунта и сведёт их в один список: где стоит каждая машина, стоит ли на охране, сколько топлива и когда пришёл последний пакет."
        }
      ],
      "how_it_works": [
        "Агент ходит в API StarLine и начинает с аккаунта: читает профиль пользователя, забирает список устройств и уже по каждому устройству поднимает данные и состояние — координаты и скорость с GPS-модуля, охрану, двери и зажигание, уровень топлива, напряжение аккумулятора и температуру двигателя из OBD-диагностики, историю событий и сработавших тревог. Из этого собираются сводки по поездкам за день и по параметрам, которые просели за неделю.",
        "Телематика показывает не машину, а последний пакет, который комплекс успел отправить: в подземном паркинге или при слабой связи данные замирают. Поэтому агент всегда называет время последнего обновления рядом с координатами и не выдаёт вчерашнюю точку за текущую. По той же причине он различает состояние охраны, снятое с комплекса, и команду, которую вы только что отправили: пока не пришёл свежий пакет, это ещё не факт.",
        "Дистанционные команды — постановка на охрану, прогрев двигателя — это действие с настоящим автомобилем, поэтому агент выполняет их только после вашего явного подтверждения в чате и называет устройство, к которому обращается. После команды он перечитывает состояние комплекса и говорит, применилась она или нет. Всё остальное — координаты, диагностика, история поездок — идёт на чтение.",
        "Сессию коннектор поднимает сам: приложение подписывает запрос, аккаунт его подтверждает, и дальше агент работает по выданному токену, продлевая его при истечении. Опрос он ведёт по расписанию или по вашему запросу и укладывается в тысячу обращений в сутки, поэтому состояние машины не дёргается каждую минуту, а история поездок собирается пачкой за период. Про данные, которых комплекс не прислал — датчик не установлен или пропала связь, — агент говорит прямо, а не подставляет ноль."
      ],
      "requirements": [
        "Аккаунт StarLine ID, в списке устройств которого числится машина",
        "Русский язык интерфейса кабинета — иначе раздел не появится",
        "Лимит физлица — 1000 запросов в сутки"
      ],
      "faq": [
        {
          "q": "Как подключить StarLine?",
          "a": "Четырьмя значениями: AppId и Secret приложения, созданного в my.starline.ru → «Разработчикам», плюс логин и пароль аккаунта StarLine ID, в списке устройств которого числится машина. Раздел виден только при русском языке интерфейса, одобрение приходит письмом."
        },
        {
          "q": "Что агент видит в StarLine?",
          "a": "Список устройств аккаунта, GPS-координаты и треки, состояние охраны и датчиков, показатели OBD-диагностики и историю событий комплекса."
        },
        {
          "q": "Пишет ли агент в StarLine?",
          "a": "Да, коннектор умеет дистанционные команды — например, прогрев двигателя или постановку на охрану. Такие действия агент выполняет только после вашего явного подтверждения."
        },
        {
          "q": "Какие ограничения у API?",
          "a": "Физлицу StarLine отдаёт 1000 запросов в сутки, поэтому непрерывный трекинг секунда в секунду не выйдет: агент опрашивает состояние по расписанию или по вашему запросу."
        }
      ]
    },
    "seo_en": {
      "headline": "Find out where the car is and how it is doing, from chat",
      "scenarios": [
        {
          "title": "Where the car is right now",
          "desc": "The agent shows the coordinates, the speed and the time of the last update from the GPS module of the unit for every device in the account."
        },
        {
          "title": "State and diagnostics",
          "desc": "The agent checks the alarm, the doors and the ignition, the fuel level, the battery voltage and the engine temperature from OBD data."
        },
        {
          "title": "Remote commands",
          "desc": "The agent runs unit commands — arming the alarm or warming up the engine — after your confirmation in the chat."
        },
        {
          "title": "Trip summary",
          "desc": "On a schedule the agent puts together a summary: trips for the day, alarms that fired and the readings that dropped over the week."
        },
        {
          "title": "Where the car went yesterday",
          "desc": "The agent pulls the day's GPS track point by point and shows the route, the stops with how long each lasted and the mileage, instead of a map to scroll by hand."
        },
        {
          "title": "Every car in one answer",
          "desc": "The agent walks the devices on the account into a single list: where each car stands, whether it is armed, how much fuel is left and when the last packet arrived."
        }
      ],
      "how_it_works": [
        "The agent calls the StarLine API and starts from the account: it reads the user profile, collects the list of devices and then, for each device, pulls its data and state — coordinates and speed from the GPS module, the alarm, doors and ignition, the fuel level, the battery voltage and the engine temperature from OBD diagnostics, the event history and the alarms that fired. Out of that come summaries of the day's trips and of the readings that dropped over the week.",
        "Telematics shows not the car but the last packet the unit managed to send: in an underground car park or with a weak signal the data freezes. So the agent always names the time of the last update next to the coordinates and never passes yesterday's point off as the current one. For the same reason it distinguishes the alarm state read from the unit from a command you have just sent: until a fresh packet arrives, that is not yet a fact.",
        "Remote commands — arming the alarm, warming up the engine — are an action on a real car, so the agent runs them only after your explicit confirmation in the chat and names the device it is addressing. After a command it re-reads the state of the unit and says whether the command took effect or not. Everything else — coordinates, diagnostics, trip history — runs read-only.",
        "The connector raises the session itself: the application signs the request, the account confirms it, and from there the agent works on the issued token, renewing it when it expires. It polls on a schedule or on your request and stays inside the thousand calls a day, so the car's state is not pulled every minute and trip history is collected in one batch for the period. About data the unit did not send — a sensor that is not fitted, a lost signal — the agent says so plainly instead of filling in a zero."
      ],
      "requirements": [
        "A StarLine ID account whose device list holds the car",
        "The cabinet interface language set to Russian, or the section hides",
        "A personal account limit of 1000 requests per day"
      ],
      "faq": [
        {
          "q": "How do I connect StarLine?",
          "a": "With four values: the AppId and Secret of an application created at my.starline.ru under Developers, plus the login and password of the StarLine ID account whose device list holds the car. The section is visible only with the Russian interface language, and approval arrives by email."
        },
        {
          "q": "What does the agent see in StarLine?",
          "a": "The list of devices on the account, GPS coordinates and tracks, the state of the alarm and the sensors, OBD diagnostics readings and the event history of the unit."
        },
        {
          "q": "Does the agent write to StarLine?",
          "a": "Yes, the connector supports remote commands — warming up the engine or arming the alarm, for example. The agent performs such actions only after your explicit confirmation."
        },
        {
          "q": "What are the API limits?",
          "a": "StarLine gives an individual 1000 requests per day, so continuous second-by-second tracking is out: the agent polls the state on a schedule or on your request."
        }
      ]
    }
  },
  {
    "key": "supadata",
    "name": "Supadata (YouTube)",
    "description": "YouTube-исследование: транскрипты с AI fallback, метаданные видео/каналов, поиск, перевод субтитров",
    "category": "other",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Расшифровывайте ролики YouTube в текст прямо в чате",
      "scenarios": [
        {
          "title": "Расшифровка ролика",
          "desc": "Агент заберёт транскрипт видео на YouTube, а если родных субтитров нет — получит расшифровку через ИИ и вернёт готовый текст."
        },
        {
          "title": "Разбор канала или плейлиста",
          "desc": "Агент пройдёт по роликам канала или плейлиста и сведёт метаданные: заголовки, длительность, просмотры и даты публикации."
        },
        {
          "title": "Поиск роликов по теме",
          "desc": "Агент найдёт видео по запросу с фильтрами по давности, длительности и сортировке и соберёт короткий пересказ каждого."
        },
        {
          "title": "Перевод транскрипта",
          "desc": "Агент переведёт расшифровку ролика на нужный язык — например, чтобы разобрать англоязычный обзор конкурента."
        },
        {
          "title": "Что зашло у конкурента",
          "desc": "Агент сведёт ролики чужого канала по просмотрам и датам публикации и покажет, какие темы там выстреливают, а какие проходят незамеченными."
        },
        {
          "title": "Сколько осталось кредитов",
          "desc": "Агент покажет остаток кредитов плана и заранее прикинет по хронометражу, во что обойдётся ИИ-расшифровка длинного ролика."
        }
      ],
      "how_it_works": [
        "Агент обращается не к самому YouTube, а к api.supadata.ai, и берёт оттуда четыре вещи: транскрипт ролика, метаданные видео и канала, списки роликов канала и плейлиста и поиск с фильтрами по давности, длительности и сортировке. Из этого складывается разбор: о чём говорят в ролике, как он выглядит на фоне остальных на канале и что вообще выходит по теме за нужный период.",
        "Главная развилка здесь — откуда взялся текст. У части роликов есть родные субтитры, и тогда транскрипт отдаётся как есть; если их нет, включается расшифровка через ИИ, которая стоит дороже и считается по минутам, а не по запросу. Агент сначала проверяет родную дорожку и только потом уходит в ИИ-fallback, и в ответе говорит, какой из двух путей сработал: у распознанного текста другая точность, чем у авторских субтитров.",
        "Писать через Supadata некуда: она только читает публичные данные YouTube — загрузить ролик, оставить комментарий или изменить канал через неё невозможно. Поэтому агент здесь работает как исследователь: собирает транскрипты и метаданные, переводит расшифровку на нужный язык, сводит ролики канала или плейлиста в одну таблицу и пересказывает найденное по теме. Ничего в чужом канале при этом не меняется.",
        "Расход считается кредитами плана: на бесплатном это 100 запросов в месяц, транскрипт и метаданные — 1 кредит, ИИ-субтитры — 2 кредита за минуту, пакетная обработка канала есть только на платных планах. Длинный ролик агент поэтому оценивает по хронометражу заранее и говорит, во что обойдётся расшифровка, а не тратит остаток молча. Если ролик недоступен или кредиты кончились, он скажет об этом прямо, а не вернёт пустой текст."
      ],
      "requirements": [
        "Бесплатный план — 100 запросов в месяц и без привязки карты",
        "Платный план, если нужна пакетная обработка канала или плейлиста"
      ],
      "faq": [
        {
          "q": "Как подключить Supadata (YouTube)?",
          "a": "API-ключом из дашборда dash.supadata.ai: он создаётся автоматически во время онбординга, выпускать его отдельно не нужно. Скопируйте строку целиком, без пробелов по краям — лишний символ даёт ошибку unauthorized."
        },
        {
          "q": "Что агент видит через Supadata (YouTube)?",
          "a": "Публичные данные YouTube: транскрипты роликов, метаданные видео и каналов, списки видео канала и плейлиста, результаты поиска и остаток кредитов вашего плана."
        },
        {
          "q": "Пишет ли агент куда-нибудь?",
          "a": "Нет. Supadata только читает публичные данные YouTube: загрузить ролик, оставить комментарий или изменить канал через неё невозможно."
        },
        {
          "q": "Что с кредитами и лимитами?",
          "a": "Бесплатный план — 100 запросов в месяц без карты. Транскрипт и метаданные стоят 1 кредит за запрос, ИИ-генерация субтитров — 2 кредита за минуту, пакетная обработка канала есть только на платных планах."
        }
      ]
    },
    "seo_en": {
      "headline": "Turn YouTube videos into text transcripts in the chat",
      "scenarios": [
        {
          "title": "Transcribe a video",
          "desc": "The agent pulls the transcript of a YouTube video, and if there are no native subtitles it gets an AI transcription and returns ready text."
        },
        {
          "title": "Map a channel or playlist",
          "desc": "The agent walks through the videos of a channel or playlist and collects metadata: titles, duration, views and publish dates."
        },
        {
          "title": "Find videos on a topic",
          "desc": "The agent searches videos with filters by recency, duration and sorting, and puts together a short summary of each."
        },
        {
          "title": "Translate a transcript",
          "desc": "The agent translates a video transcript into the language you need — for example, to go through an English-language competitor review."
        },
        {
          "title": "What works on a rival channel",
          "desc": "The agent lines up a competitor's videos by views and publish dates and shows which topics take off there and which ones go unnoticed."
        },
        {
          "title": "How many credits are left",
          "desc": "The agent shows the credits left on your plan and prices an AI transcription of a long video by its running time before you spend them."
        }
      ],
      "how_it_works": [
        "The agent talks not to YouTube itself but to api.supadata.ai, and takes four things from it: the transcript of a video, video and channel metadata, the video lists of a channel and a playlist, and search with filters by recency, duration and sorting. That is what the analysis is built from: what is being said in a video, how it compares with the rest on the channel and what comes out on the topic over the period you need.",
        "The main fork here is where the text came from. Some videos have native subtitles, and then the transcript is returned as is; if there are none, AI transcription kicks in, which costs more and is billed per minute rather than per request. The agent checks the native track first and only then falls back to AI, and it states in the answer which of the two paths worked: recognised text has a different accuracy from author-made subtitles.",
        "There is nowhere to write through Supadata: it only reads public YouTube data — uploading a video, leaving a comment or changing a channel through it is not possible. So the agent works here as a researcher: it collects transcripts and metadata, translates a transcript into the language you need, brings the videos of a channel or playlist into a single table and summarises what it found on the topic. Nothing in anyone's channel changes along the way.",
        "Usage is counted in plan credits: 100 requests a month on the free plan, 1 credit for a transcript or metadata, 2 credits per minute for AI subtitles, and batch processing of a channel only on paid plans. A long video is therefore priced by its running time up front and the agent says what the transcription will cost instead of spending the remainder silently. If a video is unavailable or the credits have run out, it says so directly instead of returning empty text."
      ],
      "requirements": [
        "The free plan — 100 requests a month and no card required",
        "A paid plan if you need batch processing of a channel or playlist"
      ],
      "faq": [
        {
          "q": "How do I connect Supadata (YouTube)?",
          "a": "With an API key from the dash.supadata.ai dashboard: it is created automatically during onboarding, so you do not need to issue it separately. Copy the whole string with no spaces at the edges — one extra character gives an unauthorized error."
        },
        {
          "q": "What does the agent see through Supadata (YouTube)?",
          "a": "Public YouTube data: video transcripts, video and channel metadata, channel and playlist video lists, search results and the remaining credits on your plan."
        },
        {
          "q": "Does the agent write anywhere?",
          "a": "No. Supadata only reads public YouTube data: uploading a video, leaving a comment or changing a channel through it is not possible."
        },
        {
          "q": "What about credits and limits?",
          "a": "The free plan gives 100 requests a month with no card. A transcript or metadata costs 1 credit per request, AI subtitle generation costs 2 credits per minute, and batch processing of a channel is available only on paid plans."
        }
      ]
    }
  },
  {
    "key": "taxi_crm",
    "name": "taxiCRM",
    "description": "Платформа для таксопарков — водители, поездки, выплаты, балансы, смены, чаты, штрафы, авто, аренда, CRM",
    "category": "crm",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Сводите балансы водителей до того, как уйдёт выплата",
      "scenarios": [
        {
          "title": "Балансы водителей перед выплатой",
          "desc": "Агент сведёт смены, поездки и транзакции и покажет, кто из водителей ушёл в минус и с каким балансом подходит к выплате."
        },
        {
          "title": "Штрафы и договоры аренды",
          "desc": "Агент соберёт неоплаченные штрафы и договоры аренды на паузе и свяжет их с конкретными машинами и водителями парка."
        },
        {
          "title": "Утренняя сводка по парку",
          "desc": "Агент каждое утро пришлёт итоги за вчера: поездки, смены и транзакции водителей в разрезе кабинетов агрегаторов."
        },
        {
          "title": "Разбор переписки с водителями",
          "desc": "Агент пройдёт по чатам парка, соберёт обращения водителей без ответа и покажет, какие вопросы повторяются чаще других."
        },
        {
          "title": "Найм водителей по воронке",
          "desc": "Агент пройдёт по сделкам воронки парка, покажет, на каком этапе застряли кандидаты, и заведёт нового водителя, когда вы передадите контакт."
        },
        {
          "title": "Машины, которые простояли",
          "desc": "Агент сопоставит автомобили парка со сменами и поездками за неделю и назовёт те, что простояли, хотя договор аренды по ним активен."
        }
      ],
      "how_it_works": [
        "Агент обращается к публичному API taxiCRM на поддомене вашего парка и начинает со списка кабинетов — именно к ним привязаны поездки и транзакции. Дальше читаются водители и их балансы, смены, поездки, выплаты и реквизиты, автомобили и договоры аренды, штрафы, чаты с водителями и воронки CRM парка. Из этого складываются утренняя сводка за вчера, картина задолженностей и список тех, кто подходит к выплате.",
        "Баланс водителя — не строчка в карточке, а результат: смены, поездки, удержания, штрафы и переводы ложатся в него транзакциями, и агент пересобирает сумму из них, а не доверяет одному числу. Кабинетов агрегаторов у парка обычно несколько, и один водитель нередко работает сразу через два, так что итог по одному кабинету — часть заработка, а не весь. Поэтому агент всегда называет, по какому кабинету и за какой период посчитано.",
        "На запись агент делает то, что не двигает деньги: регистрирует водителя, заводит сделку в воронке парка или автомобиль, ставит договор аренды на паузу, пишет водителю в чат. Каждое такое действие показывается до отправки — сообщение уходит живому человеку за рулём, а не в отчёт. Денежные методы устроены жёстче: выплата водителю, изменение баланса и снятие блокировки транзакции по спецификации закрыты и отвечают 402, пока их не откроют по запросу в поддержку taxiCRM.",
        "Подключение — поддомен парка и его API-ключ; подпись каждого запроса коннектор считает сам, передавать её вручную не нужно. Ключ парковый, а не пользовательский: отдельной учётной записи за агентом нет, он видит все кабинеты аккаунта, а доступ отзывается сменой ключа. Списки агент читает постранично и всегда с границами периода, поэтому большой парк не превращается в одну тяжёлую выгрузку, а старые смены не тянутся в свежую сводку. Если метод закрыт, смен за период не было или чат пуст, агент скажет это прямо, а не покажет пустую таблицу."
      ],
      "requirements": [
        "Кабинет парка в taxiCRM с доступом к настройкам компании",
        "Договорённость с поддержкой taxiCRM, если нужны выплаты водителям"
      ],
      "faq": [
        {
          "q": "Как подключить taxiCRM?",
          "a": "Поддоменом и API-ключом парка: поддомен — часть адреса кабинета до .taxicrm.ru, ключ лежит в «Компания» → «Настройки компании» → «API». Подпись запроса коннектор считает сам, передавать её не нужно."
        },
        {
          "q": "Что агент видит в taxiCRM?",
          "a": "Водителей и их балансы, поездки, смены, транзакции, выплаты и реквизиты, автомобили и договоры аренды, штрафы, чаты с водителями и воронки CRM парка."
        },
        {
          "q": "Пишет ли агент в taxiCRM?",
          "a": "Может: регистрировать водителей, заводить сделки и автомобили, ставить аренду на паузу и писать в чат водителю. По умолчанию работает на чтение и сводки."
        },
        {
          "q": "Почему часть методов отвечает 402?",
          "a": "Выплата водителю, изменение баланса и снятие блокировки транзакции по спецификации открываются только по запросу в поддержку taxiCRM. Чтение данных работает сразу после подключения."
        }
      ]
    },
    "seo_en": {
      "headline": "Reconcile driver balances before the payout goes out",
      "scenarios": [
        {
          "title": "Driver balances before payout",
          "desc": "The agent reconciles shifts, trips and transactions and shows which drivers went negative and what balance each one brings into the payout."
        },
        {
          "title": "Fines and rental agreements",
          "desc": "The agent collects unpaid fines and paused rental agreements and links them to specific cars and drivers in the fleet."
        },
        {
          "title": "Morning fleet summary",
          "desc": "Every morning the agent sends yesterday totals: trips, shifts and driver transactions broken down by aggregator cabinets."
        },
        {
          "title": "Review of driver conversations",
          "desc": "The agent goes through fleet chats, collects driver requests left without a reply and shows which questions come up most often."
        },
        {
          "title": "Driver hiring in the pipeline",
          "desc": "The agent walks the deals in the fleet pipeline, shows which stage candidates got stuck at and registers a new driver once you hand over the contact."
        },
        {
          "title": "Cars that stood idle",
          "desc": "The agent matches the fleet cars against shifts and trips for the week and names the ones that never moved while their rental agreement stayed active."
        }
      ],
      "how_it_works": [
        "The agent calls the taxiCRM public API on your fleet subdomain and starts from the list of cabinets — trips and transactions are tied to those. From there it reads drivers and their balances, shifts, trips, payouts and payment details, cars and rental agreements, fines, driver chats and the fleet CRM pipelines. Out of that come the morning summary for yesterday, the picture of who owes what and the list of drivers approaching a payout.",
        "A driver balance is not a line in a card but a result: shifts, trips, deductions, fines and transfers land in it as transactions, and the agent rebuilds the sum from them instead of trusting a single number. A fleet usually holds several aggregator cabinets, and one driver often works through two at once, so a total from one cabinet is a part of the earnings, not all of them. That is why the agent always names which cabinet and which period a figure covers.",
        "For writes the agent does what does not move money: registers a driver, creates a deal in the fleet pipeline or a car, pauses a rental agreement, messages a driver in chat. Every such action is shown before it is sent — a message goes to a live person behind the wheel, not into a report. Money methods are stricter: paying out a driver, changing a balance and unblocking a transaction are closed by the spec and answer 402 until they are opened on request to taxiCRM support.",
        "The connection is the fleet subdomain plus its API key; the connector signs every request itself, so no signature has to be passed by hand. The key belongs to the fleet rather than to a person: there is no separate user account behind the agent, it sees all the cabinets of the account, and access is revoked by replacing the key. Lists are read page by page and always inside period bounds, so a large fleet never turns into one heavy export and old shifts do not drift into a fresh summary. If a method is closed, there were no shifts in the period or a chat is empty, the agent says so directly instead of showing an empty table."
      ],
      "requirements": [
        "A taxiCRM fleet cabinet with access to the company settings",
        "An arrangement with taxiCRM support if you need driver payouts"
      ],
      "faq": [
        {
          "q": "How do I connect taxiCRM?",
          "a": "With the fleet subdomain and API key: the subdomain is the part of your cabinet address before .taxicrm.ru, and the key sits under Company → Company settings → API. The connector signs the request itself, so you do not need to pass a signature."
        },
        {
          "q": "What does the agent see in taxiCRM?",
          "a": "Drivers and their balances, trips, shifts, transactions, payouts and payment details, cars and rental agreements, fines, driver chats and the fleet CRM pipelines."
        },
        {
          "q": "Does the agent write to taxiCRM?",
          "a": "It can: register drivers, create deals and cars, pause a rental and message a driver in chat. By default it works in read and summary mode."
        },
        {
          "q": "Why do some methods answer 402?",
          "a": "Paying out a driver, changing a balance and unblocking a transaction are opened only on request to taxiCRM support, as the spec states. Reading data works right after you connect."
        }
      ]
    }
  },
  {
    "key": "telegram",
    "name": "Telegram Bot",
    "description": "Подключите собственного Telegram-бота для работы с ИИ-агентом",
    "category": "messengers",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "short_name": "Telegram",
    "seo": {
      "headline": "ИИ для Телеграма: ответы в чатах бота без ручной переписки",
      "scenarios": [
        {
          "title": "Автоответы на входящие сообщения",
          "desc": "Агент читает сообщения вашего бота, отвечает на типовые вопросы в тоне бренда и передаёт сложные обращения человеку с готовой сводкой."
        },
        {
          "title": "Приём и сортировка заявок из бота",
          "desc": "Агент разбирает входящие заявки, вытаскивает контакт и суть запроса и складывает их списком, чтобы ничего не потерялось в чате."
        },
        {
          "title": "Уведомления и дайджесты в чат",
          "desc": "Агент присылает в Telegram сводки по продажам, задачам или заявкам на нужный час — без ручной выгрузки и захода в кабинеты."
        },
        {
          "title": "Рассылка сообщений подписчикам бота",
          "desc": "Агент подготовит и отправит сообщение пользователям бота, а после соберёт статистику доставки и ответов."
        },
        {
          "title": "Файлы, присланные в бот",
          "desc": "Агент прочитает вложения из диалога с ботом — фото документа, накладную, выгрузку — и ответит по их содержимому, не выходя из переписки."
        },
        {
          "title": "Команды в рабочей группе",
          "desc": "Агент отработает команды в группе и ответит на реплики к своим сообщениям, честно помечая, что при включённой приватности видит не всю переписку."
        }
      ],
      "how_it_works": [
        "Агент обращается к Bot API на api.telegram.org с токеном вашего бота от @BotFather. Первый вызов — getMe: он подтверждает, что токен рабочий, и показывает, какой именно бот подключён. Дальше в работу идут входящие сообщения этого бота, данные их отправителей и вложения: из них агент вытаскивает контакт и суть обращения и складывает заявки списком, чтобы ничего не терялось в потоке чата.",
        "У бота есть две особенности, которые определяют всё остальное. Вебхук у него один: обновления уходят по единственному адресу, и два обработчика на одном токене не уживаются — второй просто перестаёт получать сообщения. А в группах при включённой настройке Group Privacy бот видит только команды и ответы на свои сообщения: остальную переписку Telegram ему не отдаёт, и такую группу агент считает частично видимой, а не пустой.",
        "Пишет агент от имени бота: отвечает на типовые вопросы в тоне бренда, присылает сводки в нужный час и рассылает сообщения пользователям, а после собирает статистику доставки и ответов. Первым он написать не может — Telegram разрешает боту отвечать только тем, кто сам начал с ним диалог. Сложное обращение агент не додумывает, а передаёт человеку с готовой сводкой переписки.",
        "Токен даёт права ровно этого бота: личные чаты вашего аккаунта и переписки, где бота нет, ему недоступны. Скомпрометированный токен отзывается у @BotFather без остановки остального — старая строка перестаёт работать сразу. Ограничения Telegram на частоту отправки агент соблюдает сам, а если сообщений по запросу нет или бот их не получает из-за приватности, он скажет это прямо."
      ],
      "requirements": [
        "Аккаунт Telegram, с которого создаётся бот",
        "Права администратора в группе, куда добавляется бот"
      ],
      "faq": [
        {
          "q": "Как подключить Telegram-бота?",
          "a": "Создайте бота у @BotFather, скопируйте токен и вставьте его при подключении. Свой сервер не нужен — приём сообщений идёт через вебхук, который настраивается автоматически."
        },
        {
          "q": "Какие данные видит агент?",
          "a": "Только сообщения, которые приходят вашему боту, и данные их отправителей. К личной переписке и другим чатам аккаунта доступа нет — работает именно бот, а не ваш личный Telegram."
        },
        {
          "q": "Может ли агент писать от имени бота?",
          "a": "Да: агент отправляет ответы и рассылки от имени подключённого бота. Если нужно только читать входящие и уведомлять вас — так тоже можно настроить."
        },
        {
          "q": "Что происходит после подключения?",
          "a": "Бот сразу начинает получать сообщения, и агент отвечает по вашему сценарию. Ограничения Telegram на частоту отправки соблюдаются автоматически."
        },
        {
          "q": "Как сделать чат-бот с ИИ в Телеграме?",
          "a": "Чат-бот с ИИ здесь собирается без разработки: вы заводите бота у @BotFather, вставляете токен — и отвечает уже агент. Он разбирает входящие в тоне бренда, вытаскивает из переписки контакт и суть заявки, а то, что не берётся решить сам, передаёт человеку с готовой сводкой диалога."
        }
      ]
    },
    "seo_en": {
      "headline": "Answer your Telegram bot messages without typing replies",
      "scenarios": [
        {
          "title": "Auto-replies to incoming messages",
          "desc": "The agent reads the messages sent to your bot, answers routine questions in your brand voice and hands complex cases to a human with a ready summary."
        },
        {
          "title": "Lead intake and triage from the bot",
          "desc": "The agent parses incoming requests, pulls out the contact and the gist of the request and files them in a list so nothing gets lost in the chat."
        },
        {
          "title": "Notifications and digests in chat",
          "desc": "The agent sends sales, task or lead summaries to Telegram at the hour you pick — with no manual exports and no logging into cabinets."
        },
        {
          "title": "Broadcasts to bot subscribers",
          "desc": "The agent prepares and sends a message to your bot users, then collects delivery and reply statistics."
        },
        {
          "title": "Files sent to the bot",
          "desc": "The agent reads the attachments from a chat with the bot — a photo of a document, a delivery note, an export — and answers on their content without leaving the thread."
        },
        {
          "title": "Commands in a work group",
          "desc": "The agent handles commands in a group and replies to messages that answer its own, flagging honestly that with privacy on it does not see the whole thread."
        }
      ],
      "how_it_works": [
        "The agent calls the Bot API at api.telegram.org with the token of your bot from @BotFather. The first call is getMe: it confirms the token works and shows which bot exactly is connected. From there the incoming messages of that bot, the data of their senders and the attachments go into the work: the agent pulls out the contact and the gist of the request and files the leads in a list, so nothing is lost in the flow of the chat.",
        "A bot has two traits that shape everything else. It has a single webhook: updates go to one address only, and two handlers on the same token cannot coexist — the second one simply stops receiving messages. And in groups, with Group Privacy switched on, the bot sees only commands and replies to its own messages: the rest of the conversation is not handed to it by Telegram, and the agent treats such a group as partly visible rather than empty.",
        "The agent writes as the bot: it answers routine questions in your brand voice, sends summaries at the hour you pick and broadcasts messages to users, then collects delivery and reply statistics. It cannot write first — Telegram lets a bot reply only to people who started the conversation themselves. A complex case is not improvised: the agent hands it to a human with a ready summary of the thread.",
        "The token carries exactly this bot's rights: the private chats of your account and conversations without the bot are out of reach. A compromised token is revoked in @BotFather without stopping anything else — the old string stops working immediately. Telegram sending rate limits are respected by the agent itself, and if there are no messages for your request or the bot is not receiving them because of privacy, it says so directly."
      ],
      "requirements": [
        "A Telegram account to create the bot from",
        "Admin rights in the group the bot is added to"
      ],
      "faq": [
        {
          "q": "How do I connect a Telegram bot?",
          "a": "Create a bot with @BotFather, copy the token and paste it when connecting. You do not need your own server — messages arrive through a webhook that is set up automatically."
        },
        {
          "q": "What data does the agent see?",
          "a": "Only the messages that come to your bot and the data of their senders. There is no access to private correspondence or other chats in the account — the bot is what works, not your personal Telegram."
        },
        {
          "q": "Can the agent write as the bot?",
          "a": "Yes: the agent sends replies and broadcasts from the connected bot. If you only want it to read incoming messages and notify you, that can be set up too."
        },
        {
          "q": "What happens after connecting?",
          "a": "The bot starts receiving messages right away and the agent replies according to your scenario. Telegram sending rate limits are respected automatically."
        },
        {
          "q": "How do I build an AI chatbot in Telegram?",
          "a": "An AI chatbot here takes no development: you register a bot with @BotFather, paste the token, and the agent does the answering. It handles incoming messages in your brand voice, pulls the contact and the substance of a request out of the conversation, and hands anything it should not decide alone to a person with a ready summary of the thread."
        }
      ]
    }
  },
  {
    "key": "tgstat",
    "name": "TGStat",
    "description": "Аналитика Telegram-каналов — поиск, подписчики, охваты, ERR, публикации, упоминания",
    "category": "analytics",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Считайте охваты и ERR своих Telegram-каналов в чате",
      "scenarios": [
        {
          "title": "Отчёт по своим каналам",
          "desc": "Агент соберёт подписчиков, средний охват, ER и ERR по каналам, построит динамику по дням и назовёт публикации, вытянувшие неделю."
        },
        {
          "title": "Упоминания бренда в Telegram",
          "desc": "Агент найдёт посты с вашим названием по индексированным каналам, покажет охват упоминаний и каналы, где о вас пишут чаще всего."
        },
        {
          "title": "Подбор каналов для размещения",
          "desc": "Агент найдёт каналы по теме, стране и языку и сравнит их по подписчикам, охвату и ERR, чтобы было видно, где аудиторию действительно читают."
        },
        {
          "title": "Разбор отдельной публикации",
          "desc": "Агент поднимет статистику поста по часам — просмотры, реакции, репосты и упоминания — и покажет, как материал расходился по каналам."
        },
        {
          "title": "Сторис против постов",
          "desc": "Агент поднимет stories канала за период и сравнит их просмотры и реакции с обычными постами, чтобы стало видно, какой формат аудитория и правда смотрит."
        },
        {
          "title": "Квота перед большой выгрузкой",
          "desc": "Агент проверит остаток квоты Stat API и скажет заранее, хватит ли её на отчёт за квартал или период лучше разбить на окна по датам."
        }
      ],
      "how_it_works": [
        "Агент ходит в api.tgstat.ru и читает аналитику Telegram-каналов: карточки и статистику каналов, публикации и stories, упоминания и репосты, динамику подписчиков и просмотров. Поверх сырых чисел он считает средний охват, ER и ERR, строит динамику по дням и называет публикации, вытянувшие период, а по отдельному посту поднимает почасовой разбор просмотров, реакций и репостов.",
        "TGStat — это индекс поверх публичных каналов, а не сам Telegram. Агент видит ровно то, что сервис успел проиндексировать: закрытые каналы и чаты в выдачу не попадают, а по свежесозданному каналу статистика набирается не сразу. Поэтому упоминания бренда агент ищет по индексу и оговаривает его границы: пусто в выдаче означает «нет в индексе», а не «о вас не пишут».",
        "На запись здесь делать почти нечего, и агент этого не скрывает: через TGStat нельзя опубликовать пост, отредактировать канал или написать подписчикам. Единственное изменяющее действие — добавление канала в индекс сервиса, и агент выполняет его только по прямой просьбе. Всё остальное — чтение: сведение своих каналов в один отчёт и сравнение чужих по подписчикам, охвату и ERR при подборе площадок под размещение.",
        "Объём выдачи упирается в квоту запросов, и агент считает её заранее: остаток проверяет перед поиском, длинный период разбивает на окна по датам, а посты и упоминания забирает страницами, а не одним махом. Повторный вопрос по тому же каналу он не оплачивает вторым запросом, если цифры за это время не успели измениться. Частоту запросов агент держит в пределах лимита, а если данных нет — скажет прямо, а не покажет пустую таблицу."
      ],
      "requirements": [
        "Платный план Stat API, если нужны чужие каналы и большие квоты.",
        "Права владельца на каналы, по которым нужна статистика на FREE."
      ],
      "faq": [
        {
          "q": "Как подключить TGStat?",
          "a": "API-токеном из профиля: зарегистрируйтесь на tgstat.ru, включите тарифный план Stat API и скопируйте токен со страницы tgstat.ru/my/profile — это 32 символа латиницей и цифрами без префикса."
        },
        {
          "q": "Что агент видит в TGStat?",
          "a": "Карточки и статистику каналов, публикации и stories, упоминания и репосты, динамику подписчиков, просмотров, ER и ERR, а также поиск постов и каналов по индексу сервиса."
        },
        {
          "q": "Пишет ли агент в Telegram через TGStat?",
          "a": "Нет. Это аналитика поверх публичных каналов: агент читает статистику и может разве что добавить канал в индекс сервиса. Публиковать посты и писать подписчикам через TGStat нельзя."
        },
        {
          "q": "От чего зависит объём доступных данных?",
          "a": "От тарифного плана: на бесплатном опрос ограничен двумя вашими каналами, поиск по чужим каналам и большие квоты запросов открываются на платных. Остаток квоты агент проверяет перед поиском."
        }
      ]
    },
    "seo_en": {
      "headline": "Track reach and ERR of your Telegram channels in chat",
      "scenarios": [
        {
          "title": "Report on your own channels",
          "desc": "The agent collects subscribers, average reach, ER and ERR across your channels, builds daily dynamics and names the posts that carried the week."
        },
        {
          "title": "Brand mentions in Telegram",
          "desc": "The agent finds posts with your name across indexed channels, shows the reach of those mentions and the channels that write about you most often."
        },
        {
          "title": "Picking channels for placement",
          "desc": "The agent finds channels by topic, country and language and compares them by subscribers, reach and ERR, so you can see where the audience actually reads."
        },
        {
          "title": "Breakdown of a single post",
          "desc": "The agent pulls hourly post stats — views, reactions, shares and mentions — and shows how the material spread across channels."
        },
        {
          "title": "Stories against posts",
          "desc": "The agent pulls the channel stories for a period and compares their views and reactions with ordinary posts, so you can see which format the audience actually watches."
        },
        {
          "title": "Quota before a big export",
          "desc": "The agent checks what is left of the Stat API quota and says upfront whether a quarterly report fits into it or the period is better split into date windows."
        }
      ],
      "how_it_works": [
        "The agent calls api.tgstat.ru and reads Telegram channel analytics: channel cards and statistics, posts and stories, mentions and reposts, the dynamics of subscribers and views. On top of the raw numbers it calculates average reach, ER and ERR, builds daily dynamics and names the posts that carried the period, and for a single post it pulls an hourly breakdown of views, reactions and shares.",
        "TGStat is an index on top of public channels, not Telegram itself. The agent sees exactly what the service has managed to index: private channels and chats never make it into the results, and a freshly created channel takes time to accumulate statistics. So the agent searches brand mentions across the index and states its boundaries: an empty result means «not in the index», not «nobody writes about you».",
        "There is almost nothing to write here, and the agent does not hide it: TGStat cannot publish a post, edit a channel or message subscribers. The one changing action is adding a channel to the service index, and the agent performs it only on an explicit request. Everything else is reading: bringing your own channels into a single report and comparing other people's by subscribers, reach and ERR when picking placement slots.",
        "How much comes back is bounded by the request quota, and the agent budgets it in advance: it checks the remaining quota before searching, splits a long period into date windows and fetches posts and mentions page by page rather than in one sweep. A repeated question about the same channel does not cost a second request while the numbers have not moved. The agent holds the request rate within the limit, and if there is no data it says so directly instead of showing an empty table."
      ],
      "requirements": [
        "A paid Stat API plan if you need other channels and larger quotas.",
        "Ownership of the channels you want stats for on the FREE plan."
      ],
      "faq": [
        {
          "q": "How do I connect TGStat?",
          "a": "With an API token from your profile: sign up at tgstat.ru, enable the Stat API plan and copy the token from the tgstat.ru/my/profile page — it is 32 Latin characters and digits with no prefix."
        },
        {
          "q": "What does the agent see in TGStat?",
          "a": "Channel cards and statistics, posts and stories, mentions and reposts, the dynamics of subscribers, views, ER and ERR, plus post and channel search across the service index."
        },
        {
          "q": "Does the agent post to Telegram through TGStat?",
          "a": "No. This is analytics on top of public channels: the agent reads statistics and can at most add a channel to the service index. Publishing posts or messaging subscribers through TGStat is not possible."
        },
        {
          "q": "What determines how much data is available?",
          "a": "The plan: on the free one polling is limited to two of your own channels, while search across other channels and large request quotas open up on paid plans. The agent checks the remaining quota before searching."
        }
      ]
    }
  },
  {
    "key": "tiktok",
    "name": "TikTok",
    "description": "Управление видео, аналитика аккаунта и взаимодействие с аудиторией",
    "category": "messengers",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Публикуйте ролики в TikTok и следите за статусом выкладки",
      "scenarios": [
        {
          "title": "Публикация ролика",
          "desc": "Агент выложит готовое видео по ссылке или загрузит файл частями, а затем дождётся статуса публикации вместо вас."
        },
        {
          "title": "Черновик в inbox автора",
          "desc": "Агент отправит ролик в inbox аккаунта черновиком, чтобы вы дописали подпись и опубликовали его вручную из приложения."
        },
        {
          "title": "Статистика последних видео",
          "desc": "Агент соберёт просмотры, лайки, комментарии и репосты по последним роликам и покажет, какой формат собирает отклик."
        },
        {
          "title": "Проверка ограничений аккаунта",
          "desc": "Агент запросит creator info перед публикацией и скажет, какие уровни приватности и настройки комментариев доступны этому аккаунту."
        },
        {
          "title": "Фото-пост из готовых картинок",
          "desc": "Агент соберёт фото-пост из подготовленных изображений, подставит подпись и разрешённые аккаунту настройки комментариев и дождётся статуса выкладки."
        },
        {
          "title": "Итоги недели по аккаунту",
          "desc": "Агент соберёт по расписанию профиль и метрики роликов за неделю, сравнит их с прошлой и пришлёт короткий разбор: что выросло, а что просело."
        }
      ],
      "how_it_works": [
        "Агент работает с открытым API TikTok от имени одного авторизованного аккаунта: читает профиль автора со статистикой, список последних роликов с просмотрами, лайками, комментариями и репостами, детали конкретного видео по идентификатору. По этим данным он сводит статистику за период и показывает, какой формат собирает отклик, а какой аудитория пролистывает. Чужие аккаунты в этот обзор не попадают — видно ровно тот, который выдал доступ.",
        "Публикация в TikTok устроена асинхронно и с проверкой до старта. Перед выкладкой агент запрашивает creator info — тем же запросом проверяется и само подключение — и узнаёт, какие уровни приватности и настройки комментариев доступны именно этому аккаунту. Отправка ролика возвращает не готовый пост, а идентификатор задачи: настоящий результат виден только в статусе публикации, и агент дожидается его, а не считает загрузку успешной по факту ответа.",
        "На запись агент делает три вещи: публикует видео по прямой ссылке или загружает файл частями, собирает фото-посты и отправляет ролик черновиком в inbox автора, когда подпись вы хотите дописать сами. Черновик здесь безопасный путь по умолчанию: опубликованное агент не удаляет. Подпись, обложку и настройки комментариев он берёт из того, что разрешено этому аккаунту, а большой файл догружает по кускам, повторяя упавший, а не всю загрузку.",
        "Токен доступа живёт сутки, поэтому агент обновляет его сам, в фоне и без вашего участия; значения хранятся зашифрованными и перестают работать, как только вы отзываете приложение в настройках аккаунта. Частоту обращений он держит невысокой: у открытого API TikTok суточные лимиты на публикацию и на чтение статистики считаются отдельно. Если раздел закрыт правами или токен истёк, агент скажет об этом прямо, а не покажет пустую таблицу."
      ],
      "requirements": [
        "Аккаунт TikTok, ролики которого будет вести агент.",
        "Пройденное ревью приложения: до него ролики видны только автору."
      ],
      "faq": [
        {
          "q": "Как подключить TikTok?",
          "a": "Токеном доступа аккаунта. Создайте приложение на developers.tiktok.com, добавьте Content Posting API и Login Kit, отметьте scope video.publish, video.list и user.info, авторизуйте аккаунт и обменяйте код на токен."
        },
        {
          "q": "Что агент видит в TikTok?",
          "a": "Профиль авторизованного аккаунта со статистикой, список последних роликов и их метрики, детали видео по ID и ограничения публикации для этого автора."
        },
        {
          "q": "Пишет ли агент в TikTok?",
          "a": "Да: публикует видео по ссылке или загрузкой файла, собирает фото-посты и отправляет черновики в inbox автора. Опубликованное он не удаляет."
        },
        {
          "q": "Почему пост виден только мне?",
          "a": "Пока приложение не прошло ревью TikTok, все посты неаудированного клиента публикуются с приватностью SELF_ONLY. После перевода в статус Live ограничение снимается."
        }
      ]
    },
    "seo_en": {
      "headline": "Publish TikTok videos and follow the upload status",
      "scenarios": [
        {
          "title": "Publishing a video",
          "desc": "The agent posts a ready video by link or uploads the file in chunks, then waits for the publish status instead of you."
        },
        {
          "title": "Draft in the creator inbox",
          "desc": "The agent sends the video to the account inbox as a draft, so you can finish the caption and publish it manually from the app."
        },
        {
          "title": "Stats on recent videos",
          "desc": "The agent collects views, likes, comments and shares for recent videos and shows which format gets a response."
        },
        {
          "title": "Checking account restrictions",
          "desc": "The agent requests creator info before publishing and tells you which privacy levels and comment settings are available to this account."
        },
        {
          "title": "A photo post from ready images",
          "desc": "The agent assembles a photo post from the images you prepared, sets the caption and the comment settings this account allows, and waits for the publish status."
        },
        {
          "title": "Weekly account recap",
          "desc": "The agent gathers the profile and the video metrics for the week on schedule, compares them with the previous one and sends a short read on what grew and what dropped."
        }
      ],
      "how_it_works": [
        "The agent works with the open TikTok API on behalf of one authorized account: it reads the creator profile with its statistics, the list of recent videos with views, likes, comments and shares, and the details of a particular video by its identifier. From that data it puts together statistics for a period and shows which format gets a response and which one the audience scrolls past. Other accounts never enter this picture — only the one that granted access is visible.",
        "Publishing on TikTok is asynchronous and gated by a check before the start. Ahead of an upload the agent requests creator info — the same request also verifies the connection itself — and learns which privacy levels and comment settings are available to this particular account. Sending a video returns not a finished post but a task identifier: the real outcome is visible only in the publish status, and the agent waits for it rather than treating the response as a success.",
        "There are three things the agent does as writes: it publishes a video by direct link or uploads the file in chunks, it assembles photo posts, and it sends a video to the creator inbox as a draft when you want to finish the caption yourself. The draft is the safe default here: the agent does not delete what has already been published. Caption, cover and comment settings are taken from what this account allows, and a large file is re-sent chunk by chunk, repeating the failed part rather than the whole upload.",
        "The access token lives for a day, so the agent refreshes it in the background without your involvement; the values are stored encrypted and stop working the moment you revoke the app in the account settings. The request rate is kept low: the open TikTok API counts its daily limits on publishing and on reading statistics separately. If a section is closed by permissions or the token has expired, the agent says so directly instead of showing an empty table."
      ],
      "requirements": [
        "The TikTok account whose videos the agent will run.",
        "An approved app review: before it, videos are visible only to their author."
      ],
      "faq": [
        {
          "q": "How do I connect TikTok?",
          "a": "With an account access token. Create an app at developers.tiktok.com, add the Content Posting API and Login Kit, tick the video.publish, video.list and user.info scopes, authorize the account and exchange the code for a token."
        },
        {
          "q": "What does the agent see in TikTok?",
          "a": "The profile of the authorized account with its statistics, the list of recent videos and their metrics, video details by ID and the publishing restrictions for this creator."
        },
        {
          "q": "Does the agent write to TikTok?",
          "a": "Yes: it publishes videos by link or by file upload, assembles photo posts and sends drafts to the creator inbox. It does not delete what has already been published."
        },
        {
          "q": "Why is my post visible only to me?",
          "a": "Until the app passes TikTok review, everything from an unaudited client is published with SELF_ONLY privacy. The restriction is lifted once the app moves to Live status."
        }
      ]
    }
  },
  {
    "key": "tilda",
    "name": "Tilda Publishing",
    "description": "Конструктор сайтов — проекты, страницы, экспорт, вебхуки",
    "category": "content",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "ИИ для Тильды: проверяйте страницы и выгружайте их HTML",
      "scenarios": [
        {
          "title": "Ревизия страниц проекта",
          "desc": "Агент соберёт проекты Тильды и страницы внутри них и покажет, что опубликовано, а что осталось черновиком с прошлой правки."
        },
        {
          "title": "Экспорт страницы на свой хостинг",
          "desc": "Агент выгрузит HTML страницы вместе с путями к её картинкам, стилям и скриптам — в варианте для размещения на своём сервере."
        },
        {
          "title": "Слежение за изменениями сайта",
          "desc": "Агент по расписанию сверит список страниц и сообщит, если появилась новая страница или изменился заголовок публикации."
        },
        {
          "title": "Инвентаризация текстов сайта",
          "desc": "Агент пройдёт по страницам проекта, соберёт их заголовки и содержимое и покажет, где текст дублируется или разошёлся с прайсом."
        },
        {
          "title": "Резервная копия сайта",
          "desc": "Агент выгрузит страницы проекта одну за другой вместе с картинками, стилями и скриптами и соберёт локальную копию сайта, укладываясь в часовой лимит."
        },
        {
          "title": "Что тянет страница",
          "desc": "Агент разберёт полный экспорт страницы и покажет, какие картинки, стили и скрипты она подключает и сколько из них приходит со стороны."
        }
      ],
      "how_it_works": [
        "Агент ходит в API Тильды по паре ключей и начинает со списка проектов и их настроек, а дальше спускается на страницы: алиасы, заголовки, статус публикации. Содержимое он тоже забирает — HTML страницы либо только телом, либо полным документом вместе с путями к картинкам, стилям и скриптам, то есть в том виде, в каком страницу можно положить на свой сервер.",
        "Устройство Тильды диктует темп: список страниц приходит одним запросом, а вот содержимое каждой страницы — отдельным. Ревизия сайта на полсотни страниц это полсотни обращений, и агент планирует их под часовой лимит, а не упирается в него на середине. Ещё одна тонкость — статус публикации: страница, отредактированная в конструкторе, но не опубликованная, в экспорте отдаст прежнюю версию, и агент показывает такие расхождения.",
        "Писать в Тильду нельзя, и агент этого не скрывает: API отвечает только на GET, создать или изменить страницу через него невозможно. Всё, что он делает, — читает и выгружает: сверяет список страниц по расписанию и сообщает о новой странице или смене заголовка, собирает тексты сайта и показывает, где они дублируются или разошлись с прайсом. Правки остаются за вами в конструкторе.",
        "Оба ключа уходят в каждый запрос параметрами: отдельной сессии Тильда не заводит, поэтому доступ отзывается перевыпуском ключей на стороне проекта, а не выходом из аккаунта. Лимит — 150 запросов в час на аккаунт, дёргать API на каждый визит посетителя Тильда запрещает, поэтому массовый экспорт агент делает последовательно и кэширует выгруженное. Если страниц или доступа нет, он скажет об этом прямо."
      ],
      "requirements": [
        "Доступ к настройкам проекта: владелец или администратор аккаунта",
        "Готовность работать на чтение: страницу через API не изменить",
        "Лимит 150 запросов в час на аккаунт"
      ],
      "faq": [
        {
          "q": "Как подключить Tilda Publishing?",
          "a": "Парой ключей: откройте проект в tilda.cc и зайдите в «Настройки сайта» → «Экспорт» → «API» — публичный и секретный ключи лежат там рядом, нужны оба. Раздел с ключами появляется только на тарифе Business."
        },
        {
          "q": "Что агент видит в Tilda Publishing?",
          "a": "Список проектов и их настройки, страницы с алиасами и статусом публикации, а также HTML страницы — только body или полный документ с ассетами."
        },
        {
          "q": "Пишет ли агент в Tilda Publishing?",
          "a": "Нет. API Тильды отвечает только на GET, создать или изменить страницу через него невозможно — коннектор работает на чтение и экспорт."
        },
        {
          "q": "Что с лимитами?",
          "a": "150 запросов в час на аккаунт. Тильда запрещает дёргать API на каждый визит посетителя, поэтому при массовом экспорте агент идёт последовательно и кэширует выгруженное."
        }
      ]
    },
    "seo_en": {
      "headline": "Audit your Tilda project pages and export their HTML",
      "scenarios": [
        {
          "title": "Audit of project pages",
          "desc": "The agent collects your Tilda projects and the pages inside them and shows what is published and what stayed a draft since the last edit."
        },
        {
          "title": "Exporting a page to your own hosting",
          "desc": "The agent exports the page HTML together with the paths to its images, styles and scripts — in the variant meant for hosting on your own server."
        },
        {
          "title": "Watching the site for changes",
          "desc": "On a schedule the agent compares the page list and reports if a new page appeared or a publication title changed."
        },
        {
          "title": "Inventory of site copy",
          "desc": "The agent walks through project pages, collects their titles and content and shows where text is duplicated or has drifted from the price list."
        },
        {
          "title": "A backup copy of the site",
          "desc": "The agent exports the project pages one by one together with their images, styles and scripts and assembles a local copy of the site within the hourly limit."
        },
        {
          "title": "What a page pulls in",
          "desc": "The agent goes through the full page export and shows which images, styles and scripts it loads and how many of them come from outside."
        }
      ],
      "how_it_works": [
        "The agent calls the Tilda API with the pair of keys and starts from the list of projects and their settings, then goes down to the pages: aliases, titles, publication status. It fetches the content as well — the page HTML either as the body alone or as a full document together with the paths to its images, styles and scripts, that is, in the form in which the page can be put on your own server.",
        "The way Tilda is built sets the pace: the page list arrives in one request, but the content of each page takes a separate one. An audit of a fifty-page site means fifty calls, and the agent plans them against the hourly limit instead of hitting it halfway through. One more subtlety is the publication status: a page edited in the builder but not published returns its previous version in the export, and the agent points such discrepancies out.",
        "Writing to Tilda is not possible, and the agent does not hide that: the API answers GET only, so creating or changing a page through it cannot be done. All it does is read and export: it compares the page list on a schedule and reports a new page or a changed title, collects the site copy and shows where it is duplicated or has drifted from the price list. Edits stay with you in the builder.",
        "Both keys travel in every request as parameters: Tilda opens no session of its own, so access is revoked by reissuing the keys on the project side rather than by signing out. The limit is 150 requests per hour per account, and Tilda forbids hitting the API on every visitor, so the agent runs bulk exports sequentially and caches what it has already pulled. If there are no pages or no access, it says so directly."
      ],
      "requirements": [
        "Access to project settings: account owner or administrator",
        "Read-only work: a page cannot be changed through the API",
        "A limit of 150 requests per hour per account"
      ],
      "faq": [
        {
          "q": "How do I connect Tilda Publishing?",
          "a": "With a pair of keys: open the project at tilda.cc and go to Site settings → Export → API — the public and secret keys sit there side by side and you need both. The keys section appears only on the Business plan."
        },
        {
          "q": "What does the agent see in Tilda Publishing?",
          "a": "The list of projects and their settings, pages with aliases and publication status, and the page HTML — either the body alone or the full document with assets."
        },
        {
          "q": "Does the agent write to Tilda Publishing?",
          "a": "No. The Tilda API answers GET only, so creating or changing a page through it is not possible — the connector works for reading and export."
        },
        {
          "q": "What about limits?",
          "a": "150 requests per hour per account. Tilda forbids hitting the API on every visitor, so during a bulk export the agent goes sequentially and caches what it has already pulled."
        }
      ]
    }
  },
  {
    "key": "tinkoff",
    "name": "Т-Банк Бизнес",
    "description": "Банковский API — счета, выписки, платежи, зарплата, карты",
    "category": "banks",
    "auth_flow": "popup_oauth",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "short_name": "Т-Банк",
    "seo": {
      "headline": "Получайте утреннюю сводку по счетам Т-Банка прямо в чате",
      "scenarios": [
        {
          "title": "Утренняя сводка по деньгам",
          "desc": "Агент соберёт остатки по счетам Т-Банка, поступления и списания за вчера и пришлёт сводку в Telegram к началу дня."
        },
        {
          "title": "Сверка выписки с 1С",
          "desc": "Агент сверит операции по выписке с проводками в 1С, найдёт расхождения по суммам и контрагентам и покажет недостающие документы."
        },
        {
          "title": "Контроль кассового разрыва",
          "desc": "Агент сведёт остатки, ожидаемые поступления и обязательные платежи на неделю и заранее предупредит о разрыве."
        },
        {
          "title": "Поручение готово к подписи",
          "desc": "Агент подготовит платёжное поручение с реквизитами, суммой и назначением и покажет документ — подпись и отправка остаются в интернет-банке Т-Бизнеса."
        },
        {
          "title": "Кому и за что платим",
          "desc": "Агент разложит операции месяца по контрагентам и назначениям и покажет, кто из поставщиков стал забирать заметно больше денег, чем раньше."
        },
        {
          "title": "Год в разбивке по месяцам",
          "desc": "Агент соберёт выписку по всем счетам частями, сошьёт её в один ряд операций и покажет обороты по месяцам, назвав границу истории — июнь 2023 года."
        }
      ],
      "how_it_works": [
        "Агент ходит в открытый API Т-Банка Бизнеса: сначала определяет компанию по её реквизитам, затем забирает список расчётных счетов и уже по ним читает выписку. Из этого собираются остатки на утро, поступления и списания за вчера, разбивка операций по контрагентам, сверка выписки с проводками 1С и недельный прогноз кассового разрыва из остатков, ожидаемых поступлений и обязательных платежей.",
        "Выписку API отдаёт не одним срезом, а порциями по счёту и периоду, поэтому длинный отчёт агент собирает частями и сам сшивает их в один ряд операций, не теряя границы дней. Второе ограничение — глубина истории: операции API отдаёт с июня 2023 года, поэтому годовые сравнения с более ранними периодами агент не строит и честно называет границу, а не достраивает её догадками.",
        "Платёжное поручение агент может подготовить, если выданные права это позволяют: он собирает реквизиты, сумму и назначение и показывает документ вам. Подпись и отправка остаются в банке — без вашего подтверждения деньги никуда не уйдут. Всё остальное происходит на чтение: сводки, сверки и прогнозы не меняют в кабинете ничего, а данные читаются по запросу и не выгружаются целиком.",
        "Подключение идёт входом в интернет-банк: вы авторизуетесь на business.tbank.ru, и доступ выдаётся без копирования токенов. Токен доступа короткоживущий и обновляется автоматически, поэтому регулярная утренняя сводка не рвётся на середине месяца. Список счетов агент перечитывает перед каждым разбором, а не запоминает раз и навсегда. Если данных за период нет или прав не хватает, агент скажет об этом прямо, а не покажет пустую таблицу."
      ],
      "requirements": [
        "Компания с расчётным счётом в Т-Бизнесе.",
        "Права «Директор» у того, кто выдаёт доступ."
      ],
      "faq": [
        {
          "q": "Как подключить Т-Банк Бизнес?",
          "a": "Через вход Т-Банка в один клик (OAuth): вы авторизуетесь в своём интернет-банке, и доступ выдаётся без копирования токенов."
        },
        {
          "q": "Что агент видит по счетам?",
          "a": "Счета, выписки и операции компании в рамках выданных при входе прав. Данные читаются по запросу и не выгружаются целиком."
        },
        {
          "q": "Может ли агент отправить платёж?",
          "a": "Агент может подготовить платёжное поручение, если права это позволяют, но подпись и отправка остаются в банке — без вашего подтверждения деньги никуда не уйдут."
        }
      ]
    },
    "seo_en": {
      "headline": "Get a morning summary of your T-Bank accounts right in chat",
      "scenarios": [
        {
          "title": "Morning cash summary",
          "desc": "The agent collects T-Bank account balances and yesterday incoming and outgoing payments and sends a summary to Telegram by the start of the day."
        },
        {
          "title": "Reconciling the statement with 1C",
          "desc": "The agent matches statement operations against entries in 1C, finds discrepancies in amounts and counterparties and shows which documents are missing."
        },
        {
          "title": "Cash-flow gap control",
          "desc": "The agent combines balances, expected incoming payments and mandatory payments for the week and warns about a gap in advance."
        },
        {
          "title": "An order ready to sign",
          "desc": "The agent prepares a payment order with the details, the amount and the purpose and shows you the document — signing and sending stay in the T-Business internet bank."
        },
        {
          "title": "Who we pay and what for",
          "desc": "The agent splits the month's operations by counterparty and purpose and shows which suppliers started taking noticeably more money than before."
        },
        {
          "title": "A year month by month",
          "desc": "The agent collects the statement across all accounts in parts, stitches it into one run of operations and charts monthly turnover up to the June 2023 boundary."
        }
      ],
      "how_it_works": [
        "The agent calls the T-Bank Business open API: first it identifies the company by its details, then pulls the list of settlement accounts and reads the statement for them. Out of that come morning balances, yesterday's incoming and outgoing payments, a breakdown of operations by counterparty, a reconciliation of the statement against 1C entries and a weekly cash-gap forecast built from balances, expected receipts and mandatory payments.",
        "The API returns a statement in portions by account and period rather than in one slice, so the agent assembles a long report from parts and stitches them into a single run of operations without losing day boundaries. The second limit is history depth: the API returns operations from June 2023 onwards, so the agent builds no year-over-year comparison with earlier periods and names that boundary honestly instead of guessing past it.",
        "The agent can prepare a payment order if the granted rights allow it: it assembles the details, the amount and the purpose and shows you the document. Signing and sending stay in the bank — no money moves anywhere without your confirmation. Everything else happens read-only: summaries, reconciliations and forecasts change nothing in the account, and data is read on demand rather than exported wholesale.",
        "The connection runs as a sign-in to the internet bank: you log in at business.tbank.ru and access is granted without copying any tokens. The access token is short-lived and is refreshed automatically, so a recurring morning summary does not break off in the middle of the month. The agent re-reads the list of accounts before every run rather than memorising it once. If there is no data for the period or the rights fall short, the agent says so directly instead of showing an empty table."
      ],
      "requirements": [
        "A company with a settlement account in T-Business.",
        "Director rights for whoever grants the access."
      ],
      "faq": [
        {
          "q": "How do I connect T-Bank Business?",
          "a": "Through T-Bank one-click sign-in (OAuth): you log in to your internet bank and access is granted without copying any tokens."
        },
        {
          "q": "What does the agent see in the accounts?",
          "a": "Company accounts, statements and operations within the rights granted at sign-in. Data is read on demand and is never exported wholesale."
        },
        {
          "q": "Can the agent send a payment?",
          "a": "The agent can prepare a payment order if the rights allow it, but signing and sending stay in the bank — no money moves anywhere without your confirmation."
        }
      ]
    }
  },
  {
    "key": "tinkoff_invest",
    "name": "Т-Инвестиции",
    "description": "Инвестиционный API — портфель, котировки, свечи, заявки, поиск инструментов",
    "category": "banks",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Разбирайте портфель Т-Инвестиций и котировки прямо в чате",
      "scenarios": [
        {
          "title": "Состав портфеля",
          "desc": "Агент покажет портфель по всем брокерским счетам: какие бумаги лежат, в каких долях и сколько стоят сейчас."
        },
        {
          "title": "Котировки и динамика",
          "desc": "Агент соберёт котировки и свечи по нужным бумагам и посчитает, как за выбранный период двигалась ваша позиция."
        },
        {
          "title": "Поиск инструмента",
          "desc": "Агент найдёт инструмент по тикеру, названию или ISIN и покажет его параметры, чтобы бумагу не пришлось искать в приложении."
        },
        {
          "title": "Сводка по портфелю",
          "desc": "Агент пришлёт сводку по расписанию: стоимость портфеля, доходность и заметные движения за торговый день."
        },
        {
          "title": "Что висит в заявках",
          "desc": "Агент обойдёт все счета, соберёт выставленные заявки и покажет, что до сих пор не исполнено — по какому инструменту, в каком объёме и по какой цене."
        },
        {
          "title": "Заявка только с подтверждением",
          "desc": "Агент подготовит заявку, назовёт инструмент, объём и цену и отправит её на биржу лишь после вашего «да» — а на read-only токене сразу скажет, что прав не хватит."
        }
      ],
      "how_it_works": [
        "Агент ходит в T-Invest API по адресу invest-public-api.tinkoff.ru/rest и читает четыре домена: брокерские счета и состав портфеля, котировки и свечи по инструментам, справочник бумаг с поиском по тикеру, названию и ISIN, а также выставленные заявки. Первым запросом он получает список счетов — без него неясно, по какому портфелю считать, а счетов у одного токена бывает несколько.",
        "REST здесь — обёртка над gRPC-контрактом: каждый вызов это POST на имя метода вида UsersService/GetAccounts, параметры уходят телом, привычных query-строк нет. Портфель отдаётся не общей кучей, а по каждому счёту отдельно, поэтому сводку «сколько всего» агент собирает сам, обойдя счета и сложив позиции. Стоимость в ответе — текущая рыночная оценка, то есть срез на момент запроса, а не зафиксированный итог дня.",
        "На чтении агент самостоятелен, на действиях — нет. Заявки он выставляет только если токен выпущен с full-access: на read-only токене API их просто не примет, и агент назовёт причину, а не сделает вид, что отправил. Перед отправкой на биржу такое действие он отдельно подтверждает с вами. Расчётного счёта, выписки и платёжных поручений здесь нет — это брокерский счёт, а банковские операции живут в коннекторе Т-Банк Бизнес.",
        "Доступ даёт один токен T-Invest API, и все запросы идут от его имени. Токен живёт три месяца с последнего использования — после простоя API отвечает ошибкой 40003, и агент называет эту причину, а не показывает пустую таблицу. Лимиты у методов разные: справочники и котировки щедрее, операции по счёту строже, поэтому историю за длинный период агент запрашивает окнами и держит около двух с половиной запросов в секунду."
      ],
      "requirements": [
        "Доступ к веб-версии: в мобильном приложении токен не выпускают",
        "Full-access, если агент должен выставлять заявки; иначе read-only"
      ],
      "faq": [
        {
          "q": "Как подключить Т-Инвестиции?",
          "a": "Токеном T-Invest API: он выпускается только в веб-версии, в настройках профиля на tbank.ru/invest/settings. Режима read-only хватает для портфеля и котировок, full-access нужен под заявки. Значение показывается один раз и живёт три месяца с последнего использования."
        },
        {
          "q": "Что агент видит в Т-Инвестициях?",
          "a": "Брокерские счета и состав портфеля, котировки и свечи по инструментам, справочник бумаг и выставленные заявки — в пределах прав подключённого токена."
        },
        {
          "q": "Это то же, что Т-Банк Бизнес?",
          "a": "Нет. Т-Инвестиции — брокерский счёт: бумаги, котировки и заявки. Расчётный счёт, выписка и платёжные поручения живут в отдельном коннекторе Т-Банк Бизнес."
        },
        {
          "q": "Может ли агент выставить заявку?",
          "a": "Только если вы выпустили токен с full-access — на read-only токене API заявку не примет. Такие действия агент подтверждает с вами перед отправкой на биржу."
        }
      ]
    },
    "seo_en": {
      "headline": "Break down your T-Investments portfolio and quotes in chat",
      "scenarios": [
        {
          "title": "Portfolio composition",
          "desc": "The agent shows the portfolio across all brokerage accounts: which securities you hold, in what proportions and what they are worth right now."
        },
        {
          "title": "Quotes and dynamics",
          "desc": "The agent collects quotes and candles for the securities you need and works out how your position moved over the chosen period."
        },
        {
          "title": "Finding an instrument",
          "desc": "The agent finds an instrument by ticker, name or ISIN and shows its parameters, so you do not have to look the security up in the app."
        },
        {
          "title": "Portfolio summary",
          "desc": "The agent sends a summary on a schedule: portfolio value, returns and notable moves over the trading day."
        },
        {
          "title": "Orders still sitting open",
          "desc": "The agent walks every account, collects the placed orders and shows what is still unfilled — which instrument, in what size and at what price."
        },
        {
          "title": "An order only on confirmation",
          "desc": "The agent prepares an order, names the instrument, size and price and sends it to the exchange only after your yes — and on a read-only token it says upfront that rights fall short."
        }
      ],
      "how_it_works": [
        "The agent calls the T-Invest API at invest-public-api.tinkoff.ru/rest and reads four domains: brokerage accounts and portfolio composition, quotes and candles for instruments, the securities reference with search by ticker, name and ISIN, and placed orders. Its first request fetches the list of accounts — without it there is no telling which portfolio to count, and one token can cover several accounts.",
        "REST here is a wrapper over a gRPC contract: every call is a POST to a method name of the form UsersService/GetAccounts, parameters travel in the body, and the usual query strings do not exist. The portfolio comes back per account rather than as one pile, so the agent assembles the how-much-in-total summary itself, walking the accounts and adding up positions. The value in the response is the current market valuation, a snapshot at request time rather than a fixed end-of-day total.",
        "On reading the agent is self-sufficient, on actions it is not. It places orders only if the token was issued with full access: on a read-only token the API simply will not accept them, and the agent names the reason instead of pretending it sent something. Before anything goes to the exchange it confirms the action with you separately. There is no current account, statement or payment order here — this is a brokerage account, and banking operations live in the T-Bank Business connector.",
        "Access rests on a single T-Invest API token, and every request goes out in its name. The token lives three months from the last use — after idling the API answers with error 40003, and the agent names that reason instead of showing an empty table. Limits differ per method: reference books and quotes are generous, account operations are stricter, so history over a long period is requested in windows at around two and a half calls per second."
      ],
      "requirements": [
        "Access to the web version — the mobile app cannot issue tokens",
        "Full access if the agent must place orders; read-only otherwise"
      ],
      "faq": [
        {
          "q": "How do I connect T-Investments?",
          "a": "With a T-Invest API token: it is issued only in the web version, in profile settings at tbank.ru/invest/settings. Read-only mode is enough for the portfolio and quotes, while full access is needed for orders. The value is shown once and lives for three months from the last use."
        },
        {
          "q": "What does the agent see in T-Investments?",
          "a": "Brokerage accounts and portfolio composition, quotes and candles for instruments, the securities reference and placed orders — within the rights of the connected token."
        },
        {
          "q": "Is this the same as T-Bank Business?",
          "a": "No. T-Investments is a brokerage account: securities, quotes and orders. The current account, statements and payment orders live in the separate T-Bank Business connector."
        },
        {
          "q": "Can the agent place an order?",
          "a": "Only if you issued a token with full access — the API will not accept an order on a read-only token. The agent confirms such actions with you before sending them to the exchange."
        }
      ]
    }
  },
  {
    "key": "tochka",
    "name": "Точка Банк",
    "description": "Банковский API — счета, выписки, платежи, СБП",
    "category": "banks",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "short_name": "Точка",
    "seo": {
      "headline": "Следите за движением денег по счетам Точки прямо в чате",
      "scenarios": [
        {
          "title": "Движение денег за день",
          "desc": "Агент соберёт поступления, списания и остатки по счетам Точки и пришлёт короткую сводку каждое утро."
        },
        {
          "title": "Сверка банка с учётом",
          "desc": "Агент сверит выписку Точки с проводками 1С за период и покажет расхождения по суммам и контрагентам."
        },
        {
          "title": "Поиск дублей и лишних списаний",
          "desc": "Агент проверит платежи за месяц, найдёт задвоенные оплаты и забытые подписки."
        },
        {
          "title": "Платёжный календарь на неделю",
          "desc": "Агент сведёт обязательные платежи и ожидаемые поступления и предупредит о кассовом разрыве заранее."
        },
        {
          "title": "Поступления по СБП",
          "desc": "Агент поднимет операции СБП за период, разложит их по счетам и покажет, сколько пришло быстрыми платежами и в какие дни поток проседал."
        },
        {
          "title": "История по контрагенту",
          "desc": "Агент обойдёт счета, соберёт операции с контрагентом за квартал и покажет суммы и даты — сверит по реквизитам, а не по тому, как имя написал плательщик."
        }
      ],
      "how_it_works": [
        "Агент работает с открытым банковским API Точки на enter.tochka.com/uapi: список счетов и остатки, выписки и операции за период, платежи и СБП. Из этого он считает утреннюю сводку по движению денег, ищет задвоенные оплаты и забытые подписки за месяц и строит платёжный календарь, где обязательные списания сведены с ожидаемыми поступлениями, чтобы кассовый разрыв был виден заранее, а не в день нехватки.",
        "Данные в Open Banking разложены по счетам: выписка запрашивается по конкретному счёту за конкретный период, поэтому агент сначала перечисляет счета организации, а затем обходит каждый — общая картина «по всем счетам» собирается на нашей стороне, готовой она не приходит. Имя контрагента в выписке — это то, как его написал плательщик, поэтому при сверке с учётом агент опирается на сумму, дату и реквизиты, а строку названия использует как подсказку.",
        "Деньгами агент не распоряжается: подпись платежей остаётся на стороне банка, и вывести средства он не может по устройству доступа, а не по договорённости. Он показывает дубли и лишние списания, но не отменяет их сам; он сверяет выписку Точки с проводками 1С и выкладывает расхождения по суммам и контрагентам, оставляя решение за вами. Всё, что меняет остаток, заканчивается вашим подтверждением в интернет-банке.",
        "Выписку API отдаёт постранично и с небольшой задержкой после проводки, поэтому утреннюю сводку агент собирает по закрытому предыдущему дню, а не по текущему часу. Права на счета и выписки зашиты в сам ключ, и при их нехватке приходит «Forbidden by consent» — эту причину агент называет прямо, а не списывает пустоту на отсутствие операций. Срок доступа фиксируется при выпуске, refresh-токена в схеме нет."
      ],
      "requirements": [
        "Доступ в интернет-банк Точки под пользователем с правом на интеграции",
        "Телефон для смс-подтверждения под рукой",
        "Подпись платежей остаётся в банке: вывести деньги агент не может"
      ],
      "faq": [
        {
          "q": "Как подключить Точку?",
          "a": "JWT-токеном из кабинета Точка Банка (раздел API). Токен хранится в зашифрованном виде и отзывается в кабинете банка в любой момент."
        },
        {
          "q": "Какие операции доступны агенту?",
          "a": "Счета, выписки, операции и СБП — в рамках прав токена. Для аналитики достаточно прав на чтение выписок."
        },
        {
          "q": "Насколько это безопасно?",
          "a": "Токен шифруется при хранении (AES-256/ГОСТ), передача — TLS 1.3, серверы в РФ, 152-ФЗ. Агент не может вывести деньги: подпись платежей остаётся на стороне банка."
        }
      ]
    },
    "seo_en": {
      "headline": "Follow the daily cash movement on Tochka accounts in chat",
      "scenarios": [
        {
          "title": "Daily cash movement",
          "desc": "The agent collects incoming payments, outgoing payments and balances across Tochka accounts and sends a short summary every morning."
        },
        {
          "title": "Reconciling the bank with accounting",
          "desc": "The agent matches the Tochka statement against entries in 1C for a period and shows discrepancies in amounts and counterparties."
        },
        {
          "title": "Finding duplicates and stray charges",
          "desc": "The agent checks the payments for the month and finds doubled charges and forgotten subscriptions."
        },
        {
          "title": "Payment calendar for the week",
          "desc": "The agent combines mandatory payments and expected incoming funds and warns about a cash-flow gap in advance."
        },
        {
          "title": "Incoming SBP payments",
          "desc": "The agent pulls SBP operations for a period, lays them out per account and shows how much came in through fast payments and on which days the flow dipped."
        },
        {
          "title": "History with one counterparty",
          "desc": "The agent walks the accounts, collects operations with one counterparty over the quarter and shows amounts and dates, matching by requisites rather than by the typed name."
        }
      ],
      "how_it_works": [
        "The agent works with the Tochka open banking API at enter.tochka.com/uapi: the list of accounts and balances, statements and operations for a period, payments and SBP. Out of that it builds the morning cash movement summary, looks for doubled charges and forgotten subscriptions over the month and puts together a payment calendar where mandatory charges meet expected incoming funds, so a cash-flow gap is visible in advance rather than on the day money runs short.",
        "Data in Open Banking is laid out per account: a statement is requested for a specific account over a specific period, so the agent first lists the accounts of the company and then walks each one — the picture across all accounts is assembled on our side, it does not arrive ready-made. The counterparty name in a statement is whatever the payer typed, so when reconciling against accounting the agent relies on the amount, the date and the requisites, and treats the name string as a hint.",
        "The agent does not handle money: payment signing stays on the bank side, and it cannot withdraw funds by the design of the access, not by agreement. It shows duplicates and stray charges but does not cancel them itself; it matches the Tochka statement against 1C entries and lays out discrepancies in amounts and counterparties, leaving the decision to you. Anything that changes a balance ends with your confirmation in the internet bank.",
        "Statements come back page by page and with a small delay after a transaction is posted, so the agent assembles the morning summary from the closed previous day rather than from the current hour. Account and statement permissions are baked into the key itself, and when they are missing the answer is Forbidden by consent — the agent names that reason instead of passing the emptiness off as an absence of operations. The access period is fixed at issue time and the scheme has no refresh token."
      ],
      "requirements": [
        "Access to Tochka internet bank as a user allowed to manage integrations",
        "The phone that receives the confirmation SMS at hand",
        "Payment signing stays with the bank: the agent cannot move money"
      ],
      "faq": [
        {
          "q": "How do I connect Tochka?",
          "a": "With a JWT token from the Tochka Bank cabinet (the API section). The token is stored encrypted and can be revoked in the bank cabinet at any moment."
        },
        {
          "q": "Which operations are available to the agent?",
          "a": "Accounts, statements, operations and SBP — within the token rights. Read access to statements is enough for analytics."
        },
        {
          "q": "How safe is this?",
          "a": "The token is encrypted at rest (AES-256/GOST), transfer runs over TLS 1.3, servers are in Russia, compliant with Federal Law 152-FZ. The agent cannot withdraw money: payment signing stays on the bank side."
        }
      ]
    }
  },
  {
    "key": "twitter",
    "name": "Twitter (X)",
    "description": "Twitter (X) — поиск твитов, упоминания, ответы, профили, подписчики, тренды, листы, Spaces. Работает через twitterapi.io: один API-ключ, без OAuth.",
    "category": "messengers",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "short_name": "X (Twitter)",
    "seo": {
      "headline": "Отслеживайте упоминания бренда в X без аккаунта разработчика",
      "scenarios": [
        {
          "title": "Упоминания бренда за сутки",
          "desc": "Агент соберёт упоминания вашего бренда в X за нужное окно и покажет, на какие из них стоит ответить первыми."
        },
        {
          "title": "Разбор аккаунта конкурента",
          "desc": "Агент посмотрит профиль конкурента: подписчиков, частоту постинга и то, какие твиты и ответы собрали заметный отклик."
        },
        {
          "title": "Тред и реакции на твит",
          "desc": "Агент развернёт тред целиком, соберёт реплаи и цитаты за нужное окно и покажет, как аудитория отреагировала на пост."
        },
        {
          "title": "Тренды и тематические списки",
          "desc": "Агент покажет актуальные тренды по региону и таймлайн нужного списка или сообщества, чтобы не листать ленту вручную."
        },
        {
          "title": "Кто пишет о вашей теме",
          "desc": "Агент прогонит расширенный поиск по ключевым словам за нужное окно и покажет, какие аккаунты обсуждают тему и чьи посты собрали заметный отклик."
        },
        {
          "title": "Портрет подписчиков аккаунта",
          "desc": "Агент поднимет список подписчиков профиля и покажет, кто из них заметен по размеру аудитории и о чём пишет, — чтобы понимать, кто вас читает."
        }
      ],
      "how_it_works": [
        "Агент ходит в X через twitterapi.io: профиль и подписчики аккаунта, его последние твиты, расширенный поиск по запросу и временному окну, а дальше — упоминания, реплаи, цитаты и треды целиком, тренды по регионам, листы, сообщества и метаданные Spaces. На этой основе он собирает мониторинг бренда за сутки, разбирает аккаунт конкурента по частоте постинга и отклику и показывает, на какие упоминания стоит ответить первыми.",
        "Ключевая особенность этого пути — доступ идёт не через аккаунт X Developer, а через сторонний сервис-посредник с одним ключом, поэтому одобрения заявки ждать не нужно, но и видно ровно то, что публично. Личных сообщений, приватных аккаунтов и внутренней аналитики вашего профиля здесь нет. Полнота выборки задаётся запросом и окном поиска: агент формулирует их явно и говорит, за какой период посчитал, а не выдаёт срез за случайный интервал.",
        "Пишущих действий у этой интеграции нет вообще: она работает только на чтение. Агент не публикует твиты, не отвечает и не ставит реакции от вашего имени — подготовленный ответ он отдаёт вам текстом, а разместить его вы решаете сами. Это ограничение источника, а не настройка прав: включить запись выдачей дополнительного доступа нельзя, поэтому и риска случайного действия в вашем аккаунте здесь не возникает.",
        "Оплата здесь поэлементная, без месячной подписки: счёт растёт с каждой тысячей прочитанных твитов и профилей, поэтому объём выборки — это прямые деньги. Из-за этого агент не выгребает ленту подряд: он сужает запрос и окно поиска, забирает профили пачкой вместо запроса на каждого автора и переиспользует уже поднятые треды. Частоту запросов он выдерживает сам, а если данных нет из-за баланса или ключа, скажет об этом прямо, а не покажет пустой список."
      ],
      "requirements": [
        "Способ оплаты для пополнения баланса — подписки здесь нет",
        "Интеграция только на чтение: публикация твитов недоступна"
      ],
      "faq": [
        {
          "q": "Как подключить Twitter (X)?",
          "a": "Одним ключом API от twitterapi.io: зарегистрируйтесь по почте, откройте «Dashboard» и скопируйте ключ с главной страницы. Аккаунт X Developer и одобрение заявки не нужны, отдельного секрета к ключу нет."
        },
        {
          "q": "Что агент видит в X?",
          "a": "Публичные данные: профили и подписчиков, твиты аккаунта, упоминания, реплаи, цитаты и треды, тренды по регионам, листы, сообщества и метаданные Spaces."
        },
        {
          "q": "Пишет ли агент в X?",
          "a": "Нет. Интеграция работает только на чтение: агент собирает и разбирает публичные данные, но не публикует твиты и не отвечает от вашего имени."
        },
        {
          "q": "Как оплачивается доступ?",
          "a": "Поэлементно, без месячной подписки: тарификация идёт за тысячу твитов и за тысячу профилей. Стартовых кредитов хватает на пробу, для регулярного мониторинга баланс нужно пополнить."
        }
      ]
    },
    "seo_en": {
      "headline": "Track brand mentions on X without a developer account",
      "scenarios": [
        {
          "title": "Brand mentions over the past day",
          "desc": "The agent gathers mentions of your brand on X for the window you need and shows which ones deserve a reply first."
        },
        {
          "title": "Breakdown of a competitor account",
          "desc": "The agent looks through a competitor profile: followers, posting cadence and which tweets and replies drew real engagement."
        },
        {
          "title": "Thread and reactions to a tweet",
          "desc": "The agent unrolls the whole thread, collects replies and quotes for the window you need and shows how the audience reacted to the post."
        },
        {
          "title": "Trends and topical lists",
          "desc": "The agent surfaces current trends for a region and the timeline of the list or community you care about, so nobody scrolls the feed by hand."
        },
        {
          "title": "Who is talking about your topic",
          "desc": "The agent runs an advanced search on your keywords for the window you need and shows which accounts discuss the topic and whose posts drew real engagement."
        },
        {
          "title": "A portrait of the followers",
          "desc": "The agent pulls the follower list of a profile and shows which of them stand out by audience size and what they post about, so you know who is reading you."
        }
      ],
      "how_it_works": [
        "The agent reaches X through twitterapi.io: an account profile and its followers, its latest tweets, an advanced search by query and time window, and from there mentions, replies, quotes and whole threads, trends by region, lists, communities and Spaces metadata. On that basis it assembles a day of brand monitoring, breaks a competitor account down by posting cadence and engagement, and shows which mentions deserve a reply first.",
        "The key specific of this route is that access runs not through an X Developer account but through a third-party intermediary with a single key, so there is no application approval to wait for — and equally, only what is public is visible. Direct messages, private accounts and the internal analytics of your own profile are not here. How complete a sample is depends on the query and the search window: the agent states them explicitly and says which period it counted, rather than handing over a slice of some random interval.",
        "This integration has no write actions at all: it is read-only. The agent does not publish tweets, does not reply and does not react on your behalf — a drafted reply comes back to you as text, and posting it is your decision. That is a limit of the source, not a permissions setting: writing cannot be switched on by granting extra access, so no accidental action in your account can arise here either.",
        "Billing here is per item with no monthly subscription: the bill grows with every thousand tweets and profiles read, so the size of a sample is money spent directly. Because of that the agent does not sweep the feed row by row: it narrows the query and the search window, fetches profiles in batches instead of one call per author, and reuses threads it has already pulled. It holds the request rate itself, and if data is missing because of the balance or the key, it says so directly instead of showing an empty list."
      ],
      "requirements": [
        "A payment method to top up the balance — there is no plan",
        "Read-only integration: publishing tweets is not available"
      ],
      "faq": [
        {
          "q": "How do I connect Twitter (X)?",
          "a": "With a single twitterapi.io API key: sign up with your email, open Dashboard and copy the key from the main page. No X Developer account and no application approval are required, and the key has no separate secret."
        },
        {
          "q": "What does the agent see on X?",
          "a": "Public data: profiles and followers, tweets from an account, mentions, replies, quotes and threads, trends by region, lists, communities and Spaces metadata."
        },
        {
          "q": "Does the agent post to X?",
          "a": "No. The integration is read-only: the agent collects and analyses public data, but it does not publish tweets and does not reply on your behalf."
        },
        {
          "q": "How is access billed?",
          "a": "Per item, with no monthly subscription: pricing is charged per thousand tweets and per thousand profiles. Starter credits are enough to try it out, and regular monitoring needs a topped-up balance."
        }
      ]
    }
  },
  {
    "key": "unisender",
    "name": "Unisender",
    "description": "Email/SMS-рассылки — списки контактов, шаблоны, кампании, статистика",
    "category": "ads",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Держите списки и кампании Unisender в порядке из чата",
      "scenarios": [
        {
          "title": "Списки и контакты в порядке",
          "desc": "Агент соберёт все списки рассылки, покажет число контактов в каждом и найдёт, где копятся отписки и невалидные адреса."
        },
        {
          "title": "Разбор кампаний по кликам",
          "desc": "Агент разложит последние кампании по доставке, открытиям и переходам по ссылкам и назовёт письма, которые просели против обычного."
        },
        {
          "title": "Email- и SMS-рассылка",
          "desc": "Агент соберёт письмо из шаблона, проверит его тестовой отправкой и запустит кампанию по выбранному списку или отправит SMS."
        },
        {
          "title": "Регулярная сводка по базе",
          "desc": "Агент пришлёт по расписанию сводку по email- и SMS-рассылкам и приросту контактов, чтобы не заходить в кабинет за цифрами."
        },
        {
          "title": "Чистка базы перед отправкой",
          "desc": "Агент исключит из списка отписавшихся и невалидные адреса и назовёт реальное число адресатов — до того, как вы подтвердите отправку."
        },
        {
          "title": "Сегмент под конкретное письмо",
          "desc": "Агент разложит контакты по тегам и дополнительным полям и соберёт из них отдельный список — например, только клиентов из одного города."
        }
      ],
      "how_it_works": [
        "Агент работает с Unisender через https://api.unisender.com/ru/api, где каждый вызов — это имя метода, а ключ уходит параметром запроса. Читает он списки рассылки и контакты с их полями и тегами, письма и шаблоны, кампании и статистику доставок, открытий, переходов и отписок. Из этого собираются разбор кампании по кликам, картина по спискам и регулярная сводка по приросту базы за период.",
        "Часть данных Unisender считает не сразу: экспорт контактов и статистику доставки он ставит в очередь и возвращает идентификатор задачи, а не готовый ответ. Агент опрашивает такую задачу до готовности и показывает уже посчитанные цифры, а не полупустую выгрузку. Вторая тонкость — размер списка: отписавшиеся и невалидные адреса остаются в нём со своим статусом, поэтому число контактов и число реальных адресатов у вас не совпадут, и агент разделяет их явно.",
        "На запись агент заводит списки и дополнительные поля, подписывает и исключает контакты, собирает письма из шаблонов и готовит кампании. Массовую отправку он не запускает сам: сначала тестовая отправка на проверку, затем ваше подтверждение с названным списком и числом адресатов — и только потом старт кампании. Транзакционные письма и SMS уходят тем же порядком, а результат агент перечитывает после отправки.",
        "Ключ один на аккаунт и не делится по разделам, поэтому агент видит весь кабинет — узкий доступ здесь выдать нельзя, а отзывается он только перевыпуском ключа. Уходит ключ параметром каждого запроса, так что перевыпуск обрывает доступ мгновенно, и агент скажет об этом, а не вернёт молча ноль. Контакты и статистику Unisender отдаёт порциями, и длинную выборку агент дочитывает до конца сам. Частоту он держит в пределах десяти запросов в секунду, а при нехватке данных или прав говорит об этом прямо."
      ],
      "requirements": [
        "Аккаунт на app.unisender.com с доступом в «Настройки».",
        "Пароль от учётной записи — им подтверждается показ ключа."
      ],
      "faq": [
        {
          "q": "Как подключить Unisender?",
          "a": "API-ключом из кабинета: клик по своему email → «Настройки» → вкладка «Интеграция и API», в разделе «Доступ к API» нажмите «Включить», затем «Показать полностью» и подтвердите пароль учётной записи. Логин — необязательное поле, это тот же email."
        },
        {
          "q": "Что агент видит в Unisender?",
          "a": "Списки рассылки и контакты с их полями и тегами, письма и шаблоны, кампании и статистику доставок, открытий, переходов и отписок."
        },
        {
          "q": "Пишет ли агент в Unisender?",
          "a": "Может: заводить списки и поля, подписывать и исключать контакты, собирать письма и кампании, отправлять транзакционные письма и SMS. Массовую отправку агент запускает только по вашему подтверждению."
        },
        {
          "q": "Почему выгрузка возвращается не сразу?",
          "a": "Экспорт контактов и статистику доставки Unisender считает в фоне и отдаёт идентификатор задачи. Агент опрашивает результат до готовности и показывает уже готовые данные."
        }
      ]
    },
    "seo_en": {
      "headline": "Keep Unisender lists and campaigns in order from the chat",
      "scenarios": [
        {
          "title": "Lists and contacts in order",
          "desc": "The agent pulls every mailing list, shows how many contacts each one holds and finds where unsubscribes and invalid addresses are piling up."
        },
        {
          "title": "Campaign breakdown by clicks",
          "desc": "The agent breaks recent campaigns down by delivery, opens and link clicks and names the emails that came in below their usual numbers."
        },
        {
          "title": "Email and SMS campaigns",
          "desc": "The agent builds an email from a template, checks it with a test send and launches the campaign to the list you choose, or sends an SMS."
        },
        {
          "title": "Regular summary on the base",
          "desc": "The agent sends a scheduled summary of email and SMS campaigns and contact growth, so nobody has to open the account for the numbers."
        },
        {
          "title": "Cleaning the base before a send",
          "desc": "The agent excludes unsubscribed and invalid addresses from a list and names the real number of recipients before you confirm the send."
        },
        {
          "title": "A segment for one email",
          "desc": "The agent sorts contacts by their tags and additional fields and gathers them into a separate list — say, only the customers from a single city."
        }
      ],
      "how_it_works": [
        "The agent works with Unisender through https://api.unisender.com/ru/api, where every call is a method name and the key travels as a request parameter. It reads mailing lists and contacts with their fields and tags, emails and templates, campaigns and statistics on deliveries, opens, clicks and unsubscribes. Out of that come the campaign breakdown by clicks, the picture across lists and the regular summary of how the base grew over a period.",
        "Some of the data Unisender does not compute on the spot: contact exports and delivery statistics are queued and return a task identifier instead of a ready answer. The agent polls such a task until it is done and shows the finished figures rather than a half-empty export. The second subtlety is list size: unsubscribed and invalid addresses stay in the list with their own status, so the contact count and the count of real recipients will not match, and the agent separates them explicitly.",
        "On the write side the agent creates lists and additional fields, subscribes and excludes contacts, assembles emails from templates and prepares campaigns. Bulk sending it never launches on its own: first a test send for review, then your confirmation with the list and the number of recipients named — and only then the campaign starts. Transactional emails and SMS follow the same order, and the agent re-reads the result after the send.",
        "The key is one per account and is not split by section, so the agent sees the whole account — narrow access cannot be granted here, and the only way to revoke it is to reissue the key. The key travels as a parameter of every request, so a reissue cuts access off instantly and the agent says so rather than quietly returning zero. Contacts and statistics come back from Unisender in portions, and a long selection is read to the end by the agent itself. It holds the rate within ten requests per second, and when data or permissions fall short it says so directly."
      ],
      "requirements": [
        "An account at app.unisender.com with access to Settings.",
        "The account password — it confirms revealing the key."
      ],
      "faq": [
        {
          "q": "How do I connect Unisender?",
          "a": "With an API key from your account: click your email, go to Settings, open the Integration and API tab, press Enable in the API access section, then press Show in full and confirm your account password. Login is an optional field and is the same email."
        },
        {
          "q": "What does the agent see in Unisender?",
          "a": "Mailing lists and contacts with their fields and tags, emails and templates, campaigns and statistics on deliveries, opens, clicks and unsubscribes."
        },
        {
          "q": "Does the agent write to Unisender?",
          "a": "It can: create lists and fields, subscribe and exclude contacts, assemble emails and campaigns, send transactional emails and SMS. Bulk sending is launched only once you confirm it."
        },
        {
          "q": "Why does an export not come back right away?",
          "a": "Unisender computes contact exports and delivery statistics in the background and returns a task identifier. The agent polls the result until it is ready and shows you the finished data."
        }
      ]
    }
  },
  {
    "key": "uzum_market",
    "name": "Uzum Market Seller API",
    "description": "Управление товарами, заказами, остатками и финансами на маркетплейсе Uzum Market",
    "category": "marketplaces",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Разбирайте продажи и остатки магазина на Uzum Market",
      "scenarios": [
        {
          "title": "Сводка продаж на Uzum",
          "desc": "Агент соберёт заказы и выручку по товарам за период и покажет динамику продаж магазина на Uzum Market."
        },
        {
          "title": "Контроль остатков",
          "desc": "Агент проверит остатки по складам, найдёт товары на грани out-of-stock и подготовит список к пополнению."
        },
        {
          "title": "Финансовая сверка",
          "desc": "Агент сверит начисления и выплаты маркетплейса с продажами и покажет, где комиссия съедает маржу."
        },
        {
          "title": "Откуда идут возвраты",
          "desc": "Агент соберёт возвраты за период, разложит их по товарам и покажет, какие позиции возвращают чаще прочих и сколько это забирает из уже посчитанной выручки."
        },
        {
          "title": "Накладные перед отгрузкой",
          "desc": "Агент пройдёт по накладным FBS, покажет состав каждой и заказы, которые в неё вошли, чтобы к отгрузке не потерялась ни одна позиция."
        },
        {
          "title": "Каждая витрина отдельно",
          "desc": "Агент пройдёт по всем магазинам токена и сведёт заказы, остатки и расходы по каждому порознь, подписав цифры именем витрины."
        }
      ],
      "how_it_works": [
        "Агент работает через Seller Open API Uzum Market: читает товары магазина, заказы FBS и накладные по ним, остатки по SKU, возвраты и финансовый контур — начисления по заказам и расходы. Из этого он собирает выручку за период с разбивкой по товарам, находит позиции на грани out-of-stock и показывает, сколько от продажи остаётся после комиссий и удержаний маркетплейса.",
        "Всё на Uzum привязано к магазину: под одним токеном продавца их может быть несколько, и почти каждый запрос идёт в контексте конкретного магазина. Поэтому агент начинает со списка магазинов, дальше держит нужный и не смешивает цифры соседних витрин в одной сводке. Разделы API живут в разных версиях — заказы, остатки и накладные обновлялись независимо, — и агент обращается к актуальной для каждого.",
        "Финансовая правда здесь складывается из двух источников: начисления по заказам и расходы лежат порознь, и выручка по заказам — ещё не то, что дойдёт до счёта. Агент берёт оба раздела и отдельно вычитает возвраты, которые уменьшают уже посчитанную продажу. Основная его работа по Uzum — счётная и на чтение; там, где нужно поправить остаток или заказ, он показывает изменение до отправки и перечитывает результат после.",
        "Токен продавца агент подставляет в каждый запрос как есть, без префикса, и держит один на все разделы; отозванный в кабинете токен перестаёт работать в тот же момент, и агент скажет об этом сразу, а не после половины отчёта. Длинные списки заказов и остатков Uzum отдаёт страницами, поэтому период агент проходит постранично и складывает итог сам. Сводку он подписывает именем магазина, чтобы не перепутать витрины, а если раздел пуст, говорит об этом прямо, а не показывает пустую таблицу."
      ],
      "requirements": [
        "Аккаунт продавца Uzum Market с хотя бы одним активным магазином",
        "Права на настройки кабинета — сотруднику без них токен не выпустить",
        "Доступ к разделам товаров, заказов, остатков и финансов"
      ],
      "faq": [
        {
          "q": "Как подключить Uzum Market?",
          "a": "API-токеном продавца Uzum Market. Токен вводится один раз, хранится в зашифрованном виде и может быть отозван в кабинете."
        },
        {
          "q": "Что агент умеет по Uzum?",
          "a": "Читать товары, заказы, остатки и финансы Seller API: собирать отчёты по продажам, контролировать остатки, сверять выплаты."
        },
        {
          "q": "Можно ли получать отчёты регулярно?",
          "a": "Да — агент работает по расписанию: например, каждое утро присылает сводку заказов и остатков в Telegram."
        }
      ]
    },
    "seo_en": {
      "headline": "Break down sales and stock for your Uzum Market store",
      "scenarios": [
        {
          "title": "Sales summary on Uzum",
          "desc": "The agent pulls orders and revenue by product for a period and shows how sales in your Uzum Market store are trending."
        },
        {
          "title": "Stock control",
          "desc": "The agent checks stock across warehouses, finds products on the edge of going out of stock and prepares a restock list."
        },
        {
          "title": "Financial reconciliation",
          "desc": "The agent reconciles marketplace charges and payouts against sales and shows where commission is eating your margin."
        },
        {
          "title": "Where the returns come from",
          "desc": "The agent collects returns for a period, breaks them down by product and shows which positions come back most often and how much that takes off the revenue already counted."
        },
        {
          "title": "Invoices before the shipment",
          "desc": "The agent goes through the FBS invoices, shows what each one holds and which orders went into it, so nothing gets lost on the way to the shipment."
        },
        {
          "title": "Every storefront on its own",
          "desc": "The agent walks all the stores under the token and puts orders, stock and expenses together for each one apart, signing the figures with the store name."
        }
      ],
      "how_it_works": [
        "The agent works through the Uzum Market Seller Open API: it reads the store's products, FBS orders and the invoices behind them, stock by SKU, returns and the finance side — charges on orders and expenses. Out of that it assembles revenue for a period broken down by product, finds the positions on the edge of going out of stock and shows how much of a sale is left after the marketplace commissions and deductions.",
        "Everything on Uzum is tied to a store: a single seller token may cover several of them, and almost every request runs in the context of one particular store. So the agent starts with the list of stores, then holds on to the right one and never mixes the figures of neighbouring storefronts into one summary. API sections live in different versions — orders, stock and invoices evolved independently — and the agent calls the current one for each.",
        "The financial truth here comes from two sources: charges on orders and expenses sit apart, and revenue on orders is not yet what reaches your account. The agent takes both sections and separately subtracts returns, which reduce a sale already counted. Its main work on Uzum is arithmetic and read-oriented; where a stock figure or an order has to be changed, it shows the change before sending and re-reads the result afterwards.",
        "The agent puts the seller token into every request as it is, with no prefix, and keeps one for all sections; a token revoked in the cabinet stops working at that very moment, and the agent says so at once rather than halfway through a report. Uzum hands out long lists of orders and stock in pages, so the agent walks the period page by page and adds the total up itself. It signs a summary with the store name so storefronts do not get confused, and if a section is empty it says so directly instead of showing an empty table."
      ],
      "requirements": [
        "A Uzum Market seller account with at least one active shop",
        "Rights to the cabinet settings — staff without them cannot issue a token",
        "Access to the products, orders, stock and finance sections"
      ],
      "faq": [
        {
          "q": "How do I connect Uzum Market?",
          "a": "With an Uzum Market seller API token. The token is entered once, stored encrypted and can be revoked in your seller account."
        },
        {
          "q": "What can the agent do with Uzum?",
          "a": "Read products, orders, stock and finances through the Seller API: build sales reports, keep an eye on stock, reconcile payouts."
        },
        {
          "q": "Can I get reports on a regular basis?",
          "a": "Yes, the agent works on a schedule: for example, it can send an orders and stock summary to Telegram every morning."
        }
      ]
    }
  },
  {
    "key": "vk_ads",
    "name": "VK Реклама",
    "description": "Рекламный кабинет VK Рекламы — кампании, объявления, таргетинг, аудитории и статистика",
    "category": "ads",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Считайте расход и CTR кампаний VK Рекламы без выгрузок",
      "scenarios": [
        {
          "title": "Расход и CTR по кампаниям",
          "desc": "Агент сведёт статистику кампаний и объявлений — показы, клики, CTR и расход — за нужный период, без ручной выгрузки отчётов из кабинета."
        },
        {
          "title": "Остаток бюджета кабинета",
          "desc": "Агент покажет остаток на счёте кабинета и темп открутки и предупредит, что реклама встанет раньше, чем закончится неделя."
        },
        {
          "title": "Сравнение объявлений между собой",
          "desc": "Агент разложит объявления внутри кампании по цене клика и CTR и покажет, какие креативы тянут результат вниз."
        },
        {
          "title": "Ежедневная сводка по кабинету",
          "desc": "Агент пришлёт в чат сводку за вчера по кампаниям VK Рекламы: расход, клики и заметные отклонения от привычных значений."
        },
        {
          "title": "Аудитория, которая кликает",
          "desc": "Агент снимет дневную статистику по аудитории и покажет, какие сегменты дают клики дешевле, а на каких расход уходит впустую."
        },
        {
          "title": "Группы внутри кампании",
          "desc": "Агент разложит кампанию по группам объявлений, поставит рядом настройки таргетинга и расход и покажет, какая группа съедает бюджет."
        }
      ],
      "how_it_works": [
        "Агент ходит в API кабинета на ads.vk.ru и читает три уровня структуры: кампании в /api/v2/ad_plans.json, группы в /api/v2/ad_groups.json и объявления в /api/v2/banners.json, а цифры снимает из дневной статистики /api/v2/statistics по каждому из этих уровней и по аудитории. Из этого он считает показы, клики, CTR, цену клика и расход за период и сравнивает объявления внутри кампании между собой.",
        "У ВКонтакте два разных рекламных API, и это главная путаница: старый кабинет на api.vk.com с методами вида ads.getStatistics на ads.vk.ru просто не существует — хост отвечает HTML-страницей с ошибкой 404. Агент это знает и не подбирает соседние пути вслепую, а сразу говорит, что нужны ключи именно из VK Рекламы. Статистика здесь дневная, поэтому сегодняшний день до его закрытия остаётся неполным, и агент называет период, за который взял цифры.",
        "По умолчанию кабинет используется на чтение: агент собирает и разбирает статистику, не трогая настройки кампаний, ставки и бюджеты — рекламные деньги откручиваются в реальном времени, и молчаливая правка ставки обходится дороже любой ошибки в отчёте. Вместо этого он предупреждает заранее: показывает остаток на счёте и темп открутки и говорит, что реклама встанет раньше, чем закончится неделя, оставляя решение вам.",
        "Access-токен агент получает по client_credentials и обновляет сам: истёкший он меняет между запросами, не теряя начатую выгрузку. Статистику он снимает окнами по датам и по уровням, поэтому отчёт за квартал собирается несколькими вызовами и сводится уже на нашей стороне. Частоту агент держит в пределах пяти запросов в секунду и о нехватке данных или прав говорит прямо, а не показывает пустую таблицу."
      ],
      "requirements": [
        "Новый кабинет VK Рекламы — ключи старого кабинета не подойдут",
        "Доступ к кабинету у сотрудника, на которого оформляется заявка",
        "Права кабинета ограничивают доступные кампании и статистику"
      ],
      "faq": [
        {
          "q": "Как подключить VK Реклама?",
          "a": "Парой client_id и client_secret: в кабинете на ads.vk.ru откройте «Настройки» → «Доступ к API» и запросите доступ. client_secret показывается только по кнопке и только 10 минут — скопируйте сразу. Access-токен сервис получает и обновляет сам."
        },
        {
          "q": "Что агент видит в VK Рекламе?",
          "a": "Рекламные кампании, группы и объявления кабинета, их настройки и статистику по показам, кликам и расходу — в пределах прав того кабинета, чьи ключи подключены."
        },
        {
          "q": "Подойдёт ли токен старого кабинета ВКонтакте?",
          "a": "Нет. Старый рекламный кабинет на api.vk.com — другой API с другими методами, его токен здесь не работает. Нужны ключи именно из кабинета VK Рекламы на ads.vk.ru."
        },
        {
          "q": "Меняет ли агент кампании?",
          "a": "По умолчанию VK Реклама используется на чтение: агент собирает и разбирает статистику, не трогая настройки кампаний, ставки и бюджеты."
        }
      ]
    },
    "seo_en": {
      "headline": "Track VK Ads campaign spend and CTR without report exports",
      "scenarios": [
        {
          "title": "Spend and CTR by campaign",
          "desc": "The agent totals campaign and ad statistics — impressions, clicks, CTR and spend — for the period you need, with no manual report exports from the account."
        },
        {
          "title": "Account budget left",
          "desc": "The agent shows the balance left on the account and the pace of spend, and warns you when ads will stop before the week is out."
        },
        {
          "title": "Ads compared against each other",
          "desc": "The agent lines up the ads inside a campaign by cost per click and CTR and shows which creatives are dragging results down."
        },
        {
          "title": "Daily account summary",
          "desc": "The agent sends yesterday in chat for your VK Ads campaigns: spend, clicks and any notable swings away from the usual numbers."
        },
        {
          "title": "The audience that clicks",
          "desc": "The agent pulls the daily audience statistics and shows which segments bring clicks cheaper and which ones are burning the spend for nothing."
        },
        {
          "title": "Ad groups inside a campaign",
          "desc": "The agent breaks a campaign down into ad groups, puts their targeting settings next to the spend and shows which group is eating the budget."
        }
      ],
      "how_it_works": [
        "The agent calls the account API at ads.vk.ru and reads three levels of the structure: campaigns from /api/v2/ad_plans.json, ad groups from /api/v2/ad_groups.json and ads from /api/v2/banners.json, taking the figures from the daily statistics at /api/v2/statistics for each of those levels and for the audience. Out of that it calculates impressions, clicks, CTR, cost per click and spend for a period, and compares the ads inside a campaign against each other.",
        "VKontakte has two different advertising APIs, and that is the main source of confusion: the old account on api.vk.com with methods like ads.getStatistics simply does not exist on ads.vk.ru — the host replies with an HTML page and a 404. The agent knows this and does not blindly try neighbouring paths; it says straight away that keys from VK Ads itself are required. Statistics here are daily, so the current day stays incomplete until it closes, and the agent names the period the figures were taken for.",
        "By default the account is used read-only: the agent collects and analyses statistics without touching campaign settings, bids or budgets — ad money is spent in real time, and a silent bid edit costs more than any error in a report. Instead it warns in advance: it shows the balance left on the account and the pace of spend and says that ads will stop before the week is out, leaving the decision to you.",
        "The agent obtains the access token itself via client_credentials and refreshes it with no manual renewal: an expired one is swapped between calls without losing the export in progress. Statistics are taken in windows by date and by level, so a quarterly report is assembled from several calls and joined on our side. The agent holds the rate within five requests per second and states any shortage of data or permissions directly instead of showing an empty table."
      ],
      "requirements": [
        "The new VK Ads cabinet — old VKontakte keys will not work here",
        "Cabinet access for the employee the request is issued to",
        "Cabinet permissions bound the campaigns and statistics available"
      ],
      "faq": [
        {
          "q": "How do I connect VK Ads?",
          "a": "With a client_id and client_secret pair: in the account at ads.vk.ru open Settings, then API access, and request access. The client_secret is shown only behind a button and only for 10 minutes, so copy it right away. The service obtains and refreshes the access token itself."
        },
        {
          "q": "What does the agent see in VK Ads?",
          "a": "The account campaigns, ad groups and ads, their settings and statistics on impressions, clicks and spend — within the permissions of the account whose keys are connected."
        },
        {
          "q": "Will a token from the old VKontakte ad account work?",
          "a": "No. The old ad account on api.vk.com is a different API with different methods, and its token does not work here. You need keys from the VK Ads account at ads.vk.ru."
        },
        {
          "q": "Does the agent change campaigns?",
          "a": "By default VK Ads is used read-only: the agent collects and analyses statistics without touching campaign settings, bids or budgets."
        }
      ]
    }
  },
  {
    "key": "vkteams",
    "name": "VK Teams",
    "description": "Корпоративный мессенджер ВКонтакте — чаты, сообщения, файлы",
    "category": "messengers",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Присылайте отчёты и напоминания в чаты VK Teams от имени бота",
      "scenarios": [
        {
          "title": "Сообщения в рабочий чат",
          "desc": "Агент напишет от имени бота прямо в чат VK Teams: отчёт, напоминание или предупреждение придут туда, где сидит команда."
        },
        {
          "title": "Состав и модерация чата",
          "desc": "Агент покажет участников, администраторов и заявки на вступление, разберёт заявки, удалит из чата и заблокирует нарушителя."
        },
        {
          "title": "Сводка по расписанию",
          "desc": "Агент пришлёт сводку в нужный чат в согласованное время и закрепит её в шапке, чтобы её не искали в переписке."
        },
        {
          "title": "Кнопки и уточняющие вопросы",
          "desc": "Агент отправит сообщение с кнопками, обработает нажатие через callback и отредактирует текст, когда ответ уже устарел."
        },
        {
          "title": "О чём говорили в чате",
          "desc": "Агент дочитает поток событий с той точки, где остановился, и соберёт пересказ: что решили, о чём спросили и какие вопросы остались без ответа."
        },
        {
          "title": "Файлы из переписки",
          "desc": "Агент соберёт файлы, которые кидали в чат за неделю, — с именем, размером и автором, — чтобы нужный документ не искали пролистыванием."
        },
        {
          "title": "Обсуждение вместо ветки в чате",
          "desc": "Агент откроет тред к нужному сообщению, отвечает в нём и покажет, кто на обсуждение подписан, — чтобы разбор одной задачи не тонул в общем потоке."
        }
      ],
      "how_it_works": [
        "Агент работает в VK Teams через бота: первым запросом читает данные самого бота, а дальше — чаты, куда его добавили. Оттуда он берёт сообщения, состав участников, администраторов и заблокированных, заявки на вступление и информацию о файлах. Этого хватает, чтобы прислать отчёт или напоминание туда, где сидит команда, и разобрать, что происходит в рабочем чате.",
        "Граница видимости здесь жёсткая: бот видит только те чаты, куда его добавили, и ничего за их пределами. Историю до момента добавления он тоже не получит — события приходят с той минуты, как бот оказался в чате, поэтому сводка за прошлый месяц по свежему чату физически не собирается. Вебхуков у VK Teams нет вовсе: новые сообщения агент забирает лентой событий, держа соединение открытым, и подхватывает разговор ровно с той точки, где остановился. Курсор здесь односторонний — отмотать ленту назад к уже прочитанному нельзя, поэтому пропустить событие агент не даёт. Пока бота в чат не добавили, он честно скажет, что чат недоступен, вместо пустой сводки.",
        "На запись агент делает много: отправляет, редактирует и удаляет сообщения, закрепляет сводку в шапке чата, шлёт сообщения с кнопками и обрабатывает нажатия через callback, отправляет файлы и голосовые, открывает обсуждения к сообщениям, меняет название, описание, правила и аватар чата, разбирает заявки на вступление, удаляет из чата и блокирует нарушителя. Добавление участников — единственное, что доступно не всем: это приватный метод, который работает только в on-premise-сборках VK Teams и только после того, как его включит системный администратор; в облаке агент скажет об этом прямо, вместо того чтобы молча не справиться. Сообщение в рабочем чате видят все, а удаление и исключение не откатить — поэтому перед такими действиями агент называет чат и текст и ждёт подтверждения.",
        "Подключение — токен бота. Он уходит параметром запроса, так что хранить его нужно как пароль, а отозвать доступ можно только пересозданием бота. Всё, что делает агент, делается от имени бота и так и подписано в чате: за сообщением видно робота, а не человека, и ответить ему можно там же. Объём модерации ограничен правами бота в конкретном чате — без прав администратора он не удалит чужое сообщение и не исключит участника, и об этой нехватке сообщает прямо, а не пробует вслепую."
      ],
      "requirements": [
        "Рабочий аккаунт VK Teams: он останется владельцем бота навсегда",
        "Права администратора в чате, куда бота будут добавлять"
      ],
      "faq": [
        {
          "q": "Как подключить VK Teams?",
          "a": "Токеном бота. В VK Teams найдите в поиске «Метабот», отправьте ему команду /newbot и имя, оканчивающееся на bot, а затем скопируйте токен из ответа. Если сообщение потерялось, помогает команда /token."
        },
        {
          "q": "Что агент видит в VK Teams?",
          "a": "Данные самого бота, чаты, куда он добавлен: сообщения, состав участников, администраторов, заблокированных и заявки на вступление, а также информацию о файлах."
        },
        {
          "q": "Пишет ли агент в VK Teams?",
          "a": "Да: отправляет, редактирует и удаляет сообщения, закрепляет их, шлёт файлы и голосовые, открывает обсуждения, меняет название, описание, правила и аватар чата, разбирает заявки на вступление и удаляет участников."
        },
        {
          "q": "Почему агент не может добавить человека в чат?",
          "a": "Добавление участников — приватный метод Bot API: он есть только в on-premise-сборках VK Teams и включается системным администратором для конкретного бота. В облачной версии метод недоступен никому, поэтому агент предупредит об этом заранее, а не после неудачной попытки."
        },
        {
          "q": "Почему бота не пускает в групповой чат?",
          "a": "По умолчанию бот живёт только в личных диалогах. Отправьте Метаботу /setjoingroups, ник бота и слово enable, а в сам чат бота добавляет его администратор."
        }
      ]
    },
    "seo_en": {
      "headline": "Post reports and reminders to VK Teams chats as a bot",
      "scenarios": [
        {
          "title": "Messages to a work chat",
          "desc": "The agent writes as the bot straight into a VK Teams chat: a report, a reminder or an alert lands where the team already sits."
        },
        {
          "title": "Chat roster and moderation",
          "desc": "The agent shows members, admins and join requests, resolves the requests, removes people from the chat and blocks anyone breaking the rules."
        },
        {
          "title": "Scheduled summary",
          "desc": "The agent sends a summary to the chat you pick at the agreed time and pins it at the top so nobody hunts for it in the thread."
        },
        {
          "title": "Buttons and follow-up questions",
          "desc": "The agent sends a message with buttons, handles the tap through a callback and edits the text once the answer is out of date."
        },
        {
          "title": "What the chat talked about",
          "desc": "The agent reads the event stream on from where it stopped and puts together a recap: what was decided, what was asked and which questions nobody answered."
        },
        {
          "title": "Files from the thread",
          "desc": "The agent gathers the files dropped into the chat over the week — with the name, the size and who posted them — so the right document is not hunted by scrolling."
        },
        {
          "title": "A discussion instead of a branch in the chat",
          "desc": "The agent opens a thread on the message that needs it, replies inside it and shows who is subscribed — so working one task out does not sink into the general stream."
        }
      ],
      "how_it_works": [
        "The agent works in VK Teams through a bot: its first request reads the bot's own data, and after that come the chats the bot has been added to. From there it takes messages, the list of members, admins and blocked users, join requests and information about files. That is enough to post a report or a reminder where the team already sits and to work out what is going on in a work chat.",
        "The visibility boundary here is hard: the bot sees only the chats it has been added to and nothing beyond them. History from before it joined is out of reach as well — events start at the minute the bot appeared in the chat, so a digest for last month in a freshly created chat simply cannot be assembled. VK Teams has no webhooks at all: new messages arrive on an event feed the agent holds open, and it picks the conversation up exactly where it stopped. The cursor there only moves forward — already-read events cannot be rewound to — so the agent never lets one slip past. Until the bot is added, it says plainly that the chat is out of reach instead of returning an empty summary.",
        "On the write side the agent does plenty: it sends, edits and deletes messages, pins a summary at the top of the chat, sends messages with buttons and handles taps through a callback, sends files and voice messages, opens threads on messages, changes the chat title, description, rules and avatar, resolves join requests, removes people from the chat and blocks anyone breaking the rules. Adding members is the one thing not available everywhere: it is a private method that works only in on-premise VK Teams builds and only once a system administrator enables it, and in the cloud the agent says so outright rather than quietly failing. A message in a work chat is seen by everyone, and deletions and removals cannot be rolled back — so before such actions the agent names the chat and the text and waits for confirmation.",
        "The connection is a bot token. It travels as a request parameter, so it has to be kept like a password, and the only way to revoke access is to recreate the bot. Everything the agent does is done as the bot and is signed that way in the chat: people see a robot behind the message, not a colleague, and can reply to it right there. How much moderation is possible depends on the bot's rights in that particular chat — without admin rights it will not delete someone else's message or remove a member, and it reports that shortfall directly instead of trying blindly."
      ],
      "requirements": [
        "A work VK Teams account: it stays the bot owner permanently",
        "Administrator rights in the chat where the bot will be added"
      ],
      "faq": [
        {
          "q": "How do I connect VK Teams?",
          "a": "With a bot token. In VK Teams search for Metabot, send it the /newbot command and a name ending in bot, then copy the token from the reply. If the message gets lost, the /token command helps."
        },
        {
          "q": "What does the agent see in VK Teams?",
          "a": "The bot own data and the chats it has been added to: messages, the list of members, admins and blocked users, join requests, and information about files."
        },
        {
          "q": "Does the agent write in VK Teams?",
          "a": "Yes: it sends, edits and deletes messages, pins them, sends files and voice messages, opens threads, changes the chat title, description, rules and avatar, resolves join requests and removes members."
        },
        {
          "q": "Why can the agent not add someone to a chat?",
          "a": "Adding members is a private Bot API method: it exists only in on-premise VK Teams builds and is switched on by a system administrator for a specific bot. In the cloud version it is available to nobody, so the agent warns you up front rather than after a failed attempt."
        },
        {
          "q": "Why is the bot not allowed into a group chat?",
          "a": "By default the bot lives only in direct messages. Send Metabot /setjoingroups, the bot nickname and the word enable, and have a chat admin add the bot to the chat itself."
        }
      ]
    }
  },
  {
    "key": "wazzup",
    "name": "Wazzup24",
    "description": "WhatsApp, Telegram, Instagram — сообщения, каналы, контакты",
    "category": "messengers",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Пишите клиентам в WhatsApp и Telegram прямо из диалога",
      "scenarios": [
        {
          "title": "Сообщение клиенту в мессенджер",
          "desc": "Агент отправит клиенту сообщение в WhatsApp, Telegram или Instagram по номеру или юзернейму — прямо из диалога, а не с телефона."
        },
        {
          "title": "Состояние подключённых каналов",
          "desc": "Агент проверит каналы и назовёт те, что отвалились: слетел QR, потеряна связь с телефоном или канал не оплачен."
        },
        {
          "title": "Неотвеченные обращения",
          "desc": "Агент соберёт неотвеченные сообщения за последние дни по всем каналам и покажет, кому из клиентов до сих пор не ответили."
        },
        {
          "title": "Шаблон вне окна 24 часов",
          "desc": "Агент отправит согласованный WABA-шаблон, когда суточное окно переписки в WhatsApp уже закрылось и обычное сообщение не дойдёт."
        },
        {
          "title": "Входящее сразу в работу",
          "desc": "Агент разберёт входящее сообщение по вебхуку, поймёт, о чём просит клиент, и передаст обращение нужному менеджеру, не дожидаясь, пока кто-то откроет кабинет."
        },
        {
          "title": "Контакты и сделки из чатов",
          "desc": "Агент найдёт в кабинете контакты без сделки и воронки, сверит их с перепиской по каналам и синхронизирует карточки, чтобы номер из чата не остался безымянным."
        }
      ],
      "how_it_works": [
        "Агент ходит в API Wazzup24 третьей версии с ключом вашего кабинета. Первым делом он читает список каналов — это и проверка ключа, и карта того, через что вообще можно писать: WhatsApp, Telegram, Instagram. Дальше в работе контакты, сделки и воронки, шаблоны сообщений, неотвеченные обращения и настроенные вебхуки — всё в пределах одного кабинета и подключённых в нём каналов.",
        "Канал в Wazzup — это живая связь с реальным аккаунтом мессенджера, и она рвётся: слетает QR, теряется связь с телефоном, канал остаётся неоплаченным. Снаружи кабинет при этом выглядит рабочим, поэтому агент сверяет состояние каналов и называет отвалившиеся по имени и причине, а не отправляет сообщения в канал, который уже ничего не доставит. Про упавший канал вы узнаёте раньше, чем клиент останется без ответа.",
        "На отправке главное ограничение ставит не Wazzup, а WhatsApp: суточное окно переписки. Пока клиент писал последние 24 часа, уходит обычное сообщение; когда окно закрылось, дойдёт только согласованный WABA-шаблон, и агент выбирает нужный вариант, а не отправляет вслепую. Он пишет по номеру или юзернейму через конкретный канал, правит отправленное и синхронизирует контакты.",
        "Ключ API открывает каналы и контакты всего кабинета, а не отдельного менеджера, — выдавать его стоит с этим пониманием. Входящие приходят вебхуком: агент разбирает сообщение сразу после доставки и не опрашивает кабинет по кругу, а если вебхук не настроен, честно скажет, что видит историю, но не новые обращения. Частоту запросов он выдерживает сам, а при отсутствии данных или прав говорит об этом прямо, а не показывает пустой список диалогов."
      ],
      "requirements": [
        "Доступ в кабинет Wazzup с правами администратора",
        "Аккаунт мессенджера для канала: WhatsApp, Telegram или Instagram",
        "Согласованный WABA-шаблон для сообщений вне суточного окна"
      ],
      "faq": [
        {
          "q": "Как подключить Wazzup24?",
          "a": "Ключом API. Подключите в кабинете хотя бы один канал, откройте «Интеграция с CRM», выберите в списке API и нажмите «Подключить» — кабинет покажет ключ из 32 символов. Позже он лежит на вкладке «Дополнительно»."
        },
        {
          "q": "Что агент видит в Wazzup24?",
          "a": "Список подключённых каналов и их состояние, контакты, сделки и воронки, шаблоны сообщений, неотвеченные обращения и настроенные вебхуки."
        },
        {
          "q": "Пишет ли агент в мессенджеры?",
          "a": "Да: отправляет и редактирует сообщения в WhatsApp, Telegram и Instagram через подключённые каналы, отправляет WABA-шаблоны и синхронизирует контакты."
        },
        {
          "q": "Что нужно сделать до подключения?",
          "a": "Подключить хотя бы один канал в разделе «Каналы». Пока ни одного канала нет, интеграцию по API в кабинете включить не получится."
        }
      ]
    },
    "seo_en": {
      "headline": "Message clients on WhatsApp and Telegram right from the chat",
      "scenarios": [
        {
          "title": "A message to a client in a messenger",
          "desc": "The agent sends a client a message on WhatsApp, Telegram or Instagram by phone number or username — right from the conversation, not from a phone."
        },
        {
          "title": "State of the connected channels",
          "desc": "The agent checks the channels and names the ones that dropped: the QR expired, the link to the phone was lost, or the channel is unpaid."
        },
        {
          "title": "Unanswered conversations",
          "desc": "The agent collects unanswered messages from the past few days across every channel and shows which clients are still waiting for a reply."
        },
        {
          "title": "A template outside the 24-hour window",
          "desc": "The agent sends an approved WABA template once the 24-hour WhatsApp conversation window has closed and a regular message would not arrive."
        },
        {
          "title": "An incoming message straight into work",
          "desc": "The agent parses an incoming message from the webhook, works out what the client is asking for and hands the conversation to the right manager without waiting for anyone to open the account."
        },
        {
          "title": "Contacts and deals out of the chats",
          "desc": "The agent finds contacts with no deal or pipeline behind them, checks them against the correspondence across channels and syncs the cards so a number from a chat does not stay nameless."
        }
      ],
      "how_it_works": [
        "The agent calls the third version of the Wazzup24 API with the key of your account. The first thing it reads is the list of channels — that is both a check of the key and a map of what can actually be written through: WhatsApp, Telegram, Instagram. From there contacts, deals and pipelines, message templates, unanswered conversations and the webhooks you set up go into the work, all within one account and the channels connected in it.",
        "A channel in Wazzup is a live link to a real messenger account, and that link breaks: the QR expires, the connection to the phone is lost, the channel goes unpaid. From the outside the account still looks fine, so the agent checks the state of the channels and names the ones that dropped, with the reason, instead of sending messages into a channel that will deliver nothing. You learn about a channel that went down before the client is left without an answer.",
        "On sending, the main restriction comes not from Wazzup but from WhatsApp: the 24-hour conversation window. While the client has written within the last 24 hours a regular message goes out; once the window is closed only an approved WABA template arrives, and the agent picks the right option rather than sending blind. It writes by phone number or username through a specific channel, edits what it sent and syncs contacts.",
        "The API key opens the channels and contacts of the whole account, not of a single manager — it is worth handing out with that in mind. Incoming messages arrive over a webhook: the agent parses a message right after delivery instead of polling the account in circles, and if no webhook is configured it says plainly that it sees the history but not new conversations. It holds the request rate itself, and when data or permissions are missing it says so directly rather than showing an empty list of dialogues."
      ],
      "requirements": [
        "Admin access to the Wazzup account",
        "A messenger account for the channel: WhatsApp, Telegram or Instagram",
        "An approved WABA template for messages outside the 24-hour window"
      ],
      "faq": [
        {
          "q": "How do I connect Wazzup24?",
          "a": "With an API key. Connect at least one channel in your account, open CRM integration, pick API from the list and press Connect — the account shows a 32-character key. Later it lives on the Advanced tab."
        },
        {
          "q": "What does the agent see in Wazzup24?",
          "a": "The list of connected channels and their state, contacts, deals and pipelines, message templates, unanswered conversations and the webhooks you have set up."
        },
        {
          "q": "Does the agent write to messengers?",
          "a": "Yes: it sends and edits messages on WhatsApp, Telegram and Instagram through the connected channels, sends WABA templates and syncs contacts."
        },
        {
          "q": "What has to be done before connecting?",
          "a": "Connect at least one channel in the Channels section. Until there is a channel, the account will not let you enable the API integration."
        }
      ]
    }
  },
  {
    "key": "wildberries",
    "name": "Wildberries API",
    "description": "Управление товарами, заказами и аналитикой на маркетплейсе Wildberries",
    "category": "marketplaces",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "short_name": "Wildberries",
    "seo": {
      "headline": "Разбирайте продажи и остатки Wildberries прямо в чате",
      "scenarios": [
        {
          "title": "Найти, где просела выручка на WB",
          "desc": "Агент сравнит продажи по неделям, разложит падение по категориям и SKU и отделит сезонность от проблем с карточкой или остатками."
        },
        {
          "title": "Разбор возвратов по причинам",
          "desc": "Агент соберёт возвраты за период, сгруппирует по причинам и артикулам и покажет, какие карточки генерируют убыток."
        },
        {
          "title": "Мониторинг отзывов и рейтинга",
          "desc": "Агент проверит новые отзывы, подготовит ответы и предупредит, если рейтинг карточки пошёл вниз."
        },
        {
          "title": "Юнит-экономика по артикулам",
          "desc": "Агент сведёт продажи, комиссии, логистику и хранение WB в одну таблицу и посчитает реальную маржу по каждому SKU."
        },
        {
          "title": "План пополнения складов",
          "desc": "Агент соберёт остатки FBS и FBW по всем складам, сопоставит их со скоростью продаж и покажет, что и в каком объёме пора отгружать, чтобы не уйти в ноль."
        },
        {
          "title": "Куда уходит рекламный бюджет",
          "desc": "Агент сложит расходы стандартных и медийных кампаний, посчитает ДРР по каждому артикулу и отметит, где реклама съедает маржу сильнее нормы."
        }
      ],
      "how_it_works": [
        "Агент подключается к Wildberries одним API-токеном и закрывает весь контур продавца: остатки FBS и FBW, реализацию, юнит-экономику, рекламу, отзывы, вопросы, чаты, цены и отгрузки. По остаткам он собирает сводку по всем складам продавца и FBW-остатки по артикулам одним вызовом, а не циклом по складам, и на этой основе строит план пополнения с учётом скорости продаж и страхового запаса. Разделы у WB разнесены по разным API — контент, статистика, аналитика, цены, отзывы, — и агент сам решает, куда идти за ответом, вместо того чтобы держать это в голове у вас.",
        "Деньги агент считает по отчёту реализации v5 — с правильной курсорной пагинацией: WB кладёт в ответ поле, похожее на курсор, но настоящий курсор — идентификатор последней строки, и агент это знает, поэтому не зацикливается и не теряет строки. Отчёт отдаётся не чаще раза в минуту, так что длинные периоды агент собирает частями и сам держит паузы, а не упирается в 429. Комиссию, логистику и хранение он берёт из того же отчёта, а не из прайса, поэтому маржа по SKU считается по фактически удержанным суммам.",
        "Юнит-экономика по каждому артикулу собирается с реальным рекламным расходом. У WB реклама живёт в двух независимых контурах — стандартные кампании в advert-api и медийная реклама в advert-media-api, — и агент опрашивает оба, иначе половина расходов просто пропала бы из отчёта. Поверх считается ДРР по SKU с уровнями тревоги и помесячный P&L по кабинету.",
        "Отзывы, вопросы и чаты покупателей агент собирает в единую ленту неотвеченного: отвечает на отзыв и на вопрос, закрепляет лучший отзыв на карточке и считает скорость вашей реакции. Раздел отзывов у WB ограничен одним запросом в секунду, поэтому длинную ленту агент разбирает порциями; о новом отзыве или вопросе он узнаёт по вебхуку, а не опросом по кругу. Ленту неотвеченного можно поставить на расписание, чтобы сводка приходила сама.",
        "Самое ценное — агент знает характер WB API. WB может ответить «успешно» на запрос с опечаткой и молча ничего не сделать, поэтому после каждой записи агент перечитывает состояние и убеждается, что изменение применилось. Обновление карточки — полная перезапись, и частичную агент не отправляет; загрузка медиа падает целиком из-за одного битого URL, поэтому ссылки проверяются заранее. Пока асинхронная загрузка карточек не завершилась (до 30 минут), агент не трогает цены и остатки — иначе изменения применятся частично. Жёсткие лимиты вроде пропуска FBS раз в 10 минут и смены привязки склада раз в сутки он учитывает при планировании. И всё, что меняет данные — цены, ставки, ответы, — сначала показывается как план и применяется только после вашего явного подтверждения."
      ],
      "requirements": [
        "Активный кабинет продавца на seller.wildberries.ru.",
        "Решение, что делает агент: только аналитика или ещё отзывы и цены.",
        "Токен хранится зашифрованным и отзывается в кабинете WB в любой момент."
      ],
      "faq": [
        {
          "q": "Какой токен нужен для подключения Wildberries?",
          "a": "API-токен из личного кабинета продавца: «Настройки → Доступ к API», выпускает владелец кабинета. Для аналитики достаточно прав на чтение категорий «Статистика», «Аналитика» и «Контент». Тип токена выбирайте «Сервисный» и найдите наш сервис в каталоге решений — категории подставятся сами: у типа «Базовый» WB с 30.03.2026 занизил лимиты запросов, и длинные отчёты собираются неделями."
        },
        {
          "q": "Токен даёт доступ ко всему кабинету?",
          "a": "Нет. WB выпускает токены с гранулярными правами по категориям — вы сами выбираете, какие разделы открыть. Токен хранится в зашифрованном виде и отзывается в кабинете WB в любой момент."
        },
        {
          "q": "Какие задачи агент делает по Wildberries чаще всего?",
          "a": "Анализ продаж и остатков, разбор возвратов, мониторинг отзывов, сверку поставок и расчёт юнит-экономики с учётом комиссий и логистики. Результат — таблица, отчёт или регулярная сводка в Telegram."
        },
        {
          "q": "Обновляются ли данные автоматически?",
          "a": "Агент запрашивает API при каждой задаче, поэтому работает с актуальными данными. Регулярные отчёты можно поставить по расписанию — агент сам соберёт и пришлёт сводку."
        }
      ]
    },
    "seo_en": {
      "headline": "Break down Wildberries sales and stock right in chat",
      "scenarios": [
        {
          "title": "Find where revenue dropped on WB",
          "desc": "The agent compares sales week over week, breaks the drop down by category and SKU and separates seasonality from problems with the listing or stock."
        },
        {
          "title": "Returns broken down by reason",
          "desc": "The agent collects returns for the period, groups them by reason and article number and shows which listings are generating losses."
        },
        {
          "title": "Review and rating monitoring",
          "desc": "The agent checks new reviews, drafts replies and warns you when a listing rating starts sliding."
        },
        {
          "title": "Unit economics by article number",
          "desc": "The agent brings WB sales, commissions, logistics and storage into a single table and computes the real margin on every SKU."
        },
        {
          "title": "Replenishment plan for the warehouses",
          "desc": "The agent pulls FBS and FBW stock across every warehouse, matches it against sales velocity and shows what to ship and in what volume before you run out."
        },
        {
          "title": "Where the ad budget goes",
          "desc": "The agent adds up standard and media campaign spend, computes the ad-cost share per article number and flags where advertising eats more margin than it should."
        }
      ],
      "how_it_works": [
        "The agent connects to Wildberries with a single API token and covers the whole seller loop: FBS and FBW stock, the sales report, unit economics, advertising, reviews, questions, chats, prices and shipments. For stock it pulls a summary across every seller warehouse and FBW balances per article number in one call rather than looping over warehouses, and builds a replenishment plan on top of it that accounts for sales velocity and safety stock. WB spreads those sections across separate APIs — content, statistics, analytics, prices, reviews — and the agent works out which one to ask instead of leaving that for you to remember.",
        "Money is counted from the v5 sales report with correct cursor pagination: WB returns a field that looks like a cursor, but the real cursor is the identifier of the last row — the agent knows this, so it neither loops forever nor drops rows. The report is served no more than once a minute, so long periods are assembled in chunks with the agent holding the pauses itself instead of running into 429s. Commission, logistics and storage are taken from that same report rather than from a price list, so SKU margin is computed on the amounts actually withheld.",
        "Unit economics per article number is assembled with the real advertising spend. On WB advertising lives in two independent loops — standard campaigns in advert-api and media advertising in advert-media-api — and the agent queries both, otherwise half of the spend would simply be missing from the report. On top of that it computes ad-cost share by SKU with alert levels and a month-by-month P&L for the account.",
        "Reviews, questions and buyer chats are collected into a single feed of unanswered items: the agent replies to a review and to a question, pins the best review on the listing and measures your response speed. The reviews section on WB is limited to one request per second, so a long feed is worked through in portions; the agent learns about a new review or question from a webhook rather than by polling in circles. The unanswered feed can be put on a schedule so the summary arrives on its own.",
        "The most valuable part is that the agent knows the character of the WB API. WB can answer «success» to a request with a typo and silently do nothing, so after every write the agent re-reads the state and confirms the change was applied. A listing update is a full overwrite, and the agent never sends a partial one; a media upload fails entirely because of a single broken URL, so links are checked in advance. While an asynchronous card upload is still running (up to 30 minutes), the agent leaves prices and stock alone — otherwise changes are applied only partially. Hard limits such as one FBS pass per 10 minutes and one warehouse rebinding per day are factored into its planning. And anything that changes data — prices, bids, replies — is first shown as a plan and applied only after your explicit confirmation."
      ],
      "requirements": [
        "An active seller account at seller.wildberries.ru.",
        "A decision on the agent's job: analytics only, or reviews and prices too.",
        "The token is stored encrypted and can be revoked in WB at any moment."
      ],
      "faq": [
        {
          "q": "Which token do I need to connect Wildberries?",
          "a": "An API token from the seller account: Settings, then API access, issued by the account owner. Read permissions for the Statistics, Analytics and Content categories are enough for analytics. Choose the Service token type and find our service in the solutions catalogue — the categories will be filled in for you: for the Basic type WB cut request limits on 30.03.2026, and long reports then take weeks to assemble."
        },
        {
          "q": "Does the token give access to the whole account?",
          "a": "No. WB issues tokens with granular permissions per category — you choose which sections to open. The token is stored encrypted and can be revoked in the WB account at any moment."
        },
        {
          "q": "Which Wildberries tasks does the agent handle most often?",
          "a": "Sales and stock analysis, returns breakdowns, review monitoring, supply reconciliation and unit economics that account for commissions and logistics. The result is a table, a report or a regular summary in Telegram."
        },
        {
          "q": "Is the data refreshed automatically?",
          "a": "The agent queries the API on every task, so it always works with current data. Regular reports can be put on a schedule and the agent will assemble and send the summary itself."
        }
      ]
    }
  },
  {
    "key": "yandex_calendar",
    "name": "Яндекс Календарь",
    "description": "Календарь и расписания Яндекс 360",
    "category": "yandex",
    "auth_flow": "device_code",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Узнавайте расписание дня по календарям Яндекс 360",
      "scenarios": [
        {
          "title": "Расписание на сегодня",
          "desc": "Агент пройдёт по календарям аккаунта и назовёт встречи на сегодня и завтра, включая календари, к которым вам выдали доступ."
        },
        {
          "title": "Встреча в свободное окно",
          "desc": "Агент найдёт свободное окно нужной длины и заведёт встречу с участниками, местом и напоминанием — или подвинет уже назначенную."
        },
        {
          "title": "Перенос и отмена встреч",
          "desc": "Агент подвинет событие на другое время, обновит список участников и удалит встречу, когда договорённость отменилась."
        },
        {
          "title": "Утренняя сводка по расписанию",
          "desc": "Агент пришлёт по расписанию сводку дня: сколько встреч назначено, где они накладываются и какие часы остались свободными."
        },
        {
          "title": "Свободные часы недели",
          "desc": "Агент пройдёт по встречам недели и покажет, какие часы остались свободными: события, помеченные как не влияющие на занятость, он в занятое время не записывает."
        },
        {
          "title": "Серия встреч по датам",
          "desc": "Агент развернёт повторяющуюся серию в конкретные даты, приведёт время к вашему часовому поясу и покажет, где она сталкивается с уже назначенным."
        }
      ],
      "how_it_works": [
        "Агент работает с расписанием по протоколу CalDAV через caldav.yandex.ru. Сначала он забирает список календарей подключённого аккаунта — личные, общие и те, к которым вам выдали доступ, — затем читает события нужного периода вместе со временем, участниками, местом и напоминаниями. На этом строится расписание на сегодня и завтра, находятся наложения встреч, считаются свободные окна нужной длины и собирается утренняя сводка дня.",
        "Календари Яндекса разнородны, и агент это учитывает: у каждого свой адрес коллекции, и события он запрашивает по одному календарю за раз, а не общим списком. CalDAV отдаёт встречу целым ics-объектом, поэтому повторяющуюся серию агент разворачивает в конкретные даты сам, а часовой пояс приводит к вашему. Событие, помеченное в календаре как не влияющее на занятость, он в занятое время не записывает.",
        "На запись агент заводит встречу в найденное свободное окно — с участниками, местом и напоминанием, — переносит событие на другое время, обновляет список приглашённых и удаляет встречу, когда договорённость отменилась. Правка ложится поверх сохранённой записи, поэтому всё, чего агент не менял, остаётся нетронутым, а если встречу тем временем поправили в самом Календаре, он остановится и перечитает её, вместо того чтобы затереть чужое изменение. Прежде чем занять слот, он сверяется с уже назначенным, а отмену и удаление подтверждает у вас: участникам уйдут уведомления, и откатить это одним движением нельзя.",
        "Доступ подтверждается кодом на странице Яндекс ID, токен вводить руками не нужно: он обновляется сам и гаснет, как только вы отзываете разрешение в аккаунте. Календарь, закрытый для записи, агент отличает от несуществующего события и говорит, что именно мешает записи, вместо общей ошибки. Частоту обращений он выдерживает сам, длинные периоды забирает окнами по датам, а при нехватке доступа говорит прямо, а не показывает пустой день."
      ],
      "requirements": [
        "Согласие на доступ ко всем календарям аккаунта разом.",
        "Аккаунт Яндекс ID с включённым Календарём."
      ],
      "faq": [
        {
          "q": "Как подключить Яндекс Календарь?",
          "a": "По коду подтверждения Яндекс ID: нажмите «Подключить», введите показанный код на странице Яндекса и подтвердите доступ тем аккаунтом, где лежат нужные календари. Токен сохраняется сам, вводить его руками не нужно."
        },
        {
          "q": "Какие календари видит агент?",
          "a": "Только те, что в панели слева на calendar.yandex.ru у подключённого аккаунта. Чужой календарь появляется там после того, как вы нажали «Принять» в письме-приглашении."
        },
        {
          "q": "Может ли агент создавать и менять встречи?",
          "a": "Да, если владелец календаря выдал в «Открыть настройки» → «Доступ» право «Редактирование содержимого календаря». С правом «Просмотр открытых событий» закрытые события агенту не видны."
        },
        {
          "q": "Почему календарь из «Подписки» не меняется?",
          "a": "Календарь, добавленный по ics-адресу в разделе «Подписки», доступен только на чтение и обновляется от нескольких часов до двух дней. Встречи, которыми управляет агент, держите в своём календаре."
        }
      ]
    },
    "seo_en": {
      "headline": "See your whole day across Yandex 360 calendars",
      "scenarios": [
        {
          "title": "Today schedule",
          "desc": "The agent walks through the account calendars and names the meetings for today and tomorrow, including calendars you were given access to."
        },
        {
          "title": "A meeting in a free slot",
          "desc": "The agent finds a free slot of the length you need and books a meeting with attendees, a location and a reminder — or moves one already scheduled."
        },
        {
          "title": "Rescheduling and cancelling meetings",
          "desc": "The agent moves an event to another time, updates the attendee list and deletes the meeting once the arrangement is called off."
        },
        {
          "title": "Morning schedule summary",
          "desc": "The agent sends a scheduled summary of the day: how many meetings are booked, where they overlap and which hours are still free."
        },
        {
          "title": "The free hours of the week",
          "desc": "The agent walks through the week's meetings and shows which hours are still free: events marked as not affecting availability are never counted as busy time."
        },
        {
          "title": "A recurring series by dates",
          "desc": "The agent expands a recurring series into concrete dates, converts the time to your zone and shows where it collides with what is already scheduled."
        }
      ],
      "how_it_works": [
        "The agent works with your schedule over the CalDAV protocol through caldav.yandex.ru. First it fetches the list of calendars of the connected account — personal ones, shared ones and the ones you were given access to — then reads the events of the period you need together with their time, attendees, location and reminders. That is what the schedule for today and tomorrow is built on, where meeting overlaps are found, free slots of the length you need are counted and the morning summary of the day is assembled.",
        "Yandex calendars are not uniform, and the agent takes that into account: each one has its own collection address, so events are requested per calendar rather than as a single list. CalDAV hands a meeting back as a whole ics object, so the agent expands a recurring series into concrete dates itself and converts the time zone to yours. An event marked in the calendar as not affecting availability is never written into a busy slot.",
        "On the write side the agent books a meeting into a free slot it has found — with attendees, a location and a reminder — moves an event to another time, updates the invitee list and deletes a meeting once the arrangement is called off. An edit is laid on top of the stored record, so everything the agent did not touch stays intact, and if the meeting was changed in Calendar meanwhile, it stops and re-reads instead of overwriting someone else's edit. Before taking a slot it checks against what is already scheduled, and it confirms cancellations and deletions with you: attendees get notified, and that cannot be rolled back in one move.",
        "Access is confirmed with a code on the Yandex ID page, with no token to type by hand: it refreshes itself and dies the moment you revoke the grant in the account. A calendar closed for writing is told apart from a missing event, and the agent names which of the two blocks a write instead of raising a generic error. It holds the request rate itself, fetches long periods in date windows, and when access falls short it says so directly instead of showing an empty day."
      ],
      "requirements": [
        "Consent covering every calendar of the account at once.",
        "A Yandex ID account with Calendar enabled."
      ],
      "faq": [
        {
          "q": "How do I connect Yandex Calendar?",
          "a": "With a Yandex ID confirmation code: press Connect, enter the code shown on the Yandex page and confirm access with the account that holds the calendars you need. The token is saved for you, with nothing to type in by hand."
        },
        {
          "q": "Which calendars does the agent see?",
          "a": "Only the ones in the left panel at calendar.yandex.ru for the connected account. Someone else calendar appears there after you press Accept in the invitation email."
        },
        {
          "q": "Can the agent create and change meetings?",
          "a": "Yes, if the calendar owner granted the Edit calendar content permission under Open settings, then Access. With the View public events permission, private events stay invisible to the agent."
        },
        {
          "q": "Why does a calendar from Subscriptions not change?",
          "a": "A calendar added by ics link in the Subscriptions section is read-only and refreshes anywhere from a few hours to two days. Keep the meetings the agent manages in your own calendar."
        }
      ]
    }
  },
  {
    "key": "yandex_cloud",
    "name": "Яндекс Облако",
    "description": "Управление облаком клиента: Cloud Functions и serverless, виртуальные машины, Kubernetes и реестр образов, сети и балансировщики, DNS и CDN, бакеты, managed-БД, секреты и ключи шифрования, мониторинг, аудит и биллинг",
    "category": "yandex",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Собирайте инвентарь Яндекс Облака и держите его в порядке по каталогам",
      "scenarios": [
        {
          "title": "Инвентарь ресурсов облака",
          "desc": "Агент соберёт в один список виртуальные машины, кластеры Kubernetes и managed-БД, serverless-функции, бакеты и DNS-зоны по всем каталогам облака."
        },
        {
          "title": "Бюджеты и лимиты расходов",
          "desc": "Агент заведёт бюджет на платёжный аккаунт с порогами оповещения и покажет, какие каталоги и сервисы к этим порогам привязаны."
        },
        {
          "title": "Сводка изменений за сутки",
          "desc": "Агент по расписанию пришлёт, какие машины и кластеры запустились, остановились и появились за сутки — по журналу операций каждого ресурса."
        },
        {
          "title": "Проверка DNS и сертификатов",
          "desc": "Агент пройдёт по DNS-зонам и записям, сверит их с сертификатами Certificate Manager и назовёт то, у чего скоро истекает срок."
        },
        {
          "title": "Почему падают функции",
          "desc": "Агент поднимет логи и метрики мониторинга по serverless-функциям и контейнерам, найдёт всплеск ошибок и покажет, когда он начался и на чём."
        },
        {
          "title": "Погасить простаивающие машины",
          "desc": "Агент сверит метрики загрузки виртуальных машин с их размером и покажет кандидатов на остановку, а выключит только после вашего «да», дождавшись операции."
        }
      ],
      "how_it_works": [
        "У Яндекс Облака нет единого адреса API: каждый сервис живёт на своём хосте — compute для виртуальных машин, mks для Kubernetes, serverless-functions и serverless-containers, vpc с балансировщиками, dns и cdn, certificate-manager, storage и container-registry, mdb с ydb и trino, lockbox с kms, logging, monitoring, audit-trails, billing, resource-manager и organization-manager. Агент раскладывает запрос по нужным хостам сам и сводит ответы в один инвентарь в разрезе каталогов.",
        "Начинает агент с resource-manager: сначала список облаков и каталогов, потому что почти во всех перечислениях ресурсов идентификатор каталога — обязательное поле самого API, а не удобство. Если Folder ID в подключении заполнен, этот шаг пропускается. Изменяющие вызовы облако возвращает не результатом, а операцией, и агент дожидается её завершения на operations-хосте, вместо того чтобы считать ответ 200 подтверждением того, что ресурс уже создан.",
        "На чтении агент собирает инвентарь по каталогам, сверяет DNS-записи с сертификатами Certificate Manager и поднимает метрики мониторинга, а по расписанию присылает, что запустилось и остановилось за сутки. По деньгам API отдаёт платёжный аккаунт, бюджеты с порогами и справочник тарифов; построчная детализация потребления в API не выдаётся вовсе — её Облако кладёт выгрузкой в бакет, и агент честно скажет это, а не соберёт сумму по кусочкам. Меняет ресурсы он теми же методами API, что и консоль, но останавливается и спрашивает перед необратимым: удалением ресурса, остановкой машины, правкой DNS-зоны. Значения секретов Lockbox лежат на отдельном payload-хосте, и без прямой просьбы агент их не тянет.",
        "Авторизованный ключ агент меняет на короткоживущий IAM-токен и обновляет его сам, поэтому долгий обход инвентаря не обрывается на середине. Границы видимого задаёт роль сервисного аккаунта: облако, куда роль не выдана, агент не увидит вовсе, а сервис, закрытый правами, отличит от пустого каталога. Частоту вызовов агент выдерживает сам, а когда каталог пуст или роли не хватает, называет причину прямо, вместо того чтобы показать пустой инвентарь."
      ],
      "requirements": [
        "Облако в Yandex Cloud с привязанным платёжным аккаунтом",
        "Права администратора или владельца этого облака",
        "Доступ к консоли управления console.yandex.cloud"
      ],
      "faq": [
        {
          "q": "Как подключить Яндекс Облако?",
          "a": "JSON авторизованного ключа сервисного аккаунта: в консоли создайте аккаунт в «Identity and Access Management», выдайте роль на само облако и скачайте файл ключа — его содержимое вставьте в поле целиком. Folder ID заполнять не обязательно, но с ним агент не будет спрашивать каталог в каждом запросе."
        },
        {
          "q": "Что агент видит в облаке?",
          "a": "Функции, контейнеры и API-шлюзы, виртуальные машины и диски, кластеры Kubernetes и managed-БД, сети с балансировщиками, DNS-зоны, CDN и сертификаты, бакеты и реестр образов, секреты Lockbox и ключи KMS, лог-группы, метрики мониторинга, аудит-трейлы, биллинг-аккаунт с бюджетами и организацию с её группами — в пределах роли сервисного аккаунта."
        },
        {
          "q": "Покажет ли агент, сколько потрачено по каждому каталогу?",
          "a": "Нет — и это ограничение самого API Облака, а не коннектора: в биллинге доступны платёжный аккаунт, бюджеты с порогами оповещения и справочник тарифов, а построчного потребления там нет ни в каком виде. Детализацию Облако выгружает в бакет Object Storage по расписанию; агент назовёт это прямо и предложит завести бюджет с порогом вместо выдуманной сводки."
        },
        {
          "q": "Может ли агент менять ресурсы?",
          "a": "Да, если сервисному аккаунту выдана роль editor: агент вызывает те же методы API, что и консоль управления. С ролью viewer доступно только чтение."
        },
        {
          "q": "Что будет, если не указать Folder ID?",
          "a": "Каталог придётся называть в каждом запросе: у списков ресурсов идентификатор каталога — обязательное поле самого API. Агент сумеет получить список каталогов облака и работать по нескольким, но заполненное поле избавляет от этого шага — идентификатор вида b1… подставляется сам."
        }
      ]
    },
    "seo_en": {
      "headline": "Inventory Yandex Cloud and keep it in order, folder by folder",
      "scenarios": [
        {
          "title": "Cloud resource inventory",
          "desc": "The agent gathers virtual machines, Kubernetes and managed database clusters, serverless functions, buckets and DNS zones across every cloud folder into one list."
        },
        {
          "title": "Budgets and spending thresholds",
          "desc": "The agent sets a budget with alert thresholds on the billing account and shows which folders and services are bound to those thresholds."
        },
        {
          "title": "Daily summary of changes",
          "desc": "On a schedule, the agent reports which machines and clusters started, stopped and appeared over the past day, read from each resource's operation log."
        },
        {
          "title": "DNS and certificate check",
          "desc": "The agent walks through DNS zones and records, matches them against Certificate Manager certificates and names whatever is about to expire."
        },
        {
          "title": "Why functions keep failing",
          "desc": "The agent pulls logs and monitoring metrics for serverless functions and containers, finds the spike of errors and shows when it began and where."
        },
        {
          "title": "Shut down idle machines",
          "desc": "The agent matches virtual machine load metrics against their size, shows the candidates for shutdown and stops them only after your yes, waiting for the operation."
        }
      ],
      "how_it_works": [
        "Yandex Cloud has no single API address: every service lives on its own host — compute for virtual machines, mks for Kubernetes, serverless-functions and serverless-containers, vpc with its load balancers, dns and cdn, certificate-manager, storage and container-registry, mdb with ydb and trino, lockbox with kms, logging, monitoring, audit-trails, billing, resource-manager and organization-manager. The agent routes each request to the right host itself and folds the answers into a single inventory broken down by folder.",
        "The agent starts with resource-manager: the list of clouds and folders first, because in almost every resource listing the folder identifier is a required field of the API itself rather than a convenience. If Folder ID is filled in on the connection, that step is skipped. Mutating calls come back from the cloud as an operation rather than a result, and the agent waits for it to finish on the operations host instead of treating a 200 as proof that the resource already exists.",
        "On the read side the agent assembles an inventory by folder, matches DNS records against Certificate Manager certificates and pulls monitoring metrics, and on a schedule it reports what started and stopped over the past day. On money the API offers the billing account, budgets with thresholds and the price catalogue; line-by-line consumption is not exposed through the API at all — the cloud delivers it as an export into a bucket, and the agent says so rather than assembling a total out of fragments. It changes resources through the same API methods the console uses, but stops and asks before anything irreversible: deleting a resource, stopping a machine, editing a DNS zone. Lockbox secret values sit on a separate payload host, and the agent does not pull them unasked.",
        "The agent exchanges the authorized key for a short-lived IAM token and refreshes it on its own, so a long inventory sweep is never cut off halfway. What is visible is bounded by the service account's role: a cloud where no role was granted stays out of reach entirely, and a service closed by permissions is told apart from an empty folder. The agent holds the call rate itself, and when a folder is empty or the role falls short it names the reason directly instead of showing an empty inventory."
      ],
      "requirements": [
        "A cloud in Yandex Cloud with a billing account attached",
        "Administrator or owner rights on that cloud",
        "Access to the management console at console.yandex.cloud"
      ],
      "faq": [
        {
          "q": "How do I connect Yandex Cloud?",
          "a": "With the JSON of an authorized key for a service account: in the console create the account under Identity and Access Management, grant a role on the cloud itself and download the key file — paste its contents into the field in full. Folder ID is optional, but filling it in saves the agent from having to ask which folder on every request."
        },
        {
          "q": "What does the agent see in the cloud?",
          "a": "Functions, containers and API gateways, virtual machines and disks, Kubernetes and managed database clusters, networks with load balancers, DNS zones, CDN and certificates, buckets and the container registry, Lockbox secrets and KMS keys, log groups, monitoring metrics, audit trails, the billing account with its budgets and the organization with its groups — within the service account role."
        },
        {
          "q": "Will the agent show how much each folder spent?",
          "a": "No, and that is a limit of the Yandex Cloud API rather than of the connector: billing exposes the payment account, budgets with alert thresholds and the price catalogue, and no line-by-line consumption in any form. The cloud delivers that detail as a scheduled export into an Object Storage bucket; the agent will say so plainly and offer a budget threshold instead of an invented summary."
        },
        {
          "q": "Can the agent change resources?",
          "a": "Yes, if the service account has the editor role: the agent calls the same API methods as the management console. With the viewer role only reading is available."
        },
        {
          "q": "What happens if I leave Folder ID empty?",
          "a": "The folder has to be named in every request: for resource listings the folder identifier is a required field of the API itself. The agent can fetch the cloud's folder list and work across several of them, but a filled-in field removes that step — an identifier starting with b1 is then supplied automatically."
        }
      ]
    }
  },
  {
    "key": "yandex_datalens",
    "name": "Яндекс DataLens",
    "description": "Визуализация данных — дашборды, датасеты, графики, подключения",
    "category": "analytics",
    "auth_flow": "device_code",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Находите нужный дашборд и датасет DataLens из чата",
      "scenarios": [
        {
          "title": "Навигация по коллекциям и воркбукам",
          "desc": "Агент обойдёт коллекции и воркбуки организации и подскажет, где лежит нужный дашборд, датасет или подключение к источнику."
        },
        {
          "title": "Инвентаризация отчётов",
          "desc": "Агент соберёт список дашбордов, чартов и датасетов, найдёт дубли одного и того же отчёта и покажет связи между объектами."
        },
        {
          "title": "Аудит доступов и изменений",
          "desc": "Агент покажет права на объекты, проверит доступ конкретного пользователя и поднимет историю изменений начиная с нужной даты."
        },
        {
          "title": "Перенос воркбука между коллекциями",
          "desc": "Агент запустит экспорт воркбука, дождётся готовности файла и импортирует его в другую коллекцию той же организации."
        },
        {
          "title": "Лицензии и embed-ссылки",
          "desc": "Агент поднимет лицензии организации и embed-ссылки объектов и покажет, какие отчёты выведены наружу и на что хватает текущего тарифа."
        },
        {
          "title": "Из чего собран датасет",
          "desc": "Агент раскроет поля датасета, его источники и настройки — видно, какие срезы вообще есть, а за самими цифрами он пойдёт в исходную систему."
        }
      ],
      "how_it_works": [
        "Агент ходит в api.datalens.tech и обходит кабинет через RPC-ручки: листает директорию коллекций и воркбуков постранично, спускается внутрь и собирает дашборды, чарты, датасеты и подключения к источникам. Дальше он выстраивает связи между объектами — какой чарт на каком датасете, какой датасет на каком подключении, — находит дубли одного отчёта и подсказывает, где лежит нужный.",
        "Главное про DataLens агент понимает сразу: API отдаёт устройство отчёта, а не его содержимое. Из дашборда приходит конфигурация, из датасета — поля, источники и настройки, но строк данных в ответе нет. Поэтому на вопрос про цифры агент не пересказывает дашборд по памяти, а идёт за ними в исходную систему и говорит, что сам DataLens числа через API не отдаёт.",
        "Изменяющих операций здесь ровно две — экспорт воркбука и импорт его в коллекцию, и обе идут в два такта: агент запускает задачу, дожидается готовности файла и только потом переносит его в другую коллекцию той же организации. Дашборды, чарты и датасеты он не редактирует и не удаляет. Всё остальное — чтение: инвентаризация отчётов, права на объекты, проверка доступа конкретного пользователя и история изменений с нужной даты.",
        "Подключение — вход в аккаунт Яндекса по коду: токены копировать не нужно, срок жизни доступа продлевается автоматически. Обход кабинета идёт постранично, и на большой организации агент забирает директорию частями, складывая связи объектов по мере спуска, а не одним запросом. Частоту он держит в пределах лимита, а пустой результат называет прямо и отличает «отчётов нет» от «отчёты не видны», а не выдаёт одно за другое."
      ],
      "requirements": [
        "Аккаунт Яндекса, состоящий в нужной организации.",
        "Права администратора организации у того, кто выдаёт доступ."
      ],
      "faq": [
        {
          "q": "Как подключить Яндекс DataLens?",
          "a": "Входом в аккаунт Яндекса по коду — токены копировать не нужно. Права в DataLens выдаются на организацию, поэтому аккаунту нужна роль в ней, а на коллекциях и воркбуках — доступ уровня viewer, иначе содержимое останется невидимым."
        },
        {
          "q": "Что агент видит в DataLens?",
          "a": "Структуру кабинета: коллекции, воркбуки, дашборды, чарты, датасеты и подключения, их связи и права, историю изменений, лицензии организации и embed-ссылки."
        },
        {
          "q": "Может ли агент показать цифры из дашборда?",
          "a": "Нет. API отдаёт конфигурацию дашборда и структуру датасета — поля, источники, настройки, — но не строки данных. За самими цифрами агент идёт в исходную систему, а не в DataLens."
        },
        {
          "q": "Пишет ли агент в DataLens?",
          "a": "Почти нет: агент читает объекты, а из изменяющих операций ему доступны экспорт воркбука и импорт его в коллекцию. Дашборды, чарты и датасеты он не редактирует."
        }
      ]
    },
    "seo_en": {
      "headline": "Find the right DataLens dashboard and dataset from chat",
      "scenarios": [
        {
          "title": "Navigating collections and workbooks",
          "desc": "The agent walks through your organization's collections and workbooks and points you to the dashboard, dataset or source connection you need."
        },
        {
          "title": "Report inventory",
          "desc": "The agent lists dashboards, charts and datasets, spots duplicates of the same report and shows how the objects relate to each other."
        },
        {
          "title": "Access and change audit",
          "desc": "The agent shows permissions on objects, checks what a specific user can reach and pulls change history from any date you name."
        },
        {
          "title": "Moving a workbook between collections",
          "desc": "The agent exports a workbook, waits for the file to be ready and imports it into another collection in the same organization."
        },
        {
          "title": "Licenses and embed links",
          "desc": "The agent pulls the organization licenses and the embed links of objects and shows which reports are exposed outside and what the current plan still covers."
        },
        {
          "title": "What a dataset is built from",
          "desc": "The agent opens up the dataset fields, sources and settings so you can see which breakdowns exist at all — for the numbers themselves it goes to the source system."
        }
      ],
      "how_it_works": [
        "The agent calls api.datalens.tech and walks the account through RPC endpoints: it lists the directory of collections and workbooks page by page, descends into them and collects dashboards, charts, datasets and source connections. It then maps out how the objects relate — which chart sits on which dataset, which dataset on which connection — spots duplicates of the same report and points you to the one you need.",
        "The agent understands the main thing about DataLens up front: the API returns how a report is built, not what is inside it. A dashboard comes back as configuration, a dataset as fields, sources and settings, but there are no data rows in the response. So when asked about numbers the agent does not retell the dashboard from memory — it goes to the source system for them and says that DataLens itself does not hand out figures over the API.",
        "There are exactly two changing operations here — exporting a workbook and importing it into a collection — and both run in two beats: the agent starts the task, waits for the file to be ready and only then moves it into another collection in the same organization. It does not edit or delete dashboards, charts or datasets. Everything else is reading: report inventory, object permissions, checking what a specific user can reach and change history from any date you name.",
        "The connection is a sign-in to a Yandex account with a code: no tokens to copy, and the access lifetime is renewed automatically. The walk through the account is paginated, so on a large organization the agent takes the directory in parts and builds up the object links as it descends rather than in one call. It holds the request rate within the limit and names an empty result plainly, telling «no reports» apart from «reports not visible» instead of passing one off as the other."
      ],
      "requirements": [
        "A Yandex account that belongs to the right organization.",
        "Organization admin rights for whoever grants the access."
      ],
      "faq": [
        {
          "q": "How do I connect Yandex DataLens?",
          "a": "By signing in to your Yandex account with a code — no tokens to copy. DataLens grants permissions at the organization level, so the account needs a role there, plus viewer access on collections and workbooks, otherwise their contents stay invisible."
        },
        {
          "q": "What does the agent see in DataLens?",
          "a": "The structure of your account: collections, workbooks, dashboards, charts, datasets and connections, how they relate, their permissions, change history, organization licenses and embed links."
        },
        {
          "q": "Can the agent show the numbers from a dashboard?",
          "a": "No. The API returns dashboard configuration and dataset structure — fields, sources, settings — but not data rows. For the numbers themselves the agent goes to the source system, not to DataLens."
        },
        {
          "q": "Does the agent write to DataLens?",
          "a": "Almost never: it reads objects, and the only changing operations available to it are exporting a workbook and importing it into a collection. It does not edit dashboards, charts or datasets."
        }
      ]
    }
  },
  {
    "key": "yandex_direct",
    "name": "Яндекс Директ",
    "description": "Контекстная реклама — кампании, объявления, ключевые слова, ставки и аналитика",
    "category": "ads",
    "auth_flow": "device_code",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Считайте расход и конверсии кампаний Яндекс Директа",
      "scenarios": [
        {
          "title": "Расход и конверсии по кампаниям",
          "desc": "Агент соберёт отчёт по показам, кликам, CTR, расходу и конверсиям за период и покажет, какие кампании окупаются, а какие тратят бюджет впустую."
        },
        {
          "title": "Поисковые запросы, которые жгут бюджет",
          "desc": "Агент выгрузит отчёт по реальным поисковым запросам, сведёт их с фразами и автотаргетингом и назовёт те, у которых есть расход и ноль конверсий."
        },
        {
          "title": "Ставки и остановки по бюджету",
          "desc": "Агент проверит ставки по фразам, состояние и статус модерации кампаний и назовёт те, что встали из-за дневного бюджета, отклонённых объявлений или пустого счёта."
        },
        {
          "title": "Ежедневная сводка по расходу",
          "desc": "Агент пришлёт в чат расход за вчера, сравнит с прошлой неделей и назовёт кампании, у которых просел CTR или выросла цена конверсии."
        },
        {
          "title": "Где именно кликают",
          "desc": "Агент разложит показы, клики и расход по регионам показа и назовёт города, где цена конверсии заметно выше средней по кампании."
        },
        {
          "title": "Ставки вниз по подтверждению",
          "desc": "Агент покажет текущую и предлагаемую ставку и число затронутых фраз, после вашего согласия применит изменение или остановит кампанию и перечитает результат."
        }
      ],
      "how_it_works": [
        "Агент работает с API Директа пятой версии на https://api.direct.yandex.com/json/v5: кампании, группы, объявления, ключевые фразы и автотаргетинги со ставками, минус-фразы, портфельные стратегии, корректировки, справочники регионов и отчёты. Из этого он собирает расход, показы, клики, CTR и конверсии за период, спускается с уровня кампании до отдельной фразы и до реального поискового запроса и находит то, что тратит бюджет и не приносит ни одной конверсии.",
        "Включённая кампания в Директе не значит работающую: состояние и статус здесь разные вещи, и кампания может стоять из-за отклонённой модерации, исчерпанного дневного бюджета или пустого счёта, оставаясь при этом «включённой». Агент смотрит оба поля вместе со статусом оплаты и называет настоящую причину остановки. Статистика за текущий день ещё дописывается, поэтому сравнения он строит по закрытым дням и всегда называет период, за который взял цифры.",
        "Единая перфоманс-кампания живёт на отдельном адресе API, а прежние динамические кампании и смарт-баннеры в неё переведены и заново не создаются. Агент читает такие кампании там, где они действительно лежат, и не выдаёт «ничего не нашлось» за отсутствие рекламы. Автотаргетинг он показывает наравне с фразами: в ЕПК он включён по умолчанию, и расход без единой ключевой фразы обычно именно он.",
        "Менять ставки и останавливать кампании агент может, если у логина есть право на редактирование: права переносятся из веб-интерфейса один в один, и при доступе только на чтение остаётся аналитика. Но ставка — это деньги в реальном времени, поэтому агент сначала показывает текущее значение, предлагаемое и число затронутых фраз, ждёт подтверждения и перечитывает результат после применения, а не считает успехом сам факт принятого запроса: Директ отвечает «успешно» и на пачку, где часть строк отклонена.",
        "Подключение идёт подтверждением кода на странице Яндекса — токены копировать не нужно, дальше доступ продлевается сам. Директ считает баллы Units с суточной квотой: каждый запрос стоит баллов, а неудачный — двадцати, поэтому агент просит только нужные поля и не долбит API одним и тем же битым телом. Параллельных запросов не больше пяти, так что выборки он дробит постранично, тяжёлые отчёты заказывает в офлайн-режиме и дожидается готовности, а о нехватке данных или прав говорит прямо."
      ],
      "requirements": [
        "Одобренная заявка на доступ к API Директа",
        "Принятые условия соглашения об API в настройках Директа",
        "Пустой список разрешённых IP-адресов в настройках API",
        "Логин, на котором лежат сами кампании — доступ выдаётся под ним",
        "Суточная квота баллов (Units) на рекламодателя"
      ],
      "faq": [
        {
          "q": "Как подключить Яндекс Директ?",
          "a": "Входом в аккаунт Яндекса: вы подтверждаете код на странице Яндекса, копировать токены не нужно. Входите под тем логином, на котором лежат кампании: клиентские кампании под агентским логином сами не подтянутся. Условия соглашения и заявка на доступ — на странице «Настройки API»."
        },
        {
          "q": "Что агент видит в Директе?",
          "a": "Кампании всех типов, включая ЕПК, группы, объявления, ключевые фразы и автотаргетинги со ставками, минус-фразы, портфельные стратегии, корректировки ставок, фиды, ретаргетинг, справочники регионов и отчёты API v5 — по тому рекламодателю, под логином которого подтверждён доступ."
        },
        {
          "q": "Может ли агент менять ставки и кампании?",
          "a": "Да, если у логина есть право на редактирование: агент останавливает и запускает кампании, выставляет ставки по фразам и корректировки. Права переносятся из веб-интерфейса один в один, и при доступе «только на чтение» остаётся аналитика. Любое изменение идёт через подтверждение и перечитывается после применения."
        },
        {
          "q": "Откуда агент берёт расход в рублях?",
          "a": "Из отчётов API за закрытые дни: расход, показы, клики, CTR, цена клика и конверсии приходят уже в рублях за названный период. Цифры за сегодня Директ ещё дописывает, поэтому в сравнениях агент их не использует и всегда называет границы периода."
        },
        {
          "q": "Что с лимитами API Директа?",
          "a": "Директ считает баллы (Units) и держит суточную квоту на рекламодателя, параллельных запросов допускает не больше пяти, а к сервису отчётов — не больше двадцати за десять секунд и пяти отчётов в очереди. Агент дробит выборки постранично, а тяжёлые отчёты заказывает в офлайн-режиме и дожидается готовности."
        }
      ]
    },
    "seo_en": {
      "headline": "Track spend and conversions across Yandex Direct campaigns",
      "scenarios": [
        {
          "title": "Spend and conversions by campaign",
          "desc": "The agent pulls a report on impressions, clicks, CTR, spend and conversions for the period and shows which campaigns pay off and which just burn budget."
        },
        {
          "title": "Search queries that burn budget",
          "desc": "The agent pulls the report on the actual search queries, matches them against keywords and autotargeting and names the ones with spend and zero conversions."
        },
        {
          "title": "Bids and budget stoppages",
          "desc": "The agent checks keyword bids, campaign state and moderation status and names the ones stalled by a daily budget cap, by rejected ads or by an empty account."
        },
        {
          "title": "Daily spend digest",
          "desc": "The agent posts yesterday's spend in chat, compares it with last week and names the campaigns whose CTR slipped or whose cost per conversion went up."
        },
        {
          "title": "Where the clicks come from",
          "desc": "The agent breaks impressions, clicks and spend down by display region and names the cities where the cost per conversion sits well above the campaign average."
        },
        {
          "title": "Bid changes you confirm",
          "desc": "The agent shows the current bid, the proposed one and the number of keywords affected, applies the change or pauses the campaign once you agree, and re-reads the result."
        }
      ],
      "how_it_works": [
        "The agent works with version five of the Direct API at https://api.direct.yandex.com/json/v5: campaigns, ad groups, ads, keywords and autotargetings with their bids, negative keywords, portfolio strategies, bid adjustments, region reference books and reports. Out of that it assembles spend, impressions, clicks, CTR and conversions for a period, goes down from the campaign level to an individual keyword and on to the actual search query, and finds what burns budget without bringing in a single conversion.",
        "An enabled campaign in Direct does not mean a running one: state and status are different things here, and a campaign can be stalled by rejected moderation, an exhausted daily budget or an empty account while still being «enabled». The agent reads both fields together with the payment status and names the real reason for the stop. Statistics for the current day are still being written in, so it builds comparisons on closed days and always names the period the figures were taken for.",
        "The unified performance campaign lives at its own API address, and the former dynamic campaigns and smart banners have been migrated into it and are no longer created anew. The agent reads such campaigns where they actually sit rather than reporting «nothing found» for advertising that exists. Autotargeting is shown next to keywords: in a unified campaign it is on by default, and spend without a single keyword is usually exactly that.",
        "The agent can change bids and pause campaigns if the login has edit rights: permissions carry over from the web interface one to one, and with read-only access you still get the analytics. But a bid is money in real time, so the agent first shows the current value, the proposed one and the number of keywords affected, waits for confirmation and re-reads the result after applying it — Direct answers «success» even for a batch in which some rows were rejected.",
        "The connection is made by confirming a code on a Yandex page — there are no tokens to copy, and access is renewed on its own afterwards. Direct counts Units against a daily quota: every request costs points and a failed one costs twenty, so the agent asks only for the fields it needs and does not hammer the API with the same broken body. No more than five requests run in parallel, so it paginates through selections, orders heavy reports in offline mode and waits until they are ready, and states any shortage of data or permissions directly."
      ],
      "requirements": [
        "An approved Direct API access request",
        "The API agreement terms accepted in Direct API settings",
        "An empty allowed IP list in the Direct API settings",
        "The login that actually owns the campaigns — access is granted under it",
        "The daily Units quota per advertiser"
      ],
      "faq": [
        {
          "q": "How do I connect Yandex Direct?",
          "a": "By signing in to your Yandex account: you confirm a code on a Yandex page, with no tokens to copy. Sign in with the login that owns the campaigns — client campaigns under an agency login will not be pulled in on their own. The agreement terms and the access request live on the API Settings page."
        },
        {
          "q": "What does the agent see in Direct?",
          "a": "Campaigns of every type including unified performance ones, ad groups, ads, keywords and autotargetings with bids, negative keywords, portfolio strategies, bid adjustments, feeds, retargeting, region reference books and API v5 reports — for the advertiser whose login authorized access."
        },
        {
          "q": "Can the agent change bids and campaigns?",
          "a": "Yes, if the login has edit rights: the agent pauses and resumes campaigns and sets keyword bids and adjustments. Permissions carry over from the web interface one to one, and with read-only access you still get the analytics. Every change goes through confirmation and is re-read after it is applied."
        },
        {
          "q": "Where does the agent get spend in roubles?",
          "a": "From API reports over closed days: spend, impressions, clicks, CTR, cost per click and conversions arrive already in roubles for the named period. Direct is still writing in today's figures, so the agent keeps them out of comparisons and always names the period boundaries."
        },
        {
          "q": "What about Direct API limits?",
          "a": "Direct counts Units and holds a daily quota per advertiser, allows no more than five parallel requests, and no more than twenty requests to the reports service per ten seconds with five reports in the queue. The agent paginates through selections and orders heavy reports in offline mode, waiting until they are ready."
        }
      ]
    }
  },
  {
    "key": "yandex_disk",
    "name": "Яндекс Диск",
    "description": "Облачное хранилище Яндекс 360",
    "category": "yandex",
    "auth_flow": "device_code",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Находите файлы на Яндекс Диске и считайте по выгрузкам",
      "scenarios": [
        {
          "title": "Поиск документа на Диске",
          "desc": "Агент найдёт файл по названию, типу или папке и пришлёт ссылку, не заставляя листать дерево папок вручную."
        },
        {
          "title": "Расчёт по выгрузке с Диска",
          "desc": "Агент заберёт выгрузку или отчёт прямо с Диска, посчитает по ней цифры и положит результат обратно в нужную папку."
        },
        {
          "title": "Разбор папок и публичные ссылки",
          "desc": "Агент создаст папку, скопирует или перенесёт файлы и опубликует ссылку на документ, которым нужно поделиться."
        },
        {
          "title": "Место и новые файлы",
          "desc": "Агент раз в неделю пришлёт, сколько места осталось на Диске и какие файлы появились в рабочих папках за эти дни."
        },
        {
          "title": "Возврат из корзины",
          "desc": "Агент заглянет в корзину Диска, найдёт удалённый на днях документ по названию и дате и вернёт его обратно в рабочую папку."
        },
        {
          "title": "Дубли и старые версии",
          "desc": "Агент сверит имена, размеры и даты изменения в рабочей папке и покажет дубли и старые версии одного документа, которые можно убрать."
        }
      ],
      "how_it_works": [
        "Агент обращается к REST API Диска по адресу cloud-api.yandex.net и работает с деревом подключённого аккаунта: перечисляет папки и файлы, читает метаданные — имя, тип, размер, дату изменения, — ищет документ по названию, расширению или папке и отдаёт ссылку вместо ручного листания. Он же берёт выгрузку или отчёт прямо с Диска, считает по ней цифры и следит за остатком места и появлением новых файлов в рабочих папках.",
        "Одну особенность Диска стоит знать заранее: положить файл можно только по внешнему URL — передать содержимое напрямую API не позволяет. Поэтому результат расчёта агент возвращает через ссылку, а не потоком байт. Чужая папка попадает в его поле зрения лишь после того, как владелец выдал на неё «Просмотр» или «Редактирование» в «Настроить доступ», а удалённое уходит в корзину, откуда его ещё можно достать.",
        "На запись агент создаёт папки, копирует и переносит файлы, удаляет ненужное и публикует ссылки на документы, которыми надо поделиться. Перед перезаписью файла с тем же именем и перед удалением он спрашивает, а публикацию выделяет отдельно: публичная ссылка открывает документ любому, кто её получит, и в рабочих папках это решение принимаете вы, а не агент. Что именно и куда он положил, называется явно — путём, а не «готово».",
        "Большие операции — копирование и перенос папки — API выполняет асинхронно: в ответ приходит ссылка на статус, и агент дожидается завершения, а не рапортует «готово» на полпути. Точечно открыть доступ к одной папке REST API Диска не умеет, права всегда охватывают весь Диск, поэтому под ограниченный доступ заводят отдельный аккаунт. Частоту запросов агент держит сам, а пустую папку называет пустой, а не молчит."
      ],
      "requirements": [
        "Аккаунт Яндекс 360 организации, если нужны рабочие файлы",
        "Место на Диске под новые файлы",
        "Загрузка файла — только по внешней ссылке, не содержимым"
      ],
      "faq": [
        {
          "q": "Как подключить Яндекс Диск?",
          "a": "По коду подтверждения Яндекс ID: нажмите «Подключить», введите код на странице Яндекса и подтвердите доступ тем аккаунтом, чей Диск нужен. Для рабочих файлов это аккаунт Яндекс 360 организации — у личного аккаунта Диск другой."
        },
        {
          "q": "Что агент видит на Диске?",
          "a": "Файлы и папки подключённого аккаунта вместе с корзиной, включая общие папки коллег: чужая папка видна после того, как владелец выдал на неё «Просмотр» или «Редактирование» в «Настроить доступ»."
        },
        {
          "q": "Может ли агент загружать файлы?",
          "a": "Агент создаёт папки, копирует, переносит и удаляет файлы и публикует ссылки. Загрузка возможна только по внешнему URL — передать содержимое файла напрямую API Диска не позволяет."
        },
        {
          "q": "Можно ли выдать доступ только к части файлов?",
          "a": "Нет: запрашиваются права на весь Диск — чтение, запись, информация о Диске и папка приложения. Частично их выдать нельзя, поэтому под ограниченный доступ заводят отдельный аккаунт."
        }
      ]
    },
    "seo_en": {
      "headline": "Find files on Yandex Disk and crunch the exports",
      "scenarios": [
        {
          "title": "Finding a document on Disk",
          "desc": "The agent finds a file by name, type or folder and sends you the link, so you never have to scroll the folder tree by hand."
        },
        {
          "title": "Crunching an export from Disk",
          "desc": "The agent picks up an export or report straight from Disk, runs the numbers on it and files the result back into the right folder."
        },
        {
          "title": "Sorting folders and public links",
          "desc": "The agent creates a folder, copies or moves files and publishes a link to the document you need to share."
        },
        {
          "title": "Storage space and new files",
          "desc": "Once a week the agent reports how much space is left on Disk and which files showed up in your work folders over those days."
        },
        {
          "title": "Back out of the trash",
          "desc": "The agent looks into the Disk trash, finds the document deleted the other day by its name and date and puts it back into the work folder."
        },
        {
          "title": "Duplicates and old versions",
          "desc": "The agent compares names, sizes and modification dates in a work folder and shows the duplicates and older versions of one document that can go."
        }
      ],
      "how_it_works": [
        "The agent calls the Disk REST API at cloud-api.yandex.net and works with the tree of the connected account: it lists folders and files, reads metadata — name, type, size, modification date — finds a document by name, extension or folder and hands over the link instead of making you scroll. It also picks up an export or report straight from Disk, runs the numbers on it and keeps an eye on remaining space and on new files appearing in your work folders.",
        "One trait of Disk is worth knowing up front: a file can only be put there from an external URL — the API does not allow passing contents directly. So the agent returns the result of a calculation through a link rather than as a stream of bytes. Someone else folder enters its field of view only after the owner grants it View or Edit in the sharing settings, and whatever is deleted goes to the trash, where it can still be retrieved.",
        "On the write side the agent creates folders, copies and moves files, deletes what is no longer needed and publishes links to documents you have to share. It asks before overwriting a file with the same name and before deleting, and it treats publishing as a decision of its own: a public link opens the document to anyone who receives it, and in work folders that call is yours, not the agent's. What it put where is stated explicitly, as a path rather than a «done».",
        "Large operations — copying or moving a folder — are performed asynchronously by the API: the response is a link to a status, and the agent waits for completion instead of reporting «done» halfway. The Disk REST API cannot open access to a single folder, rights always cover the whole Disk, which is why limited access is set up as a separate account. The agent holds the request rate itself, and it calls an empty folder empty instead of staying silent."
      ],
      "requirements": [
        "An organization Yandex 360 account if you need work files",
        "Free space on the Disk for new files",
        "Uploads work only from an external link, not raw contents"
      ],
      "faq": [
        {
          "q": "How do I connect Yandex Disk?",
          "a": "With a Yandex ID confirmation code: click Connect, enter the code on the Yandex page and confirm access with the account whose Disk you need. For work files that is your organization's Yandex 360 account — a personal account has a different Disk."
        },
        {
          "q": "What does the agent see on Disk?",
          "a": "Files and folders of the connected account along with the trash, including folders shared by colleagues: someone else's folder becomes visible once the owner grants it View or Edit under the sharing settings."
        },
        {
          "q": "Can the agent upload files?",
          "a": "The agent creates folders, copies, moves and deletes files and publishes links. Uploading is only possible from an external URL — the Disk API does not allow passing file contents directly."
        },
        {
          "q": "Can I grant access to only part of my files?",
          "a": "No: the rights requested cover the whole Disk — read, write, Disk info and the app folder. They cannot be granted partially, so for limited access people set up a separate account."
        }
      ]
    }
  },
  {
    "key": "yandex_fleet",
    "name": "Yandex Fleet",
    "description": "Управление автопарком Яндекс.Такси — автомобили, профили водителей и курьеров, заказы, GPS-треки, транзакции, баланс",
    "category": "logistics",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Разбирайте смены водителей и заказы автопарка прямо в чате",
      "scenarios": [
        {
          "title": "Разбор смены",
          "desc": "Агент соберёт заказы за смену и покажет, у каких водителей больше отмен и незавершённых поездок и как это меняется по дням."
        },
        {
          "title": "Транзакции и выплаты",
          "desc": "Агент сверит транзакции по водителям и заказам с условиями работы парка и покажет, у кого заблокирован баланс перед выплатой."
        },
        {
          "title": "Кто реально на линии",
          "desc": "Агент пройдёт по профилям водителей и карточкам автомобилей и покажет, кто выходит на линию, а кто только числится в парке."
        },
        {
          "title": "Треки по спорным заказам",
          "desc": "Агент поднимет GPS-трек конкретного заказа и часы на линии исполнителя, когда нужно разобрать жалобу или спорную поездку."
        },
        {
          "title": "Заявки на подключение",
          "desc": "Агент разберёт заявки водителей и курьеров, покажет, какие висят без движения, и назовёт тех, кто оформился, но так и не вышел на первый заказ."
        },
        {
          "title": "Часы на линии за неделю",
          "desc": "Агент сложит часы исполнителей на линии по дням и покажет, кто не добрал до нормы парка, а кто закрывает неделю с явной переработкой."
        }
      ],
      "how_it_works": [
        "Агент ходит в Fleet API Яндекс.Такси и читает парк целиком: автомобили и профили водителей и курьеров, заявки на подключение, заказы вместе с их GPS-треками, транзакции и заблокированный баланс, условия работы парка и часы исполнителей на линии. Из этих кусков он и собирает разбор смены, сверку транзакций с условиями работы и картину того, кто действительно выходит на линию, а кто просто числится.",
        "Каждый запрос здесь привязан к конкретному парку: идентификатор партнёра уходит и в заголовке, и в параметрах, и в теле запроса, поэтому агент всегда работает в границах одного автопарка и не смешивает данные разных. Заказ в Fleet — это не одна строка, а связка с водителем, машиной, треком и транзакциями, и статус заказа сам по себе не отвечает на вопрос, довезли ли пассажира: за этим агент идёт в трек и в историю транзакций.",
        "По природе своей работа тут читающая: агент собирает отчёты, поднимает трек по спорной поездке, показывает водителей с растущими отменами и тех, у кого перед выплатой заблокирован баланс. Карточки водителей и машин он не правит без вашего явного запроса — в парке за такой правкой стоит живой человек и его смена. Выводы агент подкрепляет цифрами из тех же разделов, откуда их взял.",
        "Лимиты у Fleet API жёсткие и разные по разделам: список заказов отдаётся в разы медленнее машин и транзакций, а выгрузка за длинный период упирается и в размер страницы, и в частоту запросов. Поэтому период агент режет на куски, идёт по страницам и заранее говорит, сколько это займёт, а не обрывает отчёт на середине. Треки и транзакции он поднимает точечно, по конкретным заказам, а не по всему парку сразу, и прямо сообщает, если раздел закрыт и данных нет."
      ],
      "requirements": [
        "Подключённый кабинет автопарка на fleet.yandex.ru",
        "Сотрудник с ролью «Директор» в парке",
        "Запас по времени: у Fleet API жёсткие лимиты выгрузок"
      ],
      "faq": [
        {
          "q": "Как подключить Yandex Fleet?",
          "a": "Тремя значениями из кабинета fleet.yandex.ru: секретный API-ключ, идентификатор клиента и идентификатор партнёра (park_id). Ключи создаются в разделе «Настройки» → «API» Диспетчерской, а редактировать его может только сотрудник с ролью «Директор»."
        },
        {
          "q": "Что агент видит в парке?",
          "a": "Автомобили, профили водителей и курьеров, заявки, заказы и их GPS-треки, транзакции, заблокированный баланс, условия работы и часы на линии."
        },
        {
          "q": "Пишет ли агент в Fleet?",
          "a": "По умолчанию агент читает данные парка и собирает по ним отчёты. Изменения в карточках водителей и машин он не вносит без вашего явного запроса."
        },
        {
          "q": "Почему выгрузка идёт медленно?",
          "a": "У Fleet API жёсткие лимиты, и список заказов отдаётся заметно медленнее остальных разделов. Длинные периоды агент собирает частями и предупреждает, сколько это займёт."
        }
      ]
    },
    "seo_en": {
      "headline": "Break down driver shifts and fleet orders right in chat",
      "scenarios": [
        {
          "title": "Shift breakdown",
          "desc": "The agent collects the orders from a shift and shows which drivers have the most cancellations and unfinished trips, and how that changes day to day."
        },
        {
          "title": "Transactions and payouts",
          "desc": "The agent reconciles driver and order transactions against the fleet's work rules and shows whose balance is blocked ahead of a payout."
        },
        {
          "title": "Who is really on the road",
          "desc": "The agent goes through driver profiles and car records and shows who actually takes shifts and who is merely listed in the fleet."
        },
        {
          "title": "Tracks for disputed orders",
          "desc": "The agent pulls the GPS track of a specific order and the contractor's hours on the road when you need to settle a complaint or a disputed trip."
        },
        {
          "title": "Onboarding applications",
          "desc": "The agent goes through driver and courier applications, shows which ones have sat without movement and names those who signed up but never took a first order."
        },
        {
          "title": "Hours on the road this week",
          "desc": "The agent adds up contractor hours on the road day by day and shows who fell short of the fleet norm and who closes the week clearly overworked."
        }
      ],
      "how_it_works": [
        "The agent calls the Yandex Taxi Fleet API and reads the whole fleet: cars and the profiles of drivers and couriers, onboarding applications, orders together with their GPS tracks, transactions and blocked balance, the fleet work rules and the contractors' hours on the road. Out of these pieces it assembles a shift breakdown, a reconciliation of transactions against the work rules and a picture of who really takes shifts and who is merely listed.",
        "Every request here is bound to a specific fleet: the partner id goes into the header, into the parameters and into the request body, so the agent always works within the boundaries of one fleet and never mixes data from different ones. An order in Fleet is not a single row but a bundle with a driver, a car, a track and transactions, and the order status on its own does not answer whether the passenger was delivered: for that the agent goes to the track and to the transaction history.",
        "By its nature the work here is read-only: the agent builds reports, pulls the track for a disputed trip, shows the drivers with growing cancellations and the ones whose balance is blocked ahead of a payout. It does not edit driver or car records without your explicit request — behind such an edit in a fleet stands a living person and their shift. The agent backs its conclusions with figures from the same sections it took them from.",
        "The Fleet API limits are hard and differ by section: the order list is returned many times slower than cars and transactions, and an export over a long period runs into both the page size and the request rate. So the agent cuts the period into chunks, walks the pages and says upfront how long it will take instead of breaking the report off halfway. Tracks and transactions it pulls pointwise, for specific orders rather than for the whole fleet at once, and it states plainly when a section is closed and there is no data."
      ],
      "requirements": [
        "An active fleet account on fleet.yandex.ru",
        "An employee with the Director role in the fleet",
        "Patience for exports: the Fleet API has hard rate limits"
      ],
      "faq": [
        {
          "q": "How do I connect Yandex Fleet?",
          "a": "With three values from the fleet.yandex.ru account: the secret API key, the client id and the partner id (park_id). Keys are created in the Dispatcher under Settings, API, and only a staff member with the Director role can edit them."
        },
        {
          "q": "What does the agent see in the fleet?",
          "a": "Cars, driver and courier profiles, applications, orders and their GPS tracks, transactions, blocked balance, work rules and hours on the road."
        },
        {
          "q": "Does the agent write to Fleet?",
          "a": "By default the agent reads fleet data and builds reports on it. It makes no changes to driver or car records without your explicit request."
        },
        {
          "q": "Why is the export so slow?",
          "a": "The Fleet API has hard limits, and the order list is returned noticeably slower than other sections. The agent collects long periods in chunks and warns you upfront how long it will take."
        }
      ]
    }
  },
  {
    "key": "yandex_mail",
    "name": "Яндекс Почта",
    "description": "Электронная почта Яндекс 360 для бизнеса",
    "category": "yandex",
    "auth_flow": "device_code",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Разбирайте почту Яндекс 360 и отвечайте прямо из чата",
      "scenarios": [
        {
          "title": "Поиск писем по теме",
          "desc": "Агент найдёт письма по теме, отправителю или папке и вернёт выжимку по переписке, не заставляя листать ящик руками."
        },
        {
          "title": "Ответ от вашего имени",
          "desc": "Агент подготовит ответ или новое письмо с вложениями и отправит его с вашего адреса после того, как вы одобрите текст."
        },
        {
          "title": "Разбор входящих",
          "desc": "Агент разложит письма по папкам, отметит разобранные прочитанными и покажет, какие обращения остались без ответа."
        },
        {
          "title": "Сводка по почте за сутки",
          "desc": "Агент по расписанию пришлёт сводку: сколько писем пришло за сутки, что среди них важное и что ждёт ответа второй день."
        },
        {
          "title": "Вложения из писем",
          "desc": "Агент найдёт письма со счетами и актами, разберёт вложения и сведёт их в один список — суммы, даты и отправителя, — не выкачивая ящик целиком."
        },
        {
          "title": "Пересылка нужному человеку",
          "desc": "Агент найдёт письмо по теме и отправителю, подготовит пересылку коллеге с короткой сопроводительной запиской и покажет текст до отправки."
        }
      ],
      "how_it_works": [
        "С почтой агент работает не через веб-интерфейс, а по тем же протоколам, что и обычный почтовый клиент: читает ящик по IMAP, отправляет по SMTP. Он проходит по папкам, находит письма по теме, отправителю, дате или папке, разбирает текст и вложения и возвращает выжимку по переписке вместо списка заголовков. На этом же строятся разбор входящих и суточная сводка: что пришло, что важное и что ждёт ответа второй день.",
        "IMAP хранит письма папками, а не диалогами, поэтому переписку агент собирает сам — по теме и служебным заголовкам цепочки, — а не получает готовым тредом. Отбор идёт на стороне сервера: агент просит ящик выбрать письма по отправителю, дате или папке и выкачивает целиком только выбранное, поэтому за десятком нужных писем не читает тысячу. Вложения он разбирает у тех же писем, а тяжёлые файлы называет именем и размером, не пересказывая содержимое.",
        "Письма агент готовит, но не отправляет молча: текст ответа, нового письма или пересылки вы одобряете до отправки, потому что отозвать ушедшее по SMTP письмо нельзя. Остальные действия — те же, что у почтового клиента: пометить прочитанным, перенести между папками, удалить. Разбор входящих агент делает пачками и называет, что именно и куда переложил, а на удаление писем спрашивает отдельно.",
        "Работа идёт правами mail:imap_full и mail:smtp, а токен продлевается сам, так что подтверждать доступ заново не приходится; отозвали его в Яндекс ID — агент сразу скажет, что подключение нужно восстановить, вместо молчаливых повторов. Число одновременных IMAP-сессий у ящика ограничено, поэтому агент работает одним соединением и переиспользует его, а длинные выборки читает порциями по папкам. Если писем по запросу нет, он так и говорит."
      ],
      "requirements": [
        "Аккаунт Яндекс ID того ящика, чью почту подключаете.",
        "Агент читает все папки ящика и отправляет письма от вашего имени.",
        "Другие ящики организации агенту не видны."
      ],
      "faq": [
        {
          "q": "Как подключить Яндекс Почту?",
          "a": "По коду подтверждения Яндекс ID: нажмите «Подключить», введите код на странице Яндекса и подтвердите доступ под тем адресом, чью почту подключаете. Заранее в настройках почты, в разделе «Почтовые программы», включите доступ по IMAP и пункт «Пароли приложений и OAuth-токены»."
        },
        {
          "q": "Что агент видит в почте?",
          "a": "Папки и письма ящика по IMAP: тему, отправителя, дату, текст и вложения — только того адреса, под которым подтверждён код доступа."
        },
        {
          "q": "Отправляет ли агент письма сам?",
          "a": "Агент готовит письмо и отправляет его по SMTP с вашего адреса, а также отвечает на письма и пересылает их. Отправка идёт после того, как вы одобрили текст."
        },
        {
          "q": "Что ещё агент делает с письмами?",
          "a": "Помечает прочитанными, переносит между папками и удаляет — те же действия, что доступны обычному почтовому клиенту по IMAP."
        }
      ]
    },
    "seo_en": {
      "headline": "Clear your Yandex 360 inbox and reply from chat",
      "scenarios": [
        {
          "title": "Finding emails by subject",
          "desc": "The agent finds messages by subject, sender or folder and returns a summary of the thread, so you do not have to scroll the mailbox by hand."
        },
        {
          "title": "A reply in your name",
          "desc": "The agent drafts a reply or a new message with attachments and sends it from your address once you approve the text."
        },
        {
          "title": "Clearing the inbox",
          "desc": "The agent files messages into folders, marks the handled ones as read and shows which requests are still waiting for an answer."
        },
        {
          "title": "Daily mail digest",
          "desc": "On a schedule the agent sends a digest: how many emails arrived over the day, what matters among them and what has been waiting for a reply a second day."
        },
        {
          "title": "Attachments out of your mail",
          "desc": "The agent finds messages with invoices and acts, parses the attachments and pulls them into one list — amounts, dates and sender — without downloading the whole mailbox."
        },
        {
          "title": "Forwarding to the right person",
          "desc": "The agent finds a message by subject and sender, prepares a forward to a colleague with a short covering note and shows you the text before it goes out."
        }
      ],
      "how_it_works": [
        "The agent works with mail not through the web interface but over the same protocols an ordinary mail client uses: it reads the mailbox over IMAP and sends over SMTP. It walks the folders, finds messages by subject, sender, date or folder, parses the body and attachments and returns a summary of the thread instead of a list of headers. Clearing the inbox and the daily digest are built on the same ground: what arrived, what matters and what has been waiting for a reply a second day.",
        "IMAP stores messages in folders rather than conversations, so the agent assembles a thread itself — from the subject and the threading headers — instead of receiving one ready-made. The selection happens on the server side: the agent asks the mailbox to pick messages by sender, date or folder and downloads only that selection in full, so it never reads a thousand messages to find ten. Attachments are parsed for those same messages, and heavy files are named by title and size rather than retold.",
        "The agent drafts messages but never sends them silently: you approve the text of a reply, a new message or a forward before it goes out, because a message already sent over SMTP cannot be recalled. The rest of the actions are those of a mail client: mark as read, move between folders, delete. Inbox clearing is done in batches, and the agent states exactly what it filed where, while deleting messages is confirmed separately.",
        "The work runs on the mail:imap_full and mail:smtp permissions, and the token renews itself, so access never has to be confirmed again; revoke it in Yandex ID and the agent says straight away that the connection has to be restored instead of retrying in silence. A mailbox allows only a limited number of simultaneous IMAP sessions, so the agent keeps one connection and reuses it, reading long selections folder by folder. When a search turns up no messages, it says so."
      ],
      "requirements": [
        "A Yandex ID account for the mailbox you are connecting.",
        "The agent reads every folder and sends mail on your behalf.",
        "Other mailboxes in the organization stay invisible to it."
      ],
      "faq": [
        {
          "q": "How do I connect Yandex Mail?",
          "a": "With a Yandex ID confirmation code: click Connect, enter the code on the Yandex page and confirm access under the address whose mail you are connecting. Beforehand, in mail settings under email clients, turn on IMAP access and the option for app passwords and OAuth tokens."
        },
        {
          "q": "What does the agent see in the mailbox?",
          "a": "Folders and messages over IMAP: subject, sender, date, body and attachments — only for the address whose access code was confirmed."
        },
        {
          "q": "Does the agent send emails itself?",
          "a": "The agent composes the message and sends it over SMTP from your address, and it can also reply and forward. Sending happens after you approve the text."
        },
        {
          "q": "What else does the agent do with email?",
          "a": "Marks messages as read, moves them between folders and deletes them — the same actions any ordinary mail client has over IMAP."
        }
      ]
    }
  },
  {
    "key": "yandex_market",
    "name": "Яндекс Маркет",
    "description": "Маркетплейс — кампании, заказы, товары, цены, остатки",
    "category": "marketplaces",
    "auth_flow": "device_code",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Разбирайте продажи, цены и буст продаж Маркета прямо в чате",
      "scenarios": [
        {
          "title": "Сводка продаж по кампаниям Маркета",
          "desc": "Агент соберёт заказы и выручку по всем кампаниям и моделям размещения (FBY/FBS/DBS) и покажет динамику по неделям."
        },
        {
          "title": "Контроль цен и остатков",
          "desc": "Агент сверит цены и остатки на Маркете с учётной системой, найдёт расхождения и карточки, которые скрыты из продажи."
        },
        {
          "title": "Разбор невыкупов и возвратов",
          "desc": "Агент проанализирует невыкупленные заказы и возвраты за период, сгруппирует по причинам и посчитает потери на логистике."
        },
        {
          "title": "Ставки буста продаж",
          "desc": "Агент покажет текущие ставки по SKU, подберёт рекомендации под целевую долю показов и применит их только после вашего подтверждения — в копейках, без ошибки в сто раз."
        },
        {
          "title": "Отзывы без ответа",
          "desc": "Агент соберёт свежие отзывы, ответит по шаблону на типовые вопросы и благодарности, а негатив вынесет вам — жалобы в автоответ он не отдаёт."
        },
        {
          "title": "Тревоги из кабинета",
          "desc": "Агент напишет в чат сразу, как Маркет пришлёт запрос отмены, устаревшие остатки, карантин цены или смену статуса карточки, — без опроса по расписанию."
        }
      ],
      "how_it_works": [
        "Агент работает с кабинетом Маркета по OAuth-токену Яндекса и видит обе плоскости сразу — уровень кабинета и уровень отдельного магазина: заказы, остатки, цены, буст продаж, отзывы и финансовые отчёты. Первую ловушку Маркета он обходит сам: часть методов Partner API ждёт идентификатор бизнеса, часть — идентификатор кампании, и перепутанный уровень даёт «не найдено» на живых данных. Вторая ловушка — форматы дат: разные методы ждут разные, и агент подставляет нужный на каждом.",
        "Заказы агент забирает как по одному магазину, так и по всем магазинам кабинета одной лентой — без ручного перебора кампаний. Воронку «показы → корзина → заказ → доставлено» и процент выкупа по SKU он получает одним асинхронным отчётом «Аналитика продаж», а не сотнями запросов по каждой кампании: там, где наивная автоматизация взрывается на десятках магазинов, у агента один отчёт. Генерация отчётов у Маркета жёстко лимитирована, поэтому агент планирует запуски и дожидается готовности, а не долбит эндпоинт.",
        "Финансы агент берёт из официальных отчётов, а не из пересчёта заказов: помесячный оборот и все услуги Маркета — из united-orders, взаиморасчёты по неделям — из united-netting. Excel-выгрузки Маркета со «Сводками» и русскими шапками он разбирает по содержимому листов, а не по их порядку, — поэтому очередной сдвиг листов в отчёте не превращается в перепутанные цифры. Сами отчёты Маркет отдаёт асинхронно: агент ставит задачу, дожидается готового файла и разбирает его сам, без ручной выгрузки из кабинета.",
        "Буст продаж — полный цикл: текущие ставки по SKU, рекомендации под целевую долю показов, применение. Ставки Маркет принимает в копейках — агент не ошибётся в сто раз. Массовые операции (цены, остатки, ставки, ответы на отзывы) идут чанками с учётом особенности Маркета: ошибка в одном элементе откатывает весь пакет, поэтому агент проверяет результат каждого чанка и повторяет именно проблемные. На отзывы он умеет отвечать массово по шаблону-генератору, но негатив в автоответ не отдаёт — жалобы требуют человека.",
        "Часть событий приходит без опроса: агент слушает уведомления Маркета о смене статуса и подстатуса заказа, изменении даты доставки и состава заказа, запросе отмены, устаревших остатках, карантине цены и смене статуса карточки. Права ключа он диагностирует честно: «данных нет» от Маркета часто означает нехватку прав доступа, а не пустоту, и тогда агент попросит переподключить интеграцию с нужными правами, вместо того чтобы отрапортовать ноль продаж. Любое изменение — цены, ставки, ответы — сначала показывается планом и применяется только после вашего подтверждения."
      ],
      "requirements": [
        "Аккаунт Яндекса с доступом к кабинету партнёра Маркета",
        "Хотя бы одна кампания в кабинете — FBY, FBS или DBS",
        "Роль выше «Контент-менеджера» — ему раздел API недоступен"
      ],
      "faq": [
        {
          "q": "Как подключается Яндекс Маркет?",
          "a": "Через OAuth-авторизацию Яндекса: вы входите под аккаунтом, у которого есть доступ к кабинету партнёра, — API-ключи копировать не нужно. Есть и вариант подключения по статическому API-ключу из кабинета."
        },
        {
          "q": "Что агент видит в кабинете Маркета?",
          "a": "Кампании, заказы, товары, цены и остатки — те разделы Partner API, к которым у вашего аккаунта есть доступ. Права определяются ролью аккаунта в кабинете."
        },
        {
          "q": "Можно ли работать с несколькими кампаниями сразу?",
          "a": "Да. Агент видит все кампании подключённого кабинета и может сводить их в один отчёт — например, сравнить FBY и FBS по марже."
        }
      ]
    },
    "seo_en": {
      "headline": "Work Market sales, prices and boost bids right in chat",
      "scenarios": [
        {
          "title": "Sales summary across Market campaigns",
          "desc": "The agent collects orders and revenue across every campaign and fulfillment model (FBY/FBS/DBS) and shows the trend week by week."
        },
        {
          "title": "Price and stock control",
          "desc": "The agent reconciles Market prices and stock against your accounting system and finds the discrepancies and the listings hidden from sale."
        },
        {
          "title": "Unredeemed orders and returns",
          "desc": "The agent analyzes unredeemed orders and returns for the period, groups them by reason and counts what the logistics cost you."
        },
        {
          "title": "Sales boost bids",
          "desc": "The agent shows the current bids per SKU, works out recommendations for a target share of impressions and applies them only after your confirmation — in kopecks, never off by a hundred."
        },
        {
          "title": "Reviews with no reply",
          "desc": "The agent collects fresh reviews, answers routine questions and thank-yous from a template and hands the negative ones to you — complaints never go into an auto-reply."
        },
        {
          "title": "Alerts from the cabinet",
          "desc": "The agent posts to chat the moment Market sends a cancellation request, expired stock, a price quarantine or an offer card status change — with no polling on a schedule."
        }
      ],
      "how_it_works": [
        "The agent works with the Market cabinet over a Yandex OAuth token and sees both planes at once — the cabinet level and the individual shop level: orders, stock, prices, sales boost, reviews and financial reports. It handles Market's first trap itself: some Partner API methods expect the business identifier, others the campaign identifier, and the wrong level returns \"not found\" on live data. The second trap is date formats: different methods expect different ones, and the agent supplies the right one for each.",
        "Orders come either for a single shop or for every shop in the cabinet as one feed — no manual walk over campaigns. The \"impressions → cart → order → delivered\" funnel and the buyout rate per SKU come from a single asynchronous Sales Analytics report instead of hundreds of per-campaign calls: where naive automation explodes on dozens of shops, the agent has one report. Market rate-limits report generation hard, so the agent schedules the runs and waits for readiness instead of hammering the endpoint.",
        "Financials come from the official reports rather than from re-adding orders: monthly turnover and every Market service from united-orders, weekly settlements from united-netting. Market's Excel exports with their summary sheets and Russian headers are parsed by sheet content, not by sheet order — so the next reshuffle of sheets in the export does not turn into scrambled numbers. Market hands those reports over asynchronously: the agent queues the job, waits for the finished file and parses it itself, with no manual export from the cabinet.",
        "Sales boost is the full cycle: current bids per SKU, recommendations for a target share of impressions, and applying them. Market takes bids in kopecks — the agent will not be off by a factor of a hundred. Bulk operations (prices, stock, bids, review replies) run in chunks with Market's quirk in mind: one bad item rolls back the whole batch, so the agent checks the result of every chunk and retries exactly the failing ones. It can reply to reviews in bulk from a template generator, but never auto-replies to negatives — complaints need a human.",
        "Some events arrive without polling: the agent listens to Market notifications about order status and substatus changes, delivery date and order composition changes, cancellation requests, expired stock, price quarantine and offer card status changes. It diagnoses key permissions honestly: \"no data\" from Market often means missing access rights rather than an empty result, and in that case the agent asks you to reconnect the integration with the right permissions instead of reporting zero sales. Any change — prices, bids, replies — is shown as a plan first and applied only after your confirmation."
      ],
      "requirements": [
        "A Yandex account with access to the Market partner cabinet",
        "At least one campaign in the cabinet — FBY, FBS or DBS",
        "A role above content manager — it cannot open the API section"
      ],
      "faq": [
        {
          "q": "How does Yandex Market connect?",
          "a": "Through Yandex OAuth: you sign in with an account that has access to the partner cabinet, so there are no API keys to copy. There is also the option to connect with a static API key from the cabinet."
        },
        {
          "q": "What does the agent see in the Market cabinet?",
          "a": "Campaigns, orders, products, prices and stock — the Partner API sections your account has access to. Permissions follow your account's role in the cabinet."
        },
        {
          "q": "Can it work with several campaigns at once?",
          "a": "Yes. The agent sees every campaign in the connected cabinet and can roll them into a single report — comparing FBY and FBS by margin, for example."
        }
      ]
    }
  },
  {
    "key": "yandex_market_api_key",
    "name": "Яндекс Маркет (API-ключ)",
    "description": "Прямая интеграция с Яндекс Маркет Partner API по API-ключу — для продавцов со статическим токеном из кабинета партнёра",
    "category": "marketplaces",
    "auth_flow": "credentials",
    "offered_to_newcomers": false,
    "catalog_visibility": "inside_primary",
    "short_name": "Яндекс Маркет API",
    "variant_of": "yandex_market"
  },
  {
    "key": "yandex_metrica",
    "name": "Яндекс Метрика",
    "description": "Веб-аналитика — счётчики, цели, отчёты и логи посещений",
    "category": "analytics",
    "auth_flow": "device_code",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Разбирайте падение трафика и конверсии прямо в чате",
      "scenarios": [
        {
          "title": "Разобрать падение трафика или конверсии",
          "desc": "Агент сравнит период с предыдущим, найдёт источники и страницы, где просели визиты и цели, и покажет, что именно сломалось."
        },
        {
          "title": "Отчёт по источникам и целям",
          "desc": "Агент сведёт трафик по каналам, посчитает конверсию в цели и подскажет, какие источники приводят покупателей, а какие сливают бюджет."
        },
        {
          "title": "Поиск аномалий посещаемости",
          "desc": "Агент отследит всплески и провалы по счётчику, свяжет их с источниками и устройствами и предупредит о резких изменениях."
        },
        {
          "title": "Сводка по метрикам без захода в кабинет",
          "desc": "Агент подтянет ключевые показатели счётчика — визиты, отказы, конверсии — и пришлёт короткую сводку прямо в чат."
        },
        {
          "title": "Путь клиента до заявки",
          "desc": "Агент поднимет логи посещений и покажет, через какие страницы шли визиты с достижением цели и на каком шаге остальные обрывали путь."
        },
        {
          "title": "Все сайты в одной таблице",
          "desc": "Агент пройдёт по всем доступным счётчикам, сведёт визиты, отказы и конверсию по каждому сайту в одну таблицу и покажет, где отдача просела."
        }
      ],
      "how_it_works": [
        "Агент начинает со списка счётчиков, доступных вашему аккаунту, и дальше работает через API Метрики: строит отчёты по визитам, источникам, страницам и устройствам, считает достижения целей и конверсию, а когда агрегатов не хватает — спускается к логам посещений за подробностями отдельного визита. Период он всегда сравнивает с предыдущим, чтобы просадка была видна как изменение, а не как одно число.",
        "Две особенности Метрики агент держит в голове. Первая: данные дозревают — свежий хвост суток обработан не полностью, поэтому «вчера против позавчера» легко показывает ложный провал, и для сравнений агент берёт закрытые периоды. Вторая: конверсия существует ровно настолько, насколько в счётчике заведены цели. Если цель не настроена, в отчёте её не будет — и агент скажет, что цели нет, а не что конверсия нулевая.",
        "На запись агент в Метрику не ходит: он не создаёт и не переименовывает цели, не трогает фильтры, сегменты и настройки счётчика. Вся работа — чтение и разбор: сведение трафика по каналам, поиск источников и страниц, где просели визиты и цели, всплески и провалы посещаемости в связке с источниками и устройствами, короткая сводка ключевых показателей вместо захода в кабинет.",
        "Отчёты агент строит через API отчётов: метрики и измерения он подбирает под вопрос, а не тянет весь набор, и длинный период разбивает на окна. Когда агрегатов не хватает, он уходит в логи посещений — те не отвечают сразу, а готовят выгрузку, поэтому детализация по визитам приходит позже сводки. Частоту запросов агент выдерживает сам, а если данных за период нет или счётчик недоступен, он скажет об этом прямо, а не покажет пустую таблицу."
      ],
      "requirements": [
        "Аккаунт Яндекса с правами на нужные счётчики",
        "Достаточно доступа «Только просмотр» — Метрика читается",
        "Подключение в один клик: токены и ключи копировать не нужно"
      ],
      "faq": [
        {
          "q": "Как подключить Яндекс Метрику?",
          "a": "Входом в аккаунт Яндекса в один клик: вы подтверждаете доступ, и агент видит счётчики, к которым у вас есть права. Копировать токены и ключи не нужно."
        },
        {
          "q": "Какие данные видит агент?",
          "a": "Счётчики, цели, отчёты по визитам, источникам и устройствам и логи посещений — по тем счётчикам, к которым у вашего аккаунта есть доступ."
        },
        {
          "q": "Может ли агент что-то изменить в Метрике?",
          "a": "Нет. Метрика используется на чтение: агент только собирает и анализирует отчёты, ничего не меняя в настройках счётчиков."
        },
        {
          "q": "Насколько свежие данные получает агент?",
          "a": "Агент запрашивает отчёты через Reporting API по вашему запросу, поэтому данные соответствуют актуальному состоянию счётчика с учётом обычной задержки обработки Метрики."
        }
      ]
    },
    "seo_en": {
      "headline": "Dig into traffic and conversion drops right in the chat",
      "scenarios": [
        {
          "title": "Digging into a traffic or conversion drop",
          "desc": "The agent compares the period with the previous one, finds the sources and pages where visits and goals slipped and shows what actually broke."
        },
        {
          "title": "Report on sources and goals",
          "desc": "The agent rolls up traffic by channel, calculates goal conversion and points out which sources bring buyers and which drain the budget."
        },
        {
          "title": "Spotting traffic anomalies",
          "desc": "The agent tracks spikes and dips on the counter, ties them to sources and devices and warns you about sharp changes."
        },
        {
          "title": "Metrics digest without opening the cabinet",
          "desc": "The agent pulls the counter's key numbers — visits, bounces, conversions — and sends a short digest straight to chat."
        },
        {
          "title": "The path to a conversion",
          "desc": "The agent pulls the visit logs and shows which pages the sessions that reached a goal walked through and at which step the rest broke off."
        },
        {
          "title": "Every site in one table",
          "desc": "The agent goes through all the counters it can reach, rolls visits, bounces and conversion for each site into one table and shows where the returns have slipped."
        }
      ],
      "how_it_works": [
        "The agent starts from the list of counters your account can reach and then works through the Metrica API: it builds reports on visits, sources, pages and devices, counts goal completions and conversion, and when the aggregates are not enough it drops down to visit logs for the details of an individual session. It always compares a period against the previous one, so a drop shows up as a change rather than as a single number.",
        "The agent keeps two Metrica specifics in mind. First, data ripens: the freshest tail of the day is not fully processed, so «yesterday versus the day before» easily shows a false dip, and for comparisons the agent takes closed periods. Second, conversion exists exactly as far as goals are configured in the counter. If a goal is not set up it will not appear in the report — and the agent says the goal is missing rather than that conversion is zero.",
        "The agent never writes to Metrica: it does not create or rename goals and does not touch filters, segments or counter settings. All the work is reading and analysis: rolling up traffic by channel, finding the sources and pages where visits and goals slipped, spikes and dips in traffic tied to sources and devices, and a short digest of the key numbers instead of opening the cabinet.",
        "The agent builds reports through the reporting API: it picks the metrics and dimensions the question needs rather than pulling the whole set, and splits a long period into windows. When the aggregates are not enough it goes to the visit logs — those do not answer at once but prepare an export, so per-visit detail arrives after the summary. The agent holds the request rate itself, and if there is no data for the period or the counter is unavailable it says so directly instead of showing an empty table."
      ],
      "requirements": [
        "A Yandex account with rights to the counters you need",
        "View-only access is enough — Metrica is used read-only",
        "One-click sign-in: no tokens or keys to copy"
      ],
      "faq": [
        {
          "q": "How do I connect Yandex Metrica?",
          "a": "By signing in to your Yandex account in one click: you confirm access and the agent sees the counters you have rights to. No tokens or keys to copy."
        },
        {
          "q": "What data does the agent see?",
          "a": "Counters, goals, reports on visits, sources and devices, and visit logs — for the counters your account has access to."
        },
        {
          "q": "Can the agent change anything in Metrica?",
          "a": "No. Metrica is used read-only: the agent only collects and analyzes reports, changing nothing in the counter settings."
        },
        {
          "q": "How fresh is the data the agent gets?",
          "a": "The agent requests reports through the Reporting API on demand, so the data matches the counter's current state, allowing for Metrica's usual processing delay."
        }
      ]
    }
  },
  {
    "key": "yandex_tracker",
    "name": "Яндекс Трекер",
    "description": "Управление задачами и проектами — создание, отслеживание, спринты и очереди",
    "category": "yandex",
    "auth_flow": "device_code",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Разбирайте очереди Яндекс Трекера и заводите задачи из чата",
      "scenarios": [
        {
          "title": "Разбор очередей",
          "desc": "Агент соберёт задачи из ваших очередей и покажет, что просрочено, что осталось без исполнителя и на ком висит больше всего."
        },
        {
          "title": "Задача из переписки",
          "desc": "Агент заведёт задачу в нужной очереди с описанием, исполнителем, приоритетом и сроком прямо из обсуждения в чате."
        },
        {
          "title": "Сводка по спринту",
          "desc": "Агент пришлёт по расписанию итоги спринта: что закрыто, что переезжает дальше и где задачи стоят без движения."
        },
        {
          "title": "Статусы, комментарии и время",
          "desc": "Агент переведёт задачу по статусам, допишет комментарий, обновит чек-лист и спишет затраченное время в worklog."
        },
        {
          "title": "Кто кого блокирует",
          "desc": "Агент пройдёт по связям задач и покажет цепочки блокировок: какая задача держит остальные, у кого она в работе и сколько уже стоит без движения."
        },
        {
          "title": "Куда ушло время",
          "desc": "Агент соберёт записи worklog за период и покажет, сколько часов легло на каждый проект, очередь и человека, а где списаний не было вовсе."
        }
      ],
      "how_it_works": [
        "Агент ходит в API Трекера на api.tracker.yandex.net и первым делом спрашивает, кем он подключён: от этого зависит, какие очереди ему вообще видны. Дальше он забирает задачи, комментарии, чек-листы, связи, спринты, доски и проекты и считает по ним то, что в интерфейсе приходится собирать глазами: что просрочено, что осталось без исполнителя, на ком висит больше всего и где задачи стоят без движения.",
        "Трекер устроен вокруг очередей, и это не просто папки: у каждой свой набор полей, свои статусы и свой воркфлоу. Перевести задачу можно только по разрешённому в очереди переходу — произвольный статус API не примет, — поэтому агент сверяется с доступными переходами до правки, а не после отказа. Вторая граница — организация: аккаунт может состоять в нескольких, и очередь из соседней организации для подключения просто не существует.",
        "На запись агент заводит задачу в нужной очереди с описанием, исполнителем, приоритетом и сроком, двигает её по статусам, дописывает комментарии, обновляет чек-листы и списывает время в worklog. Комментарий и смена статуса видны всей команде и уходят в уведомления, поэтому массовые изменения — перевод пачки задач, переназначение исполнителей — агент показывает списком и выполняет после вашего подтверждения.",
        "Доступ подтверждается кодом на странице Яндекс ID, запросы идут от имени рабочего аккаунта и в пределах его прав. Запрашиваются tracker:read и tracker:write, но последнее слово за ролью в организации: скоуп токена прав не добавляет, он лишь не даёт выйти за уже имеющиеся. Задачи агент забирает поисковым запросом на стороне Трекера и постранично, а не перебором очередей, поэтому крупный проект отвечает так же быстро, как мелкий. Частоту запросов он держит сам, а если очередь не видна из-за прав или организации, называет причину прямо."
      ],
      "requirements": [
        "Аккаунт Яндекс ID состоит в организации с Трекером",
        "Роль «Полный доступ» или «Администратор» для создания задач",
        "Нужные очереди — в той же организации, что и аккаунт"
      ],
      "faq": [
        {
          "q": "Как подключить Яндекс Трекер?",
          "a": "По коду подтверждения Яндекс ID: нажмите «Подключить», введите код на странице Яндекса и подтвердите доступ рабочим аккаунтом. Запросы к API идут от имени этого пользователя и в пределах его прав в организации."
        },
        {
          "q": "Что агент видит в Трекере?",
          "a": "Очереди, задачи, комментарии, чек-листы, связи, спринты, доски и проекты — ровно те, что открыты подключённому пользователю в «Правах доступа» очереди."
        },
        {
          "q": "Может ли агент создавать задачи?",
          "a": "Да, если у пользователя «Полный доступ» или «Администратор». Роль «Только чтение», которая стоит по умолчанию без подписки на Трекер, позволяет лишь смотреть задачи."
        },
        {
          "q": "Почему агент не видит нужную очередь?",
          "a": "Либо очередь не открыта пользователю в её «Правах доступа», либо она лежит в другой организации: состав организаций аккаунта видно в «Администрирование» → «Организации»."
        }
      ]
    },
    "seo_en": {
      "headline": "Triage Yandex Tracker queues and file issues from chat",
      "scenarios": [
        {
          "title": "Going through the queues",
          "desc": "The agent collects issues from your queues and shows what is overdue, what has no assignee and who is carrying the most."
        },
        {
          "title": "An issue straight from the conversation",
          "desc": "The agent files an issue in the right queue with a description, assignee, priority and due date, right out of the chat discussion."
        },
        {
          "title": "Sprint summary",
          "desc": "On a schedule the agent sends the sprint results: what closed, what rolls over and where issues are stuck without movement."
        },
        {
          "title": "Statuses, comments and time",
          "desc": "The agent moves an issue through statuses, adds a comment, updates the checklist and logs spent time to the worklog."
        },
        {
          "title": "Who is blocking whom",
          "desc": "The agent walks the issue links and shows the blocking chains: which issue is holding the rest, who is working on it and how long it has stood still."
        },
        {
          "title": "Where the hours went",
          "desc": "The agent collects worklog entries for the period and shows how many hours landed on each project, queue and person, and where nothing was logged at all."
        }
      ],
      "how_it_works": [
        "The agent calls the Tracker API at api.tracker.yandex.net and its first question is who it is connected as: that determines which queues are visible to it at all. From there it pulls issues, comments, checklists, links, sprints, boards and projects and works out what the interface makes you piece together by eye: what is overdue, what has no assignee, who is carrying the most and where issues are stuck without movement.",
        "Tracker is built around queues, and those are not merely folders: each has its own set of fields, its own statuses and its own workflow. An issue can only be moved along a transition the queue allows — the API will not accept an arbitrary status — so the agent checks the available transitions before editing rather than after a rejection. The second boundary is the organization: an account may belong to several, and a queue in a neighbouring one simply does not exist for this connection.",
        "On the write side the agent files an issue in the right queue with a description, assignee, priority and due date, moves it through statuses, adds comments, updates checklists and logs time to the worklog. A comment and a status change are visible to the whole team and trigger notifications, so bulk changes — moving a batch of issues, reassigning owners — are shown as a list and carried out only after you confirm.",
        "Access is confirmed with a code on the Yandex ID page, and requests run on behalf of the work account and within its permissions. The tracker:read and tracker:write scopes are requested, but the role in the organization has the last word: a scope grants nothing extra, it only keeps the token inside rights the account already has. Issues are fetched through a search query on the Tracker side, page by page, rather than by walking queues, so a large project answers as fast as a small one. It holds the request rate itself, and when a queue is invisible because of permissions or the organization it names the reason directly."
      ],
      "requirements": [
        "A Yandex ID account that belongs to the organization with Tracker",
        "The Full access or Administrator role to create and edit issues",
        "The queues you need live in the same organization as the account"
      ],
      "faq": [
        {
          "q": "How do I connect Yandex Tracker?",
          "a": "With a Yandex ID confirmation code: click Connect, enter the code on the Yandex page and confirm access with your work account. API requests run on behalf of that user and within their permissions in the organization."
        },
        {
          "q": "What does the agent see in Tracker?",
          "a": "Queues, issues, comments, checklists, links, sprints, boards and projects — exactly the ones open to the connected user in the queue's access settings."
        },
        {
          "q": "Can the agent create issues?",
          "a": "Yes, if the user has Full access or Administrator. The Read-only role, which is the default without a Tracker subscription, allows viewing issues and nothing more."
        },
        {
          "q": "Why does the agent not see the queue I need?",
          "a": "Either the queue is not open to the user in its access settings, or it belongs to another organization: the organizations an account belongs to are listed under Administration, Organizations."
        }
      ]
    }
  },
  {
    "key": "yandex_webmaster",
    "name": "Яндекс Вебмастер",
    "description": "Яндекс Вебмастер — управление сайтами, индексация, поисковые запросы, диагностика, sitemap, обратные ссылки",
    "category": "analytics",
    "auth_flow": "device_code",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Ловите просадку позиций и запросов сайта прямо в чате",
      "scenarios": [
        {
          "title": "Просадка позиций и запросов",
          "desc": "Агент сравнит показы, клики и средние позиции по запросам за два периода и назовёт запросы и страницы, где сайт потерял выдачу."
        },
        {
          "title": "Индексация и выпавшие страницы",
          "desc": "Агент сверит страницы в поиске, найдёт исключённые URL и ответы сервера при обходе и покажет, что чинить в первую очередь."
        },
        {
          "title": "Диагностика и sitemap",
          "desc": "Агент соберёт проблемы сайта из диагностики, проверит состояние карт сайта и при необходимости добавит недостающий sitemap."
        },
        {
          "title": "Переобход обновлённых страниц",
          "desc": "Агент проверит остаток суточной квоты переобхода, отправит обновлённые URL роботу и проследит статус поставленных задач."
        },
        {
          "title": "Кто ссылается на сайт",
          "desc": "Агент соберёт внешние ссылки на сайт, покажет, какие домены появились и пропали за период, и положит рядом историю ИКС."
        },
        {
          "title": "Новый сайт под наблюдение",
          "desc": "Агент добавит хост в список сайтов, запустит проверку прав и напомнит, что версия с www — отдельный сайт со своей статистикой."
        }
      ],
      "how_it_works": [
        "Агент ходит в четвёртую версию API Вебмастера: сначала получает идентификатор пользователя, затем список ваших хостов, а дальше разбирает их по разделам — поисковые запросы с показами, кликами и средними позициями, обойдённые роботом URL с ответами сервера, страницы в поиске, внешние ссылки, карты сайта, проблемы диагностики и историю ИКС. Периоды он сравнивает попарно, чтобы просадка была видна по запросам и страницам.",
        "Главная ловушка Вебмастера — понятие сайта. Это не домен, а хост: example.com, www.example.com и версия по https считаются разными сайтами, у каждого свои права и своя статистика. Агент работает с тем хостом, который подтверждён под вашим логином, и не смешивает их данные. Сводку он собирает по каждому хосту отдельно, поэтому сравнение домена с его www-версией — это два обхода, а расхождение цифр между ними означает разные сайты, а не ошибку выгрузки.",
        "Пишет агент ограниченно и по делу: добавляет сайт в список, запускает проверку прав, добавляет недостающую карту сайта и отправляет обновлённые URL на переобход. Перед отправкой он смотрит остаток суточной квоты переобхода, чтобы не сжечь её на служебных страницах, а после — следит за статусом поставленных задач. Содержимое сайта, его позиции и выдачу это не меняет: робот лишь приходит раньше.",
        "Подключение — вход в аккаунт Яндекса по коду, с правами владельца хоста и подтверждения прав; токены копировать не нужно, доступ продлевается сам. Аналитику запросов агент опрашивает заметно медленнее остальных разделов — эта ручка лимитирована жёстче, — поэтому отчёт по большому сайту он собирает частями и говорит, за какой период уже посчитал. Длинные периоды он берёт окнами и складывает сам, а когда данных нет из-за прав или неподтверждённого хоста, говорит об этом прямо."
      ],
      "requirements": [
        "Доступ к корню сайта или к DNS-записям домена",
        "Полные права на сайт, если он заведён на другом логине"
      ],
      "faq": [
        {
          "q": "Как подключить Яндекс Вебмастер?",
          "a": "Входом в аккаунт Яндекса по коду — копировать токены не нужно. Агент увидит только сайты, заведённые в «Мои сайты» этого логина и подтверждённые файлом, метатегом или TXT-записью в DNS."
        },
        {
          "q": "Что агент видит в Вебмастере?",
          "a": "Список сайтов и их карточки, сводку и историю ИКС, поисковые запросы с показами, кликами и позициями, обойдённые роботом URL, страницы в поиске, внешние ссылки, sitemap и проблемы диагностики."
        },
        {
          "q": "Пишет ли агент в Вебмастер?",
          "a": "Да, ограниченно: он может добавить сайт, запустить проверку прав, отправить URL на переобход и добавить карту сайта. Содержимое сайта и его позиции при этом не меняются."
        },
        {
          "q": "Почему по сайту нет данных?",
          "a": "Либо права ещё не подтверждены — проверка занимает до суток, — либо сайт заведён на другом логине и вам не выдан полный доступ. Учтите, что example.com и www.example.com Вебмастер считает разными сайтами."
        }
      ]
    },
    "seo_en": {
      "headline": "Catch drops in your site's positions and queries in chat",
      "scenarios": [
        {
          "title": "Slipping positions and queries",
          "desc": "The agent compares impressions, clicks and average positions by query across two periods and names the queries and pages where the site lost ground."
        },
        {
          "title": "Indexing and dropped pages",
          "desc": "The agent checks which pages are in search, finds excluded URLs and crawler response codes and shows what to fix first."
        },
        {
          "title": "Diagnostics and sitemaps",
          "desc": "The agent collects site problems from diagnostics, checks the state of your sitemaps and adds a missing one when needed."
        },
        {
          "title": "Recrawling updated pages",
          "desc": "The agent checks how much of the daily recrawl quota is left, submits updated URLs to the robot and follows the status of the queued tasks."
        },
        {
          "title": "Who links to the site",
          "desc": "The agent collects the external links to the site, shows which domains appeared and disappeared over the period and lays the SQI history beside them."
        },
        {
          "title": "A new site under watch",
          "desc": "The agent adds a host to the site list, starts the verification check and reminds you that the www version is a separate site with statistics of its own."
        }
      ],
      "how_it_works": [
        "The agent calls the fourth version of the Webmaster API: first it gets the user identifier, then the list of your hosts, and from there it goes through them section by section — search queries with impressions, clicks and average positions, URLs crawled by the robot with their server responses, pages in search, external links, sitemaps, diagnostics problems and SQI history. It compares periods in pairs so that a drop is visible by query and by page.",
        "The main Webmaster trap is what counts as a site. It is not a domain but a host: example.com, www.example.com and the https version are treated as different sites, each with its own rights and its own statistics. The agent works with the host verified under your login and never mixes their data. It assembles the picture host by host, so comparing a domain with its www version is two passes rather than one request, and a gap between their numbers means different sites, not a broken export.",
        "The agent writes within limits and to the point: it adds a site to the list, starts a verification check, adds a missing sitemap and submits updated URLs for recrawl. Before submitting it looks at how much of the daily recrawl quota is left, so it is not burned on service pages, and afterwards it follows the status of the queued tasks. None of this changes the site's content, its positions or the search results: the robot simply arrives sooner.",
        "The connection is a sign-in to a Yandex account with a code, carrying host owner and verification rights; no tokens to copy, and access renews itself. The agent polls query analytics noticeably slower than the other sections — that endpoint is limited more tightly — so a report on a large site is assembled in parts and it tells you which period is already counted. Long ranges are taken in windows and stitched together, and when data is missing because of rights or an unverified host, it says so directly."
      ],
      "requirements": [
        "Access to the site root files or to the domain DNS records",
        "Full rights on the site if it is registered under another login"
      ],
      "faq": [
        {
          "q": "How do I connect Yandex Webmaster?",
          "a": "By signing in to your Yandex account with a code — no tokens to copy. The agent only sees the sites listed under My sites for that login and verified with a file, a meta tag or a DNS TXT record."
        },
        {
          "q": "What does the agent see in Webmaster?",
          "a": "The list of sites and their profiles, the SQI summary and history, search queries with impressions, clicks and positions, the URLs crawled by the robot, pages in search, external links, sitemaps and diagnostics problems."
        },
        {
          "q": "Does the agent write to Webmaster?",
          "a": "Yes, within limits: it can add a site, start a verification check, submit URLs for recrawl and add a sitemap. Nothing about the site's content or its positions changes in the process."
        },
        {
          "q": "Why is there no data for my site?",
          "a": "Either the rights are not verified yet — the check takes up to a day — or the site is registered under a different login and you were not granted full access. Keep in mind that Webmaster treats example.com and www.example.com as separate sites."
        }
      ]
    }
  },
  {
    "key": "yandex_wiki",
    "name": "Яндекс Вики",
    "description": "Корпоративная база знаний — страницы, разделы, динамические таблицы, вложения",
    "category": "yandex",
    "auth_flow": "device_code",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Отвечайте по регламентам из базы знаний Яндекс Вики",
      "scenarios": [
        {
          "title": "Ответ по регламенту",
          "desc": "Агент найдёт нужное в страницах базы знаний, соберёт ответ и укажет, на какой именно странице это записано."
        },
        {
          "title": "Страница с итогами встречи",
          "desc": "Агент заведёт страницу в нужном разделе, разложит итоги и решения по пунктам и приложит к ней файлы обсуждения."
        },
        {
          "title": "Динамическая таблица статусов",
          "desc": "Агент обновит строки динамической таблицы по расписанию и допишет короткую сводку в конец страницы."
        },
        {
          "title": "Ревизия раздела базы знаний",
          "desc": "Агент пройдёт по дереву страниц раздела, покажет, что давно не обновлялось, и соберёт список страниц-дублей."
        },
        {
          "title": "Обновить устаревшую инструкцию",
          "desc": "Агент перечитает текущую версию страницы, впишет изменения в нужные пункты и сохранит поверх свежего текста — чужие правки при этом не затрутся."
        },
        {
          "title": "Что лежит во вложениях",
          "desc": "Агент пройдёт по вложениям страниц раздела, скажет, какие файлы к ним приложены, и вытащит нужные цифры со ссылкой на страницу-источник."
        }
      ],
      "how_it_works": [
        "Агент работает с базой знаний через API на api.wiki.yandex.net: обходит дерево разделов и страниц, читает тексты, вложения и динамические таблицы. На этом он отвечает по внутренним регламентам и всегда называет страницу-источник, а при ревизии раздела показывает, что давно не обновлялось, и собирает список дублей — вопрос, на который в интерфейсе Вики отвечают перелистыванием дерева вручную.",
        "Страница в Вики адресуется своим путём: агент запрашивает её по slug и явно перечисляет нужные поля, потому что API не отдаёт всё содержимое по умолчанию. Отсюда практическое следствие: если страницу перенесли в другой раздел, её адрес меняется, и агент ищет заново по дереву и заголовку, а не считает, что документа больше нет. Ссылку в ответе он даёт на ту страницу, откуда взял факт.",
        "На запись агент заводит страницу в нужном разделе, раскладывает по пунктам итоги и решения, прикладывает файлы обсуждения, обновляет строки динамической таблицы по расписанию и дописывает сводку в конец. Правка страницы — это замена содержимого, поэтому перед сохранением агент перечитывает текущую версию и складывает новое поверх неё, а не поверх устаревшей копии. Удаление подстраниц он подтверждает у вас отдельно.",
        "Видит агент ровно то, что видит подключённый аккаунт, и правит только те страницы, где у аккаунта есть право на запись. Дерево разделов он обходит порциями, а не выкачивает базу знаний целиком: сначала оглавление, потом содержимое нужных страниц и вложений, поэтому большой раздел не превращается в сотни запросов подряд. Частоту он выдерживает сам, а закрытую страницу называет закрытой, вместо того чтобы ответить будто её не существует."
      ],
      "requirements": [
        "Организация в Яндекс 360 для бизнеса с подключённой Вики.",
        "Понимание, что нужно агенту: только чтение или ещё правки страниц."
      ],
      "faq": [
        {
          "q": "Как подключить Яндекс Вики?",
          "a": "По коду подтверждения Яндекс ID: нажмите «Подключить», введите код на странице Яндекса и подтвердите доступ обычным рабочим аккаунтом организации. Сервисным аккаунтам API Вики закрыт, а федеративным нужен IAM-токен Яндекс Облака."
        },
        {
          "q": "Что агент видит в Вики?",
          "a": "Ровно те страницы, разделы, вложения и динамические таблицы, что видны подключённому аккаунту: чего он не видит в Вики, того не будет и у агента."
        },
        {
          "q": "Может ли агент править страницы?",
          "a": "Да, если аккаунту выдана роль «Редактор» и выше: «Редактор» правит страницу, «Редактор +» ещё создаёт подстраницы и удаляет их. Роль «Читатель» даёт только чтение."
        },
        {
          "q": "Как открыть агенту нужную страницу?",
          "a": "На странице сверху нажмите кнопку текущего доступа («Всем сотрудникам» или «Некоторым сотрудникам»), в окне «Доступ к странице» добавьте подключённый аккаунт и выберите роль."
        }
      ]
    },
    "seo_en": {
      "headline": "Answer from your Yandex Wiki knowledge base",
      "scenarios": [
        {
          "title": "Answers straight from your internal policies",
          "desc": "The agent finds the right knowledge base pages, builds an answer and points to the exact page where it is written down."
        },
        {
          "title": "Meeting notes as a wiki page",
          "desc": "The agent creates a page in the right section, lays out outcomes and decisions point by point and attaches the files from the discussion."
        },
        {
          "title": "Dynamic status grid kept current",
          "desc": "The agent refreshes the rows of a dynamic grid on a schedule and adds a short summary at the end of the page."
        },
        {
          "title": "Knowledge base section audit",
          "desc": "The agent walks the page tree of a section, shows what has not been updated in a long time and collects a list of duplicate pages."
        },
        {
          "title": "Refresh an outdated policy page",
          "desc": "The agent re-reads the current version of the page, writes the changes into the right points and saves over the fresh text, so edits made by others are not wiped."
        },
        {
          "title": "What sits in the attachments",
          "desc": "The agent goes through the attachments of the pages in a section, says which files hang on what and pulls the figures you need with a link to the source page."
        }
      ],
      "how_it_works": [
        "The agent works with the knowledge base through the API at api.wiki.yandex.net: it walks the tree of sections and pages and reads texts, attachments and dynamic grids. On that basis it answers from your internal policies and always names the source page, and in a section audit it shows what has not been updated in a long time and collects a list of duplicates — a question the Wiki interface only answers by paging through the tree by hand.",
        "A Wiki page is addressed by its path: the agent requests it by slug and lists the fields it needs explicitly, because the API does not hand over the whole content by default. The practical consequence: if a page has been moved to another section its address changes, and the agent searches the tree and the title again instead of concluding that the document is gone. The link it puts in the answer points to the page the fact came from.",
        "On the write side the agent creates a page in the right section, lays out outcomes and decisions point by point, attaches the files from the discussion, refreshes the rows of a dynamic grid on a schedule and adds a summary at the end. Editing a page replaces its content, so before saving the agent re-reads the current version and lays the new text over that rather than over a stale copy. Deleting subpages is confirmed with you separately.",
        "The agent sees exactly what the connected account sees, and it edits only the pages that account may write to. It walks the section tree in portions instead of pulling the whole knowledge base down: the table of contents first, then the content of the pages and attachments it actually needs, so a large section does not turn into hundreds of requests in a row. It holds the request rate itself, and it calls a restricted page restricted instead of answering as though it did not exist."
      ],
      "requirements": [
        "A Yandex 360 for Business organization with Wiki enabled.",
        "A clear idea of what the agent needs: reading only, or edits too."
      ],
      "faq": [
        {
          "q": "How do I connect Yandex Wiki?",
          "a": "With a Yandex ID confirmation code: click Connect, enter the code on the Yandex page and approve access with a regular company work account. The Wiki API is closed to service accounts, and federated accounts need a Yandex Cloud IAM token."
        },
        {
          "q": "What does the agent see in Wiki?",
          "a": "Exactly the pages, sections, attachments and dynamic grids visible to the connected account: whatever it cannot see in Wiki will not reach the agent either."
        },
        {
          "q": "Can the agent edit pages?",
          "a": "Yes, if the account has the Editor role or higher: Editor edits a page, Editor + also creates and deletes subpages. The Reader role gives read access only."
        },
        {
          "q": "How do I give the agent access to a specific page?",
          "a": "At the top of the page click the current access button (All employees or Some employees), then in the Page access dialog add the connected account and pick a role."
        }
      ]
    }
  },
  {
    "key": "yandex_wordstat",
    "name": "Яндекс Вордстат",
    "description": "Статистика поисковых запросов — топ фраз, динамика, распределение по регионам",
    "category": "analytics",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Собирайте семантику под новую страницу прямо в чате",
      "scenarios": [
        {
          "title": "Семантика под новую страницу",
          "desc": "Агент соберёт топ фраз с вашим ключевым словом и похожие запросы за последние 30 дней и покажет, какими формулировками вас ищут."
        },
        {
          "title": "Сезонность спроса",
          "desc": "Агент построит динамику запросов по дням, неделям или месяцам и покажет подъёмы и провалы раньше, чем они дойдут до выручки."
        },
        {
          "title": "Спрос по регионам",
          "desc": "Агент разложит частотность фраз по регионам и городам и покажет, где спрос выше, чем ваша нынешняя доля присутствия."
        },
        {
          "title": "Проверка формулировок перед запуском",
          "desc": "Агент сравнит частотность нескольких вариантов названия или услуги и покажет, какой из них ищут, а какой в поиске почти не встречается."
        },
        {
          "title": "Спрос с телефонов",
          "desc": "Агент разложит частотность фразы по устройствам и покажет, какая доля спроса приходит с телефонов, а какая с десктопа, — за один период и регион."
        },
        {
          "title": "Длинный список фраз",
          "desc": "Агент наберёт частотность по списку из сотен фраз постепенно, примерно по запросу в полминуты, и вернёт готовую таблицу, не упёршись в лимит сервиса."
        }
      ],
      "how_it_works": [
        "Агент ходит в раздел wordstat Search API Yandex Cloud: отправляет фразу и получает топ запросов с этим словом, похожие формулировки за последние 30 дней, динамику по дням, неделям и месяцам и разрез частотности по регионам и устройствам. Справочник регионов он подтягивает отдельным запросом, чтобы фильтры и названия городов в отчёте совпадали со справочником сервиса, а не подставлялись на глаз.",
        "Вордстат считает показы в поиске, а не людей и не будущий трафик — и агент называет цифру именно так. Частотность широкой фразы вбирает в себя все её уточнения, поэтому число по слову всегда больше суммы конкретных запросов, а смена региона переписывает картину целиком. К каждому числу агент проговаривает период и регион, из которых оно взято, чтобы сравнение вариантов названия шло на одной базе.",
        "Писать здесь нечего и агент не притворяется, что может: он не создаёт и не меняет ничего в Yandex Cloud, ключ используется только на запросы статистики. Работа целиком аналитическая — собрать семантику под новую страницу, увидеть подъёмы и провалы спроса раньше, чем они дойдут до выручки, найти регионы, где спрос выше вашей доли присутствия, и сравнить несколько формулировок услуги до запуска.",
        "Ключ уходит заголовком авторизации в каждый запрос и хранится зашифрованным; отзыв ключа в облаке гасит подключение сразу, а дальше статистики доступ всё равно не тянется — область ключа этим и ограничена. Обращения намеренно разрежены — порядка одного запроса в полминуты, — так что длинный список фраз набирается постепенно, а тарификация идёт по факту обращений. Пустую выдачу по фразе агент называет прямо, а не выдаёт её за отсутствие спроса."
      ],
      "requirements": [
        "Аккаунт Yandex Cloud с правами администратора каталога.",
        "Облако, привязанное к платёжному аккаунту: Search API платный."
      ],
      "faq": [
        {
          "q": "Как подключить Яндекс Вордстат?",
          "a": "Двумя значениями из Yandex Cloud: API-ключ сервисного аккаунта, начинающийся с AQVN, и идентификатор каталога Folder ID. Аккаунту нужна роль search-api.webSearch.user, а ключ создаётся с областью действия yc.search-api.execute."
        },
        {
          "q": "Что агент получает из Вордстата?",
          "a": "Частотность поисковых фраз и похожие запросы, динамику по дням, неделям и месяцам, разрез по регионам и устройствам и справочник регионов для фильтров."
        },
        {
          "q": "Пишет ли агент что-то в сервис?",
          "a": "Нет, это справочная статистика: агент отправляет фразу и получает цифры спроса. Создавать или менять что-либо в Yandex Cloud он не может — ключ используется только для запросов Search API."
        },
        {
          "q": "Почему большой список фраз собирается долго?",
          "a": "Обращения к Search API намеренно разрежены во времени, поэтому пачка фраз набирается постепенно. Запросы тарифицируются по факту, а облако должно быть привязано к платёжному аккаунту."
        }
      ]
    },
    "seo_en": {
      "headline": "Collect the semantics for a new landing page in chat",
      "scenarios": [
        {
          "title": "Semantics for a new landing page",
          "desc": "The agent collects the top phrases containing your keyword plus related queries for the last 30 days and shows the wording people actually search for."
        },
        {
          "title": "Seasonality of demand",
          "desc": "The agent charts query dynamics by day, week or month and surfaces the peaks and dips before they show up in revenue."
        },
        {
          "title": "Demand by region",
          "desc": "The agent breaks phrase frequency down by region and city and shows where demand runs ahead of your current presence."
        },
        {
          "title": "Testing the wording before launch",
          "desc": "The agent compares the frequency of several names or service wordings and shows which one people search for and which one barely appears at all."
        },
        {
          "title": "Demand coming from phones",
          "desc": "The agent breaks phrase frequency down by device and shows what share of demand comes from phones and what from desktop, over the same period and region."
        },
        {
          "title": "A long list of phrases",
          "desc": "The agent works through a list of hundreds of phrases gradually, roughly one request every half a minute, and returns a finished table without hitting the service limit."
        }
      ],
      "how_it_works": [
        "The agent calls the wordstat section of the Yandex Cloud Search API: it sends a phrase and gets back the top queries containing that word, related wordings for the last 30 days, dynamics by day, week and month, and a frequency breakdown by region and device. It pulls the region reference list with a separate request so that filters and city names in the report match the service's own directory instead of being guessed.",
        "Wordstat counts impressions in search, not people and not future traffic — and the agent labels the number exactly that way. The frequency of a broad phrase absorbs all of its refinements, so the figure for a word is always larger than the sum of the specific queries, and switching the region rewrites the whole picture. With every number the agent states the period and the region it came from, so that comparing naming options runs on the same basis.",
        "There is nothing to write here and the agent does not pretend otherwise: it creates and changes nothing in Yandex Cloud, and the key is used only for statistics requests. The work is entirely analytical — collecting the semantics for a new page, seeing the peaks and dips of demand before they reach revenue, finding the regions where demand runs ahead of your presence, and comparing several wordings of a service before launch.",
        "The key travels as an authorization header on every request and is stored encrypted; revoking it in the cloud kills the connection at once, and the scope never reaches past statistics into the rest of the cloud anyway. Calls are deliberately spaced out — on average around one request every half a minute — so a long list of phrases fills in gradually and billing goes by actual usage. An empty result for a phrase is named as such, not passed off as absent demand."
      ],
      "requirements": [
        "A Yandex Cloud account with admin rights on the folder.",
        "A cloud linked to a billing account: Search API is paid."
      ],
      "faq": [
        {
          "q": "How do I connect Yandex Wordstat?",
          "a": "With two values from Yandex Cloud: a service account API key starting with AQVN and the catalog Folder ID. The account needs the search-api.webSearch.user role, and the key is created with the yc.search-api.execute scope."
        },
        {
          "q": "What does the agent get from Wordstat?",
          "a": "Search phrase frequency and related queries, dynamics by day, week and month, breakdowns by region and device, and the region reference list for filters."
        },
        {
          "q": "Does the agent write anything to the service?",
          "a": "No, this is reference statistics: the agent sends a phrase and gets demand figures back. It cannot create or change anything in Yandex Cloud, the key is used only for Search API requests."
        },
        {
          "q": "Why does a long list of phrases take so long?",
          "a": "Search API calls are deliberately spaced out in time, so a batch of phrases fills in gradually. Requests are billed as used, and the cloud must be linked to a billing account."
        }
      ]
    }
  },
  {
    "key": "yclients",
    "name": "Yclients",
    "description": "CRM для салонов красоты — записи, клиенты, услуги и расписание",
    "category": "crm",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "short_name": "YCLIENTS",
    "seo": {
      "headline": "Находите окна в расписании мастеров, пока их можно продать",
      "scenarios": [
        {
          "title": "Окна в расписании мастеров",
          "desc": "Агент соберёт записи на неделю вперёд и покажет свободные слоты по мастерам, которые ещё можно продать."
        },
        {
          "title": "Клиенты, переставшие ходить",
          "desc": "Агент поднимет клиентскую базу и найдёт тех, кто не был дольше обычного, — с услугами и суммами последних визитов."
        },
        {
          "title": "Выручка и Z-отчёт филиала",
          "desc": "Агент сведёт финансовые транзакции и Z-отчёты по дням и покажет, из чего сложилась выручка филиала за период."
        },
        {
          "title": "Товарные остатки салона",
          "desc": "Агент проверит склады филиала и товарные транзакции и покажет, какая косметика на исходе и что списывается быстрее, чем продаётся."
        },
        {
          "title": "Загрузка и средний чек мастеров",
          "desc": "Агент сведёт состоявшиеся визиты по мастерам: сколько часов заняты в графике, какие услуги делают чаще и какой средний чек выходит у каждого."
        },
        {
          "title": "Запись клиента и перенос",
          "desc": "Агент найдёт клиента по телефону, проверит свободный слот у мастера и заведёт или перенесёт запись — назвав, кого и на когда двигает, и дождавшись подтверждения."
        }
      ],
      "how_it_works": [
        "Агент работает с API Yclients в разрезе одного филиала: его номер участвует в каждом запросе, и все цифры относятся именно к нему. Он читает записи и историю визитов, клиентов, услуги и категории, мастеров с их расписанием, свободные слоты, товары и склады, финансовые транзакции, лояльность и аналитику. Свободное окно он считает не по пустому месту в сетке, а по графику мастера и длительности услуги — иначе слот выглядит продаваемым, но не продаётся.",
        "Запись и визит в салоне — разные вещи: запись остаётся в расписании, даже если клиент не пришёл, и загрузка мастеров, посчитанная по записям, всегда красивее реальной. Агент опирается на статус визита и на оплату. Выручку он тоже берёт не из стоимости услуг в записях, а из финансовых транзакций и Z-отчётов по дням: скидки, сертификаты, абонементы и депозиты меняют сумму, и сходится только касса.",
        "На запись агент создаёт и переносит записи, заводит клиентов и товарные операции — в объёме прав системного пользователя, не шире. Перед созданием он проверяет, свободен ли слот у мастера, и ищет клиента по телефону, чтобы в базе не появился второй такой же. Перенос и отмена задевают живого человека с напоминанием на телефоне, поэтому агент называет, кого и на когда двигает, и ждёт подтверждения.",
        "Доступ собран из двух токенов: партнёрский открывает только публичные методы, а данные филиала — записи, клиентов, финансы — отдаёт связка партнёрского и пользовательского вместе с номером филиала. Частота запросов у Yclients небольшая, поэтому агент не гоняет расписание по кругу и выбирает периоды осознанно. Если метод закрыт правами системного пользователя или записей за период не было, он скажет это прямо, а не покажет пустую таблицу."
      ],
      "requirements": [
        "Права администратора филиала в YCLIENTS",
        "Активный филиал в аккаунте: токены выдаются именно на него"
      ],
      "faq": [
        {
          "q": "Как подключить Yclients?",
          "a": "Токенами из кабинета разработчика yclients.com/appstore/developers: обязателен partner token из «Настройки аккаунта», плюс необязательные user token из раздела «Доступ к API» вашего приложения и ID филиала — число в адресной строке кабинета."
        },
        {
          "q": "Что агент видит в Yclients?",
          "a": "Записи и историю визитов, клиентов, услуги и категории, мастеров и расписание, свободные слоты, товары и склады, финансовые транзакции, лояльность и аналитику филиала."
        },
        {
          "q": "Пишет ли агент в Yclients?",
          "a": "Может: создавать и переносить записи, заводить клиентов и товарные операции. Объём записи задают права системного пользователя, отмеченные в разделе «Доступ к API»."
        },
        {
          "q": "Зачем user token и номер филиала?",
          "a": "Partner token открывает только публичные методы. Данные филиала — записи, клиентов, финансы — отдаёт связка partner и user token, а company_id указывает, о каком филиале речь."
        }
      ]
    },
    "seo_en": {
      "headline": "Find open slots in the staff schedule while they still sell",
      "scenarios": [
        {
          "title": "Open slots in the staff schedule",
          "desc": "The agent pulls appointments for the week ahead and shows the free slots per specialist that are still sellable."
        },
        {
          "title": "Clients who stopped coming",
          "desc": "The agent goes through the client base and finds those who have been away longer than usual, with the services and amounts of their last visits."
        },
        {
          "title": "Branch revenue and Z-report",
          "desc": "The agent reconciles financial transactions and Z-reports day by day and shows what the branch revenue for the period was made of."
        },
        {
          "title": "Salon stock levels",
          "desc": "The agent checks branch warehouses and goods transactions and shows which cosmetics are running out and what is written off faster than it sells."
        },
        {
          "title": "Utilisation and average bill per specialist",
          "desc": "The agent groups the visits that actually happened by specialist: hours booked in the schedule, the services they do most often and the average bill each one lands."
        },
        {
          "title": "Booking and moving a client",
          "desc": "The agent looks the client up by phone, checks the specialist's slot is free and creates or reschedules the appointment, naming who is moved and to when and waiting for your go-ahead."
        }
      ],
      "how_it_works": [
        "The agent works with the Yclients API in the scope of a single branch: its number takes part in every request, and every figure belongs to that branch. It reads appointments and visit history, clients, services and categories, staff with their schedules, open slots, goods and warehouses, financial transactions, loyalty and analytics. An open slot is counted not from a blank space in the grid but from the specialist's schedule and the duration of the service — otherwise a slot looks sellable and never sells.",
        "An appointment and a visit are different things in a salon: the appointment stays in the schedule even when the client never showed up, and staff utilisation counted from appointments always looks better than the real one. The agent leans on the visit status and on the payment. Revenue is taken not from the price of services in the appointments either, but from financial transactions and Z-reports day by day: discounts, gift cards, packages and deposits shift the amount, and only the till adds up.",
        "For writes the agent creates and reschedules appointments, adds clients and goods operations — as far as the system user's permissions reach, no wider. Before creating one it checks whether the specialist's slot is free and looks the client up by phone so a second copy does not appear in the base. Rescheduling and cancelling touch a live person with a reminder on their phone, so the agent names who is being moved and to when, and waits for confirmation.",
        "Access is assembled from two tokens: the partner one opens only public methods, while branch data — appointments, clients, finances — is returned by the partner and user pair together with the branch number. The Yclients request rate is low, so the agent does not run the schedule in circles and picks periods deliberately. If a method is closed by the system user's permissions or there were no appointments in the period, it says so directly instead of showing an empty table."
      ],
      "requirements": [
        "Administrator rights for the branch in YCLIENTS",
        "An active branch in the account: the tokens are issued for it"
      ],
      "faq": [
        {
          "q": "How do I connect Yclients?",
          "a": "With tokens from the developer account at yclients.com/appstore/developers: the partner token from Account settings is required, plus an optional user token from the API access section of your application and the branch ID, the number in the address bar of your account."
        },
        {
          "q": "What does the agent see in Yclients?",
          "a": "Appointments and visit history, clients, services and categories, staff and the schedule, open slots, goods and warehouses, financial transactions, loyalty and branch analytics."
        },
        {
          "q": "Does the agent write to Yclients?",
          "a": "It can: create and reschedule appointments, add clients and goods operations. How much it may write is set by the permissions of the system user marked in the API access section."
        },
        {
          "q": "Why do I need a user token and a branch number?",
          "a": "The partner token opens only public methods. Branch data, appointments, clients and finances, is returned by the partner and user token pair, while company_id states which branch is meant."
        }
      ]
    }
  },
  {
    "key": "yookassa",
    "name": "ЮKassa",
    "description": "Приём платежей — платежи, возвраты, чеки, счета, автоплатежи, сделки",
    "category": "banks",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Считайте выручку, возвраты и чеки ЮKassa прямо в чате",
      "scenarios": [
        {
          "title": "Свод выручки за период",
          "desc": "Агент сведёт платежи за период: сколько прошло, сколько отменено и сколько вернули, — без выгрузок из кабинета."
        },
        {
          "title": "Разбор конкретного платежа",
          "desc": "Агент найдёт платёж по дате, сумме или статусу и покажет способ оплаты, фискальный чек и связанные с ним возвраты."
        },
        {
          "title": "Ежедневная сводка выручки",
          "desc": "Агент пришлёт сводку в рабочий чат по расписанию: выручка за день, отмены и возвраты по подключённому магазину."
        },
        {
          "title": "Возвраты и их причины",
          "desc": "Агент соберёт возвраты за период, свяжет их с исходными платежами и покажет, по каким способам оплаты их больше всего."
        },
        {
          "title": "Чеки под платежами",
          "desc": "Агент пройдёт по платежам периода и назовёт те, у которых нет фискального чека, — нехватка всплывёт раньше вопроса от бухгалтерии."
        },
        {
          "title": "Оплаты, которые не дошли",
          "desc": "Агент соберёт отменённые и незавершённые платежи за период и покажет, на каких способах оплаты покупатели срываются чаще всего."
        }
      ],
      "how_it_works": [
        "Агент ходит в API ЮKassa версии v3 и читает всё, что относится к приёму платежей: сами платежи и их статусы, возвраты, фискальные чеки и способы оплаты. Первым запросом он спрашивает /me и подтверждает, чей магазин подключён, — чтобы сводка не оказалась про соседний shopId. Дальше считает выручку за период, отмены и возвраты, разбирает конкретный платёж по дате, сумме или статусу и присылает сводку по расписанию.",
        "Возврат в ЮKassa — отдельный объект, связанный с платежом, а не правка самого платежа. Поэтому агент считает выручку как платежи периода за вычетом привязанных к ним возвратов и отдельно помечает те возвраты, что пришли позже исходной оплаты: иначе месяц закрывается красивее, чем он есть. И принятый платёж — ещё не деньги на расчётном счёте: на счёт они приходят выплатой, и увидеть её можно уже в банковском коннекторе.",
        "На этой паре ключей агент работает на чтение: он считает, сопоставляет и объясняет — связывает возвраты с исходными платежами, показывает, по каким способам оплаты их больше всего, и находит платёж, о котором спрашивает бухгалтерия. Выплаты через API недоступны: «ЮKassa Выплаты» — отдельный продукт со своими agent_id и ключом, и агент не делает вид, что может распорядиться деньгами магазина.",
        "Доступ — пара shopId и секретного ключа: она подставляется в каждый запрос и жёстко привязана к одному магазину, поэтому сводка всегда про него, а не про соседний. Подписки на вебхуки этой парой не задаются — уведомления настраиваются в кабинете ЮKassa, — поэтому агент забирает данные сам, по запросу и по расписанию, листая список платежей курсором. Если данных за период нет, он говорит об этом прямо, а не показывает пустую таблицу."
      ],
      "requirements": [
        "Магазин, подключённый к ЮKassa.",
        "Телефон, привязанный к кабинету: выпуск ключа подтверждают по SMS."
      ],
      "faq": [
        {
          "q": "Как подключить ЮKassa?",
          "a": "Парой значений: shopId из «Настройки» → «Магазин» и секретный ключ из «Интеграция» → «Ключи API» → «Выпустить ключ» с подтверждением SMS-паролем. Нужна роль владельца или «Разработчик», иначе раздел не откроется, а ключ показывается только один раз."
        },
        {
          "q": "Что агент видит в ЮKassa?",
          "a": "Платежи и их статусы, возвраты, фискальные чеки и способы оплаты того магазина, чей shopId подключён."
        },
        {
          "q": "Чем это отличается от банка?",
          "a": "ЮKassa — приём платежей от покупателей: агент видит платежи и возвраты, а не выписку по расчётному счёту. На счёт деньги приходят выплатой, и её видно уже в банковском коннекторе."
        },
        {
          "q": "Что недоступно по этому ключу?",
          "a": "Разделы выплат и подписки на вебхуки под парой shopId и секретного ключа не работают: выплаты — отдельный продукт со своим ключом, а уведомления настраиваются в кабинете ЮKassa."
        }
      ]
    },
    "seo_en": {
      "headline": "Total YooKassa revenue, refunds and receipts right in chat",
      "scenarios": [
        {
          "title": "Revenue totals for a period",
          "desc": "The agent totals payments for a period: how much went through, how much was canceled and how much was refunded, with no exports from the merchant account."
        },
        {
          "title": "Breakdown of a single payment",
          "desc": "The agent finds a payment by date, amount or status and shows the payment method, the fiscal receipt and the refunds linked to it."
        },
        {
          "title": "Daily revenue summary",
          "desc": "The agent posts a summary to your work chat on a schedule: revenue for the day, cancellations and refunds for the connected shop."
        },
        {
          "title": "Refunds and what caused them",
          "desc": "The agent collects refunds for a period, ties them back to the original payments and shows which payment methods generate the most."
        },
        {
          "title": "Receipts behind the payments",
          "desc": "The agent walks the payments of a period and names the ones with no fiscal receipt, so the gap surfaces before the accounting department asks about it."
        },
        {
          "title": "Payments that never landed",
          "desc": "The agent collects canceled and unfinished payments for a period and shows which payment methods customers drop off on most often."
        }
      ],
      "how_it_works": [
        "The agent calls the YooKassa API version v3 and reads everything that belongs to accepting payments: the payments themselves and their statuses, refunds, fiscal receipts and payment methods. Its first request goes to /me and confirms whose shop is connected — so the summary does not turn out to be about a neighbouring shopId. After that it totals revenue for a period, cancellations and refunds, breaks down a single payment by date, amount or status and sends a summary on a schedule.",
        "A refund in YooKassa is a separate object linked to a payment, not an edit of the payment itself. So the agent counts revenue as the payments of the period minus the refunds tied to them, and separately flags the refunds that arrived later than the original charge: otherwise the month closes prettier than it really is. And an accepted payment is not yet money on the current account: it reaches the account as a payout, and that is visible in the banking connector.",
        "On this key pair the agent works read-only: it counts, matches and explains — ties refunds back to the original payments, shows which payment methods generate the most of them, and finds the payment the accounting department is asking about. Payouts are out of reach over the API: YooKassa Payouts is a separate product with its own agent_id and key, and the agent does not pretend it can dispose of the shop's money.",
        "Access is a shopId and secret key pair: it is attached to every request and is bound to one shop only, so a summary is always about that shop and never about a neighbouring one. Webhook subscriptions cannot be set with this pair — notifications are configured in the YooKassa account — so the agent fetches data itself, on request and on a schedule, paging through the payment list with a cursor. If there is no data for the period, it says so directly instead of showing an empty table."
      ],
      "requirements": [
        "A shop connected to YooKassa.",
        "The phone linked to the account: issuing a key is confirmed by SMS."
      ],
      "faq": [
        {
          "q": "How do I connect YooKassa?",
          "a": "With a pair of values: the shopId from Settings and Shop, and the secret key from Integration, API keys, Issue key, confirmed with an SMS password. You need the owner or Developer role, otherwise the section will not open, and the key is shown only once."
        },
        {
          "q": "What does the agent see in YooKassa?",
          "a": "Payments and their statuses, refunds, fiscal receipts and payment methods for the shop whose shopId is connected."
        },
        {
          "q": "How is this different from a bank?",
          "a": "YooKassa is about collecting payments from customers: the agent sees payments and refunds, not your current account statement. Money reaches the account as a payout, and that is visible in the banking connector."
        },
        {
          "q": "What is not available with this key?",
          "a": "The payouts section and webhook subscriptions do not work with a shopId and secret key pair: payouts are a separate product with its own key, and notifications are configured in the YooKassa merchant account."
        }
      ]
    }
  },
  {
    "key": "yougile",
    "name": "YouGile",
    "description": "Управление задачами и проектами — доски, колонки, задачи, чаты, департаменты",
    "category": "pm",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Ловите просроченные задачи YouGile по всем доскам",
      "scenarios": [
        {
          "title": "Просрочка по доскам",
          "desc": "Агент пройдёт по проектам, доскам и колонкам и покажет, какие задачи просрочены по дедлайну и у кого они зависли."
        },
        {
          "title": "Задача в нужной колонке",
          "desc": "Агент создаст задачу в выбранной колонке, назначит исполнителя и распишет постановку, не открывая доску вручную."
        },
        {
          "title": "Переписка в чате задачи",
          "desc": "Агент прочитает чат задачи, соберёт суть обсуждения и допишет туда комментарий по итогам разговора."
        },
        {
          "title": "Сводка по проектам за сутки",
          "desc": "Агент по расписанию пришлёт, какие задачи созданы, изменены и завершены за сутки по каждому проекту компании."
        },
        {
          "title": "Нагрузка по департаментам",
          "desc": "Агент сведёт открытые задачи с сотрудниками и департаментами и покажет, на кого приходится половина работы, а у кого в колонках почти пусто."
        },
        {
          "title": "Реакция на новую задачу",
          "desc": "Агент узнаёт о созданной и изменённой задаче сразу, перечитывает карточку через API и скажет, если постановка ушла без срока или без исполнителя."
        }
      ],
      "how_it_works": [
        "Агент ходит в YouGile через api-v2: читает проекты, доски и колонки, задачи со сроками и исполнителями, чаты задач, сотрудников и департаменты. Из этого собирается разбор по компании — что просрочено по дедлайну, у кого зависло, что создано, изменено и завершено за сутки по каждому проекту. Обход идёт сверху вниз, от проекта к колонке, поэтому задача не теряется на доске, о которой вы забыли.",
        "Устроен YouGile вокруг чатов: обсуждение задачи живёт не в поле описания, а в её ленте сообщений, и настоящая причина переноса срока или смены исполнителя чаще всего написана именно там, а не в самой карточке. Поэтому агент читает чат задачи целиком и достаёт из него суть договорённостей, а не судит о ходе работы по одним лишь полям карточки и положению в колонке.",
        "На запись агент создаёт задачу в выбранной колонке, расписывает постановку, назначает исполнителя и срок, переносит задачи между колонками и пишет сообщения в чат задачи. Перед созданием он проверяет, что проект, доска и колонка существуют и открыты ключу, а после изменения перечитывает задачу — чтобы показать её фактическое состояние. Сообщение в чат уходит от лица владельца ключа, и агент об этом предупреждает.",
        "Ключ один на все запросы, и агент видит ровно те доски, что открыты этому ключу: закрытая доска для него просто не существует, а не отвечает ошибкой. Списки YouGile отдаёт страницами, поэтому разбор по компании — это обход проектов, досок и колонок, а не один запрос, и агент следит, что дошёл до конца. Уведомления о новой и изменённой задаче приходят без подписи, поэтому агент считает их сигналом и перечитывает данные через API; если чего-то не видно, он скажет прямо, а не покажет пустую таблицу."
      ],
      "requirements": [
        "Логин и пароль от аккаунта YouGile — их спрашивает метод создания ключа",
        "Права администратора, если ключ нужен ко всем доскам компании",
        "Тариф не важен: API работает на любом плане YouGile"
      ],
      "faq": [
        {
          "q": "Как подключить YouGile?",
          "a": "Одним полем — API-ключом. В интерфейсе его не выдают: нажмите Ctrl+Alt+Q на странице своей компании, чтобы скопировать companyId, и вызовите метод создания ключа в документации API, указав login, password и companyId."
        },
        {
          "q": "Что агент видит в YouGile?",
          "a": "Проекты, доски, колонки, задачи со сроками и исполнителями, чаты задач, сотрудников и департаменты — в пределах прав аккаунта, под которым выпущен ключ."
        },
        {
          "q": "Пишет ли агент в YouGile?",
          "a": "Да: создаёт и обновляет задачи, переносит их между колонками, назначает исполнителей и пишет сообщения в чат задачи."
        },
        {
          "q": "Почему агент видит не все доски?",
          "a": "Ключ наследует права своего создателя: под обычным сотрудником видны только его доски. Мастер-ключ ко всем объектам компании выпускают под администратором."
        }
      ]
    },
    "seo_en": {
      "headline": "Catch overdue YouGile tasks across every board",
      "scenarios": [
        {
          "title": "Overdue work across boards",
          "desc": "The agent walks through projects, boards and columns and shows which tasks are past their deadline and with whom they are stuck."
        },
        {
          "title": "A task in the right column",
          "desc": "The agent creates a task in the column you pick, assigns an owner and writes out the brief, without opening the board by hand."
        },
        {
          "title": "The conversation inside a task chat",
          "desc": "The agent reads the task chat, distills what the discussion was about and posts a follow-up comment with the outcome."
        },
        {
          "title": "Daily project digest",
          "desc": "On a schedule the agent reports which tasks were created, changed and completed in the last 24 hours for every company project."
        },
        {
          "title": "Load across departments",
          "desc": "The agent lines up open tasks with employees and departments and shows who carries half of the work and whose columns are all but empty."
        },
        {
          "title": "Reacting to a new task",
          "desc": "The agent hears about a created or changed task at once, re-reads the card through the API and tells you when a brief went out with no deadline or no owner."
        }
      ],
      "how_it_works": [
        "The agent calls YouGile through api-v2: it reads projects, boards and columns, tasks with their deadlines and assignees, task chats, employees and departments. Out of that it assembles a company-wide triage — what is past its deadline, with whom it is stuck, what was created, changed and completed in the last 24 hours for every project. The walk goes top down, from project to column, so a task does not get lost on a board you forgot about.",
        "YouGile is built around chats: the discussion of a task lives in its message feed rather than in the description field, and the real reason a deadline moved or an assignee changed is most often written exactly there rather than on the card itself. So the agent reads the whole task chat and pulls the substance of what was agreed out of it, instead of judging the state of the work from the card fields and the column position alone.",
        "In writing, the agent creates a task in the column you pick, writes out the brief, assigns an owner and a deadline, moves tasks between columns and posts messages in the task chat. Before creating anything it checks that the project, board and column exist and are open to the key, and after a change it re-reads the task to show its actual state. A chat message goes out under the key owner name, and the agent says so in advance.",
        "One key serves every request, and the agent sees exactly the boards that key is open to: a closed board simply does not exist for it rather than answering with an error. YouGile hands over lists in pages, so a company-wide triage is a walk through projects, boards and columns rather than a single request, and the agent makes sure it reached the end. Notifications about a new or changed task arrive unsigned, so the agent treats them as a signal and re-reads the data through the API; if something is out of sight, it says so directly instead of showing an empty table."
      ],
      "requirements": [
        "The YouGile account login and password — the creation method asks for them",
        "Administrator rights if the key must cover every board",
        "Any YouGile plan works — the API is not a paid add-on"
      ],
      "faq": [
        {
          "q": "How do I connect YouGile?",
          "a": "With a single field, the API key. The interface does not issue it: press Ctrl+Alt+Q on your company page to copy the companyId, then call the key creation method from the API documentation with your login, password and companyId."
        },
        {
          "q": "What does the agent see in YouGile?",
          "a": "Projects, boards, columns, tasks with deadlines and assignees, task chats, employees and departments, within the permissions of the account the key was issued under."
        },
        {
          "q": "Does the agent write to YouGile?",
          "a": "Yes: it creates and updates tasks, moves them between columns, assigns owners and posts messages in the task chat."
        },
        {
          "q": "Why does the agent see only some boards?",
          "a": "The key inherits the rights of its creator: under a regular employee only their boards are visible. A master key covering every company object is issued under an administrator."
        }
      ]
    }
  },
  {
    "key": "youtube",
    "name": "YouTube",
    "description": "Каналы, видео, плейлисты, комментарии и аналитика YouTube",
    "category": "messengers",
    "auth_flow": "popup_oauth",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Разбирайте статистику канала и роликов YouTube прямо в чате",
      "scenarios": [
        {
          "title": "Статистика канала и видео",
          "desc": "Агент соберёт просмотры, подписчиков и число роликов, разберёт метаданные и статистику видео и покажет, что тянет канал вверх."
        },
        {
          "title": "Комментарии и ответы",
          "desc": "Агент прочитает свежие ветки комментариев под видео, отделит вопросы от спама и опубликует ответы верхнего уровня."
        },
        {
          "title": "Плейлисты и подписки",
          "desc": "Агент заведёт плейлист, добавит в него нужные ролики и подпишется на канал, за которым вы решили следить."
        },
        {
          "title": "Субтитры и разбор видео",
          "desc": "Агент возьмёт список субтитров ролика, скачает файл в SRT и разберёт содержание выступления без просмотра целиком."
        },
        {
          "title": "Разбор соседнего канала",
          "desc": "Агент соберёт публичные ролики интересного вам канала с просмотрами и датами выхода и покажет, как часто там публикуют и что заходит лучше."
        },
        {
          "title": "Еженедельная сводка по каналу",
          "desc": "Агент раз в неделю снимет статистику канала и роликов, сравнит её с прошлой неделей и пришлёт, что выросло по просмотрам, а что просело."
        }
      ],
      "how_it_works": [
        "Агент работает с YouTube Data API v3: читает ваш канал со статистикой просмотров, подписчиков и числа роликов, метаданные и метрики отдельных видео, плейлисты, ветки комментариев, подписки, субтитры и категории видео по региону. По этим данным он сводит динамику канала за период, показывает, какие ролики тянут его вверх, а список субтитров скачивает в SRT и разбирает содержание выступления без просмотра целиком.",
        "Тонкость YouTube в том, что аккаунт Google и канал — не одно и то же, и объём доступного определяет роль в YouTube Студии, а не факт входа. Роль «Менеджер» даёт всё, кроме удаления канала, а «Пользователь с правом просмотра» оставляет только чтение — и агент честно упрётся в это на первом же пишущем действии. Квота Data API с лета 2026 разложена по отдельным суточным корзинам: у поиска своя сотня вызовов в день, у загрузки видео — своя, а всё остальное чтение и запись делят общий дневной запас. Поэтому агент собирает ролики канала через список загрузок, а не поиском — так поисковая корзина остаётся целой.",
        "На запись агент заводит плейлисты и добавляет в них ролики, публикует ответы верхнего уровня в комментариях, ставит лайк и подписывается на каналы. Комментарии он сначала разбирает: отделяет вопросы от спама и показывает, кому собирается ответить, — ответ уходит от имени вашего канала и виден публично, поэтому шаг остаётся за вами. Опубликованное агент не удаляет и чужие ветки не чистит.",
        "Токен доступа живёт около часа и продлевается автоматически, так что переподключаться вручную не приходится. Статистика в Data API приходит агрегатом по каналу и по видео: поминутной аналитики и источников трафика здесь нет, за ними нужен отдельный API отчётов. Если раздел закрыт ролью на канале или доступ отозван, агент скажет об этом прямо, а не покажет пустую таблицу."
      ],
      "requirements": [
        "Канал уже создан — аккаунт без канала подключить нельзя",
        "Владелец канала на связи: роли выдаёт только он",
        "Подключение — вход через Google, ключи и токены вводить не нужно"
      ],
      "faq": [
        {
          "q": "Как подключить YouTube?",
          "a": "Входом через Google: нажмите кнопку подключения, во всплывающем окне выберите аккаунт с каналом и подтвердите доступ. Вручную ничего вводить не нужно — ключи и токены не потребуются."
        },
        {
          "q": "Что агент видит в YouTube?",
          "a": "Ваш канал и его статистику, видео с метаданными и метриками, плейлисты, ветки комментариев, подписки, субтитры и категории видео по региону."
        },
        {
          "q": "Пишет ли агент в YouTube?",
          "a": "Может: создавать плейлисты и добавлять в них видео, публиковать ответы в комментариях, ставить лайк и подписываться на каналы."
        },
        {
          "q": "Какая роль нужна на канале?",
          "a": "Роль «Менеджер» в YouTube Студии — она даёт всё, кроме удаления канала. С ролью «Пользователь с правом просмотра» агент сможет только читать."
        }
      ]
    },
    "seo_en": {
      "headline": "Break down YouTube channel and video stats right in chat",
      "scenarios": [
        {
          "title": "Channel and video statistics",
          "desc": "The agent collects views, subscribers and video count, goes through video metadata and stats and shows what is pulling the channel up."
        },
        {
          "title": "Comments and replies",
          "desc": "The agent reads fresh comment threads under a video, separates real questions from spam and publishes top-level replies."
        },
        {
          "title": "Playlists and subscriptions",
          "desc": "The agent creates a playlist, adds the videos you want to it and subscribes to the channel you decided to follow."
        },
        {
          "title": "Captions and video breakdown",
          "desc": "The agent takes the caption list for a video, downloads the SRT file and breaks down what was said without watching the whole thing."
        },
        {
          "title": "A look at a neighbouring channel",
          "desc": "The agent collects the public videos of a channel you follow with their views and publish dates and shows how often they post and what lands best."
        },
        {
          "title": "Weekly channel digest",
          "desc": "The agent takes channel and video statistics once a week, compares them with the previous week and sends over what grew in views and what slipped."
        }
      ],
      "how_it_works": [
        "The agent works with the YouTube Data API v3: it reads your channel with its view, subscriber and video counts, the metadata and metrics of individual videos, playlists, comment threads, subscriptions, captions and video categories by region. From that data it puts together the channel dynamics for a period and shows which videos are pulling it up, while the caption list is downloaded as SRT so what was said can be broken down without watching the whole thing.",
        "The subtlety with YouTube is that a Google account and a channel are not the same thing, and how much is available is decided by the role in YouTube Studio rather than by the fact of signing in. The Manager role covers everything except deleting the channel, while the Viewer role leaves read-only access — and the agent runs into that honestly at the first write. Since summer 2026 the Data API quota is split into separate daily baskets: search has its own hundred calls a day, video uploads have theirs, and everything else shares one daily allowance. That is why the agent collects a channel's videos from its uploads list rather than by searching — it leaves the search basket untouched.",
        "As writes the agent creates playlists and adds videos to them, publishes top-level replies in comments, likes videos and subscribes to channels. Comments are sorted through first: real questions are separated from spam and the agent shows who it intends to answer — a reply goes out from your channel and is publicly visible, so that step stays with you. The agent does not delete what has been published and does not clean up other people threads.",
        "The access token lives for about an hour and is refreshed automatically, so nothing has to be reconnected by hand. Statistics in the Data API arrive aggregated per channel and per video: there is no minute-level analytics and no traffic sources here, those need the separate reporting API. If a section is closed by your role on the channel or access has been revoked, the agent says so directly instead of showing an empty table."
      ],
      "requirements": [
        "A channel already created — an account without one cannot connect",
        "The channel owner reachable: only they can assign roles",
        "Connection is a Google sign-in — no keys or tokens to type in"
      ],
      "faq": [
        {
          "q": "How do I connect YouTube?",
          "a": "By signing in with Google: click the connect button, pick the account that owns the channel in the popup and approve access. Nothing to type in by hand, no keys or tokens needed."
        },
        {
          "q": "What does the agent see in YouTube?",
          "a": "Your channel and its statistics, videos with metadata and metrics, playlists, comment threads, subscriptions, captions and video categories by region."
        },
        {
          "q": "Does the agent write to YouTube?",
          "a": "It can: create playlists and add videos to them, publish replies in comments, like videos and subscribe to channels."
        },
        {
          "q": "What role do I need on the channel?",
          "a": "The Manager role in YouTube Studio, which covers everything except deleting the channel. With the Viewer role the agent can only read."
        }
      ]
    }
  },
  {
    "key": "zapcap",
    "name": "ZapCap",
    "description": "Автоматические субтитры для видео, шаблоны стилей, перевод",
    "category": "content",
    "auth_flow": "credentials",
    "offered_to_newcomers": true,
    "catalog_visibility": "tile",
    "seo": {
      "headline": "Вшивайте субтитры в ролики без ручного монтажа",
      "scenarios": [
        {
          "title": "Субтитры в готовый MP4",
          "desc": "Агент загрузит ролик по публичной ссылке, прогонит его через расшифровку ZapCap и вернёт MP4 с уже вшитыми субтитрами."
        },
        {
          "title": "Единый стиль на всю партию",
          "desc": "Агент покажет доступные шаблоны оформления субтитров и применит выбранный ко всем роликам партии, а не к одному вручную."
        },
        {
          "title": "Перевод субтитров под другой рынок",
          "desc": "Агент распознает исходный язык ролика и соберёт версию с субтитрами на нужном языке, не пересобирая видео вручную."
        },
        {
          "title": "Нарезка длинного видео",
          "desc": "Агент поставит задание нарезки: до пяти коротких клипов из одного ролика с выбранным диапазоном длительности."
        },
        {
          "title": "Сколько выйдет партия",
          "desc": "Агент прикинет стоимость рендера заранее — по длительности исходников, а не по их числу — и предупредит, если кредитов не хватит и задания отклонят."
        },
        {
          "title": "Где застряло задание",
          "desc": "Агент покажет, на каком шаге стоит каждое задание — загрузка, расшифровка, подтверждение или рендер, — и назовёт отклонённые вместе с причиной."
        }
      ],
      "how_it_works": [
        "Агент ходит в API ZapCap по ключу и видит там три вещи: шаблоны оформления субтитров, загруженные видео и статусы заданий — расшифровки, рендера и нарезки. Исходник он берёт по публичной ссылке и передаёт сервису, а готовый MP4 забирает по ссылке из ответа, когда рендер закончится. Партия роликов проходит этот путь целиком, с одним выбранным шаблоном на всю пачку.",
        "ZapCap работает конвейером, и это главное, что агент учитывает: сначала загрузка, потом расшифровка, отдельным шагом подтверждение расшифровки и только затем рендер. Принятое задание — ещё не готовый файл, поэтому агент дожидается статуса, а не считает ответ сервиса подтверждением результата. Исходный язык ролика определяется на расшифровке, и версия с субтитрами на другом языке собирается из неё же, без ручной пересборки видео.",
        "На запись агент делает всё, что нужно конвейеру: загружает видео, создаёт задания субтитров и нарезки, подтверждает расшифровку перед рендером. Нарезка ограничена самим сервисом — до пяти коротких клипов из одного ролика в выбранном диапазоне длительности. Шаблоны оформления агент не рисует, а выбирает из готовых и применяет один и тот же ко всей партии, чтобы ролики не разъехались по стилю.",
        "Рендер оплачивается отдельно от подписки и поминутно по готовому видео, поэтому стоимость партии агент прикидывает заранее — по длительности исходников, а не по их числу. Задание в очередь принимается мгновенно, но файл появляется через минуты, и на длинных роликах агент опрашивает статус, а не держит ожидание одним запросом. Если кредитов не хватило и рендер отклонён, он назовёт причину прямо, а не покажет пустой список заданий."
      ],
      "requirements": [
        "Оплаченный тариф Pro или Agency+ — на Free ключ не выдают",
        "Карта для оплаты подписки и render-кредитов",
        "Публичная ссылка на исходный ролик — по ней агент берёт видео"
      ],
      "faq": [
        {
          "q": "Как подключить ZapCap?",
          "a": "API-ключом: откройте platform.zapcap.ai/dashboard/api-key, создайте ключ и скопируйте его целиком. Страница отдаёт ключ только на тарифе Pro или Agency+, на Free и Starter выпуск недоступен."
        },
        {
          "q": "Что агент видит в ZapCap?",
          "a": "Шаблоны оформления субтитров, загруженные видео и статусы заданий — расшифровки, рендера и нарезки — вместе со ссылкой на готовый файл, когда рендер закончится."
        },
        {
          "q": "Пишет ли агент в ZapCap?",
          "a": "Да: загружает видео, создаёт задания субтитров и нарезки и подтверждает расшифровку перед рендером. Готовые файлы агент забирает по ссылке из ответа."
        },
        {
          "q": "Что нужно, кроме тарифа?",
          "a": "Render-кредиты: они покупаются отдельно от подписки, от $0.10 за минуту готового видео. Без кредитов ключ работает, но задания рендера отклоняются."
        }
      ]
    },
    "seo_en": {
      "headline": "Burn subtitles into your videos without manual editing",
      "scenarios": [
        {
          "title": "Subtitles burned into a ready MP4",
          "desc": "The agent uploads the video from a public link, runs it through ZapCap transcription and returns an MP4 with the subtitles already burned in."
        },
        {
          "title": "One style across the whole batch",
          "desc": "The agent shows the available subtitle style templates and applies the one you pick to every video in the batch instead of one at a time."
        },
        {
          "title": "Translated subtitles for another market",
          "desc": "The agent detects the source language of the video and builds a version with subtitles in the language you need, without rebuilding the video by hand."
        },
        {
          "title": "Cutting a long video into clips",
          "desc": "The agent queues a clip job: up to five short clips from a single video within the duration range you choose."
        },
        {
          "title": "What a batch will cost",
          "desc": "The agent estimates the render cost upfront from the duration of the sources rather than their count, and warns you if credits will run short and jobs get rejected."
        },
        {
          "title": "Where a job got stuck",
          "desc": "The agent shows which step each task sits at — upload, transcription, approval or render — and names the rejected ones together with the reason."
        }
      ],
      "how_it_works": [
        "The agent calls the ZapCap API with the key and sees three things there: subtitle style templates, uploaded videos and task statuses — transcription, render and clip jobs. It takes the source from a public link and hands it to the service, and picks up the finished MP4 from the link in the response once the render completes. A batch of videos goes through this whole path with one chosen template for the entire pack.",
        "ZapCap works as a pipeline, and that is the main thing the agent accounts for: first the upload, then the transcription, then a separate step approving the transcript, and only after that the render. An accepted task is not yet a finished file, so the agent waits for the status instead of treating the service response as confirmation of a result. The source language is detected during transcription, and a version with subtitles in another language is built from it, without rebuilding the video by hand.",
        "On the writing side the agent does everything the pipeline needs: it uploads videos, creates subtitle and clip tasks and approves the transcript before rendering. Clipping is capped by the service itself — up to five short clips from a single video within the chosen duration range. The agent does not design style templates, it picks from the ready ones and applies the same one across the batch so the videos do not drift apart in style.",
        "Rendering is paid for separately from the subscription and by the minute of finished video, so the agent estimates the cost of a batch upfront — from the duration of the sources rather than their count. A task is accepted into the queue instantly, but the file appears minutes later, and on long videos the agent polls the status instead of holding the wait inside one request. If credits ran out and a render was rejected, it names the reason directly instead of showing an empty task list."
      ],
      "requirements": [
        "A paid Pro or Agency+ plan — Free cannot issue a key",
        "A card to pay for the subscription and render credits",
        "A public link to the source video — the agent fetches it there"
      ],
      "faq": [
        {
          "q": "How do I connect ZapCap?",
          "a": "With an API key: open platform.zapcap.ai/dashboard/api-key, create a key and copy it in full. The page issues a key only on the Pro or Agency+ plan, on Free and Starter it is unavailable."
        },
        {
          "q": "What does the agent see in ZapCap?",
          "a": "Subtitle style templates, uploaded videos and task statuses, transcription, render and clip jobs, along with the link to the finished file once the render completes."
        },
        {
          "q": "Does the agent write to ZapCap?",
          "a": "Yes: it uploads videos, creates subtitle and clip tasks and approves the transcript before rendering. The agent picks up finished files from the link in the response."
        },
        {
          "q": "What do I need besides a plan?",
          "a": "Render credits: they are bought separately from the subscription, starting at $0.10 per minute of finished video. Without credits the key still works, but render tasks are rejected."
        }
      ]
    }
  }
]
