Манифест Ansible API

Это обещания тем, кто пишет клиенты и ботов. Не о ценностях — о том, на что можно опереться, когда ваш код уже в проде.

1. Схема опубликована целиком

Схема TL — вся, а не выдержки: каждый конструктор, каждый метод, каждый тип, с отдельной страницей и с машиночитаемой выгрузкой. Если метод существует на сервере, он есть в схеме. Скрытых методов, о которых знают только свои клиенты, у нас нет.

2. Ломающие изменения живут в слоях

Номер слоя — это контракт. Внутри слоя сигнатуры не меняются: если конструктор изменился, у него новый идентификатор и он приходит в новом слое, а старый продолжает работать. Клиент сообщает свой слой при подключении и получает ответы в нём.

Сейчас действует один слой — 223, первый публичный. Следующий появится в журнале слоёв вместе с перечнем изменений; старые слои мы не выпиливаем задним числом.

3. Ключи выдаются, а не выпрашиваются

api_id и api_hash выдаются автоматически на my.ansible.su — без заявки, без ожидания и без объяснения, зачем вам клиент. Ключ привязан к аккаунту, а не к компании.

Обратная сторона: ключ может быть заблокирован, если через него идёт рассылка спама или попытки перебора. Блокировка бьёт по api_id, а не по вашим пользователям, и мы скажем, за что.

4. Ограничения названы, а не угаданы

Там, где есть лимит, сервер возвращает FLOOD_WAIT_X с числом секунд, а не молча роняет соединение. Ошибки — это коды и текст, по которым можно ветвиться, а не человеческие фразы, меняющиеся от релиза к релизу.

Чего мы не обещаем

Гарантий доступности (SLA) у нас нет — проект молодой, и обещать четыре девятки было бы враньём. Групповые звонки не реализованы: методы в схеме есть, медиа-часть требует SFU, и он ещё не готов. Часть клиентских сборок отладочные. Полный перечень — на странице технических наработок.

Мы не обещаем совместимость с чужими серверами того же семейства протоколов и не считаем её целью: совместимость нужна для клиентских библиотек, а серверная часть у нас своя.