Saltar al contenido
KAMOUniverse

Changelog

Qué hay de nuevo.

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

  1. · VOIPService

    Llamadas persistas y llamadas asociadas, textos y buzón de voz con pistas

    Las llamadas nunca se grabaron en ninguna parte de VoipCallEventService publicó un evento NATS para el navegador y no se quedó con nada, y RECORDINGS sólo existe cuando el audio era capturado. La sincronización porestancia ahora tira de la historia de las llamadas a través del PhoneProvider abstracción y upserts PHONE-CALL-LOG, teclado (instancia, id de llamada del proveedor). Esa es la única ruta que funciona para FreePBX y Microsoft Teams, ninguno de los dos que ofrece un usable web sinuista. El barrido es el escritor soltero. Persistivo del anzuelo RingCentral webhook también fue juzgado y retirado: su notificación lleva la telefoníaSessionId mientras el llamada-historia API devuelve un id discográfico diferente, por lo que los dos escritores produjeron dos filas y dos entradas de línea de tiempo para una llamada. Las llamadas se atribuyen a una extensión sólo cuando esa extensión está realmente en el Llama a ella. El endpoint de RingCentral es la extensión/o e ignora el argumento, tan bucle por extensión de lo contrario presentaría las llamadas de cada miembro bajo la que sea el bucle visitada por última vez. Grabación de ids se resuelve por página a través de RecordingLookupService, la misma enriquecimiento la historia del suave obtiene sin ella la pestaña conoce una grabación existe pero no puede tocarla. Enlace de texto al enviar/recibir; enlace de mensajes de voz en sincronización.

  2. · InitializerService

    Semillas de esquema y punto de contacto para comunicaciones de plomo

    Hibernate crea las tres nuevas tablas de las entidades de la lib compartida; esto añade lo que no puede expresar - el índice único parcial que mantiene como mucho abierto ventana de punto de contacto por (líder, ranura) y DESC índices de cobertura para el Escáner de línea de tiempo. La semilla abre una primera ventana para cada pista que sea anterior al índice. Ni una comunicación back-fill: no se asocia ninguna llamada o mensaje histórico a lo que sea. Sin ella una pista preexistente no tiene puntos de contacto en absoluto y podría Nunca coincide con una llamada entrante, así que todas las pestañas se quedarían vacías para siempre. Se ejecuta a través de LeadContactPointService en lugar de un INSERT a granel. existe exactamente una aplicación de la canonicalización. Un gemelo SQL tendría para re-derivar el despojo de dígitos, manejo de NANP, el piso de extensión y la dirección desenvolver, y cualquier divergencia posterior sería invisible. Simplemente deje de coincidir con el tráfico en vivo. Aplicado contra la producción: 66 puntos de contacto abiertos a través de 45 pistas.

  3. · kamo-shared-library

    Indice de punto puntual-punto-punto-punto y enlace de comunicación de dirección

    Añade la columna vertebral de la pestaña de Comunicaciones de plomo se lee. LEAD-CONTACT-POINTS registra todos los números de teléfono y el correo electrónico que una pista ha tenido alguna vez, como ventana con activoDesde/activoTo. LEAD-COMMUNICATIONS registra lo duradero enlace entre una pista y una llamada, buzón de voz, texto o correo electrónico, escrito en el momento que sucede contra los puntos de contacto en vivo en ese momento. un número de plomo ata sólo el tráfico futuro y deja la historia exactamente como estaba. PHONE-CALL-LOG es el registro de llamadas que la plataforma nunca tuvo: RECORDINGS solo tiene un fila cuando se capturó el audio, así que las llamadas perdimos y no grabadas no dejaron rastro. ContactCanon es la definición única de "el mismo número" para el conjunto plataforma; LeadController.canonicalPhone ahora se delega así que invierte la búsqueda y la correspondencia de comunicación no puede estar en desacuerdo. LeadContactPointSistorvice y LeadCommunicationLinker NO son deliberadamente NO estereotipos - un servicio compartido que necesita un repositorio falla en el contexto de inicio de contexto en todos los servicios que no han añadido el paquete, que ha tomado la producción tres veces. Los servicios de propiedad declaran los frijoles; LeadService se los lleva Autoarrewired(required=false) por lo que sigue alambres en todas partes.

  4. · MediaService

    Captura el plomo demo antes del paso de reserva

    El formulario de demostración del sitio de marketing recopilado nombre, correo electrónico, empresa, tamaño de la empresa, industria y un mensaje, luego avanzaron a la programación sin decírselo a nadie. La creación de plomo vivió sólo dentro ************* así que cada visitante que no haya completado una reserva, incluyendo a cada visitante en absoluto mientras no se publica la disponibilidad, se desecha después de entregar su detalles. - POST ************* escriba la pista por sí solo. Propiedad org viene de la cabecera X-Public-Chat-Org-Org-Id sellos de APIService de la llave validada, nunca del cuerpo. - findOrCreatePublicLead es ahora el camino de la única estrategia de plomo para los tres superficies públicas (forma demo, horario, unirse), por lo que un visitante produce una pista Por muchos pasos que completen. Estampa el "KamoCRM" de la org / "Demo Solicitar producto de vendedor y toma el mercado de ese vendedor, y rutas a través de LeadService.createLead en lugar de salvar la entidad directamente vieja en línea excepto no produjo fila de historia y no LEAD-CREATED evento, así que esos Las pistas nunca aparecieron en una cuadrícula ya abierta. - Tamaño de la empresa, industria y mensaje de visitante se mantienen como una historia de plomo entrada; El plomo no tiene columna para ninguno de ellos y son la parte a El vendedor en realidad lee. - GET /api/public/webinar/tipos permite a una página pública descubrir el tipo id más bien que llevar una copia codificada, y ranuras / disponible ahora también devuelve ofertasTimes - la misma disponibilidad resuelta contra la propiedad de org's hueso en instantes que se pueden publicar de nuevo como un Hora de inicio programado.

  5. · kamo-shared-library

    Demoquest pública lidera captura primitivas

    Un visitante que rellena el formulario de demostración del sitio de marketing pero nunca reserva un tiempo No dejó rastro: la pista sólo se escribió dentro de la transacción de reserva. Capturarlo por adelantado necesita tres piezas que la biblioteca no tenía. - **************** paré un sumisión de repetición de vuelta al dirigir la misma forma ya producida. Alcance al producto de vendedor en lugar de al correo electrónico por sí solo para que una forma anónima nunca pueda adoptar (y volver a estampar) una pista personal creado para esa dirección. - PublicWebinarDlotsDTO: disponibilidad resuelta en instantes absolutos. El ranura almacenada es una fecha local más un tiempo de reloj de pared sin zona, que un navegador no puede convertirse en un horario programado reservable. - PublicWebinarTypeDTO: un tipo de webinar sin la lista de presentadores, así que un público página puede descubrir el tipo de identificación sin filtrar direcciones de correo electrónico de la presentadora.

  6. · kamo-internal

    Regístree la configuración de proveedor en la navegación y escriba los consejos rápidos

    La pestaña Configuración de Proveedor se rendere dentro de SettingsView, pero sólo se alcanzaba por Escribiendo la URL .falta de ambos lugares que listan la configuración destinos: el menú nav de configuración y la página de aterrizaje de configuración. Ahora lidera cada uno, que coincidía con la orden de pestaña, ya que el proveedor organiza reuniones decide qué de los otros ajustes están incluso disponibles. Los consejos rápidos en las cinco pestañas existentes nunca fueron escritos. un marcador de posición ("Help Heading", "Bullet Lobby Title"). Ahora dicen algo, y cubrir los ajustes añadidos para Zoom y Equipos: controles en la reunión, código de pases políticas, bypass de presión y roles de presentador, pull y transcripciones de grabación remota, y invitaciones enviadas por proveedores. Cada pestaña también explica dónde los proveedores difieren, así que un control deshabilitado tiene una razón declarada en lugar de parecer roto.

  7. · kamo-internal

    Aplicar reglas de acceso geo e IP en las cargas de página

    checkAccess evaluó las reglas en sí y no coincidía con nada durante toda su vida: comparó los tipos de reglas con ************* mientras que el editor escribe los nombres enum WHITELIST/BLACKLIST/TEMP-BLOCK. Geo fue un comentario diciendo que Node ha No hay base de datos GeoLite. Ambas mitades se han ido. Ahora lee el veredicto SecurityService aisches en Redis y pide ese servicio en una falta, por lo que hay una implementación de la política y ninguna copia quedó aquí para derivar. La dirección es el salto público más correcto de X-Forwarded-For en lugar de la izquierda-más. Alinean los proxies, por lo que el elemento izquierdo es lo que el cliente envió, y leyéndolo han dejado que una cabecera decida en qué país se trata al visitante como si estuviera. Un visitante bloqueado ahora recibe un documento liso 403 en lugar de JSON crudo. navegador haciendo una navegación de primer nivel. No nombra ninguna regla ni país: el lector no puede actuar sobre eso, y a alguien que está investigando el límite no se le debe entregar un mapa de él. Falla en todos los caminos. Un proxy que bloquea cuando Redis es brevemente inalcanzable toma Todo el inquilino fuera de línea.

  8. · APIService

    Aplicar reglas de acceso de inquilinos en la puerta de entrada

    Este filtro ha sido inerte desde que fue escrito. resolveOrgId read org:domain:-host. de Redis, nada escribió nunca esa llave, y la nula devolución cayó para permitir; la la gerama era un bloque vacío con un comentario que aplazaba a SecurityService, que era tampoco hacer cumplir. Cada petición pasó. Ahora lee el veredicto SecurityService agaches y pide ese servicio en una falta, así que el la política vive en un lugar en lugar de ser reimplementado aquí. El camino caliente es un Redis Leer; un miss cuesta una llamada HTTP de corta plazo por organización y dirección por cada 30 años. Dirección del cliente es el lúpulo público más adecuado de X-Forwarded-For. Adiómenos de los proxies, así que el elemento izquierdo es la lectura de la lectura de la izquierda que habría dejado elegir una cabecera que país de la solicitud se juzga de la que viene. Eximnea sondas de vida, CORS prevuelo y el punto final de decisión en sí, y nunca las direcciones internas de los jueces: el tráfico de servicios al servicio no tiene país y Bloquearla derribaría la plataforma. Fallo-abierto en todos los caminos, con una prueba por dependencia. Esto se encuentra delante de todo inquilino. Tráfico de la API, por lo que un filtro que bloquea cuando Redis es lento es un corte total. También gotas ************* plantilla andalme desde el commit inicial, en un paquete sin "SpringBootConfiguration" para Encuentro. Nunca ha pasado; CI construye con -DskipTests así que nada se dio cuenta. Quitándolo hace 'mvn test' utilizable aquí.

  9. · SecurityService

    Etapa en realidad normas de acceso geo e IP

    Las reglas fueron almacenadas, enjalacadas a Redis y nunca consultadas. AccessCheckController fue el único que llama de la evaluación y nada llamado AccessCheckController; APIService's filtrar orgs resueltos de una tecla Redis nada escribió y trató a la señorita como permiso. Configurar un bloque geo no hizo nada. AccessDecisionService es ahora la autoridad única. El inicio lo llama directamente, la puerta de entrada filtro y el prúrpoderín interno de kamo llegar a la misma decisión a través de la casilla de control, y la política existe una vez en lugar de una vez por capa. La copia del Nodo se había a la deriva lejos suficiente para no coincidir con nada: comparó los tipos de reglas con "lista blanca"/"temp-bloque" mientras que el La editorial escribe WHITELIST/TEMP-BLOCK. Resolución GeoLite se encaja en Redis por un día, positiva y negativamente, y salta direcciones privadas totalmente. La dirección viene de una cabecera, así que sin un alijo negativo un bogones giratorios de llamada convierte cada petición en una sonda fresca de la tabla de 5.7M de chin. la forma de DoS findByIpInRange ya fue reescrita una vez para evitar. ClientIpResolver lee el salto público más correcto de X-For, no el más izquierdista. El elemento izquierdo es lo que el cliente envió: proxies append, por lo que "X-Forwarded-For: 8.8.8.8"" más el propio apéndice de Traefik habría dejado que cualquiera eligiera el país su bloque es juzgado en contra. Cada regla geo habría estado a una cabeza de bypass. Fallo abierto en todo momento, por dependencia y reclamado por dependencia. Un control de acceso que falla cerrada en una oscilación de Redis, cada inquilino fuera de la plataforma, que es una peor incidente que la ventana se cierra. Una dirección de lista blanca también evita geo, así que un administrador que bloquea su propio país se mantiene de vuelta.

  10. · kamo-internal

    Tarjeta de registro de la plataforma para la aplicación Zoom Marketplace

    Completa la ruta de conexión de un solo clic de Zoom. El backend ya se resuelve PlatformOAuthProviderType.ZOOM, pero sin tarjeta aquí un operador de plataforma tenía no hay dónde entrar en las credenciales de Marketplace, por lo que el proveedor de reuniones Setup pantalla siempre reportó una conexión con un clic como no registrada. Opcional por diseño: la ruta por-org Server-to-Server no necesita nada aquí y sigue siendo el predeterminado recomendado, por lo que una tarjeta vacía simplemente mantiene oculto un solo clic. Las reuniones de equipos reutilizan el registro de Microsoft 365 existente.

  11. · kamo-internal

    Proveedor de teléfonos Microsoft Teams, de frente a espalda

    Añade Equipos a **************** y alambres por todo el camino a través de: selección del proveedor, la configuración de los Servicios de Comunicación de Entra y Azure, consentimiento de administrador del inquilino, la conexión por miembro y un suave en el navegador. El softphone es la parte que difiere estructuralmente de cualquier otro proveedor. Equipos expone a ningún registrador de SIP a terceros, por lo que una línea de Equipos no puede ser registrada en el WebPhone de SIP.js o RingCentral. La ruta soportada es Azure El endpoint personalizado de los Servicios de Comunicación: el backend intercambia el El fichaje de un miembro por una ficha de ACS, y TeamsAcsPhoneSdk convierte eso en un agente de llamada detrás de la misma interfaz PhoneSdk el implemento de adaptadores SIP, por lo que useSoftphone y cada componente de interfaz de usuario se mantiene proveedor-agnóstico. SipCredentials Gana campos opcionales de acs*; KpInfo está simplemente vacío para Equipos. El paquete ACS es solo navegador e importado dinámicamente dentro de start(), desde un la importación estática rompería la representación del servidor. Dos verdades específicas de los equipos aparcieron en la IU en lugar de dejarse fallar tiempo de ejecución: la llamada en la nave son opcionales (deja en blanco ACS y el org todavía se pone la presencia y la historia de llamada, con el diqueller oculto en lugar de error), y el mensaje de voz está apagado por defecto porque los Equipos no tienen API de mensaje de voz. en el buzón de Exchange de cada miembro, así que leerlos es un caos materialmente más amplio consentimiento para que un administrador deba optar deliberadamente. La tarjeta de conexión de miembro en la pestaña de fijación de teléfonos ahora es consciente del proveedor en su lugar de RingCentral-sólo. Ambos proveedores necesitan una autorización por miembro, para diferentes razones: AnilloCentral porque un suave sólo puede registrarse como el La propia extensión de la cuenta conectada, los equipos porque la presencia escribe y la llamada El intercambio simbólica es solo delegado. Branding: la baldosa utiliza la marca corporativa de Microsoft y el nombre del producto liso. Microsoft permite nombrar a Teams para describir una integración pero restringe equipos Logotipos y marca a los socios certificados de Teams, por lo que no se envía ningún glifo de Teams. Verificado: Nopm prueba 40 archivos, 394 pruebas, 0 fallos; tsc --noEmita limpio; el Vigilante de i18n y guardia de navegación cliente ambos pasen. Aterrizar cuerdas del diccionario primero en kamo-traducción-diccionario 0801a17.

  12. · VOIPService

    Microsoft Teams Phone como proveedor

    Los equipos no son una API, así que el proveedor pega tres aviones de control: Graph, app-only - call history (getPstnCalls), se lee en la presencia, directorio y el inventario del dispositivo de equipos. Los registros de llamadas son de aplicación-permisión por diseño; Microsoft afirma claramente que no tienen forma delegada. Graph, delegado - la presencia escribe (Presencia.LeerWrite existe sólo como un delegados, permiso auto-sólo) y buzón de voz, que vive en el Intercambiar buzón porque los equipos no tienen ningún recurso de buzón de voz. Servicios de comunicación Azure El suave en el navegador en el propio miembro Línea de teléfono de los equipos, a través del intercambio de fichas de endpoint de los equipos personalizado. Este es el única ruta apoyada: los equipos no exponen a terceros registrador de SIP, y el gráfico que llama API se une como un robot en lugar de como usuario. Las capacidades se calculan de lo que una instancia está realmente configurada en lugar de duro, por lo que un org sin ACS reporta vozLlamadas=false y la IU esconde el diallero en lugar de aflorar una llamada a medias 501. Deliberadamente ausente, porque no existe ninguna API de Microsoft en ninguna versión: SMS de un número de Equipos, llamada colas, llamadas de reenvío, respuesta automática y grabación de inicio/parada. Esos mantenerse en la interfaz por defecto que elevan 501. Las credenciales resuelven primero por instancia (un org registra su propia aplicación Entra la forma de la empresa común, y no necesita nada de Kamo la plataforma) y bájese de nuevo por campo en una fila MICROSOFT-TEAMS en el registro de la plataforma OAuth. El abortamiento corre en dos saltos porque el inquilino debe ser descubierto antes de que pueda ser fijado: un administrador en, el id-token's "tid" da al inquilino real, entonces se envían a ese inquilino /v2.0/adminconsentimiento. El consentimiento es confirmado por d) acuñando una aplicación token y llamando a Graph - Microsoft devuelve admin.consent=True incluso sobre el fracaso, y advierte que el parámetro de redirdirecto de Etenant es falsificable, así que Tampoco se confía. Tanto los equipos fluyen y la conexión delegada por miembros multiplex en /api/voip/oauth/callback, el único camino ya público en el Porera, por lo que APIService no necesita una nueva ruta. Cambiar las notificaciones montar el /api/voip/webhook por la misma razón. El apretón de manos de Graph se diferencia de la consulta de RingCentral a?validationToken parámetro de la misma que se hace eco como texto/llama y se contesta antes que nada, desde entonces Gráfico baja las notificaciones durante diez minutos si un endpoint es lento. Suscripciones se crean sin filtrar a propósito: el filtro de suscripción todavía se dirige a la la recopilación de los participantes que dejó de devolver los datos en junio de 2026. Dos defectos preexistentes fijados porque los Equipos los hace portadores de carga: Controller de Llamamiento, CapacidadesControla de locación y llamadasContralor resuelto el proveedor a través de getPrimaryForOrg - la instancia activa más antigua de la org de CUALQUIER tipo. Eso sólo es correcto para un solo proveedor. Los equipos suelen ser un segundo proveedor, así que la historia de cada miembro, el buzón de voz y el estado de agente Habría sido servido por el proveedor que sea el proveedor primero. Ahora usan un miembro consciente de getForMember, que refleja lo que hizo SipController. - Borrando una instancia de izquierda member.voip.oauth.token filas de espaldas, ya que hay No FK a cascada, y siguieron reportando "conectados". Verificado: prueba de mvn - 133 pruebas, 0 fallos (49 nuevos).

  13. · kamo-internal

    Proveedor Configuración de pestaña y configuración de reuniones con capacidad

    Añade la pestaña Configuración de Proveedores a /settings/caracteres/se encuentra y hace todos los demás pestaña honesto sobre el proveedor que está configurando. useMeeting ya no construye encuentro..domain--Eroom- en el navegador. hizo de cada reunión una reunión de Kamo Meets independientemente de la configuración. Ahora es. crea la reunión a través del backend y utiliza las URLs que el proveedor devuelve, por lo que el Centro de Interacción, la ventana de la herramienta de chat y el directorio de miembros ruta a través de la abstracción sin cambios propios: comparten MeetingDialog, que comparte este gancho. - Configuración de proveedores: tarjetas de proveedor con una barra de cobertura de configuración, por lo que el costo de el cambio es visible antes del interruptor en lugar de descubierto después en un pestaña de controles grises. Los formularios de credenciales son solo para escribir el servidor retornos qué campos están establecidos, nunca sus valores más una prueba de conexión en vivo y instrucciones de configuración por proveedor. - Cota de capacidad: useMeetProvider lee la configuración compatible del proveedor y MeetSettingRow deshabilita el resto con una punta de herramienta que nombra al proveedor. Sin sustento los ajustes se muestran en lugar de ocultos, y están genuinamente discapacitados en lugar de meramente atenuado, por lo que no se pueden cambiar por teclado. Salvas los omite por completo. La cita falla. una mirada fallida muestra todo, desde grises sacar una pantalla de trabajo es peor que mostrar un control que el backend ignoraría. - Nueva configuración que los otros proveedores apoyan: unirse antes de ser-anfitrión, en-en-reunión chat, cuota de pantalla, dial-in, autenticada-usuarios-sólo, longitud de código de acceso e incrustación, alcance de la deriva del lobby, controlador presentador y asistente, grabación en la nube, Transcripciones, descarga de grabación y invitaciones de envío de proveedores. - /meet/join/---refá ahora está consciente del proveedor: Kamo Meets todavía tiene una tecla única Acuñado en el momento del clic, Zoom y Equipos redireccionan a la propia URL del proveedor. Es acepta una reunión de identificación o un nombre de habitación, por lo que invitaciones enviadas antes de este cambio Sigue trabajando. - El enlace de invitación por correo electrónico se construye a partir de un id de reunión validado por UUID en lugar de un nombre de habitación, manteniendo la regla existente de que una URL suministrada por el cliente nunca es Confió en un correo electrónico de marca de org.

  14. · kamo-shared-library

    Tipo de proveedor MICROSOFT-TEAMS

    Añade MICROSOFT-TEAMS a VoipProviderType. El enum persiste como ORDINAL en **************** por lo que la posición es carga y el constante va último; la clase Javadoc ahora lo dice en lugar de dejar la siguiente persona para inferirlo. Sin cambio de DDL - una columna ORDINAL no lleva valor lista blanca, así que esto no necesita una carrera de KamoInitializer. Añade dos consultas derivadas en MemberVoipOAuthTokenRepository: findByProviderAndInstanceId mapea una identidad de proveedor entrante (un Microsoft Entra object id en un registro de llamadas de los Equipos) de vuelta a un miembro de Kamo. . deleteByInstanceId Estas filas no tienen FK a la instancia, así que borrando un El proveedor los dejaba atrás todavía reportando "conectado".

  15. · APIService

    Ruta del proveedor de reuniones OAuth callback

    Zoom y Microsoft rediron el navegador a esta puerta después de que una org autoriza La aplicación de Kamo. El popup aterriza aquí sin sesión de inquilinos. Así que el callback necesita el paso sin sesiones, auth-stripping el proveedor de correo electrónico callback ya utiliza, no el /api/meet/** forward.

  16. · MediaService

    Reunen contracción del proveedor con Zoom y equipos de Microsoft

    Las reuniones fueron Kamo Meets by construction . MeetService persistió una sala de reunión nombre y nada más. Esto introduce la abstracción y dos proveedores remotos detrás de ella. meet/provider refleja la capa del proveedor de correo electrónico: MeetingProviderResolver ensamblaje a MeetingContext (credenciales descifrados, subvención refrescada OAuth, política de org, cuenta hostal del lado del proveedor) y un mapa de la capacidad, por lo que los llamantes piden MeetingScheduler en lugar de ramificación en tipo de proveedor. Añadiendo un cuarto proveedor significa agregar un frijol, no sitios de llamadas de edición. - KamoMeetProvider: denominación de habitación y construcción de URL, movimiento del lado del servidor. El org-names espaciador que detiene a dos inquilinos compartiendo una conferencia de Prosody usada para en vivo en el navegador; ahora está sujetado por pruebas. - ZoomProvider: REST v2, Server-to-Server OAuth o la aplicación Marketplace. Crea en nombre del miembro organizador, tira de grabaciones en la nube y transcripciones. - MicrosoftTeamsProvider: Gráfico en líneaMeetings, solo para aplicaciones o delegados. Su pruebas de conexión sonda de la creación de reuniones, porque la política de acceso a la aplicación Los equipos también requieren es lo habitual que un administrador falla. autentica bien y luego 403s en cada reunión. MeetingFeature es el contrato con la interfaz de usuario: cada proveedor declara el configuración que puede honrar, y las pantallas de configuración deshabilitan el resto. Las reclamaciones son afirmado en pruebas en lugar de confiados, ya que un proveedor de sobredeming produce Vuelca que en silencio no hacen nada, el fracaso que esta capa existe para prevenir. ProveedorRecordingSweep tira de grabaciones remotas en el propio almacenamiento de Kamo para Los resúmenes de retención, cuota y post-reunion funcionan de manera idéntica en cada proveedor. Las descargas están tapadas: este servicio también sirve chat y reuniones bajo un 1Gi límite, por lo que una grabación sobredimensionada se salta con una advertencia en lugar de arriesgarse la vaina. Credenciales están cifradas con la clave de la plataforma existente, por lo que no hay nuevo secreto para estar aprovisionado. El manejo de sesión compartido por los endpoints de la reunión se mueve en MeetSessionResolver deliberadamente sin ampliar su control de derechos.

  17. · InitializerService

    Esquema para la capa de reunión de varios proveedores

    Crea **************** y org-meeting.oauth.tokens, añade las columnas de la identidad del proveedor a REUNI-RECORDS y REUNIDOS-RECORDINGS y la Configuraciones con capacidad para Zoom/Teams para ORG-MEET-CONFIG, y rellena cada existente organización a una fila explícita de KAMO-MEET/ACTIVE. Dos cosas que esta carrera nos enseñó, ambas codificadas aquí. El ddl-auto de Hibernate construye la sesión antes de cualquier Corrun de Comando, así que las declaraciones CREATETABLE normalmente sin operaciones y las columnas llegan sin defectos. suministros de identificación y marcas de tiempo explícitamente en lugar de depender de ellos, razón por la cual su primera versión no insertó en silencio nada. Y la singularidad declarada en el entidades significa que Hibernate mantiene sus propias limitaciones, por lo que los índices nombrados an Revisión anterior añadida fueron duplicados; aquí se dejan caer. Añada com.kamo.z.shared.meet a la lista explícita de "EnableJpaRepositorios", sin que los nuevos repositorios no tienen frijoles y KI aborta antes de que cualquier corredor se despide.

  18. · kamo-shared-library

    Reuniones de modelos como proveedor-agnóstico

    Kamo Meets fue el único backend posible: OrgMeetConfig era un Meet bolso de configuración y un MeetingRecord no tenían más que un nombre de habitación. Esto añade el esquema para dirigir una organización en Zoom o Microsoft Teams en su lugar. - meet.provider: MeetingProviderType / MeetingProviderStatus, the per-org OrgMeetingProviderEntity (enclave credencial cifrado, estado de última vez verificado) y OrgMeetingOAuthTokenEntity, reflejando el paquete de email-provider que ya respalda la abstracción del proveedor de correo electrónico. - MeetingRecord gana la propia identidad del proveedor de acogida. unirse y alojar URLs, contras de acceso, cuenta de host para que una reunión pueda ser reincorporarse y reconciliara a quien lo albergue. - MeetingRecording gana proveedorRecordingId, que mantiene la tira de un control remoto El idempotente de grabación en la nube del proveedor. - OrgMeetConfig gana la configuración Zoom y los equipos apoyan que un Meet-Sólo config no tenía razón para llevar: unirse antes de ser-anfitrión, configuración de código de acceso, lobby alcance de bypass, controles de presentador y asistentes, grabación en la nube, transcripciones, Invitaciones enviadas por proveedores, y las reuniones de acogida de repositor se crean bajo cuando un miembro no tiene ninguna cuenta en el proveedor. Cada org sin fila de proveedores se resuelve a KAMO-MEET, por lo que esto es inerto hasta que un Admin elige lo contrario. Las columnas fueron aplicadas a la producción por KamoInitializer antes de que esto aterrizara. PlatformOAuthProviderType gana ZOOM(9) para la aplicación Zoom Marketplace; Teams reuniones reutilizan MICROSOFT (3). Su prueba de guardia se mueve con ella, desde un enum y la prueba que sujeta sus ids persistidos no puede aterrizar por separado.

  19. · kamo-internal

    Países de la lista de candidatos en la tarjeta de geobloqueo

    La tarjeta sólo podía negar a los países, por lo que un org que sirve a un país tenía que enumerar todos los demás. Ahora tiene ambas listas: un modo de conmutar las selecciones que listan al país elegido aterrizar, y las dos mesas se sientan uno al lado del otro. Una lista de permisos vacíos permite todo no bloqueado; uno no vacío niega a todos los países ausente de ella. Esa reversión es lo suficientemente drástica como para declarar en la tarjeta en lugar de dejarlo a ser descubierto, por lo que el aviso anterior de las tablas dice qué régimen está en vigor. La limitación única (org., país) mantiene a un país en exactamente una lista, lo que haría volver a amarla al otro falla, por lo que cada fila lleva una acción de movimiento que lo vuela a través de PUT En vez de eso.

  20. · SecurityService

    Permitan a países de listas junto a geobloques

    La sección geográfica sólo se negó nunca: un país estaba bloqueado o estaba ausente. Orgs que quiere servir a un país tuvo que enumerar a todos los demás, lo cual es inmanejable y en silencio mal en el momento en que aparece un nuevo código de país. org.geo.block.rules.is-block ya existía y fue codificado duro, así que un permiso La regla es que la columna se establece falsamente sin cambio de esquema. Evaluación: un bloque explícito gana, entonces una lista de permisos niega todo lo ausente de ella, y una lista de permisos vacíos permisos todo no bloqueado. Eso mantiene los orgs solo en bloques existentes comportándose exactamente como antes. publishGeoRules ahora envía ambos lados de la regla establecido, ya que permiten que las reglas sean de carga una vez que uno existe. Cargas de jaque escritas antes de que este cambio lleve no hay campo bloqueado y sobrevivir al TTL de caché a través de un despliegue, por lo que un campo perdido se lee como bloqueado. También los visos setBlocked y borrado al org. de la llamada. borrar previamente se resolvió una regla solo por UUID, por lo que un id de otro inquilino habría sido honrado.

  21. · kamo-shared-library

    Lea la calidad de los ajustes y las versiones de directrices

    Un precio ensamblado es una celda de base PLUS los ajustes apilados en él, así que juzgando sólo la celda juzga la mitad del número: un 99.875 limpio con una leída errónea -1.250 LLPA en la parte superior sigue siendo un precio equivocado. MlosPriceAdjustment ahora lleva la calidad de lectura de ese ajuste, por lo que la puerta de la señal de salida puede tomar el eslabón más débil a través de la toda la asamblea. MlosGuidelineVersion obtiene el mismo campo para la consistencia con la columna vertebral de la hoja de velocidad -- ya llevaba la fuenteDocumento, así que esto completa su procedencia. Ambos nulos; null significa NO SIGNAL en lugar de bueno. Columnas aplicadas a la dir CockroachDB vía KamoInitializer.

  22. · kamo-internal

    Abrir enlaces de nuevo en esta aplicación en la pestaña en la que el miembro ya está

    El correo en el panel de lectura abre cada enlace en una nueva pestaña, que es la correcta para el Internet entero y mal para nosotros. Nuestros correos electrónicos de notificación son casi totalmente enlaces de vuelta a la aplicación, y enviarlos a una pestaña fresca tira la sesión la sesión el miembro ya tiene y los hace sentarse a través de una bota fría para llegar a una página de esta pestaña podría rendirse inmediatamente. El mismo origen es toda la prueba de la grada-igual con la página haciendo el correo electrónico, no "se ve como un dominio Kamo" y no un sufijo en el dominio de la org. Eso es exactamente el conjunto de URLs para la sesión actual es válido, que es la totalidad razón para permanecer en esta pestaña, y es improtable por correo: el anfitrión de otro inquilino, un parecido, o userinfo apuntando al huésped en otros lugares son todos de orígenes diferentes y ir a una nueva pestaña como el enlace de cualquier otro extraño. Entrar en lugar de asignar ubicación: una carga completa de documentos derriba el React árbol y destruye cada ventana de herramientas abierta junto con cualquier borrador no enviado, por lo que este repo tiene una puerta de construcción contra la dura navegación interna. Modificado y medio Los clics se dejan solos. Ese gesto es el usuario pidiendo deliberadamente una nueva pestaña. Escuchar al padre funciona porque la caja de arena ya mantiene el mismo origen para la medición de altura mientras se omiten los guiones de permitido, por lo que nada del correo electrónico siempre corre; el manejador es nuestro, unido desde fuera. Una trampa que vale la pena grabar, atrapada por su propia prueba: devolver un camino en lugar de una URL es necesario, pero NO suficiente. "https://host//evil.test" es genuinamente del mismo origen, y su nombre de ruta es "/evil.test" - que el router lee como protocolo-relativo y Sigue fuera del sitio. Una redirdia abierta por correo electrónico que pasa una comprobación de origen. Ese vínculo ahora cae a través de una nueva pestaña, donde el navegador resuelve la URL real e inofensiva, en lugar de ser reescrito silenciosamente a algún lugar el correo electrónico no señaló.

  23. · kamo-shared-library

    Confianza de extracción porcelular - procedencia de la elegibilidad-matriz

    Dos brechas en el modelo de confianza, ambas en la ruta del dinero. PER-CELL. Un piso de hoja es el grano equivocado para juzgar un precio: un solo El cupón mal leído arrastra toda la hoja hacia abajo y le enviaría cada otro precio a un humano, mientras que un piso de hoja alta no dice nada sobre la celda específica de un prestatario Fue citado de. ************* registra lo bien que Esta tasa/prisa/fila de bloqueo se leyó, por lo que un cupón mal leído cuesta sólo su propio precio. PROVENANZA DE ELIGIBILIDAD. MlosElegiibilityMatrix no tenía camino hacia un documento de origen en todo -- su única ruta era una guía NULLABLEVersionId, por lo que una matriz promocionada podría no ser rastreado hasta la hoja de que vino. Elegibilidad decide si un préstamo es ofrecible, que hace exactamente donde una negación tiene que ser explicable; una procedencia Hay un hueco en el punto en que se dice que un prestatario no. Ahora lleva sourceDocumentId y el mismo contrato de confianza de extracción que la columna vertebral de hoja de tarifa. Tanto nulos, y null significa NO SIGNAL en lugar de bueno. Columnas aplicadas a cajd CockroachDB vía KamoInitializer.

  24. · kamo-signer-monorepo

    Mostrar el teléfono del agente, sin peonadas y el correo electrónico en la copia del cliente

  25. · kamo-internal

    Mostrar el teléfono del agente, sin peonadas y el correo electrónico en la vista previa

    Cada uno en su propia línea: un run-on de dos números y una dirección se lee como una sola cadena y se marca mal.

  26. · SecurityService

    Resuelve los datos de contacto publicados por el agente

    El correo electrónico proviene del buzón principal del miembro en lugar de TeamMember.emailWork columna es texto libre anterior al aprovisionamiento de buzón de correo y rutinariamente no está de acuerdo con la Dirección de la que enviaron. Sigue siendo el retroceso cuando ningún buzón es primario. Un miembro habilitado para VOIP con una extensión se publica como la línea propia de la org más que extensión, ofreciendo el número gratuito también cuando el org tiene uno. Sin una prórroga, su teléfono de trabajo - el único número que sostienen que está destinado a ser publicado. Discapacitado VOIP config no publica nada, porque esa extensión no responde. Cada mirada es defensiva: no hacer un documento orientado al cliente porque un buzón faltar la fila sería peor que imprimir una forma menos de hacer contacto.

  27. · kamo-shared-library

    Publica todas las formas de llegar al agente, no sólo un nombre

    Nombre y título por sí solo decirle a un cliente que es el dueño de la cita, pero no cómo preguntar al respecto. El bloque ahora lleva correo electrónico y teléfono, resuelto por el llamante. vivir en el esquema del proveedor de correo electrónico y la extensión en la configuración de VOIP, ni alcanceble de un ayudante estático. Línea principal y sin peaje son campos separados para que el documento pueda imprimir ambos: eligiendo entre ellos es elegir lo que la llamada cuesta al cliente. lineWithExtension combina una extensión con la línea de org que cuelga, y devuelve null si o falta la mitad. Un huérfano "ext. 204" no es un número que nadie pueda llamar, y un org line desviaría al cliente a la centralita como si fuera de la agente.

  28. · kamo-shared-library

    Confianza en la extracción en la columna de catálogo de la columna vertebral de la columna de catálogo.

    Un precio es tan confiable como la hoja de que fue montado, y nada en la ruta de fijación de precios llevaba esa señal: la confianza existía SOLAMENTE en la pre-promoción filas de puesta en escena (MlosExtractedCandidate) que no se lee en ningún código de producción. ************* es la confianza WEAKEST por campo En todos los candidatos aprobados se promovió en la versión - mínimo, nunca malo. Una hoja de 200 celdas limpias y una de 0,20 en promedios mal de 0,996 y se despejaría cualquier umbral, mientras que esa celda es la que mal presa un préstamo. Null significa NO SIGNAL (escrito a mano, o promovido antes de la columna) y los consumidores deben negarse a autoaprobarlo a lo autoaprobado; leer ausente como bueno es cómo un precio no verificado sale sin revisar. Protegido de WORM como las otras columnas de precio - instantáneas en "PostLoad" y diffed en "PreUpdate", o sería un agujero silenciosamente mutable en la cadena de auditoría. MlosPricingSignoff gana automatizada / base-confidence / umbral-aplicado. Sin la homologación de una máquina es indistinguible de una humana excepto por un miembro id, que en la ruta del dinero es un defecto de auditoría. El umbral se almacena al lado de la porque la configuración se mueve: 'la confianza fue de 0,72' no puede juzgarse más tarde sin saber si el bar de ese día era de 0,70 o 0,90. Columnas aplicadas a cachroachDB a través de KamoInitializer.

  29. · kamo-internal

    Citas de la pestaña. Cada cotización a través de las pistas de la cuenta

    Un DataGrid saltado del servidor junto a Leads, con búsqueda sobre número y título, estado, total gama y rango de fecha creado. Los filtros comparten un rebote y colapsan en una sola consulta, por lo que ajustar un rango mientras La escritura cuesta un viaje de ida y vuelta en lugar de uno por pulsación de teclas por campo. Cualquier cambio de filtro reiniciar a la página 1 - permanecer en la página 6 de un resultado más estrecho establecido se lee como una cuadrícula vacía. La caducidad se muestra aparte del estado: una cotización SENT puede pasar su fecha de validez y aún así leer como SENT, por lo que esas filas llevan su propio marcador en lugar de estar en silencio mal etiquetado. Las filas y la columna principal se dirigen a la pestaña de citas de ese plomo.

  30. · SecurityService

    GET /quotes/account/-uid. . paged, filtrado, ordenado

    Las fechas llegan como cuerdas ISO y se analizan con indulgente: un filtro que el cliente envía mal debería no estrechó nada en lugar de 400 la cuadrícula completa. Un solo fechado "a" atado cubre todo el Ese día, de lo contrario filtrar a hoy novuelve nada levantado desde la medianoche.

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