Медиа идёт напрямую между участниками (mesh). Сигналинг — ваш локальный node server.mjs (не тарифицируется как звонок Voximplant).
Voximplant ниже — только вход в приложение (опционально), без sdk.call() в PSTN.
Запуск: в папке p2p выполнить npm install и npm start, открыть http://127.0.0.1:3333.
Коллега в той же LAN: тот же URL с IP вашего ПК, порт 3333. Через интернет — VPN, SSH-туннель или вынести сервер на VPS.
На прод-сервере nginx должен проксировать WebSocket на путь /signal к процессу node server.mjs (см. пример ниже). Иначе в логе будет WS error / WS closed сразу после подключения.
Другой хост/порт сигналинга: параметр в URL ?signal=wss://другой.хост:3333/signal&room=...
Если нет веб-камеры, после ошибки на «видео+аудио» запрашивается только микрофон (раньше весь вход в mesh блокировался).
Если в логе у собеседника pc state … failed при рабочем WebSocket — это почти всегда сеть/NAT: поднимите свой TURN (например coturn на том же VPS) и задайте серверы в window.P2P_TURN_SERVERS (см. скрипт ниже).
location /signal {
proxy_pass http://127.0.0.1:3333;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_read_timeout 86400;
}