Для технических специалистов
Предлагаемый стек WhitePhone
Краткое техническое описание для инженеров оператора и АТС. Эталон — публичный Callmar; брендированный контур наследует тот же путь звонка.
Архитектура
iPhone ↔ опциональный relay ↔ ваша SIP / АТС
Медиа идёт к вашей инфраструктуре. Relay нужен для стабильных входящих на iOS, а не как «вторая АТС».
Брендированное приложение: CallKit, PushKit, PJSIP, автонастройка.
OpenSIPS mid_registrar + push-gateway → APNs VoIP.
REGISTER, INVITE, кодеки, при необходимости TLS/SRTP.
RTP/SRTP к вашей стороне по согласованному профилю.
QR / ссылка: с паролем или без — как удобнее оператору.
Relay можно разместить у нас или у вас. Без корректного VoIP push-пути фоновые входящие на iOS нестабильны — это ограничение платформы, не «баг softphone».
Клиент
iOS-клиент на базе Callmar
| Платформа | iOS 17.0 и новее · iPhone (iPad поддерживается эталоном) |
|---|---|
| Язык и UI | Swift · SwiftUI · локальное хранение на SwiftData |
| SIP-стек | PJSIP / pjproject 2.14.1 (статическая сборка, OpenSSL, Opus) |
| Телефония Apple | CallKit · PushKit (VoIP push для входящих звонков) |
| Транспорты | UDP · TCP · TLS (TLS 1.2+) |
| Кодеки (предпочтение) | Opus 48 kHz · G.722 · Speex WB · G.722.1 · PCMU · PCMA |
| Шифрование медиа | SRTP (SDES), если поддерживает и включает АТС · по умолчанию выключено для совместимости |
| Эталон продукта | Callmar в App Store · callmar.online |
Сигналинг и медиа
Стандартный SIP к вашей инфраструктуре
WhitePhone не подменяет АТС. Клиент регистрируется на ваши учётки и ходит INVITE/BYE как обычный SIP UA.
| Модель | Bring-your-own-SIP: учётные записи оператора / АТС |
|---|---|
| Операции | REGISTER · INVITE · ACK · BYE · перевод звонка (если поддерживает АТС) |
| Несколько линий | Несколько SIP-аккаунтов в одном приложении |
| NAT | Проверяется на пилоте; для фоновых входящих обычно нужен relay (сервер для стабильных входящих) |
| Примеры совместимости | Asterisk · FreePBX · 3CX · FreeSWITCH и другие стандартные SIP; облачные провайдеры по профилю |
Не обещаем «любая АТС без проверки». Перед пилотом сверяем конкретный профиль: транспорт, кодеки, TLS/SRTP, несколько устройств, перевод.
Входящие в фоне
VoIP push → CallKit → SIP
На iOS нельзя держать «вечный» UDP REGISTER в фоне. Рабочий путь — APNs VoIP и отчёт в CallKit.
| SIP-прокси | OpenSIPS 3.6 · модуль mid_registrar (контакты с push) |
|---|---|
| Push-gateway | Python · FastAPI · aioapns · доставка VoIP push в APNs |
| Цепочка | Входящий INVITE на relay → HTTP к gateway → APNs → приложение → CallKit → SIP к вашей АТС |
| Размещение | Наш контур или ваш контур — предмет согласования пилота |
Автонастройка
QR и ссылка для быстрой настройки
Параметры аккаунта передаются в payload. Пароль — по желанию оператора: в приложении или сразу в QR/ссылке.
| Формат | Структурированный payload автонастройки SIP-аккаунта |
|---|---|
| Каналы | QR (JSON) · URL-схема приложения · HTTPS-страница продолжения · URI sip: / sips: |
| Пароль | Можно не включать в QR/ссылку (пользователь вводит в приложении) или включить — если так удобнее вашему процессу |
| Не входит | Universal Links · deferred deep linking · MDM-enrollment как обязательная часть пилота |
АТС
Что нужно сверить до пилота
- SIP REGISTER с вашей стороны и политика нескольких устройств на одну учётку
- Транспорт: UDP / TCP / TLS и сертификаты, если TLS
- Набор кодеков и приоритеты (желательно Opus или G.722 + запас G.711)
- SRTP: нужен ли, какой режим; иначе оставляем выключенным
- NAT / firewall / SBC и путь входящих при закрытом приложении
- Перевод звонка (blind / attended), если это продуктовое требование
- Тестовые места: реальные регистрации, connect, качество на 72 часа и 7 дней
Безопасность и данные
Что остаётся на устройстве, что проходит через сервер
Формулировки для ИБ и архитекторов — без маркетинговых обещаний «всё только на телефоне».
| SIP-пароль | После настройки хранится в Keychain на устройстве; в QR/ссылке — опционально, по политике оператора |
|---|---|
| Push-токен | Нужен relay/gateway для доставки входящих — это токен уведомлений, не пароль SIP |
| Медиа звонка | К вашей АТС / провайдеру по SIP/RTP; мы не записываем и не храним разговоры на своей стороне |
| Опция 24/7 relay | Если включаете серверный REGISTER, учётные данные могут храниться в зашифрованном хранилище relay — это отдельное согласование, не режим по умолчанию для всех пилотов |
| ИИ-заметки | В публичном Callmar — на устройстве (Apple Speech / WhisperKit). В базовый пилот WhitePhone не входят как готовая функция |
Границы
Что в пилоте, что отдельно
Чтобы техкоманда и коммерция смотрели в одну спецификацию.
В пилоте
- Брендированный iOS-клиент и публикация
- CallKit · PushKit · стабильные входящие
- Подключение к вашей SIP / АТС
- Автонастройка по QR или ссылке
- Опциональный relay (сервер для стабильных входящих)
- Тестовые места и контроль качества звонков
Отдельным объёмом
- Глубокая интеграция ЛК / биллинг / API оператора
- Android-клиент
- ИИ-транскрибация и саммари как продуктовая фича
- MDM / корпоративный каталог приложений
- Гарантированные сроки App Review
Старт
Что прислать для технического разбора
- Тип АТС / SBC и версия (или облачный SIP-провайдер)
- Образец рабочих SIP-реквизитов для теста (можно временная учётка)
- Нужен ли TLS и SRTP; есть ли требования ИБ к размещению relay
- Ориентир по числу iPhone-пользователей на пилоте
- Материалы бренда: имя, иконка, цвета, кто публикует в App Store