Changelog
Ce qui est nouveau.
Chaque amélioration apportée à la plateforme, à mesure qu'elle est livrée.
· kamo-shared-library
Compter les événements de DISTINCT à travers les propriétaires d'un rollup
Un numéro de téléphone peut être un point de contact sur plus d'un propriétaire à la fois, et deux pistes sur un compte partageant un est le cas ORDINARY - ils sont généralement les la même personne s'enquérant deux fois. L'allumeur écrit une rangée par propriétaire délibérément, parce que chacun de ces délais a besoin de son propre. En résumé sur un rollup, plain compte indique un appel comme deux, et un rail libellé 11 au-dessus d'une liste indiquant 6 est Pire que pas de rail du tout. COUNT(DISTINCT sourceId) sur une liste de propriétaires d'une sorte compte exactement ce qui la chronologie fusionnée montre, et elle transforme les 26 requêtes de compte d'un compte en deux.
· kamo-internal
Portez la fenêtre de ligne par membre, et affichez le mode dans lequel vous êtes
Le contrôle du déploiement. Défaut, opt-in par membre de Paramètres de téléphone, imbriqué sous l'interrupteur VOIP parce qu'il ne signifie rien pour un membre sans ligne. Un crochet est propriétaire de la porte, de sorte que ses deux consommateurs ne peuvent pas être en désaccord - le contrôle de NavTop qui ouvre la fenêtre et la bande à l'intérieur du softphone qui l'offre. A Un membre qui voit l'un, mais pas l'autre, est pire que celui qui ne voit ni l'un ni l'autre. C'est échouement: une lecture config inaccessible cache la fonctionnalité au lieu d'offrir une fenêtre qui ne peut pas fonctionner, et le softphone en page n'est pas affecté de toute façon. La bandelette répond à une question à laquelle un membre ne peut pas voir la réponse à: est Cet appel à l'abri d'un rafraîchissement ? Avec la fenêtre ouverte l'appel y vit et le panneau est une télécommande, donc il offre de faire avancer la fenêtre et un pop-up peut finir derrière le navigateur et rien d'autre ne peut le soulever. Avec la fenêtre a fermé l'appel dans l'onglet et un rafraîchissement le termine, donc il le dit. Inbound utilise maintenant le geste qu'il peut produire: la notification de bureau Cliquez, qui n'avait auparavant pas de manutentionnant du tout.
· VOIPService
Lire et écrire la porte de la fenêtre de ligne
GET surface lineWindowEnabled; PUT l'accepte comme booléen annulaire de sorte que absent signifie "non mentionné" et préserve la valeur mémorisée. Chaque pays existant l'appelant de ce critère d'évaluation omet le champ, et traiter ceux qui sont faux. désactiver la fonctionnalité pour tout membre dont les réglages de téléphone ont été sauvegardés pour un raison sans rapport. Normalise également une lecture nulle à false avant la sauvegarde: une ligne écrite avant le la colonne a existé peut encore être nulle à travers Hibernate, et la colonne n'est PAS NULL.
· kamo-shared-library
Carte de LINE-WINDW-ENABLED sur MemberVoipConfig
La porte par membre pour la fenêtre dédiée de la ligne de téléphonie mobile. Pénumée de la version reste à 1.6.0 - ajouter un champ n'a pas besoin de bosse, et une épingle fendue permettrait de rompre l'IC pour chaque consommateur à la fois. La colonne existe déjà dans la base de données; le DDL a atterri à KamoInitializer tout d'abord, délibérément, parce qu'un service qui cartographie une colonne manquante échoue au haricot la création plutôt que la dégradation.
· InitializerService
DDL pour la porte-fenêtre de ligne par antoyen
Ajout de faux. Une colonne plutôt qu'un drapeau caractéristique parce qu'il n'y a pas de système de drapeau ici et MemberCapabilities est un ensemble fermé fermé, fermé sans fente de rechange, donc contrôler les vies en dehors des autres préférences téléphoniques du membre, qui est également le cas un administrateur le chercherait. Son propre coureur plutôt qu'une ligne dans MultiInstancePhoneMigration parce que ordre est le point: KamoInitializer n'a pas d'IC, donc ceci est appliqué à la main et doit débarquer AVANT une construction VOIPService qui cartographie la colonne, ou Hibernate échoue à La création de haricots et le service ne commenceront pas. L'ALTER a déjà été appliqué à la base de données en direct pour exactement cette raison; ce coureur le rend répétable et idempotent pour tout autre environnement.
· kamo-internal
Un sous-onglet d'IA dans le Centre d'interaction
Les sessions d'IA en direct dans AIService et ne sont pas MediaSessions, donc ce seau obtient son propre chargeur devant le /api/media/sessions/chat ira les quatre autres partager, puis adapter chaque session à la même forme de rang plutôt qu'une seconde la liste, sa recherche, ses avatars et sa puce non lue ne sont qu'un surface, et un second dériverait de la première à l'intérieur d'une libération. Non lu vient par l'ai: espace de nom de l'espace de tête de hexagone lire (getUnread, not conversationKeyForWindow - une ligne de chats-list n'est pas une fenêtre d'outil), donc une ligne et sa fenêtre minimisée ne peut jamais être en désaccord sur le nombre. Trois lacunes au-delà du mandat du plan, prises avant qu'ils ne soient expédiés discrètement : bucketOf() n'a jamais acheminé sessionType 'AI' n'importe où, donc chaque ligne d'IA résolu à "membres de l'équipe" et de l'onglet AI seraient restés vides de façon permanente; la ligne son propre titre ne lisait jamais row.title, donc chaque conversation d'IA aurait montré comme "Empty chat"; et 'ai' manquaient dans TOUS-BUCKETS, donc le sous-onglet par membre La préférence refuserait silencieusement de la restaurer après un interrupteur. Le mémoire l'exemple ne figurant pasread() ne s'applique pas nonread() non read() non read() non read() n'est pas le suivant: le calcul non lu avec lui en gros aurait mis à zéro toutes les lignes SOCIALES badge (plus jamais sur la carte en direct, contrairement à CHAT/SUPPORT) et clignoter chaque rangée à zéro avant les charges d'instantanés vivantes; la branche d'IA est repliée dans l'existant le calcul, à la place, la préservation des deux.
· kamo-internal
La fenêtre de ligne dédiée
L'appel vit maintenant dans une fenêtre un rafraîchissement de l'espace de travail ne peut pas toucher. SoftphoneProvider devient propriétaire-ou suiveur. Seul le propriétaire REGISTRE et ouvre la douille STOMP; un suiveur rend un état en miroir, envoie des commandes sur le pont, et reste silencieux - pas de sonnerie, pas de sonnerie, pas de bruit d'événement, parce que c'est ne tient aucune session et son bouton Réponse ne ferait rien. Où se trouvent les verrous Web indisponible l'onglet possède simplement la ligne et il n'y a pas de fenêtre, qui est le comportement d'aujourd'hui: ne jamais se dégrader en deux enregistrements. /téléphone se rend par l'intermédiaire d'une troisième branche AuthedChrome portant SoundProvider et SoftphoneProvider et rien d'autre. À l'exclusion de l'outilWindowRestore - sa garde est la portée du module, de sorte qu'un nouveau document rejouerait l'ensemble du membre dock à l'intérieur du pop-up - et donc à l'exclusion de SessionManager, qui navigue vers /d'oeuvre à l'expiration et supprimerait la session Redis partagée à partir du sous-programme onglets d'espace de travail. Pour la même raison, utiliserUserInfo et apiClient refusent maintenant de vous n'empruntez pas cette voie; une session perdue est rendue, et non redirigée. La fenêtre s'ouvre en synchronisme à partir d'un clic dans NavTop (l'activation transitoire le fait ne survivent pas à une attente), est nommé donc un second clic focus plutôt que faisant ou non, et rapporte un pop-up bloqué au lieu de s'affranchir silencieusement - le Le softphone en page continue de fonctionner dans les deux sens. À l'intérieur : une porte de départ qui achète activation collante avant tout en avoir besoin, recharger la clé de récupération, une fermeture confirmer, et un verrouillage du réveil de l'écran.
· kamo-internal
Un onglet de communication qui fait monter les pistes du compte
Le niveau que la plupart des gens signifient quand ils disent "les appels de ce client". Plusieurs pistes frappent généralement un compte précisément parce qu'ils sont la même personne enquête de deux fois, et chacun de leurs appels a été mis en correspondance avec l'adressage de l'intéressé Le nombre à l'époque - donc lire le calendrier d'une sonde répond à une question plus étroite que celui que quelqu'un regarde un client demande en fait. Cela rend la chronologie existante de la plate-forme, pas une seconde. La colonne vertébrale est L'histoire de plomb tire un compte donné par une base différente. Un apparier, un L'onglet dit ce qu'il ne montre pas. Le serveur porte chacun le fil enroulé sur le les mêmes droits la page de plomb et plafonne le nombre de celles-ci, et les deux sont surfaced: "N fils ne sont pas représentés parce que vous n'avez pas l'autorisation" est un différentes phrases de "ce compte a plus de pistes que nous retrouvons à la fois", Et une bannière pour les deux cacherait la première derrière la seconde. Les notes et les discussions sont absentes plutôt que vides. Les deux sont natifs du plomb - une note de vie sur le flux médiatique d'une piste, le chat sur son lien social, donc un compte n'a rien à mettre là, et un onglet vide de façon permanente lit comme brisé plutôt qu'inapplicable.
· KlusterServices
Rebondir une visite à nu sur le login de Kamo, et terminer la session à l'onglet
La fermeture de l'onglet KamoDesktop a laissé une session en direct sur la machine. Guacamole garde son uchoth jeton dans localStorage (GUAC-AUTH), qui survit à fermer l'onglet, fermer la fenêtre et redémarrer le navigateur, et le jeton reste valable pour 60 minutes après sa dernière utilisation. Donc la personne suivante pour ouvrir la passerelle sur ce un ordinateur a hérité du bureau de la personne précédente. Reproduit bout en bout. Deux changements, délibérément les deux côté serveur en premier. Le bord redirige maintenant une demande de document nu vers login.kamocrm.com. KamoDesktop a exactement un point d'entrée légitime - un lien signé à usage unique frappé pour quelqu'un déjà authentifié à Kamo - donc une personne dactylographiant le nom d'hôte, ou la restauration d'un signet, ou laisser le navigateur le compléter automatiquement, n'a pas d'affaires voir la boîte de mot de passe de Guacamole. Servir un objectif d'accréditation. pour le compte "sage" et laissez un navigateur tenant un jeton en direct reprendre silencieusement un "sage" et reprenez silencieusement un navigateur tenant un jeton vivant session. Exercice exprès: une charge SPA froide tire 41 dollars d'actifs et API les appels qui ne transportent pas de données, donc quelque chose de plus large casse l'application. Le fragment "client/... n'atteint jamais le serveur, donc un lien profond en signet est a nue ici et rebondit aussi, ce qui est correct. Et le jeton est maintenant révoqué quand l'onglet s'en va, plutôt que simplement oublié: DELETE / api/session avec l'en-tête Guacamole-Token (vérifié en direct) 204, et le jeton s'arrête immédiatement de fonctionner). Saupé d'un bfcache congelé, donc L'appui sur le dos ne signe personne. kamo-reconnect.js a disparu. Il a été mis à la connaissance des sessions abandonnées, il a fallu le un ordinateur de bureau à dessèchement deux fois, et les causes en dédommageant et se déploie le redémarrage la passerelle, et l'OMO sont fixés à leur source. Ce qui le remplace, c'est un le quart de la taille et sa pire défaillance est que vous êtes signé, qui est le résultat qu'il essaie de produire.
· kamo-internal
La propriété des lignes, le pont et la règle de la remise des nageaux
Trois modules purs sans consommateur encore, donc ce navire est inerte. lineOwnership élit exactement un registrar SIP par navigateur via Web Locks. Que est obligatoire ici plutôt que défensif: vérifié en direct, chaque FreePBX AOR est max-contacts-1 avec remove-existing-yes, donc un deuxième REGISTER raye le premier et le document expulsé continue de montrer "enregistré" tout en ne recevant rien. Les serrures Web n'ont pas besoin d'un protocole de virage - la serrure appartient à l'agent, donc a La fenêtre écrasée ou tuée par une tâche le libère et le serveur suivant est promu. Là où l'API est absente, nous signalons "non soutenu" et l'appelant garde la vie d'aujourd'hui un comportement plutôt que de risquer deux enregistrements. lineBridge est une enveloppe de canal de diffusion versionnée. Pas window.opener: que va périr exactement quand l'ouvreur se recharge, ce qui est l'événement cet ensemble Il existe une caractéristique pour survivre. Version skew se dégrade en une télécommande périmée, Jamais un lancer dans un appel en direct UI. L'état miroir est une liste d'autorisation et un répertoire les données restent là où elles sont chargées. lineHandover est une règle : un appel en direct n'est jamais arraché.
· kamo-internal
Le titre de l'onglet compte tout ce qui attend, pas seulement le chat
La bande de la languette a de la place pour un numéro, et 'chat et support seulement' arrêté étant ce qu'un membre attend une fois SMS, IA, appels manqués et rapports non revus chacun a obtenu un indicateur.
· kamo-internal
Insigne de l'option IA avec réponses non examinées
· kamo-internal
Un total sur l'icône du téléphone, la décomposition dans le menu
Cette icône n'a pas porté de badge du tout, donc un appel manqué alors que le softphone était Fermait n'atteignit nulle part le membre. L'ouverture du téléphone efface le nombre manqué.
· kamo-internal
Un total sur l'icône, la ventilation dans le menu
En attenteCount était l'ensemble du badge, donc non examiné les rapports de bogues et les webinaires réservés Au nom de quelqu'un n'avait aucun moyen d'atteindre qui que ce soit. Ouverture des timbres de la ligne webinaire Ils ont vu, donc le compte peut en fait sortir.
· kamo-internal
Le badge de discussion compte des chats
C'était silencieusement bavarder plus de support, donc un ticket a allumé la cloche de chat et rien distingués les deux. Le soutien a sa propre icône maintenant; le social se joint au chat, parce que une conversation sociale vit dans la liste des Chats et n'a pas d'icône propre.
· kamo-internal
Laissez une ligne déroulante porter son propre comptage
L'icône indique la somme et les lignes montrent la répartition - le point de division Les indicateurs voient que l'on veut que vous n'ouvrez rien.
· kamo-internal
Thump à l'arrivée, avec la lueur qui se dissipe vers l'extérieur
Sa propre couche à l'intérieur de l'échelle .hex: cet élément anime déjà se transforme pour le le hriote pousse, et deux animations sur un élément ne composent pas - le second remplace le premier, donc un volou arrière chuterait l'échelle de vol stationnaire. Clés plutôt que basculés en classe, ou deux messages en succession rapide thump une fois. J'ai remonté l'impulsion de l'échelle sur une classe ".thumped" qui n'est présente qu'après un véritable coup: le changement clé fait de .hex-thump un nouveau noeud DOM à la fois sur un vrai thump AND le premier Monter, et CSS ne peut pas distinguer ces deux-là de la clé seule, donc le mémoire est câblage littéral aurait joué l'impulsion sur chaque tête une session restaurée fraye - la "screenful of pulsing hexagons" devrait exister pour prévenir.
· SecurityService
Un calendrier de communication au niveau du compte
Le niveau que la plupart des gens signifient quand ils disent "les appels de ce client". La colonne vertébrale est déjà basculés sur un propriétaire, donc le point de terminaison du compte est le même fusionné, Composant le rend sans qu'une base différente. CommsSubjectResolver décide quels propriétaires un calendrier peut lire, et c'est le Un endroit où la réponse est autorisée à être plus large que le sujet demandé. Seul le COMPTE s'étend. Un plomb n'hérite pas du trafic d'une sonde de frère ou sœur: deux peuvent être attribués à des personnes différentes. Un patient n'hérite rien du tout, quel que soit le graphique du compte, un graphique montrant les messages d'un son de gestion de la relation client serait être une divulgation, et ce test existe pour le garder ainsi. Le roll-up est coiffé à 25 propriétaires et la réponse dit quand le capuchon bit. A Rouler qui laisse silencieusement les propriétaires tomber est un chronologie manquant des messages pour non une raison visible, qui est pire qu'une raison qui l'admet est partiale. Les comptes à l'orge et les comptes manquants obtiennent le même 404, de sorte que la réponse ne peut pas être utilisée pour déterminer quels comptes existent, et l'oubli est également vérifié. resolveOrgId plutôt qu'un nouveau synonyme: le cliquet d'extrémité reconnaît que nom, et il lit un corps de méthode sans suivre les appels, donc un assistant it ne peut pas voir le terme comme un critère d'évaluation non surveillé.
· kamo-shared-library
Laisser un compte rouler ses communications
Plusieurs pistes pendent généralement d'un compte précisément parce qu'ils sont les la même personne qui s'enquècle deux fois, et chacun de leurs appels a été mis en correspondance avec celui qui plomb détenait le nombre à l'époque. Donc "les communications de ce client" est le union des propres lignes du compte et de chacune de ses pistes » Le chronologie de plomb répond à une question plus étroite que celle qui est posée. findUidsByAccount projets uids plutôt que d'entités exprès: Le plomb se trouve une hiérarchie d'héritage JOINED, et sélectionner des entités ici ferait glisser le vous préparez des plans pour produire une liste d'identifiants. PhiResourceType.ACCOUNT donc les lignes d'audit du calendrier du compte nomment ce qui était En fait, lisez. Appliqué, jamais inséré - l'enum est persossé ordinaire.
· kamo-internal
Un contexte pour les quatre indicateurs
Composé de ce qui existe et possède les trois qui n'avaient pas de maison: bug non revu des rapports, des webinaires non revus, et les appels manqués et les messages vocaux du téléphone. La tique de l'avant-goût des années 60 n'est pas la ceinture et les braquages - plusieurs d'entre eux arrivent au-dessus NATS de base sans rejeu, donc un cadre publié dans un onglet de sommeil ne vient pas.
· kamo-internal
Les rapports de balise de gouttes dont la trajectoire ICE a effectivement choisi
La balise a été expédiée par la banquiseCandidateType en tant que champ de vie permanente. C'est pire que de l'omettre: il rend la télémétrie plus informative qu'elle ne l'est, et C'est la seule mesure qui peut rediriger l'ensemble du projet de fenêtre de ligne. Le softphone web construit sa connexion entre pairs avec un STUN public codé en dur la charge utile d'accréditation ne l'a jamais portée. Donc un membre derrière un NAT symétrique, un VPN ou transporteur CGNAT ne peut pas établir de médias sans rien à retomber, Et ce qu'ils disent, c'est "l'appel abandonné". Après le fait qu'il s'agit indistinguable de "J'ai frappé rafraîchissement", et les deux ont complètement différents fixes - l'une d'entre elles deux lignes de configuration TURN plutôt qu'un nouveau contexte de navigation. La preuve qui les sépare. Le chemin SIP.js réuse la paire candidate de sa décharge de diagnostic existante déjà, de sorte qu'il ne coûte pas de getStats supplémentaires; le chemin RingCentral échantillon brute.rtcPeerConnection sur la réponse. Une lecture nulle est ENREGISTRÉE plutôt que soudé - "ICE sélectionnée sans paire" est l'échec sans relais et la lecture la plus précieuse disponible - et callDurationSeconds le sépare de "l'appel terminé avant que nous n'échantillonnions". Enregistre également dans le plan ce qui a effectivement été expédié, y compris le contrôle de la tâche 6 qui diffère du plan tel qu'il est rédigé.
· kamo-internal
Cueilleur d'un jour, partagé par le calendrier et l'onglet paramètres
Les deux surfaces avaient chacune développé leur propre réponse à "quels jours-ci?". Les paramètres l'onglet a mis les jours de la semaine de travail, les jours de week-end et tous les jours à l'arrière d'une liste déroulante; L'éditeur de calendrier avait un ruban multi-sélection et aucun groupe. Qui qu'il soit Un membre a appris en premier, l'autre ne pouvait pas faire ce qu'il a fait. Ils partagent AvailabilityDayPicker maintenant - les boutons de groupe ET les sept puces, sur les deux pages, définies une fois. C'est le seul arrangement qui les garde La prochaine fois, l'un ou l'autre est touché. Les groupes choisissent plutôt que d'épargner. Appuyez sur "Workweek Days" active cinq puces et Rien en aval n'interprète une sentinelle: le membre peut immédiatement désélectionner le mercredi pour, et ce qui atteint le backend est ce qu'il a toujours pris, une fenêtre par jour. Un bouton de groupe lit comme suit uniquement lorsque ses jours sont choisis, donc le contrôle peut dire "c'est la semaine de travail" au lieu de laisser quelqu'un compter les puces allumées. L'onglet des paramètres gagne quelque chose qu'il n'a jamais eu - un choix arbitraire de plusieurs jours. "Lundi, mercredi et vendredi" n'était pas expressible là-bas avant; c'était un jour ou un groupe. dayToSave prend donc une LISTE-Tempête d'une journée plutôt qu'un groupe de jour, qui est ce que permet aux deux surfaces de partager un type de sélection. Les deux garde-corps sont toujours en attente et sont encore épinglé: un éditeur ne s'étend jamais en plusieurs rangées, et un choix de plusieurs jours Ne s'effondre jamais à un. Le panel "Qu'est-ce que cela signifie ?" commence maintenant à s'effondrer pour tout le monde. Ouverture pour un membre sans rien déclaré était censé être une gentillesse et était la mauvaise one - il a poussé la liste et le bouton qui démarre le tout dans le colonne, donc la première chose qu'un nouveau présentateur a rencontré était un mur de prose plutôt que le contrôle de la prose est à peu près. Suive également la temporisation sur le balayage de l'arbre entier du catalogue sonore. Il se lit et concatène chaque fichier source dans l'application, atterrit à 6-13s chaque fois que la machine est occupé, et a failli à la suite contre la valeur par défaut 5s de la virest - avec un message qui n'a donné lieu à aucun événement, parce qu'il n'est jamais parvenu à son affirmation. L'arcut vaut la conservation; la temporisation par défaut n'est tout simplement pas calibrée pour elle.
· kamo-internal
Badge une fenêtre minimisée avec son compte-choutage de serveur non lu
Le seul composant qui voit à la fois la liste des fenêtres et les cartes non lues - le moteur ne sait rien des conversations et le contexte non lu ne sait rien à propos des fenêtres, donc pas plus que nous ne pouvions répondre à cela seul. Expédie uniquement au changement: la touche de tir d'une augmentation, donc un nombre répété ressemblent à une arrivée et les têtes pulseraient sur la minuterie de rafraîchissement.
· kamo-internal
Fixer un nombre absolu non lu à partir du serveur
Remplace hexhead:incoming, que rien n'a jamais envoyé. Son numéro 1 aurait a compté un instantané re-délébé comme un nouveau message, et son frayonnement, si c'est-à-dire qu'il a été émis branche laisserait une tête dont la fenêtre n'existe pas - cliquable, et inerte.
· kamo-internal
Messages et appels, sur la composante calendrier existante
CommunicationsTimeline et EmailEntry prennent un critère d'évaluation optionnelBase et Gardez le chemin principal comme par défaut, de sorte que chaque site d'appel existant est byte-for- Ne se soucie pas de ce que le calendrier est ABOUT - le détenteur est entièrement côté serveur, exactement comme MediaStream prend un feedEndpoint et le DocManager prend un (assocType, assocObjectId). Les messages d'un patient sont tirés par le La barre de point de contact au-dessus de la chronologie est la partie qui, sinon être manquants. Un calendrier est un point de vue; les appels entrants et les messages ne sont jamais qu'à LAND sur un propriétaire, l'allumeur peut résoudre, de sorte qu'un patient n'a pas de numéro enregistré a une chronologie vide pour une raison que rien d'autre sur l'écran ne serait expliquer. Son état vide dit exactement que, plutôt que de n'impliquer rien Il s'est jamais produit. 3149 tests verts, contrôle de type propre.
· SecurityService
Appels, SMS et e-mails d'un patient - sur la propre colonne vertébrale de la plateforme
Pas un deuxième calendrier. LeadCommunicationsService prend désormais un CommsSubject et le plomb surcharge les délégués à elle, donc/leads garde son comportement exact dérive. Un patient n'est qu'un autre propriétaire. Les notes et le chat n'apparaissent que pour une avance, et c'est un fait plutôt qu'un Garde: les notes proviennent du flux médiatique d'une personne en chef et du chat de SocialRemoteUserLead, qui n'existe pas pour un patient. Les deux sources Retourne déjà vide lorsque leur lien est absent, de sorte qu'un patient est apparié le trafic et rien ne prétend le contraire. L'enregistrement des points de contact est la moitié qui le fait fonctionner. Pointer a le calendrier à un nouveau propriétaire change ce qui est LIRE; le trafic entrant n'a jamais été LANDS sur un propriétaire l'allumette peut résoudre, de sorte qu'un patient dont le nombre n'est pas un point de contact reçoit des appels qui ne décident à personne. L'enregistrement est point-en-temps comme la tête de la colonne vertébrale - changer un nombre ferme l'ancien point et ouvre un nouveau, donc un appel d'il y a deux ans explique encore ce qu'il et il applique le même plancher à sept chiffres, parce qu'un centime à quatre chiffres L'extension correspondrait autrement à tous les patients partageant ces chiffres. La lecture de n'importe lequel d'entre eux a besoin d'une relation de soins avec le patient, exactement comme le graphique, et chaque entrée indiquée écrit sa propre ligne d'audit. Une messagerie vocale à partir de un patient est comme une liste de problèmes. Le point de terminaison de l'email-corps vérifie à nouveau la ligne par rapport au patient sur le chemin. Le bilan de soins-relation est satisfait par le patient dans l'URL, de sorte que sans que ce second contrôle un clinicien ayant une relation avec un patient pourrait lire n'importe quel message dans la pratique en fournissant son id - le lead le même re-contrôle pour la même raison. Sa 404 est une réponse pour "pas de ce patient", "pas un e-mail" et "non encore locatif", de sorte que le la réponse ne peut pas être utilisée pour sonder des ids de message. Ici également: le contrôleur d'échange TEFCA - un patient de 164,528 dollars la comptabilité, tout a été envoyé à un partenaire (la question que quelqu'un porte le heure une violation est signalée), les informations faisant l'objet de la deuxième partie en tant que question, et la file d'attente pour l'examen des matchs interorganisations. 1278 tests verts.
· kamo-internal
Arrêter de perdre les appels à l'expiration de la session, au déchirement et aux dispositifs de destruction
Quatre garde-fous qui partagent deux dossiers, donc ils partagent un engagement. Un appel en direct compte maintenant comme une activité de session. ClientActivityTracker assimilé présence avec des événements d'entrée, donc un membre écoute sur un appel long lu comme inactif: le Redis TTL désintégré, l'avertissement d'expiration ouvert dans un onglet qu'ils ne regardaient pas à, et /engout déchire l'arbre tenant la session SIP. Acheminé à travers le markNow() existante donc la désactivation de la déconnexion gagne toujours - sessionMonitor's propres floors (la fenêtre d'activité des années 120, les années 60 s'étendent au minimum) régit la cadence, de sorte que cela ne peut pas Effectez-vous. Un document qui meurt en tenant un appel dit maintenant le dit. pagehide brûle un meilleur effort BYE : l'extrémité s'est déjà assise sur une jambe morte jusqu'à ce que l'officier de l'état civil ait programmé le Contact dehors, jusqu'à dix minutes à l'expiration:600 euros et une balise de maintien membre, ing, fournisseur et hadLiveSession. Rien de n'importe où ne comptait combien de fois le démontage coûte en fait un appel, donc il n'y avait pas de numéro pour peser une plus grande correction contre. La balise permet-elle de ses champs: pas de nombres à distance dans un log de poche, et ids reste cordes parce qu'ils sont int64. Un deuxième onglet ne sonne plus avec un bouton de réponse mort. Le thème VOIP STOMP est a édité, donc chaque ensemble de documents ouvert hasIncomingCall alors que seulement le un fournisseur a envoyé l'INVide pour répondre. Gated on the session plutôt que SDK, parce qu'avec deux onglets ouverts, les deux sont en possession d'un enregistrement. Un changement de dispositif atteint l'appel à partir de n'importe quelle fenêtre. saveAVSettings dispatche a Immobilier de même fenêtre; utilisation uniquement d'AVSettings également écouté pour le document croisé un événement de stockage, donc chaque consommateur de chemin d'appel a raté un changement effectué ailleurs en silence, parce que applySinkId avale tous les échecs. Un subscribeAVSettings Couvre désormais les deux moitiés.
· InitializerService
Élargir la colonne vertébrale de comms à un propriétaire, dans l'ordre qui le maintient en sécurité
Les LEAD-CONTACT-POINTS et LEAD-COMMUNICATIONS permettent d'obtenir le gestionnaire de documents (assoc-type, assoc-object-id) appariement de sorte qu'un compte, un patient ou un commerce enregistrer peut être propriétaire de communications sans emprunter de plomb. Quatre étapes, et l'ordre est l'ensemble du point. Remplissage d'abord: chaque ligne existante est une sonde, de sorte que l'ascès et le type de type 'LEAD' et assoc-object-id-- lead-uid:text. L'exécuter après le swap de contrainte consisterait à construire le nouvel indice unique par rapport aux nuls, en imposant rien. Puis échangez la contrainte unique sur la paire de propriétaires. canal, source-id) est ce qui rend l'ingestion idempotent et un appel RingCentral est vu deux fois, une fois par le webhook et une fois par le balayage de la réconciliation et avec le plomb-uid nul pour un patient, Postgres traite chacun de ces NULL est distinct, donc la deuxième observation insère un duplicata. La nouvelle La contrainte est ajoutée AVANT que l'ancien soit abandonné, donc un échec entre Ils laissent la table protégée par une place plutôt que par l'un et l'autre. Ce n'est qu'à ce moment-là que l'on détend le plomb et non NULL. L'autobote d'Hibernate: update ajoute colonnes mais ne relâche jamais une contrainte, donc cela ne peut pas être laissé à la mapr et le faire avant que le swap n'ouvre exactement la fenêtre dupliquée ci-dessus. Vérifiez ensuite, en revenant à la demande de pg-constraint et de l'information. Le les clés primaires cliniques étaient correctes en Java et incorrectes dans la DDL émise, et seule la lecture de pg-constraint l'a montré. Une rangée à gauche sans type de propriétaire n'apparaîtraient jamais sur un calendrier, de sorte que le cas enregistre une erreur plutôt que le succès de l'établissement des rapports. Idémpotent partout, et une table manquante est dissipée plutôt que d'échouer la chaussure - une exception ici prendrait chaque coureur plus tard avec elle. 176 tests verts.
· kamo-shared-library
Clé de la colonne vertébrale des communications sur un propriétaire, et non une tête
La colonne vertébrale a été construite en forme de plomb, LEAD-CONTACT-POINTS.LEAD-UID, LEAD-COMMUNICATIONS.LEAD-UID - et l'association dont il a réellement besoin est plus large. Un compte possède plusieurs pistes, partageant généralement le même point de contact parce qu'ils sont la même personne qui s'enquelle deux fois. Un dossier de commerce pend du compte plutôt que n'importe quel terme. Et un tableau patient a appels et courriers électroniques à ce sujet et pas de tête du tout. La clé des fils signifie chacune De ceux qui ont emprunté une avance ou ont fait l'objet d'une chronologie parallèle. Les deux tableaux portent désormais le gestionnaire de documents (assoc-type, assoc-object-id) s'associent, avec LEAD, COMPTE, PATIENT et COMMERCE-RECORD en tant que propriétaires. LedzUId est KEPT et toujours rempli pour les rangées appartenant au plomb, de sorte que toutes les lignes existantes /leads se pose lorsque l'index et le site d'appel ne sont pas touchés - le référentiel à clé de plomb les méthodes et la surcharge de délai de référence restent les deux, et le nouveau propriétaire ceux qui sont assis à côté d'eux. Trois choses que ça devait faire, et une que j'ai presque eu tort. La contrainte unique se déplace vers la paire de propriétaires. (ORG-ID, LEAD-UID, CANALISSON, SOURCE-ID) est ce qui rend l'ingestion idémpotente - un appel RingCentral est observé deux fois, une fois par le webhook et une fois par le balayage de la réconciliation. Avec Critique-UENU nulle pour un patient, Postgres traite chacun de ces NULL comme et la seconde visée insère un doublement. Le tableau des points de contact est plus important que le calendrier. Pointage d'un calendrier sur un nouveau propriétaire change ce qui est LIRE; le trafic entrant ne se nourrit que de routes sur un propriétaire qui a des points de contact, parce que c'est ce que le lieueur correspond contre. Un patient dont le numéro n'est pas un point de contact reçoit des appels qui la résolution à personne. Celui que j'ai presque expédié : le linker dedu-coré correspond par cp.getLeadUid(). Pour un point de contact non-lead qui est nul, ainsi vuLeads.add(null) laisserait exactement UN propriétaire non-chef de file par message entrant - un appel à un numéro Deux patients partagent atteindrait l'un d'entre eux, en silence. Il est maintenant dedupes sur le propriétaire. assoc-type est un STRING, jamais un ordinal. Hibernate gèle un VÉCUREUR (col ENTRE 0 ET N) sur une colonne enum ordinale à CREATE TABLE et jamais Il y revoit, donc apposer une valeur rejette plus tard chaque insert qui la porte silencieusement, parce que la déclaration défaillante se situe à l'intérieur d'une méthode transactionnelle dont le renversement supprime les éléments de preuve. Sept d'entre eux ont été trouvés pleins et cassent déjà sur cette plate-forme en août. Un null stocké se lit comme LEAD, parce que chaque ligne écrite avant la colonne l'existence est une avance et le retour nul pour ceux-ci supprimerait le calendrier Ce changement s'est élargi. Une valeur UNKINN est libellée comme nulle plutôt que LEAD - attacher le trafic de quelqu'un d'autre à une chronologie de l'avance est celui une mauvaise réponse pire que rien. Dans ce même engagement: la couche d'échange TEFCA (partenaires, la divulgation grand livre, appariement de patients interorganisations). Ses codes d'objet sont maintenant les suivants: les mêmes chaînes HL7 v3 ActReason PhiPurposeOfUse déjà utilisée - un test capturé j'invente "T" pour le traitement où la plate-forme dit "TREAT", et un une ligne d'échange et une ligne d'audit décrivent la même information sous deux angles, Ainsi, un rapport qui les rejoint s'associe à ces chaînes. 1932 teste le vert.
· kamo-internal
Les SMS et l'IA comptent, et une fraction par surface
Un instantané MediaService couvre trois surfaces appartenant à deux navs différents indicateurs, donc les totaux sont séparés de la session déclarée du serveur plutôt que d'où se trouvent les fenêtres ouvertes. Une entrée sans sessionType compte comme chat - c'est ce qu'une version plus ancienne envoie, Et il fait en sorte que l'insigne fasse ce qu'il a fait plutôt que de laisser tomber un nombre à mi-déployer.

Votre univers vous attend.
Commencez gratuitement en quelques minutes. Ajoutez des produits quand vous êtes prêt. Pas de migration, pas de nouvelles connexions.
Gratuit pour toujours — aucune carte de crédit requise