Saltar al contenido
KAMOUniverse

Changelog

Qué hay de nuevo.

Cada mejora de la plataforma, a medida que se envía.

  1. · kamo-shared-library

    Conteo eventos DISTINCT a través de dueños de un rollup

    Un número de teléfono puede ser un punto de contacto en más de un propietario a la vez, y dos leads en una cuenta compartida es el caso ORDINARY. son comúnmente el la misma persona que pregunta dos veces. El rival escribe una fila por propietario deliberadamente, porque cada una de esas líneas de tiempo necesita la suya. Resumido sobre un rollup, llano cuenta reportar una llamada como dos, y un carril que lee 11 por encima de una lista que muestra 6 es peor que ningún carril en absoluto. COUNT (DISTINCT sourceId) sobre una lista de propietarios de un tipo cuenta exactamente qué la línea de tiempo fusionada muestra, y convierte las 26 consultas de cuenta de una cuenta en dos.

  2. · kamo-internal

    Ase á la ventana de la línea por miembro, y muestra en qué modo estás

    El control de despliegue. Default off, opt-in por miembro de Ajustes telefónicos, anidado bajo el interruptor VOIP porque no significa nada para un miembro sin línea. Un gancho es dueño de la puerta para que sus dos consumidores no puedan estar en desacuerdo. que abre la ventana y la tira dentro del suave que la ofrece. A el miembro que ve a uno pero no al otro está peor que uno que no ve tampoco. Es. falle cerrado: una lectura de configable oculta la función en lugar de ofrecer una ventana que puede no funcionar, y el suc teléfono blando en página no se ve afectado de ninguna manera. La tira responde a una pregunta a la que un miembro no puede ver la respuesta a: es esta llamada a salvo de un refresco? Con la ventana abran la llamada vidas allí y la panel es un control remoto, por lo que se ofrece para llevar la ventana hacia adelante. puede terminar detrás del navegador y nada más puede plantearlo. Con la ventana Cerró la llamada vive en la pestaña y una refresca termina, así lo dice. Inbound ahora utiliza el único gesto que puede producir: la notificación de escritorio clic, que anteriormente no tenía ningún manejador en absoluto.

  3. · VOIPService

    Lea y escriba la puerta de la ventana de la línea

    Línea de superficies GETWindowEnabled; PUT la acepta como una booleana nula para que ausente significa "no mencionado" y conserva el valor almacenado. Todos los existentes llamando a esta endpoint omite el campo, y tratando a los como falsos Desconmute la función para cualquier miembro cuya configuración del teléfono se guardaron para un razón no relacionada. También normaliza una lectura nula a false antes de salvar: una fila escrita antes de la la columna que existía todavía puede llevar null a través de Hibernate, y la columna NO es - NULL.

  4. · kamo-shared-library

    Mapa LINE-WINDOW-ENABLED en MemberVoipConfig

    La puerta por miembro para la ventana dedicada de la línea de suave. Se queda alfiler de versión a 1.6.0.Añada una cúbida no necesita bache, y un alfiler partido rompería CI para todos los consumidores a la vez. La columna ya existe en la base de datos; el DDL aterrizó en KamoInitializer primero, deliberadamente, porque un servicio que mapea una columna perdida falla en el frijol creación en lugar de degradante.

  5. · InitializerService

    DDL para la puerta de la ventana de línea por miembro

    Añade ************* por defecto a falso. Una columna en lugar de una bandera de características porque no hay sistema de bandera aquí y Capacidades de los miembros es un conjunto cerrado, cerrado con fallos sin ranura de repuesto. controlar vidas al lado de las otras preferencias telefónicas del miembro, que también es donde un administrador lo buscaría. Su propio corredor en lugar de una línea en MultiInstancePhoneMigration porque el ordenar es el punto: KamoInitializer no tiene CI, por lo que esto se aplica a mano y debe aterrizar ANTES de una construcción de VOIPService que mapee la columna, o Hibernate falle en la creación de frijol y el servicio no comenzará. El ALTER ya se ha aplicado a la base de datos en vivo por exactamente esa razón; este corredor la hace repetible e idempotente para cualquier otro entorno.

  6. · kamo-internal

    Una sub-tab de IA en el Centro de Interacción

    Las sesiones de AI viven en AIService y no son MediaSessions, así que este cubo recibe su propio cargador delante de la /api/media/sessions/chat de los otros cuatro compartir, luego adapta cada sesión en la misma forma de Fila en lugar de una segunda renderr la lista, su búsqueda, sus avatares y su chip deslizado son uno superficie, y una segunda derivaría de la primera dentro de una liberación. Sin leer viene a través de la ai: namespace the hexhead insignges lea (getUnread, no conversationKeyForWindow, una fila de chats-list no es una ventana de herramientas, así que una fila y su ventana minimizada nunca puede estar en desacuerdo sobre el número. Tres huecos más allá del propio informe del plan, atesorado antes de enviarlos en silencio: de sesión nunca enrutadaType 'AI' en ninguna parte, así que cada fila de IA resolvió 'equipo de miembros' y la pestaña de IA habrían quedado permanentemente vacías; la fila's título nunca lea fila.title, así que cada conversación de IA habría mostrado como "Patión guapo"; y 'ai' faltaba de TODOS los COMP.BUCKETS, así que la sub-tab per-miembro La preferencia se negaría silenciosamente a restaurarlo después de un interruptor. El escrito propio noreadFor() example tampoco se utiliza como escrito. un cálculo no leído con él al por mayor habría cero en todas las filas SOCIAL SOCIAL placa (nunca en el mapa en vivo, a diferencia de CHAT/SUPPORT) y deslumbró cada fila a cero antes de las cargas de instantáneas vivas; la rama de IA se dobla en el existente cómputo en su lugar, preservando ambos.

  7. · kamo-internal

    La ventana de línea dedicada

    La llamada ahora vive en una ventana un refresco del espacio de trabajo no puede tocar. SoftphoneProvider se convierte en propietario o seguidor. Sólo el propietario REGISTER y abre el enchutus STOMP; un seguidor hace estado espejo, envía comandos sobre el puente, y permanece en silencio, sin tono de llamada, sin ringback, sin sonidos de eventos, porque No tiene sesión y su botón de Respuesta no haría nada. Donde las esclusas web no disponible la pestaña simplemente es dueña de la línea y no hay ventana, que es El comportamiento de hoy: nunca se degrade en dos registros. /teléfono se entrega a través de una tercera rama de AuthedChrome llevando SoundProvider y SoftphoneProvider y nada más. Excluyendo ToolWindowRestore es cargaje Su guardia es el alcance del módulo, por lo que un documento nuevo volvería a reproducir el todo del miembro ack dentro de la ventana pop y así es la exclusión de SessionManager, que navega a /logout al expirar y eliminaría la sesión de Redis compartida fuera de la ficha del espacio de trabajo. Por la misma razón useUserInfo y apiClient ahora se niegan a autonavegando de esta ruta; se hace una sesión perdida, no redirigida. La ventana se abre sincronizadamente desde un clic en NavTop (la activación transitoria sí no sobrevivir a una espera), se llama así un segundo clic enfocar en lugar de duplicar, y reporta un popup bloqueado en lugar de fracasar en silencio. en página el softphone sigue funcionando de cualquier manera. Dentro: una puerta de inicio que compra activación pegajosa antes de que algo lo necesite, recargando-disfrute de la tecla, un cierre confirmar, y una cerradura de despertador de pantalla.

  8. · kamo-internal

    Una pestaña de comunicaciones que enrolla las pistas de la cuenta

    El nivel que más se refiere cuando dice "llamas de este cliente". Varias pistas comúnmente cuelga de una cuenta precisamente porque son la misma persona Preguntando dos veces, y cada una de sus llamadas fue emparejado a cualquier ventaja que tuviera la número en el momento de la lectura de la línea de tiempo de una pista responde a una pregunta más estrecha que el que alguien mira a un cliente está preguntando. Esto hace que la línea de tiempo existente de la plataforma, no una segunda. La columna vertebral es La historia de la pista dibuja una cuenta que da una base diferente. Un fósbane, otro. La pestaña dice lo que NO está mostrando. Las puertas del servidor cada enrollado de la pista enrollada en el los mismos derechos que aplica la página principal y tapa cuántos enrolla, y ambos son "N no se muestran pistas porque no tienes permiso" es un frase diferente de "esta cuenta tiene más pistas de las que rodamos a la vez", y una pancarta para ambos escondería la primera detrás de la segunda. Las notas y el chat están ausentes en lugar de vacíos. Ambos son de plomo, una nota vive en el flujo de medios de comunicación de una pista, chatear en su enlace social - para que una cuenta no tenga nada que Dicho allí, y una pestaña permanentemente vacía se lee como rota en lugar de inaplicable.

  9. · KlusterServices

    Rebote una visita desnuda al Kamo login, y termina la sesión en la pestaña de cierre

    Cerrando la pestaña KamoDesktop dejó una sesión en vivo sentada en la máquina. Guacamole mantiene su ficha auth en localStorage (GUACAUTH), que sobrevive a cerrar la cuenta, Cerrando la ventana y reiniciando el navegador, y las estancias silbadas válidas para 60 minutos después de su último uso. Así que la siguiente persona en abrir la puerta de entrada en eso La computadora heredó el escritorio de la persona anterior. Reproducido de punta a punta. Dos cambios, deliberadamente el lado del servidor primero. El borde ahora redirige una solicitud de documento desnuda a login.kamocrm.com. KamoDesktop tiene exactamente un punto de entrada legítimo - un enlace firmado de un solo uso acuñado para alguien ya autenticado a Kamo, por lo que una persona escribiendo el nombre de huéstre, o restaurar un marcador, o dejar que el navegador se autocomplete, no tiene negocio ver la caja de contraseña de Guacamole. Sirviendo uno ofrece un objetivo de relleno de credenciales para la cuenta de "sage" y permite a un navegador sostener un símbolo vivo en silencio reanudar un sesión. Alcances a la ruta a propósito: una carga de SPA fría tira de 41 activos y API llamadas que llevan no ?data=, por lo que cualquier cosa más amplia rompe la aplicación directamente. El fragmento de "cliente/... nunca llega al servidor, por lo que un enlace profundo marcado es aquí y rebota también, lo que es correcto. Y la ficha se revoca ahora cuando la cuenta desaparece, en lugar de meramente Olvidado: DELETE /api/session con la cabecera Guacamole-Token (verificada en vivo. 204, y el símbolo deja de funcionar inmediatamente). Se saltó por una congelación de bfcache, así que pulsando atrás no firma a nadie. kamo-reconnect.js se ha ido. Existía al papel durante las sesiones de caída, tomó el escritorio abajo dos veces, y las causas que estaba compensando para los despliegues de reinicio la puerta de entrada, y la OOM se fijan en su fuente. Lo que lo reemplaza es un el cuarto del tamaño y su peor fracaso es que estás firmado, que es el resultado que está tratando de producir.

  10. · kamo-internal

    Propiedad de la línea, el puente y la regla de entrega sin niyk

    Tres módulos puros sin consumidores todavía, por lo que esto se envía inerte. lineOwnership elige exactamente un registrador SIP por navegador a través de Web Locks. Eso es obligatorio aquí en lugar de a la defensiva: verificado en vivo, cada FreePBX AOR es max-contacts=1 con qui-existent= síes, por lo que un segundo REGISTER desaloja el primero y el documento desalojado sigue mostrando "Registrado" sin recibir nada. Web Locks no necesita protocolo de vida - la cerradura pertenece al agente, así que a la ventana accidentada o asesinada a la tarea la libera y el próximo camarero es promovido. Donde la API está ausente informamos de "no soportado" y el que llama mantiene el de hoy comportamiento en lugar de arriesgarse a dos registros. lineBridge es un sobre de BroadcastChannel versionado. No ventana. abredo: eso se va rancio exactamente cuando el abridor recarga, que es el evento de todo esto Existe una característica para sobrevivir. Sesgado de la versión sesgo se degrada a un mando a distancia rancio, nunca un lanzamiento en una interfaz de usuario de llamadas en vivo. El estado espejado es un directorio de la lista de la lista de los reflectores los datos se quedan donde se cargan. lineHandover es una regla: una llamada en vivo nunca es descarrilada.

  11. · kamo-internal

    El título de la pestaña cuenta todo esperando, no sólo charla

    La desnuda tiene espacio para un número, y "chat y apoyo sólo" dejó de ser Lo que un miembro está esperando una vez SMS, AI, llamadas perdidas y reportes no revisados cada uno tiene un indicador.

  12. · kamo-internal

    Insignia la opción de IA con respuestas no revisadas

  13. · kamo-internal

    Un total en el icono del teléfono, la avería en el menú

    Este icono no llevaba ninguna placa, así que una llamada perd poco olvidada mientras el suave era Cer cerrado llegó al miembro en ninguna parte. Abrido el teléfono despeja la cuenta perdeda.

  14. · kamo-internal

    Un total en el icono, la avería en el menú

    pendienteCount era toda la placa, así que reportajes de errores no revisados y Webinars reservados en nombre de alguien no tenía forma de contactar a nadie. Abrir los sellos de la fila webinar ellos vistos, así que el conde puede salir.

  15. · kamo-internal

    La insignia de chat cuenta chats

    Era silenciosamente charlar más apoyo, así que un billete encendió la campanada de chat y nada distinguió a los dos. El apoyo tiene su propio icono ahora; social se une a chat, porque una conversación social vive en la lista de chats y no tiene icono propio.

  16. · kamo-internal

    Deja que una fila desplegada lleve su propio conteo

    El icono muestra la suma y las filas muestran la ruptura. Los indicadores están viendo que lo que te quiere sin abrir nada.

  17. · kamo-internal

    Tirado a la llegada, con el res res resarcir hacia el exterior

    Su propia capa dentro de .hex-scale: ese elemento ya anima a transformarse para el culpar, y dos animaciones en un elemento no compongan el segundo reemplaza al primero, así que un golpe medio-hover dejaría caer la escala del flotador. Llave en lugar de conjura de clase, o dos mensajes en rápida sucesión una vez. Cedió el empuse de la escala en una clase de ".thumped" presente sólo después de un golpe real: el El cambio de llaves hace de ".hex-thump" un nodo DOM fresco tanto en un golpe real Y en el primero Monto, y CSS no puede distinguir a esos dos aparte de la llave solo, así que el escrito El cableado literal habría tocado el pulso en cada cabeza una sesión restaurada engendrar el "panel de hexágonos pulsantes" debe Thump existe para prevenir.

  18. · SecurityService

    Un cronolineo de comunicaciones a nivel de cuenta

    El nivel que más se refiere la gente cuando dice "llaman a este cliente". La espina dorsal es ya llavedo en un propietario, por lo que el endpoint de la cuenta es el mismo fusionado, el componente lo hace con nada más que una base diferente. CommsSubjectResolver decide qué propietarios puede leer una línea de tiempo, y es el un lugar que la respuesta puede ser más amplio que el tema preguntado. Sólo ACCOUNT se expande. Una pista no hereda el tráfico de un líder hermano: el Dos pueden ser asignados a diferentes personas. Un paciente no hereda nada en absoluto, lo que sea que el gráfico de la cuenta diga "un gráfico que muestra los mensajes de un Límite de CRM" ser una revelación, y esa prueba existe para mantenerla así. El rodillo está tapado a 25 propietarios y la respuesta dice cuando la tapa bit. A Rollup que deja caer silenciosamente a los dueños es una línea de tiempo que faltan mensajes para no razón visible, que es peor que una que admite que es parcial. Las cuentas cruzadas y faltantes reciben el mismo 404 para que la respuesta no se pueda usar para sondear qué cuentas existen, y el miss también se audita. resolverOrgId en lugar de un nuevo sinónimo: el trinquete final reconoce que nombre, y lee un cuerpo de método sin seguir llamadas, así que un ayudante no puede ver las lecturas como un punto final no protegido.

  19. · kamo-shared-library

    Deja que una cuenta enrolle sus comunicaciones de pistas

    Varias pistas comúnmente cuelga de una cuenta precisamente porque son la misma persona preguntando dos veces, y cada una de sus llamadas fue emparedida con cualquier El plomo tenía el número en ese momento. Así que "las comunicaciones de este cliente" es el unión de las propias filas de la cuenta y cada una de sus pistas' - leer uno La línea de tiempo de plomo responde a una pregunta más estrecha que la que se le hace. findUidsByAccount projects uids en lugar de entidades a propósito: El plomo se sienta en una jerarquía de herencias JOINED, y la selección de entidades aquí arrastraría la todo buscar plan para producir una lista de ids. PhiResourceType.ACCOUNT por lo que las filas de auditoría de la línea de tiempo de la cuenta nombran lo que era En realidad lea. Aplicado, nunca insertado, el enum está ordinal-peristed.

  20. · kamo-internal

    Un contexto para los recuentos de los cuatro indicadores

    Compositor lo que existe y es dueño de los tres que no tenían casa: bichaz no revisado reportajes, webinars no revisados, y las llamadas perdimos y mensajes de voz del teléfono. La garrafal de los 60 en primer plano no es cinturón y frenos - varios de estos llegan Core NATS sin repetición, por lo que un marco publicado en una pestaña para dormir no viene.

  21. · kamo-internal

    La baliza de caídas informa de qué camino eligió ICE

    La baliza envió hieloCandidateType como un campo de ceros. Eso es peor. que omitirlo: hace que la telemetría parezca más informativa de lo que es, y Esta es la única medida que puede redirijar todo el proyecto de la ventana de línea. El teléfono blando web construye su conexión con un STUN público de código duro La credencial de carga útil nunca lo ha llevado. Así que un miembro detrás de un NAT simétrico, un VPN o portador CGNAT puede dejar de establecer medios sin nada a lo que volver a caer, y lo que denuncian es "la llamada caída". Después del hecho de que es indistinguible de "I hit refresh", y los dos tienen completamente diferente corrige una de ellas dos líneas de configuración de TURN en lugar de un nuevo contexto de navegación. No hay evidencia que los separe. El camino SIP.js reutiliza el candidato emparejamiento ya computación de su vertedero de diagnóstico existente, por lo que no cuesta más getStats; el RingCentral ruta muestras raw.rtcPeerConnection on responda. Una lectura nula es RECORDED en lugar de saltarse "ICE seleccione sin par" es el fracaso sin relevos y la lectura más valiosa disponible llamadaDuraciónSecuenciar lo separa de "la llamada terminó antes de que probáramos". También registra en el plan lo que realmente envió, incluyendo el guardia de la Tarea 6 que difiere del plan tal y como está escrito.

  22. · kamo-internal

    Un día de picker, compartido por el calendario y la pestaña de configuración

    Las dos superficies habían crecido cada una su propia respuesta a "qué días?". Los ajustes p.os respecta a poner los días de la semana laboral, los días de fin de semana y todos los días tras un descenso; el El editor de calendario tenía una cinta multiseleccionada y ningún grupo en absoluto. Cualquiera que sea. El miembro aprendió primero, el otro no pudo hacer lo que hizo. Comparten AvailabilityDayPicker ahora, los botones de grupo Y las siete fichas, en ambas páginas, definida una vez. Ese es el único arreglo que los mantiene. lo mismo la próxima vez, o se toca. Los grupos seleccionan en lugar de ahorrar. Presionar "Días de la semana laboral" enciende cinco fichas y nada río abajo interpreta un centinela: el miembro puede deseleccionar inmediatamente el miércoles están fuera, y lo que llega al backend es lo que tiene siempre tocada, una ventana al día. Un botón de grupo se lee como en sólo cuando EXACTAMENTE sus días se eligen, por lo que el control puede decir "esta es la semana laboral" en lugar de dejando a alguien para contar fichas iluminadas. La pestaña de configuración gana algo que nunca tuvo una elección arbitraria de varios días. "Lunes, miércoles y viernes" no era expresible allí antes; era un día o de un grupo. daysToSave, por lo tanto, toma un día en lugar de un día o grupo, que es lo que permite que ambas superficies compartan un tipo de selección. Ambos barrobos siguen retentos y están todavía atrapada: una edición nunca se expande en varias filas, y una selección de varios días nunca se derrumba a uno. El panel está "Qué significa esto?" ahora comienza a colapsar para todo el mundo. Apertura para un miembro sin nada declarado se refería a una amabilidad y estaba equivocado uno apretó la lista y el botón que comienza todo el asunto abajo columna, así que lo primero que un nuevo presentador se reunió fue un muro de prosa en lugar de el control de la pros está a punto. También aumenta el tiempo de espera en el escaneo de árbol completo del catálogo de sonido. Se lee y concatenifica cada archivo fuente en la aplicación, aterriza a 6-13s cada vez que la máquina está ocupado, y estaba fallando la suite contra el 5s más incumplido . con un mensaje que no nombró ningún evento, porque nunca llegó a su afirmación. El escaneo vale mantener; el tiempo de espera por defecto simplemente no se dimensiona para ello.

  23. · kamo-internal

    Insignia una ventana minimizada con su conteo sin leer de su servidor

    El único componente que ve tanto la lista de ventanas y los mapas no leídos engine no sabe nada de conversaciones y el contexto no leído no sabe nada sobre las ventanas, así que ninguno de los dos pudo responder esto solo. Despatadas sólo en el cambio: las llaves del golpe de un aumento, por lo que un conteo repetido se vería como una llegada y las cabezas pulsaban en el temporizador de refresco.

  24. · kamo-internal

    Estanar un conteo absoluto sin leer del servidor

    Reemplaza a la cabeza hez: entrando, que nada despachó. Su número 1 tendría contaron una instantánea re-entregada como un nuevo mensaje, y su desovior-si-desechado rama dejaría un cabezal cuya ventana no existe clicable, e inerte.

  25. · kamo-internal

    Mensajes y llamadas, sobre el componente de línea temporal existente

    CommunicationsTimeline y EmailEntry se lleva un endpoint opcionalBase y mantener la ruta de la pista como predeterminado, por lo que cada sitio de llamada existente es byte-for-- no importa cuál sea la línea de tiempo SOBRE SOBRE la llave del propietario es totalmente lado del servidor, exactamente cuando MediaStream toma un feedEndpoint y el DocManager toma un (ascenso, assocObjectId). Los mensajes de un paciente son diviados por el La tira de punto de contacto por encima de la línea de tiempo es la parte que de otro modo Estar desaparecido. Una línea de tiempo es una vista; llamadas y mensajes entrantes sólo siempre LAND en un propietario el matcher puede resolver, por lo que un paciente sin número registrado tiene una línea de tiempo vacía por una razón que nada más en la pantalla sería - Explica. Su estado vacío dice exactamente eso, en lugar de no implicar nada alguna vez pasó. 3149 pruebas verde, tipo de control limpio.

  26. · SecurityService

    Llamadas, mensajes de texto y correo electrónico de un paciente en la propia columna vertebral de la plataforma

    Ni una segunda línea de tiempo. LíderesCommunicationsEl servicio ahora toma un CommsSubject y el sobrecarga de delegados de plomo a ella, por lo que /leads mantiene su comportamiento exacto - drift. Un paciente es sólo otro dueño. Las notas y el chat aparecen sólo por una pista, y eso es un hecho más que un guardia: las notas provienen de la corriente de medios de comunicación de una pista y charla de SocialRemoteUserLead, ninguno de los cuales existe para un paciente. Ambas fuentes ya regresan vacíos cuando su vínculo está ausente, por lo que un paciente se empareja tráfico y nada pretende lo contrario. Registrar puntos de contacto es la mitad que lo hace funcionar. Señalando a cronograma en un nuevo propietario cambia lo que es READ; tráfico entrante solo LANDS sobre un propietario el matcher puede resolver, por lo que un paciente cuyo número no es un punto de contacto recibe llamadas que no resuelven a nadie. La inscripción es punto en el tiempo como la columna vertebral de plomo - cambiar un número cierra el punto viejo y abre uno nuevo, por lo que una llamada de hace dos años aún explica lo que igualado y aplica el mismo piso de siete dígitos, porque un cuatro dígitos de lo contrario, la extensión coincidiría con cada paciente compartiendo esos dígitos. Leer cualquiera de ellos necesita una relación de cuidado con el paciente, exactamente como el gráfico, y cada entrada mostrada escribe su propia fila de auditoría. Un buzón de voz de un paciente es tan identificable como una lista de problemas. El endpoint de correo electrónico-cuerpo vuelve a comprobar la fila contra el paciente en el camino. El control de la relación asistencial es satisfecho por el paciente en la URL, así que sin ese segundo chequear a un clínico con una relación con un paciente podría leer cualquier mensaje en la práctica proporcionando su identificación endpoint hace que el mismo re-cheque por la misma razón. Su 404 es una respuesta para "no de este paciente", "no un correo electrónico" y "no localiza todavía", así que el La respuesta no se puede utilizar para sondear las ids de mensajes. También aquí: el controlador de intercambio TEFCA - un paciente es de 164.528 contabilidad, todo enviado a un compañero (la pregunta que alguien dirige el se informa de una violación de la momentora), la segunda parte revelaciones como propia pregunta, y la cola de revisión de partidos de organización cruzada. 1278 pruebas de verde.

  27. · kamo-internal

    Deja de perder llamadas a la expiración de la sesión, derribado y dispositivos ranes

    Cuatro barricas que comparten dos expedientes, por lo que comparten una confirmación. Una llamada en vivo cuenta ahora como actividad de sesión. ClientActivityTracker se equipara presencia con eventos de entrada, así que un miembro escuchando una larga llamada leída como ocioso: el Redis TTL decaydo, la advertencia de caducidad abierta en una pestaña que no estaban buscando en, y /logout derribó el árbol que sostenía la sesión de SIP. Expulsado por el marca existenteAhora (aún) por lo que el desactivado de logout sigue ganando los propios pisos de la sesión de Monséter (Empresa de actividad de 120, 60s re-extiende mínimo) gobiernan la cadencia, por lo que esto no puede Huye. Un documento que muere sosteniendo una llamada lo dice ahora. pagehide dispara un mejor esfuerzo BYE el extremo lejano se sentó previamente en una pierna muerta hasta que el registrador cronometrado el contacto hacia fuera, hasta diez minutos a la fecha:600 y una baliza de transporte miembro, org, proveedor y hadLiveSession. Nada en ningún lugar contaba con la frecuencia con que Derribo en realidad cuesta una llamada, así que no había un número para pesar una solución más grande contra. La baliza permite las listas de sus campos: sin números remotos en un tronco de vaina, y Los ids se quedan atrasados porque son int64. Una segunda pestaña ya no suena con un botón de respuesta muerta. El tema VOIP STOMP es una emisión, por lo que cada documento abierto ha entranteCall, mientras que sólo el El proveedor envió el INVITE para responder. Cedido en la sesión en lugar de SDK, porque con dos pestañas abiertas ambos tienen registro. Un cambio de dispositivo llega a la llamada desde cualquier ventana. saveAVSettings despacha a de la misma ventana CustomEvent; sólo useAVSettings también escuchó el documento cruzado evento de almacenamiento, por lo que cada consumidor de call-path perdió un cambio hecho en otra parte. silenciosamente, porque aplicarSinkId se traga cada fallo. Un suscribirAVSettings ahora cubre ambas mitades.

  28. · InitializerService

    Amandear la columna vertebral de las comunicaciones a un propietario, en el orden que lo mantiene a salvo

    LEAD-CONTACT-POINTS y LEAD-COMMUNICATIONS ganan el gestor de documentos's (asc.type, assoc-object-id) pares para que una cuenta, un paciente o un comercio El registro puede poseer comunicaciones sin tomar prestada una pista. Cuatro pasos, y el orden es el punto. Voltaje primero: cada fila existente es una pista, así que assoc-type = 'LEAD' y assoc.object.id = lead-uid::text. Correrlo después de la permuta de restricciones construiría el nuevo índice único sobre nulos, no haciendo nada. A continuación, cambie la restricción única en el par de propietarios. (orgid, lead-uid, canal, source-id) es lo que hace que la ingestión idempotente sea una llamada de RingCentral es visto dos veces, una vez por el gancho web y una vez por el barrido de reconciliación. y con plomoúid null para un paciente, Postgres trata cada uno de ellos NULLs como distinto, por lo que el segundo avistamiento inserta un duplicado. El nuevo se añade restricción ANTES de que se cae el viejo, por lo que un fracaso entre ellos salen la mesa protegida por uno en lugar de por ninguno de los dos. Sólo entonces relajarse NO NULL de plomo.uid. Ddl-auto de Hibernate: la actualización añade columnas pero nunca relaja una restricción, por lo que esto no se puede dejar a la mapear y hacerlo antes de que el swap se abra exactamente la ventana duplicada - A continuación. A continuación, verifique, leyendo pg.constraint e información.schema de vuelta. El las claves primarias clínicas eran correctas en Java y equivocadas en el DDL emitido, y sólo lee pg-constraint lo mostró. Una fila sin tipo de propietario nunca aparecería en ninguna línea de tiempo, por lo que el caso registra un error en lugar de reportar el éxito. Idempotente en todo, y una mesa perdida se salta en lugar de fallar la bota, una excepción aquí llevaría a cada corredor posterior con ella. 176 pruebas de verde.

  29. · kamo-shared-library

    Clave la columna vertebral de las comunicaciones en un propietario, no una pista

    La columna vertebral se construyó en forma de plomo. LEAD.CONTACT.POINTS.LEAD-UID, LEAD.COMMUNICATIONS.LEAD-UID y la asociación que realmente necesita es más amplio. Una cuenta posee varias pistas, típicamente compartiendo el mismo punto de contacto porque son la misma persona que indaga dos veces. Un registro de comercio Cuelga de la cuenta en lugar de cualquier pista. Y un historial de pacientes ha llamadas y correos electrónicos al respecto y ninguna pista. La clave de los plomos significaba que cada uno de ellos, tomando prestada una pista o creció una línea de tiempo paralela. Ambas tablas ahora llevan el administrador de documentos (asc.type, assoc-object-id) Par, con LEAD, ACCOUNT, PATIENT y COMMERCE-RECORD como propietarios. LEAD-UID es KEPT y todavía se llena para filas de propiedad de plomo, por lo que cada existente /leads consulta, index and call site no se toca . el repositorio con llave de plomo los métodos y la sobrecarga de tiempo de plomo permanecen, y el nuevo propietario-diseñado los que se sientan a su lado. Tres cosas que esto tenía que hacer bien, y una casi me equivoco. La restricción única se traslada a la pareja de propietarios. (ORG-ID, LEAD-UID, CHANNEL, SOURCE-ID) es lo que hace que la ingestión idempotente - se ve una llamada RingCentral dos veces, una por el webhook y una vez por el barrido de reconciliación. Con LEAD-UID null para un paciente, Postgres trata cada uno de esos NULLs como distinto y el segundo avistamiento inserta un duplicado. La tabla de puntos de contacto importa más que la línea de tiempo. Señalando una línea de tiempo en un nuevo propietario cambia lo que es LEAD; tráfico entrante sólo LANDS en un propietario que tiene puntos de contacto, porque eso es lo que el enlaceador coincide contra. Un paciente cuyo número no es un punto de contacto recibe llamadas que No te acerqués a nadie. La que casi envié: el enlazador des-dupedeado partidos de cp.getLeadUid(). Para un punto de contacto no liderado que es nulo, así vistoLeads.add(null) permitiría exactamente UN propietario no líder a través de un mensaje de entrada - una llamada a un número Dos pacientes comparten que llegaría a uno de ellos, en silencio. Ahora des-dupes en el dueño. el tipo de STRING, nunca un ordinal. Hibernate congela una CHECK (Gran BETWEEN 0 Y N) sobre una columna ordinal enum en la tabla CREATE y nunca La revisión, así que adjuntar un valor más tarde rechaza cada inserción llevándolo. silenciosamente, porque la declaración fallida se asienta dentro de un método de transición cuyo retroceso elimina las pruebas. Siete de ellos fueron encontrados llenos y ya rompiendo las cosas en esta plataforma en agosto. Un null almacenado lee como LEAD, porque cada fila escrita antes de la columna existía es una pista y devolver nula para aquellos que encajarían la línea de tiempo Este cambio existe para ampliar. Un valor UNKNOWN lee como nulo en lugar de LEAD - Atar el tráfico de alguien más a una línea de tiempo de plomo es el indicado. respuesta peor que ninguna. También en esta confirmación: la capa de intercambio TEFCA (socios, la revelación libro de lectura, emparejamiento de pacientes de organización cruzada). Sus códigos de propósito son ahora el el mismo HL7 v3 ActReason strings PhiPurposeOfUse ya utiliza una prueba capturada yo inventando "T" para el tratamiento donde la plataforma dice "TREAT" y un fila de intercambio y una fila de auditoría describen la misma revelación desde dos ángulos, Así que un informe que une ellos se une a esas cuerdas. 1932 pruebas verdes.

  30. · kamo-internal

    SMS e IA cuentan, y una división por superficie

    Una instantánea de MediaService cubre tres superficies que pertenecen a dos nav diferentes indicadores, por lo que los totales se separan de la sesión declarada del servidorType en lugar de desde el cual las ventanas están abiertas. Una entrada sin sesiónType cuenta como chat - eso es lo que una construcción más antigua envía, y mantiene la placa haciendo lo que hizo en lugar de dejar caer un conteo en medio del despliegue.

Tu universo está esperando.

Comience gratis en minutos y agregue productos cuando esté listo, sin migración ni nuevos inicios de sesión.

Gratis para siempre: no se requiere tarjeta de crédito