SmsKeywordService - le seul écrivain pour les mots-clés entrants (MS1 Task 3)

FeatureVOIPService
Expédié
27 août 2026 à 20:06 UTC
Auteur
Kamo
Commite
4260460

Ferme la tâche TODO 2 laissée derrière. Jusqu'à ce que cela engage un STOP inbound vérifié a atteint BulkTextInboundContrôleur, a été reconnu, a été enregistré, et a ensuite été DROPPED - le critère d'évaluation a accepté les dérogations et n'a rien supprimé. SmsKeywordService est l'auteur unique: il accompagne le WORM ConsentRecord et met à jour la ligne AgentContactState la porte sortante déjà libellée, en une seule opération (décision plan M2 - grand livre plus projection dérivée, et non deux sources de la vérité; MS2 fait la porte lire ConsentRecord directement, après quoi projection devient un cache). Commande: normaliser ou refuser; interpréter; insérer la récépissé d'idémpotence; puis STOP / DÉMARRAGE/AIDE. UNKNOWN revient immédiatement et n'écrit rien, donc un Un message ordinaire passe par un traitement normal. Les décisions qui méritent d'être défendues par la suite. AgentContactState directement plutôt que d'appeler AIService. est déjà exposé à POST - et est toujours inutilisable d'ici pour trois raisons indépendantes: VOIPService n'a pas de client avec AIService; AIService authentifie cette surface avec un secret DIFFÉRENT - non interne.auth.secret); et le critère d'évaluation n'accepte pas la nue E.164, seulement et nue nombre est exactement ce qu'est un STOP entrant. La clé de contact est "tel: L'étude est unique sur le thème (ORGANISATION-ID, CONTACT-KEY) et n'a pas de colonne de téléphone, donc il n'y a nulle part sinon un nombre nu peut aller. CONSÉQUENCE, NON FERMÉE PAR MS1: cette ligne n'est pas fusionner avec une rangée ultérieure "Lead:uid" pour le même humain, donc une porte de consultation la rangée à clé USB ne voit pas d'opt-out. MS2 le ferme en faisant lire la porte ConsentRecord, qui est à clé de nombre. Un STOP nu met les quatre canaux. Il ne dit pas "SMS seulement", et le lire De cette façon, le locataire envoie un courriel à quelqu'un qui lui a dit de s'arrêter. DÉMARRAGE Les réprimandes SMS SEULEMENT - un SMS START envoyé à un numéro de campagne est une preuve concernant les SMS Et rien d'autre. Un org nul enregistre le reçu et RIEN. Pas de ligne de consentement, non projection: un consentementRecord with a null organization is the global-suppression La posture C1 interdit, et est nullable - faux de toute façon. Les preuves qu'un STOP sont arrivées bat encore le silence d'aujourd'hui. - consentAt prefer the the carrier' event time and records qui a été utilisé. Le webhook entrant de Twilio porte NON horodatage du tout, donc l'entité javadoc's "app-set from the event, never now()" n'est pas satisfaisant pour cela. Flowroute fait envoyer «timestamp», donc InboundSms a gagné un composant «carrierEventAt» et le Flowroute parser le lit (Instant / OffsetDateTime / nu local, normalisé à UTC; tout ce qui est illisible est nul, jamais devinez). La preuve de la ligne d'obtentionBlob associe "consentedAtSource": "porteuse" et "réception". Un délai de réception est défensable et fabriqué en pièce n'est pas; les deux étant indistinguables par la suite, c'est ce qui ne survivrait pas à l'examen. La poignée() prend un enregistrement, et non les six paramètres de position du plan. Le plan la signature ne pouvait pas porter le temps de réception, l'heure de l'événement de transporteur ou le brut charge utile d'épreuve, et quatre de ses paramètres étaient adjacents Strings - transposant Le fait de compiler et de supprimer le numéro du locataire et supprime le propre numéro du locataire. Gains de VOIPServiceApplication - n'a pas besoin d'entrée: basePaquets d'allumettes les sous-paquets et com.kamo.z.shared.comms sont déjà répertoriés. VoipRepositoryScanTest ramène JpaRepositoriesRegistorr sur la même liste de paquets et assertsule les trois référentiels SmsKeywordService injects obtiennent des définitions de haricots. Un boot complet de test de démarrage n'est PAS disponible dans ce service, pas de base de données de test, pas de ressources d'essai, pas de test de contexte existant - donc cela exerce l'officier de l'état civil qui décide effectivement du résultat, sans DataSource. TDD - échecs observés, mot pour mot. Rouge avant la mise en œuvre: SmsKeywordServiceTest.java ne trouve pas de symbole [ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/E [ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/E Lieu de l'environnement (ERREUR) : classe [INFO) FAIT DES TRAVAUX [ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/E Symbole de la méthode: method carrierEventAt() Vert après: SmsKeywordServiceTest 17/17; full suite 314/314. Mutation 1 - enlevé l'ordonnance du consentementRecord écrire: Tests: 17, Défaillances: 2, Erreurs: 0 - FAILURE Prévisions attendues: 100 L mais était: nul [ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/E [une ligne de consentement avec une suppression globale de l'org zéro IS - la posture C1 interdit [ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/E Mutation 2 - suppression de l'insert de réception: Tests: 17, Défaillances: 3, Erreurs: 0 - FAILURE Voulait mais non invoqué: [ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/E [ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/E [ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/E NOTE: le plan indique que cette mutation doit tourner le test RETRY en rouge. Ce n'est pas le cas. - stubs l'existence() pré-cocher à true, donc il court-circuite avant l'insertion et reste transparent sous cette mutation. Le le plan a nommé le mauvais test. La mutation 2b ci-dessous est celle qui couvre la réélection chemin, et sans l'exécuter, la réclamation M1 idempotency aurait reposé sur une une mutation qui prouve quelque chose d'autre. Mutation 2b - supprimée l'existence() de pré-contrôle à la place: Tests: 17, Défaillances: 2, Erreurs: 0 - FAILURE - Je n'ai jamais voulu ici : [ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/E [ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/E Mutation 3 - a été désactivée SMS uniquement au lieu des quatre canaux: Tests: 17, Défaillances: 1, Erreurs: 0 - FAILURE Attendre une valeur vraie mais était fausse [ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/E Mutation 4 - supprimée - de la numérisation emballages, c'est-à-dire la CrashLoop elle-même: Tests: 3, Défaillances: 2, Erreurs: 0 - FAILURE [ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/E [ConsentRecordRepository n'a pas de définition de haricot n'est pas couverte par les référentiels «EnableJpaRepositories». Ce n'est pas nul en runtime: Le contexte REFUES À DÉMARRAGE et à la pod CrashLoops. [ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/ERREUR/E [La sonde de cet essai est dérivée de l'annotation réelle de VOIPServiceApplication. Tous sont revenus. Suite complète après retour: Essais de fonctionnement: 314, Défaillances: 0, Erreurs: 0. DDL n'a pas été noyé. Cela dépend de l'ajout de kamo-shared-library comms'sms-inbound-recevet et - aucun des deux existent encore dans la base de données. Construit localement contre un bocal partagé dans un PRIVATE -Dmaven.repo.local; le bocal de 1,6,0 dollar/m2 a été vérifié en fonction de l'identité octet-ique avant et après (md5

Tous les changements

Comme ce que tu vois expédier ?

Chacune de ces mises à jour atterrit automatiquement dans votre espace de travail. Commencez gratuitement et regardez-le grandir semaine après semaine.

Commencez gratuitement pour toujoursPrix de visualisation