- BrainTools - https://www.braintools.ru -

Управляю мобильной связью через AI-агента: skill для сбермобайл

Последние 3 месяца живу в парадигме, где повседневные приложения на телефоне постепенно превращаются в текстовые команды в терминале. Звучит как откат в 90-е, но на практике это быстрее, удобнее и мощнее, чем тыкать по вкладкам в мобильном приложении. В этой статье расскажу, как появился skill для управления личным кабинетом СберМобайл через Claude Code/OpenClaw/KimiClaw, почему это уже второй такой проект, и куда это всё движется.

Что такое Claude Code Skills

Claude Code – это CLI-агент от Anthropic, который живёт в терминале и умеет выполнять задачи: писать код, работать с файлами, запускать команды. Но самое интересное – это система skills (в терминологии Anthropic – slash commands). Skill – это markdown-файл, который описывает для Claude новую способность: какие API вызывать, как авторизоваться, что отвечать пользователю.

Кладёшь файл в ~/.claude/commands/, вызываешь через /имя-скилла, и Claude получает контекст: документацию API, примеры вызовов, правила форматирования ответов. Дальше он сам решает, какие запросы отправить и как интерпретировать результат. Не нужно ни фронтенда, ни мобильного приложения – только терминал и естественный язык.

Мой первый skill – Dodo Pizza

Всё началось с пиццы. Я захотел заказать Додо Пиццу, не открывая приложение. Написал в терминале /dodo, и Claude стал моим курьерским ассистентом: показывает меню, ищет по названию, показывает корзину и профиль.

Технически Dodo Pizza skill работает через Puppeteer – headless Chrome. Причина проста: сайт dodopizza.ru [1] стоит за ServicePipe (антибот-защита), и любые прямые HTTP-запросы получают 403. Приходится эмулировать полноценный браузер. Авторизация вообще требует видимый Chrome с reCAPTCHA. Это работает, но решение тяжёлое: Chrome жрёт память [2], запуск медленный, а капча требует ручного вмешательства.

После Dodo я задумался: а что если следующий skill можно сделать чище – без браузера, без капчи, на чистых REST-вызовах?

Зачем мне skill для мобильного оператора

Я пользуюсь СберМобайл. Звоню много, раздаю интернет с телефона, периодически проверяю остатки. Каждый раз это одна и та же последовательность: открыть приложение, подождать пока загрузится, потыкать по вкладкам. Три нажатия, чтобы узнать сколько гигабайт осталось. Пять нажатий, чтобы посмотреть какие услуги подключены.

А ещё я хотел видеть всю картину разом: остатки, тариф, подключённые услуги, бонусы – одним вопросом. Ни одно мобильное приложение так не умеет, потому что информация размазана по разным экранам. AI-агент может собрать данные из нескольких API-эндпоинтов и дать сводку за один ответ.

Как устроен SberMobile skill

Разведка API

Первый шаг – понять, как устроен личный кабинет. Я открыл lk.sbermobile.ru [3] в Chrome DevTools и начал записывать сетевые запросы. SPA-приложение, база API – https://lk.sbermobile.ru/v2/api/ [4]. Все данные приходят в JSON. Никакого антибота, никакого ServicePipe – просто REST API за авторизацией. После Dodo Pizza это было как глоток свежего воздуха.

Несколько неочевидных вещей, на которые я наткнулся:

Токен передаётся в заголовке token: значение, а не в стандартном Authorization: Bearer. Номер телефона – 10 цифр без +7, в поле number, а не phone. Все суммы – в копейках: 39000 это 390 рублей.

Архитектура

В итоге получилась такая структура:

sbermobile-skill/
|-- client/
|   |-- __init__.py
|   |-- sbermobile_client.py    # REST-клиент
|-- skills/
|   |-- base.py                 # Базовый класс Skill
|   |-- account/                # get_balance, get_remainders
|   |-- tariff/                 # get_current, list_available
|   |-- services/               # list_current, get_campaigns
|-- examples/
|   |-- agent_demo.py           # Интерактивный AI-агент
|-- docs/
|   |-- api-reference.md
|-- SKILL.md                    # Описание для Claude Code
|-- requirements.txt            # requests
|-- README.md

Два слоя: Python-клиент (SberMobileClient) и набор AI-skills поверх него.

Python-клиент

SberMobileClient – это обёртка над requests. Один файл, ~350 строк, зависимость одна – requests. Поддерживает авторизацию через SMS OTP, автоматически сохраняет и подгружает токен из /tmp/sbermobile_token.json. Все методы – read-only GET-запросы: тариф, остатки, услуги, платежи, промо, семья.

Авторизация выглядит так:

c = SberMobileClient()
c.request_otp('+79XXXXXXXXX')  -- SMS уходит на телефон
c.submit_otp('+79XXXXXXXXX', '1234')  -- токен сохраняется
-- дальше всё автоматически

Токен живёт долго, и при следующем запуске клиент подхватывает его сам. Не нужно авторизовываться каждый раз.

Skills – атомарные способности агента

Каждый skill – это Python-класс, наследник базового Skill. У него есть имя, описание для LLM (когда и зачем вызывать), JSON Schema входных параметров и метод execute(). Skill может вызывать один или несколько методов клиента и агрегировать результат.

