Проблема
Несколько раз в день около 50 из примерно 130 онлайн-пользователей сталкиваются с неожиданным отключением от Twilio. Отключения происходят внезапно, и пользователи теряют соединение через Twilio Voice SDK. Эти отключения длятся около минуты, а затем прекращаются без какой-либо видимой временной закономерности. Обычно они происходят чаще утром.
Однако два других параллельных соединения через веб-сокеты остаются стабильными:
Соединение SignalR, которое обрабатывает нашу бизнес-логику. .
Подключение к Twilio TaskRouter.
Отключение Voice SDK не влияет ни на одно из этих подключений.
Мы используем эти методы и конфигурации уже более трёх лет без столкнулся с такой серьезной проблемой с отключениями. Недавно мы перевели многих пользователей с Twilio Voice SDK V1 на V2, но проблема сохраняется в обеих версиях.
Каждый пользователь работает со своего компьютера и рабочего оборудования. Хотя с 99% вызовов у них проблем не возникает, эти отключения происходят при определенных вызовах.
Вот код:
Код: Выделить всё
let deviceParams = {
codecPreferences: ["opus", "pcmu"],
closeProtection: false,
fakeLocalDTMF: true,
audioConstraints: {
mandatory: {
googAutoGainControl: false
}
},
};
if ($scope.model.isUsingNewTwilioLibraryVersion) {
deviceParams.enableImprovedSignalingErrorPrecision = true;
deviceParams.maxCallSignalingTimeoutMs = 6000;
}
$scope.model.phoneCapabilityToken = '' // this comes from the backend
// V1 implementation
$scope.twilio.device = twilioDeviceManager.getDeviceV1();
$scope.twilio.device.on("ready", deviceOnReady);
$scope.twilio.device.on("error", deviceOnError);
$scope.twilio.device.on("connect", deviceOnConnect);
$scope.twilio.device.on("disconnect", deviceOnDisconnect);
$scope.twilio.device.on("cancel", deviceOnCancel);
$scope.twilio.device.on("offline", deviceOnOffline);
$scope.twilio.device.on("incoming", deviceOnIncoming);
$scope.twilio.device.setup($scope.model.phoneCapabilityToken, deviceParams);
// V2 implementation
$scope.twilio.device = twilioDeviceManager.getDeviceV2($scope.model.phoneCapabilityToken, deviceParams);
$scope.twilio.device.on("registered", deviceOnRegistered);
$scope.twilio.device.on("registering", deviceOnRegistering);
$scope.twilio.device.on("unregistered", deviceOnUnregistered);
$scope.twilio.device.on("error", deviceOnError);
$scope.twilio.device.on("destroyed", deviceOnDestroyed);
$scope.twilio.device.on("incoming", deviceOnIncoming);
$scope.twilio.device.on('tokenWillExpire', deviceOnTokenWillExpire)
$scope.twilio.device.register();
// making a call
let targetPhoneNumber = '1231233441'
let connectParams = { targetPhoneNumber: '' };
// V1
$scope.twilio.device.connect(connectParams);
// V2
this.twilioDevice.connect({ params: connectParams })
.then((call) => {
call.on('accept', c => {
$scope.deviceOnConnectCommon(c)
})
})
.catch((error) => {
console.log(error);
})
Вот журналы, которые мы получили из Twilio Voice SDK во время отключений:< /p>
Код: Выделить всё
[2025-01-10 09:43:56.667] [info] device.on.connect
[2025-01-10 09:44:00.683] [info] connection.warning high-packet-loss
[2025-01-10 09:44:03.679] [info] connection.warning high-packets-lost-fraction
[2025-01-10 09:44:08.688] [info] connection.warning low-bytes-received
[2025-01-10 09:44:11.974] [info] connection.warning ice-connectivity-lost
[2025-01-10 09:44:11.982] [info] connection.reconnecting ConnectionError: ConnectionError (53405): Media connection failed.
at ConnectionError.TwilioError [as constructor] (:1:158062)
at new ConnectionError (:1:150484)
at Call._this._onMediaFailure (:1:46317)
at Call._this._mediaHandler.ondisconnected (:1:56684)
at PeerConnection._onMediaConnectionStateChange (:1:216760)
at pc.oniceconnectionstatechange (:1:224502)
[2025-01-10 09:44:12.679] [info] connection.warning-cleared high-packets-lost-fraction
[2025-01-10 09:44:13.460] [info] connection.reconnecting ConnectionDisconnected: ConnectionDisconnected (53001): Raised whenever the signaling connection is unexpectedly disconnected.
at ConnectionDisconnected.TwilioError [as constructor] (:1:158062)
at new ConnectionDisconnected (:1:146883)
at Call._this._onTransportClose (:1:50890)
at emitNone (:1:282216)
at PStream.emit (:1:283662)
at PStream._handleTransportClose (:1:185601)
at emitNone (:1:282216)
at WSTransport.emit (:1:283662)
at WSTransport._closeSocket (:1:275290)
at :1:277053
[2025-01-10 09:44:13.462] [info] device.on.unregistered
[2025-01-10 09:44:15.680] [info] connection.warning-cleared high-packet-loss
[2025-01-10 09:44:18.557] [info] connection.reconnecting ConnectionDisconnected: ConnectionDisconnected (53001): Raised whenever the signaling connection is unexpectedly disconnected.
at ConnectionDisconnected.TwilioError [as constructor] (:1:158062)
at new ConnectionDisconnected (:1:146883)
at Call._this._onTransportClose (:1:50890)
at emitNone (:1:282216)
at PStream.emit (:1:283662)
at PStream._handleTransportClose (:1:185601)
at emitNone (:1:282216)
at WSTransport.emit (:1:283662)
at WSTransport._closeSocket (:1:275290)
at :1:276292
[2025-01-10 09:44:18.748] [info] workerOnActivityUpdate Offline
[2025-01-10 09:44:23.679] [info] connection.warning constant-audio-input-level
[2025-01-10 09:44:23.763] [info] connection.reconnecting ConnectionDisconnected: ConnectionDisconnected (53001): Raised whenever the signaling connection is unexpectedly disconnected.
at ConnectionDisconnected.TwilioError [as constructor] (:1:158062)
at new ConnectionDisconnected (:1:146883)
at Call._this._onTransportClose (:1:50890)
at emitNone (:1:282216)
at PStream.emit (:1:283662)
at PStream._handleTransportClose (:1:185601)
at emitNone (:1:282216)
at WSTransport.emit (:1:283662)
at WSTransport._closeSocket (:1:275290)
at :1:276292
[2025-01-10 09:44:23.810] [info] device.on.error {
code: 31009,
message: 'TransportError (31009): No transport available to send or receive messages'
}
[2025-01-10 09:44:27.061] [info] device.on.error {
code: 31009,
message: 'TransportError (31009): No transport available to send or receive messages'
}
[2025-01-10 09:44:27.066] [info] connection.warning ice-connectivity-lost
[2025-01-10 09:44:28.681] [info] connection.warning-cleared constant-audio-input-level
[2025-01-10 09:44:29.302] [info] connection.reconnecting ConnectionDisconnected: ConnectionDisconnected (53001): Raised whenever the signaling connection is unexpectedly disconnected.
at ConnectionDisconnected.TwilioError [as constructor] (:1:158062)
at new ConnectionDisconnected (:1:146883)
at Call._this._onTransportClose (:1:50890)
at emitNone (:1:282216)
at PStream.emit (:1:283662)
at PStream._handleTransportClose (:1:185601)
at emitNone (:1:282216)
at WSTransport.emit (:1:283662)
at WSTransport._closeSocket (:1:275290)
at :1:276292
[2025-01-10 09:44:34.567] [info] connection.reconnecting ConnectionDisconnected: ConnectionDisconnected (53001): Raised whenever the signaling connection is unexpectedly disconnected.
at ConnectionDisconnected.TwilioError [as constructor] (:1:158062)
at new ConnectionDisconnected (:1:146883)
at Call._this._onTransportClose (:1:50890)
at emitNone (:1:282216)
at PStream.emit (:1:283662)
at PStream._handleTransportClose (:1:185601)
at emitNone (:1:282216)
at WSTransport.emit (:1:283662)
at WSTransport._closeSocket (:1:275290)
at :1:276292
[2025-01-10 09:44:38.799] [info] device.on.error {
code: 20101,
message: 'AccessTokenInvalid (20101): Twilio was unable to validate your Access Token'
}
Мы считаем, что ошибка AccessTokenInvalid неточна. Мы генерируем токены со сроком действия 10 часов, и эти отключения происходят в течение часа после начала сеанса.
Пользователи не теряют соединение с нашим сервером или Twilio TaskRouter во время этих отключений. .
Показатели сервера не показывают проблем с производительностью (процессор, память, производительность базы данных и т. д.).
Демография пользователей
Все затронутые пользователи — из Филиппин.
Они подключаются к периферии Twilio в Сингапуре.
Насколько нам известно , все они используют одного и того же интернет-провайдера (хотя мы не уверены на 100 %).
Вызовы подключаются к конференциям Twilio, созданным в регионе US1.
Сведения о среде
Приложение запускается как в виде исполняемого файла, созданного с помощью Electron, так и в веб-браузерах. Проблема возникает в обеих средах.
До возникновения этой проблемы не было внесено никаких изменений в инфраструктуру или код.
Проблема возникает уже около неделю.
Вопрос
Кто-нибудь сталкивался с подобной проблемой с массовым отключением Twilio Voice SDK? Может ли это быть связано с периферийными местоположениями Twilio или проблемами, связанными с интернет-провайдером? Мы будем очень признательны за любые рекомендации по диагностике и решению этой проблемы.
Мы проверили нашу инфраструктуру, производительность сервера и настройку Twilio. Никаких последних изменений не было сделано, и все показатели стабильны. Мы ожидали, что пользователи будут оставаться на связи с Twilio Voice SDK без перебоев. Однако мы заметили частые массовые отключения, хотя другие соединения (SignalR, TaskRouter) остаются незатронутыми. Мы ожидали стабильности, аналогичной той, что была у нас более 3 лет.
Мы также перешли с Twilio Voice SDK V1 на V2, но проблема осталась.
Что я могу сделать? изменить мой код, чтобы сделать его лучше?
Подробнее здесь: https://stackoverflow.com/questions/793 ... isconnects