МожливостіСутності
Документація
    Ring Platform

    Децентралізоване самобудівне майбутнє

    Увійти
    Сутності
    Можливості
    Магазин
    Документація
    Концепції
    RING ЕкономікаSonoratek LLCГлобальний впливAI зустрічає Web3
    Розпочати
    Швидкий стартКалькуляторДорожня карта
    Конфіденційність|Контакти
    v1.104.26|Sonoratek LLC

    Documentation

    Концепції, цінність і типові сценарії

    Ласкаво просимо до Ring
    Швидкий довідник
    Початок роботи
    Передумови
    Встановлення
    Валідація першого успіху
    Наступні кроки
    Функції
    Магазин
    Склад і залишки
    Керування вендорами
    Комісії та розрахунки
    SubscriptionConductor
    PaymentConductor
    Ring Oracle
    Інтеграція платежів
    Публічні пули та DAO-банки
    Інтеграція WayForPay
    Web3 Гаманець
    WalletConductor
    Кредитні винагороди
    Партнерська та реферальна підтримка
    Реферальні коди (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Система Стейкінга Токенів
    Лабораторія проєкту власника (Owner Project Lab)
    Сутності
    Можливості
    AI Matcher
    Повідомлення
    Завдання Ring
    WebRTC-дзвінки та STUNner TURN
    Ігри з друзями
    Модуль Новин - Цифровий Газетний Досвід
    Блоги учасників
    Сторінки публічного профілю
    Віджети профілю облікового запису
    Ring File Cabinet
    Система Резервування Імен Користувачів
    Науковий редактор
    Notifications
    Push-сповіщення через FCM (Ring)
    Email AI-CRM
    Ring Mailer і RingdomX Mail
    Протокол Tunnel
    VideoConductor
    MediaConductor
    Generative Gallery
    Authentication
    Безпека та відповідність
    Консоль адміністратора
    Адмінська Wiki
    Керування через Telegram
    Система локалей
    Мобільний Досвід
    Паттерни Оптимізації Продуктивності
    Приклади
    Швидкий старт
    Базове налаштування
    Білий лейбл
    Користувацьке брендування
    Інтеграція Web3
    Реальні приклади
    Розширені функції
    Кастомізація
    Швидкий старт — ваш перший клон Ring
    Повний посібник налаштування
    Вертикальні пресети (SSOT)
    Ringization playbook
    Брендування
    Теми
    Функції
    Локалізація
    Налаштування токеноміки
    Інтеграція платіжних шлюзів
    Еталонні деплої Ring
    Конфігурація
    Публічні змінні середовища
    Секрети Order Lab
    Project ID WalletConnect (Reown Cloud)
    Підтримувані сервіси
    Вікі NODUS (знання проєкту)
    Плейбук конфігурації
    Web3
    Token launch jurisdictions
    Гаманець
    Поради з безпеки гаманця
    Інтеграції
    Ethereum гаманці (Wagmi v3)
    RingFileBase (API об’єктного сховища)
    Ring CDN (edge RingFileBase)
    Розгортання
    Розгортання на власному сервері
    Vercel
    Docker
    Конфігурація Середовища
    Моніторинг та Аналітика
    Оптимізація продуктивності
    Резервне копіювання і відновлення
    Архітектура
    Data Model
    Security
    Real Time
    Синхронізація discovery після мутацій
    Архітектура PaymentConductor
    Архітектура WalletConductor
    Архітектура News Kingdom
    Бекенд Сервіси
    Інтеграція Firebase
    Розробка
    Ring MCP Server
    OSS і enterprise

    Швидкий вхід (CTO · аудитори · агенти)

    Вітаємо — місія та аудиторії
    Швидкий довідник
    Початок роботи
    Архітектура та Auth.js
    Режими бекенду та БД (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Деплой (Docker · k8s)
    Безпека та відповідність
    ringdom.org — база LegioX
    Код — ліцензія MIT (GitHub)

    Documentation

    Концепції, цінність і типові сценарії

    Ласкаво просимо до Ring
    Швидкий довідник
    Початок роботи
    Передумови
    Встановлення
    Валідація першого успіху
    Наступні кроки
    Функції
    Магазин
    Склад і залишки
    Керування вендорами
    Комісії та розрахунки
    SubscriptionConductor
    PaymentConductor
    Ring Oracle
    Інтеграція платежів
    Публічні пули та DAO-банки
    Інтеграція WayForPay
    Web3 Гаманець
    WalletConductor
    Кредитні винагороди
    Партнерська та реферальна підтримка
    Реферальні коди (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Система Стейкінга Токенів
    Лабораторія проєкту власника (Owner Project Lab)
    Сутності
    Можливості
    AI Matcher
    Повідомлення
    Завдання Ring
    WebRTC-дзвінки та STUNner TURN
    Ігри з друзями
    Модуль Новин - Цифровий Газетний Досвід
    Блоги учасників
    Сторінки публічного профілю
    Віджети профілю облікового запису
    Ring File Cabinet
    Система Резервування Імен Користувачів
    Науковий редактор
    Notifications
    Push-сповіщення через FCM (Ring)
    Email AI-CRM
    Ring Mailer і RingdomX Mail
    Протокол Tunnel
    VideoConductor
    MediaConductor
    Generative Gallery
    Authentication
    Безпека та відповідність
    Консоль адміністратора
    Адмінська Wiki
    Керування через Telegram
    Система локалей
    Мобільний Досвід
    Паттерни Оптимізації Продуктивності
    Приклади
    Швидкий старт
    Базове налаштування
    Білий лейбл
    Користувацьке брендування
    Інтеграція Web3
    Реальні приклади
    Розширені функції
    Кастомізація
    Швидкий старт — ваш перший клон Ring
    Повний посібник налаштування
    Вертикальні пресети (SSOT)
    Ringization playbook
    Брендування
    Теми
    Функції
    Локалізація
    Налаштування токеноміки
    Інтеграція платіжних шлюзів
    Еталонні деплої Ring
    Конфігурація
    Публічні змінні середовища
    Секрети Order Lab
    Project ID WalletConnect (Reown Cloud)
    Підтримувані сервіси
    Вікі NODUS (знання проєкту)
    Плейбук конфігурації
    Web3
    Token launch jurisdictions
    Гаманець
    Поради з безпеки гаманця
    Інтеграції
    Ethereum гаманці (Wagmi v3)
    RingFileBase (API об’єктного сховища)
    Ring CDN (edge RingFileBase)
    Розгортання
    Розгортання на власному сервері
    Vercel
    Docker
    Конфігурація Середовища
    Моніторинг та Аналітика
    Оптимізація продуктивності
    Резервне копіювання і відновлення
    Архітектура
    Data Model
    Security
    Real Time
    Синхронізація discovery після мутацій
    Архітектура PaymentConductor
    Архітектура WalletConductor
    Архітектура News Kingdom
    Бекенд Сервіси
    Інтеграція Firebase
    Розробка
    Ring MCP Server
    OSS і enterprise

    Швидкий вхід (CTO · аудитори · агенти)

    Вітаємо — місія та аудиторії
    Швидкий довідник
    Початок роботи
    Архітектура та Auth.js
    Режими бекенду та БД (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Деплой (Docker · k8s)
    Безпека та відповідність
    ringdom.org — база LegioX
    Код — ліцензія MIT (GitHub)

    Documentation

    Концепції, цінність і типові сценарії

    Ласкаво просимо до Ring
    Швидкий довідник
    Початок роботи
    Передумови
    Встановлення
    Валідація першого успіху
    Наступні кроки
    Функції
    Магазин
    Склад і залишки
    Керування вендорами
    Комісії та розрахунки
    SubscriptionConductor
    PaymentConductor
    Ring Oracle
    Інтеграція платежів
    Публічні пули та DAO-банки
    Інтеграція WayForPay
    Web3 Гаманець
    WalletConductor
    Кредитні винагороди
    Партнерська та реферальна підтримка
    Реферальні коди (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Система Стейкінга Токенів
    Лабораторія проєкту власника (Owner Project Lab)
    Сутності
    Можливості
    AI Matcher
    Повідомлення
    Завдання Ring
    WebRTC-дзвінки та STUNner TURN
    Ігри з друзями
    Модуль Новин - Цифровий Газетний Досвід
    Блоги учасників
    Сторінки публічного профілю
    Віджети профілю облікового запису
    Ring File Cabinet
    Система Резервування Імен Користувачів
    Науковий редактор
    Notifications
    Push-сповіщення через FCM (Ring)
    Email AI-CRM
    Ring Mailer і RingdomX Mail
    Протокол Tunnel
    VideoConductor
    MediaConductor
    Generative Gallery
    Authentication
    Безпека та відповідність
    Консоль адміністратора
    Адмінська Wiki
    Керування через Telegram
    Система локалей
    Мобільний Досвід
    Паттерни Оптимізації Продуктивності
    Приклади
    Швидкий старт
    Базове налаштування
    Білий лейбл
    Користувацьке брендування
    Інтеграція Web3
    Реальні приклади
    Розширені функції
    Кастомізація
    Швидкий старт — ваш перший клон Ring
    Повний посібник налаштування
    Вертикальні пресети (SSOT)
    Ringization playbook
    Брендування
    Теми
    Функції
    Локалізація
    Налаштування токеноміки
    Інтеграція платіжних шлюзів
    Еталонні деплої Ring
    Конфігурація
    Публічні змінні середовища
    Секрети Order Lab
    Project ID WalletConnect (Reown Cloud)
    Підтримувані сервіси
    Вікі NODUS (знання проєкту)
    Плейбук конфігурації
    Web3
    Token launch jurisdictions
    Гаманець
    Поради з безпеки гаманця
    Інтеграції
    Ethereum гаманці (Wagmi v3)
    RingFileBase (API об’єктного сховища)
    Ring CDN (edge RingFileBase)
    Розгортання
    Розгортання на власному сервері
    Vercel
    Docker
    Конфігурація Середовища
    Моніторинг та Аналітика
    Оптимізація продуктивності
    Резервне копіювання і відновлення
    Архітектура
    Data Model
    Security
    Real Time
    Синхронізація discovery після мутацій
    Архітектура PaymentConductor
    Архітектура WalletConductor
    Архітектура News Kingdom
    Бекенд Сервіси
    Інтеграція Firebase
    Розробка
    Ring MCP Server
    OSS і enterprise

    Швидкий вхід (CTO · аудитори · агенти)

    Вітаємо — місія та аудиторії
    Швидкий довідник
    Початок роботи
    Архітектура та Auth.js
    Режими бекенду та БД (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Деплой (Docker · k8s)
    Безпека та відповідність
    ringdom.org — база LegioX
    Код — ліцензія MIT (GitHub)
    Ring Logo

    Loading documentation...

    Preparing Ring content

    Ring Logo

    Loading documentation...

    Preparing Ring content

    Ring Logo

    Loading documentation...

    Preparing Ring content

    WebRTC-дзвінки та STUNner TURN

    Використовуйте вкладки Founder / Developer на бічній панелі документації, щоб фільтрувати цю сторінку. Видимість у бічній панелі налаштовується в lib/docs/audience-curated-docs.ts.

    Месенджер Ring може здійснювати аудіо- й відеодзвінки 1:1 усередині прямої розмови. Сигналізація проходить наявним каналом Tunnel conversation:{id}. Для медіа використовується браузерний RTCPeerConnection. Обхід NAT забезпечує STUNner (STUN/TURN) у кластері, а ICE-сервери надходять через автентифікований API — облікові дані ніколи не потрапляють у NEXT_PUBLIC_*.

    РівеньРоль
    UIPhone / Video у заголовку розмови → повноекранний оверлей дзвінка
    СигналізаціяПодії Tunnel call:invite … call:hangup у conversation:{id}
    ICEGET /api/webrtc/ice-servers (потрібна сесія)
    TURNШлюз STUNner TURN-UDP:3478 (наприклад, turn.ring-platform.org)

    Пов’язані матеріали: Месенджер · Ігри з друзями · Протокол Tunnel · Архітектура реального часу

    Ігри з друзями використовують спільний м’ютекс дзвінка ↔ гри (features/peer-games/lib/peer-game-mutex.ts). MessagesShell публікує setPeerCallBusy із фази WebRTC, тому банер /games і віджети game_request відмовляються приймати запрошення, поки триває дзвінок. Синхронізація між вкладками проходить через BroadcastChannel (необов’язковий navigator.locks). Ігри з друзями також повторно використовують GET /api/webrtc/ice-servers для оптимістичних підказок ходів через DataChannel — Tunnel + DB залишаються SSOT дошки.

    Чому це важливо для вашого клону

    Учасники швидше укладають угоди, коли можуть розмовляти, не залишаючи ваш Ring. Дзвінки залишаються в тій самій розмові, яка вже містить контекст можливості, сутності або магазину.

    Месенджер

    Розмови, групи та живий чат Tunnel.

    Протокол Tunnel

    Канал реального часу, який дзвінки використовують для запрошення, прийняття та завершення.

    Самостійне розгортання

    Тут описано розміщення STUNner і налаштування env для клонів k8s.

    Контрольний список оператора (k3s / Ringdom cloud)

    1. Площину керування STUNner встановлено (stunner-system), а Gateway налаштовано в просторі імен .

    Архітектура

    Перевірені модулі

    ШляхВідповідальність
    app/api/webrtc/ice-servers/route.tsАвтентифікована конфігурація ICE зі змінних середовища WEBRTC_*
    features/chat/lib/fetch-ice-servers.tsКлієнтський fetch через apiClient
    features/chat/lib/call-types.tsТипи подій сигналізації / payload
    hooks/use-webrtc-call.tsRTCPeerConnection + публікація/підписка Tunnel
    features/chat/components/call-overlay.tsxПовноекранні елементи керування (вимкнення звуку / камера / завершення)

    Backlog

    Пов’язана документація

    Related documentation

    Real-Time Messaging

    Залежить від: дзвінки починаються із заголовків прямих розмов у месенджері.

    Peer Games

    Той самий процес: спільний м’ютекс дзвінка/гри (BroadcastChannel); ICE route повторно використовується для оптимістичних підказок ходів через DataChannel.

    Tunnel Protocol

    Залежить від: call:invite … call:hangup проходять через conversation:{id}.

    Push Notifications with FCM (Ring-Powered)

    Той самий процес: офлайновий банер ОС CALL_INVITE (FCM лише з data, TTL 90 с, RFC no-op у Chrome).

    1. Документація
    2. /Функції
    3. /WebRTC-дзвінки та STUNner TURN

    Оновлено 6 вер. 2026 р.5 хв прослуховування

    WebRTC-дзвінки та STUNner TURN

    Використовуйте вкладки Founder / Developer на бічній панелі документації, щоб фільтрувати цю сторінку. Видимість у бічній панелі налаштовується в lib/docs/audience-curated-docs.ts.

    Месенджер Ring може здійснювати аудіо- й відеодзвінки 1:1 усередині прямої розмови. Сигналізація проходить наявним каналом Tunnel conversation:{id}. Для медіа використовується браузерний RTCPeerConnection. Обхід NAT забезпечує STUNner (STUN/TURN) у кластері, а ICE-сервери надходять через автентифікований API — облікові дані ніколи не потрапляють у NEXT_PUBLIC_*.

    РівеньРоль
    UIPhone / Video у заголовку розмови → повноекранний оверлей дзвінка
    СигналізаціяПодії Tunnel call:invite … call:hangup у conversation:{id}
    ICEGET /api/webrtc/ice-servers (потрібна сесія)
    TURNШлюз STUNner TURN-UDP:3478 (наприклад, turn.ring-platform.org)

    Пов’язані матеріали: Месенджер · Ігри з друзями · Протокол Tunnel · Архітектура реального часу

    Ігри з друзями використовують спільний м’ютекс дзвінка ↔ гри (features/peer-games/lib/peer-game-mutex.ts). MessagesShell публікує setPeerCallBusy із фази WebRTC, тому банер /games і віджети game_request відмовляються приймати запрошення, поки триває дзвінок. Синхронізація між вкладками проходить через BroadcastChannel (необов’язковий navigator.locks). Ігри з друзями також повторно використовують GET /api/webrtc/ice-servers для оптимістичних підказок ходів через DataChannel — Tunnel + DB залишаються SSOT дошки.

    Чому це важливо для вашого клону

    Учасники швидше укладають угоди, коли можуть розмовляти, не залишаючи ваш Ring. Дзвінки залишаються в тій самій розмові, яка вже містить контекст можливості, сутності або магазину.

    Месенджер

    Розмови, групи та живий чат Tunnel.

    Протокол Tunnel

    Канал реального часу, який дзвінки використовують для запрошення, прийняття та завершення.

    Самостійне розгортання

    Тут описано розміщення STUNner і налаштування env для клонів k8s.

    Контрольний список оператора (k3s / Ringdom cloud)

    1. Площину керування STUNner встановлено (stunner-system), а Gateway налаштовано в просторі імен .

    Архітектура

    Перевірені модулі

    ШляхВідповідальність
    app/api/webrtc/ice-servers/route.tsАвтентифікована конфігурація ICE зі змінних середовища WEBRTC_*
    features/chat/lib/fetch-ice-servers.tsКлієнтський fetch через apiClient
    features/chat/lib/call-types.tsТипи подій сигналізації / payload
    hooks/use-webrtc-call.tsRTCPeerConnection + публікація/підписка Tunnel
    features/chat/components/call-overlay.tsxПовноекранні елементи керування (вимкнення звуку / камера / завершення)

    Backlog

    Пов’язана документація

    Related documentation

    Real-Time Messaging

    Залежить від: дзвінки починаються із заголовків прямих розмов у месенджері.

    Peer Games

    Той самий процес: спільний м’ютекс дзвінка/гри (BroadcastChannel); ICE route повторно використовується для оптимістичних підказок ходів через DataChannel.

    Tunnel Protocol

    Залежить від: call:invite … call:hangup проходять через conversation:{id}.

    Push Notifications with FCM (Ring-Powered)

    Той самий процес: офлайновий банер ОС CALL_INVITE (FCM лише з data, TTL 90 с, RFC no-op у Chrome).

    1. Документація
    2. /Функції
    3. /WebRTC-дзвінки та STUNner TURN

    Оновлено 6 вер. 2026 р.5 хв прослуховування

    WebRTC-дзвінки та STUNner TURN

    Використовуйте вкладки Founder / Developer на бічній панелі документації, щоб фільтрувати цю сторінку. Видимість у бічній панелі налаштовується в lib/docs/audience-curated-docs.ts.

    Месенджер Ring може здійснювати аудіо- й відеодзвінки 1:1 усередині прямої розмови. Сигналізація проходить наявним каналом Tunnel conversation:{id}. Для медіа використовується браузерний RTCPeerConnection. Обхід NAT забезпечує STUNner (STUN/TURN) у кластері, а ICE-сервери надходять через автентифікований API — облікові дані ніколи не потрапляють у NEXT_PUBLIC_*.

    РівеньРоль
    UIPhone / Video у заголовку розмови → повноекранний оверлей дзвінка
    СигналізаціяПодії Tunnel call:invite … call:hangup у conversation:{id}
    ICEGET /api/webrtc/ice-servers (потрібна сесія)
    TURNШлюз STUNner TURN-UDP:3478 (наприклад, turn.ring-platform.org)

    Пов’язані матеріали: Месенджер · Ігри з друзями · Протокол Tunnel · Архітектура реального часу

    Ігри з друзями використовують спільний м’ютекс дзвінка ↔ гри (features/peer-games/lib/peer-game-mutex.ts). MessagesShell публікує setPeerCallBusy із фази WebRTC, тому банер /games і віджети game_request відмовляються приймати запрошення, поки триває дзвінок. Синхронізація між вкладками проходить через BroadcastChannel (необов’язковий navigator.locks). Ігри з друзями також повторно використовують GET /api/webrtc/ice-servers для оптимістичних підказок ходів через DataChannel — Tunnel + DB залишаються SSOT дошки.

    Чому це важливо для вашого клону

    Учасники швидше укладають угоди, коли можуть розмовляти, не залишаючи ваш Ring. Дзвінки залишаються в тій самій розмові, яка вже містить контекст можливості, сутності або магазину.

    Месенджер

    Розмови, групи та живий чат Tunnel.

    Протокол Tunnel

    Канал реального часу, який дзвінки використовують для запрошення, прийняття та завершення.

    Самостійне розгортання

    Тут описано розміщення STUNner і налаштування env для клонів k8s.

    Контрольний список оператора (k3s / Ringdom cloud)

    1. Площину керування STUNner встановлено (stunner-system), а Gateway налаштовано в просторі імен .

    Архітектура

    Перевірені модулі

    ШляхВідповідальність
    app/api/webrtc/ice-servers/route.tsАвтентифікована конфігурація ICE зі змінних середовища WEBRTC_*
    features/chat/lib/fetch-ice-servers.tsКлієнтський fetch через apiClient
    features/chat/lib/call-types.tsТипи подій сигналізації / payload
    hooks/use-webrtc-call.tsRTCPeerConnection + публікація/підписка Tunnel
    features/chat/components/call-overlay.tsxПовноекранні елементи керування (вимкнення звуку / камера / завершення)

    Backlog

    Пов’язана документація

    Related documentation

    Real-Time Messaging

    Залежить від: дзвінки починаються із заголовків прямих розмов у месенджері.

    Peer Games

    Той самий процес: спільний м’ютекс дзвінка/гри (BroadcastChannel); ICE route повторно використовується для оптимістичних підказок ходів через DataChannel.

    Tunnel Protocol

    Залежить від: call:invite … call:hangup проходять через conversation:{id}.

    Push Notifications with FCM (Ring-Powered)

    Той самий процес: офлайновий банер ОС CALL_INVITE (FCM лише з data, TTL 90 с, RFC no-op у Chrome).

    1. Документація
    2. /Функції
    3. /WebRTC-дзвінки та STUNner TURN

    Оновлено 6 вер. 2026 р.5 хв прослуховування

    stunner
  1. Публічний UDP 3478 доступний (локальний / хмарний firewall).
  2. Налаштовано DNS для хоста TURN (приклад production: turn.ring-platform.org A/AAAA → IP вузла LB).
  3. Підключено App ConfigMap / Secret: WEBRTC_STUN_URL, WEBRTC_TURN_URL, WEBRTC_TURN_USERNAME, WEBRTC_TURN_CREDENTIAL.
  4. Учасники використовують прямі чати з підключеним Tunnel — Phone / Video з’являються в заголовку.
  5. Типові сценарії

    • Двоє підібраних фахівців переходять від тексту до короткого голосового дзвінка, не перемикаючи застосунки.
    • Постачальник уточнює замовлення наживо через відео, поки гілка залишається SSOT.
    • Навіть за суворого NAT з’єднання працює, оскільки TURN ретранслює через STUNner (коли облікові дані налаштовано).

    Для дзвінків потрібна активна сесія Tunnel. Якщо зв’язок реального часу втрачено, UI відмовляється починати дзвінок — спочатку виправте Tunnel (Протокол Tunnel).

    features/chat/components/conversation-header.tsxДії Phone / Video (лише для прямих розмов)
    features/messages/components/messages-shell.tsxЗ’єднує hook + overlay
    infrastructure/k3s-or/stunner/GatewayClass, GatewayConfig, маніфести Gateway
    k8s/ENV-PROD-WIRING.mdТаблиця production-змінних для WEBRTC_*

    ICE API

    GET /api/webrtc/ice-servers — потрібна сесія Auth.js (401, якщо користувач анонімний).

    Форма відповіді (перевірено):

    STUN використовує stun:stun.l.google.com:19302 як резерв, якщо WEBRTC_STUN_URL не задано. TURN додається лише тоді, коли задано всі WEBRTC_TURN_URL, WEBRTC_TURN_USERNAME і WEBRTC_TURN_CREDENTIAL.

    Змінні середовища (перевірено)

    ЗміннаДеПримітки
    WEBRTC_STUN_URLConfigMapНеобов’язкова; у route є стандартний Google STUN
    WEBRTC_TURN_URLConfigMapНаприклад, turn:turn.ring-platform.org:3478?transport=udp
    WEBRTC_TURN_USERNAMESecret ring-platform-org-secretsВідповідає Secret автентифікації STUNner
    WEBRTC_TURN_CREDENTIALSecretНіколи не використовуйте NEXT_PUBLIC_*

    Приклади: k8s/secrets.example.yaml, нотатки з підключення: k8s/ENV-PROD-WIRING.md.
    env.local.template поки не містить цих ключів — для відповідності local/prod використовуйте приклади k8s.

    Події сигналізації Tunnel

    Публікуються в каналі conversation:{conversationId} (тому самому каналі, що й typing):

    ПодіяПризначення
    call:inviteВихідний дзвінок
    call:accept / call:rejectРішення адресата
    call:offer / call:answerSDP
    call:iceКандидати ICE
    call:hangupЗавершення

    Підписуйтеся через useTunnelChannel — не підписуйтеся напряму в effects (Протокол Tunnel).

    Порядок встановлення STUNner (k3s-or)

    1. 1

      Встановіть оператор (він підтягує Gateway API + CRD STUNner):

    2. 2

      Створіть Secret автентифікації (type=static, username, password) і застосуйте infrastructure/k3s-or/stunner/gateway.yaml (GatewayClass + GatewayConfig + Gateway з протоколом TURN-UDP).

    3. 3

      Підключіть app Secret/ConfigMap і переконайтеся, що в Deployment є env-посилання на WEBRTC_TURN_USERNAME / WEBRTC_TURN_CREDENTIAL (k8s/deployment.yaml). Перезапустіть Deployment застосунку.

    4. 4

      Smoke-тест: зовнішня STUN Binding на :3478; автентифікований GET /api/webrtc/ice-servers; два браузери в одній прямій розмові.

    Протокол listener має бути TURN-UDP, а не простий UDP. Realm у GatewayConfig містить літери, цифри та дефіс (наприклад, ring-platform-org). Порожні backendRefs UDPRoute недійсні — peer TURN не потребує UDPRoute, доки не з’явиться SFU (LiveKit).

    Обсяг поставленого MVP

    • Входить: пряме аудіо/відео 1:1; елементи керування overlay; ICE через server route; основа STUNner TURN.
    • Не входить (див. backlog): вхідний дзвінок, коли співрозмовник не переглядає цю гілку; групові/багатосторонні дзвінки; LiveKit SFU; системні повідомлення про дзвінки; посилення шляху IPv6 TURN.

    Стек Connect Platform RTVS / FastTransponder не портовано — використано лише шаблони UX керування (вимкнення звуку / камера / завершення).

    Messaging API

    Додатково: HTTP-контракти розмов і typing.

    Real Time

    Поглиблено: володіння TunnelProvider і споживачі.

    json
    
    {
      "success": true,
      "data": {
        "iceServers": [
          { "urls": "stun:…" },
          { "urls": "turn:…", "username": "…", "credential": "…" }
        ],
        "turnConfigured": true
      }
    }
    stunner
  6. Публічний UDP 3478 доступний (локальний / хмарний firewall).
  7. Налаштовано DNS для хоста TURN (приклад production: turn.ring-platform.org A/AAAA → IP вузла LB).
  8. Підключено App ConfigMap / Secret: WEBRTC_STUN_URL, WEBRTC_TURN_URL, WEBRTC_TURN_USERNAME, WEBRTC_TURN_CREDENTIAL.
  9. Учасники використовують прямі чати з підключеним Tunnel — Phone / Video з’являються в заголовку.
  10. Типові сценарії

    • Двоє підібраних фахівців переходять від тексту до короткого голосового дзвінка, не перемикаючи застосунки.
    • Постачальник уточнює замовлення наживо через відео, поки гілка залишається SSOT.
    • Навіть за суворого NAT з’єднання працює, оскільки TURN ретранслює через STUNner (коли облікові дані налаштовано).

    Для дзвінків потрібна активна сесія Tunnel. Якщо зв’язок реального часу втрачено, UI відмовляється починати дзвінок — спочатку виправте Tunnel (Протокол Tunnel).

    features/chat/components/conversation-header.tsxДії Phone / Video (лише для прямих розмов)
    features/messages/components/messages-shell.tsxЗ’єднує hook + overlay
    infrastructure/k3s-or/stunner/GatewayClass, GatewayConfig, маніфести Gateway
    k8s/ENV-PROD-WIRING.mdТаблиця production-змінних для WEBRTC_*

    ICE API

    GET /api/webrtc/ice-servers — потрібна сесія Auth.js (401, якщо користувач анонімний).

    Форма відповіді (перевірено):

    STUN використовує stun:stun.l.google.com:19302 як резерв, якщо WEBRTC_STUN_URL не задано. TURN додається лише тоді, коли задано всі WEBRTC_TURN_URL, WEBRTC_TURN_USERNAME і WEBRTC_TURN_CREDENTIAL.

    Змінні середовища (перевірено)

    ЗміннаДеПримітки
    WEBRTC_STUN_URLConfigMapНеобов’язкова; у route є стандартний Google STUN
    WEBRTC_TURN_URLConfigMapНаприклад, turn:turn.ring-platform.org:3478?transport=udp
    WEBRTC_TURN_USERNAMESecret ring-platform-org-secretsВідповідає Secret автентифікації STUNner
    WEBRTC_TURN_CREDENTIALSecretНіколи не використовуйте NEXT_PUBLIC_*

    Приклади: k8s/secrets.example.yaml, нотатки з підключення: k8s/ENV-PROD-WIRING.md.
    env.local.template поки не містить цих ключів — для відповідності local/prod використовуйте приклади k8s.

    Події сигналізації Tunnel

    Публікуються в каналі conversation:{conversationId} (тому самому каналі, що й typing):

    ПодіяПризначення
    call:inviteВихідний дзвінок
    call:accept / call:rejectРішення адресата
    call:offer / call:answerSDP
    call:iceКандидати ICE
    call:hangupЗавершення

    Підписуйтеся через useTunnelChannel — не підписуйтеся напряму в effects (Протокол Tunnel).

    Порядок встановлення STUNner (k3s-or)

    1. 1

      Встановіть оператор (він підтягує Gateway API + CRD STUNner):

    2. 2

      Створіть Secret автентифікації (type=static, username, password) і застосуйте infrastructure/k3s-or/stunner/gateway.yaml (GatewayClass + GatewayConfig + Gateway з протоколом TURN-UDP).

    3. 3

      Підключіть app Secret/ConfigMap і переконайтеся, що в Deployment є env-посилання на WEBRTC_TURN_USERNAME / WEBRTC_TURN_CREDENTIAL (k8s/deployment.yaml). Перезапустіть Deployment застосунку.

    4. 4

      Smoke-тест: зовнішня STUN Binding на :3478; автентифікований GET /api/webrtc/ice-servers; два браузери в одній прямій розмові.

    Протокол listener має бути TURN-UDP, а не простий UDP. Realm у GatewayConfig містить літери, цифри та дефіс (наприклад, ring-platform-org). Порожні backendRefs UDPRoute недійсні — peer TURN не потребує UDPRoute, доки не з’явиться SFU (LiveKit).

    Обсяг поставленого MVP

    • Входить: пряме аудіо/відео 1:1; елементи керування overlay; ICE через server route; основа STUNner TURN.
    • Не входить (див. backlog): вхідний дзвінок, коли співрозмовник не переглядає цю гілку; групові/багатосторонні дзвінки; LiveKit SFU; системні повідомлення про дзвінки; посилення шляху IPv6 TURN.

    Стек Connect Platform RTVS / FastTransponder не портовано — використано лише шаблони UX керування (вимкнення звуку / камера / завершення).

    Messaging API

    Додатково: HTTP-контракти розмов і typing.

    Real Time

    Поглиблено: володіння TunnelProvider і споживачі.

    json
    
    {
      "success": true,
      "data": {
        "iceServers": [
          { "urls": "stun:…" },
          { "urls": "turn:…", "username": "…", "credential": "…" }
        ],
        "turnConfigured": true
      }
    }
    stunner
  11. Публічний UDP 3478 доступний (локальний / хмарний firewall).
  12. Налаштовано DNS для хоста TURN (приклад production: turn.ring-platform.org A/AAAA → IP вузла LB).
  13. Підключено App ConfigMap / Secret: WEBRTC_STUN_URL, WEBRTC_TURN_URL, WEBRTC_TURN_USERNAME, WEBRTC_TURN_CREDENTIAL.
  14. Учасники використовують прямі чати з підключеним Tunnel — Phone / Video з’являються в заголовку.
  15. Типові сценарії

    • Двоє підібраних фахівців переходять від тексту до короткого голосового дзвінка, не перемикаючи застосунки.
    • Постачальник уточнює замовлення наживо через відео, поки гілка залишається SSOT.
    • Навіть за суворого NAT з’єднання працює, оскільки TURN ретранслює через STUNner (коли облікові дані налаштовано).

    Для дзвінків потрібна активна сесія Tunnel. Якщо зв’язок реального часу втрачено, UI відмовляється починати дзвінок — спочатку виправте Tunnel (Протокол Tunnel).

    features/chat/components/conversation-header.tsxДії Phone / Video (лише для прямих розмов)
    features/messages/components/messages-shell.tsxЗ’єднує hook + overlay
    infrastructure/k3s-or/stunner/GatewayClass, GatewayConfig, маніфести Gateway
    k8s/ENV-PROD-WIRING.mdТаблиця production-змінних для WEBRTC_*

    ICE API

    GET /api/webrtc/ice-servers — потрібна сесія Auth.js (401, якщо користувач анонімний).

    Форма відповіді (перевірено):

    STUN використовує stun:stun.l.google.com:19302 як резерв, якщо WEBRTC_STUN_URL не задано. TURN додається лише тоді, коли задано всі WEBRTC_TURN_URL, WEBRTC_TURN_USERNAME і WEBRTC_TURN_CREDENTIAL.

    Змінні середовища (перевірено)

    ЗміннаДеПримітки
    WEBRTC_STUN_URLConfigMapНеобов’язкова; у route є стандартний Google STUN
    WEBRTC_TURN_URLConfigMapНаприклад, turn:turn.ring-platform.org:3478?transport=udp
    WEBRTC_TURN_USERNAMESecret ring-platform-org-secretsВідповідає Secret автентифікації STUNner
    WEBRTC_TURN_CREDENTIALSecretНіколи не використовуйте NEXT_PUBLIC_*

    Приклади: k8s/secrets.example.yaml, нотатки з підключення: k8s/ENV-PROD-WIRING.md.
    env.local.template поки не містить цих ключів — для відповідності local/prod використовуйте приклади k8s.

    Події сигналізації Tunnel

    Публікуються в каналі conversation:{conversationId} (тому самому каналі, що й typing):

    ПодіяПризначення
    call:inviteВихідний дзвінок
    call:accept / call:rejectРішення адресата
    call:offer / call:answerSDP
    call:iceКандидати ICE
    call:hangupЗавершення

    Підписуйтеся через useTunnelChannel — не підписуйтеся напряму в effects (Протокол Tunnel).

    Порядок встановлення STUNner (k3s-or)

    1. 1

      Встановіть оператор (він підтягує Gateway API + CRD STUNner):

    2. 2

      Створіть Secret автентифікації (type=static, username, password) і застосуйте infrastructure/k3s-or/stunner/gateway.yaml (GatewayClass + GatewayConfig + Gateway з протоколом TURN-UDP).

    3. 3

      Підключіть app Secret/ConfigMap і переконайтеся, що в Deployment є env-посилання на WEBRTC_TURN_USERNAME / WEBRTC_TURN_CREDENTIAL (k8s/deployment.yaml). Перезапустіть Deployment застосунку.

    4. 4

      Smoke-тест: зовнішня STUN Binding на :3478; автентифікований GET /api/webrtc/ice-servers; два браузери в одній прямій розмові.

    Протокол listener має бути TURN-UDP, а не простий UDP. Realm у GatewayConfig містить літери, цифри та дефіс (наприклад, ring-platform-org). Порожні backendRefs UDPRoute недійсні — peer TURN не потребує UDPRoute, доки не з’явиться SFU (LiveKit).

    Обсяг поставленого MVP

    • Входить: пряме аудіо/відео 1:1; елементи керування overlay; ICE через server route; основа STUNner TURN.
    • Не входить (див. backlog): вхідний дзвінок, коли співрозмовник не переглядає цю гілку; групові/багатосторонні дзвінки; LiveKit SFU; системні повідомлення про дзвінки; посилення шляху IPv6 TURN.

    Стек Connect Platform RTVS / FastTransponder не портовано — використано лише шаблони UX керування (вимкнення звуку / камера / завершення).

    Messaging API

    Додатково: HTTP-контракти розмов і typing.

    Real Time

    Поглиблено: володіння TunnelProvider і споживачі.

    json
    
    {
      "success": true,
      "data": {
        "iceServers": [
          { "urls": "stun:…" },
          { "urls": "turn:…", "username": "…", "credential": "…" }
        ],
        "turnConfigured": true
      }
    }