Шесть skills покрывают основные сценарии:

account.get_balance -- рекомендуемое пополнение, автоплатёж, бонусы СберСпасибо
account.get_remainders -- остатки пакетов: ГБ, минуты, SMS
tariff.get_current -- текущий тариф + доступные для перехода
tariff.list_available -- витрина тарифов
services.list_current -- подключённые опции
services.get_campaigns -- промо-акции, персональные предложения

Все skills read-only. Write-операции (смена тарифа, подключение опции) в API существуют, но я сознательно их не реализовал в публичной версии. Smart executor умеет запрашивать подтверждение пользователя перед write-операциями, но пока эта механика ждёт своего часа.

SKILL.md – точка входа для Claude Code

Файл SKILL.md [5] – это то, что Claude Code читает при вызове /sbermobile. Он содержит инструкции: как создать клиент, какие методы вызывать, как обработать ошибки [6] авторизации. Фактически это prompt, который превращает Claude из универсального ассистента в оператора моего личного кабинета.

agent_demo.py – автономный агент

Помимо skill для Claude Code, в проекте есть standalone-агент (examples/agent_demo.py [7]). Это полноценный agentic loop: пользователь пишет вопрос, Claude решает какие skills вызвать, получает результат, формулирует ответ. Всё на Anthropic Python SDK – 130 строк кода. Можно запустить без Claude Code, хоть в Jupyter, хоть на сервере.

Демо

Вот пять типичных вопросов, которые я задаю своему оператору через терминал. Каждый ответ – это один или несколько API-вызовов, которые Claude делает автоматически.

“Сколько у меня осталось гигабайт и минут?”

Один skill-вызов, один API-запрос. Claude парсит JSON с пакетами и выдаёт человекочитаемую сводку.

Один skill-вызов, один API-запрос. Claude парсит JSON с пакетами и выдаёт человекочитаемую сводку.

“Какой у меня тариф и сколько я плачу?”

Здесь Claude вызывает tariff.get_current и сам конвертирует копейки в рубли.

Здесь Claude вызывает tariff.get_current и сам конвертирует копейки в рубли.

“Какие услуги у меня подключены?”

Claude разделяет платные и бесплатные опции, показывает стоимость каждой.

Claude разделяет платные и бесплатные опции, показывает стоимость каждой.

“Сколько мне пополнить и есть ли бонусы СберСпасибо?”

Два API-вызова в одном skill: рекомендуемая сумма пополнения и состояние программы лояльности.

Два API-вызова в одном skill: рекомендуемая сумма пополнения и состояние программы лояльности.

“Какие есть акции или предложения для меня?”

Claude вытаскивает промо-кампании и формулирует их понятным языком, без маркетингового мусора.

Claude вытаскивает промо-кампании и формулирует их понятным языком, без маркетингового мусора.

Помогает найти инсайт

Управляю мобильной связью через AI-агента: skill для сбермобайл - 6

Пополнить баланс не заходя в банк

Управляю мобильной связью через AI-агента: skill для сбермобайл - 7
Управляю мобильной связью через AI-агента: skill для сбермобайл - 8

Что дальше

У меня уже два работающих skill-а: Dodo Pizza и СберМобайл. Первый – через headless-браузер, второй – через чистые REST-вызовы. Разница в удобстве разработки и скорости работы – колоссальная. REST-skill отвечает за секунду, браузерный – за 10-15.

Но идея шире. Я вижу это как агентскую систему управления повседневными приложениями. Вот что хочу перевести в skills дальше:

Банк – остатки, переводы, история операций. Маркетплейс – отслеживание заказов, статус доставки. Транспорт – баланс карты, маршруты. Госуслуги – статус заявлений, записи.

Представьте утренний запрос в терминале: “дай сводку” – и Claude сам обращается к оператору, банку, маркетплейсу и выдаёт одним сообщением: остаток на балансе, статус доставки, сколько гигабайт осталось. Это не футуристика, это рабочий паттерн уже сегодня.

Каждый skill – это одна зависимость (requests или puppeteer), один markdown-файл с промптом и несколько API-вызовов.

Код проекта целиком – на GitHub: https://github.com/pocketpet/sbermobile-skill [8]

Автор: leviva23

Источник [9]


Сайт-источник BrainTools: https://www.braintools.ru

Путь до страницы источника: https://www.braintools.ru/article/27900

URLs in this post:

[1] dodopizza.ru: http://dodopizza.ru

[2] память: http://www.braintools.ru/article/4140

[3] lk.sbermobile.ru: http://lk.sbermobile.ru

[4] https://lk.sbermobile.ru/v2/api/: https://lk.sbermobile.ru/v2/api/

[5] SKILL.md: http://SKILL.md

[6] ошибки: http://www.braintools.ru/article/4192

[7] demo.py: http://demo.py

[8] https://github.com/pocketpet/sbermobile-skill: https://github.com/pocketpet/sbermobile-skill

[9] Источник: https://habr.com/ru/articles/1016328/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1016328

www.BrainTools.ru

Rambler's Top100