Automatizace zavirala tickety uz pri zvoneni
Na instanci nebyl ani jeden nevyrizeny ticket: vsech 131 melo closed true,
takze dlazdice "Moje tickety" i "Fronta bez resitele" ukazovaly nulu. Widget
pocital spravne, spatna byla data.
Strom se ptal `result neq "Chybějící informace"` a ve vetvi ANO ticket zaviral.
Jenze jeden hovor posle vic zprav a ta prvni jen ohlasi, ze zacal: data je null,
takze {{result}} je prazdne. evaluate prevadi chybejici hodnotu na prazdny
retezec, a prazdno se opravdu nerovna "Chybějící informace" - podminka tedy
sedla a ticket se zavrel uz pri zvoneni.
Odtud i druha vec: prirazovaly se i tickety, ktere nemely. Jedna zprava hovoru
mela result "Chybějící informace", takze ticket sel na servicedesk a na cloveka.
Dalsi zprava tehoz hovoru prinesla "Přesměrování" a ticket zavrela, ale resitele
uz neodebrala. Z dvaceti ticketu prirazenych jednomu cloveku jich melo
"Chybějící informace" jen deset.
Opraveny strom se nejdriv pta, jestli vysledek vubec prisel, a teprve pak
kladne, jestli je to "Chybějící informace":
result isNotEmpty
ANO result eq "Chybějící informace"
ANO priorita vysoka, sekce Servicedesk, prirazeni nejvolnejsimu
NE zavrit
NE nic, vysledek jeste nedorazil
Puvodni neq znamenalo "vsechno ostatni vcetne toho, co jeste nevime". To je
u nepovinneho parametru, ktery dorazi az pozdejsi zpravou, past.
Radek podminky v logu rikal jen "splneno". Ted nese i to, s cim se porovnavalo,
a rozlisuje nedorazilo od prazdneho - prvni radek je presne ta informace, ktera
chybela:
Podmínka: result isNotEmpty: nesplněno | result = nedorazilo
Podmínka: result eq Chybějící informace | result = "Přesměrování", porovnáno s "Chybějící informace"
Overeno prehranim celeho hovoru na bezici instanci: prvni zprava bez dat ticket
zalozi a nechá otevreny, druha s "Chybějící informace" ho preda a priradi, treti
s "Přesměrování" ho zavre. Pred opravou byl vyrizeny uz po prvni zprave.
Zustava k rozhodnuti: pri prehodnoceni hovoru resitel na zavrenem ticketu
zustane. Do "Mych ticketu" nespadne, ty ukazuji jen nevyrizene, ale ve vsech
ticketech u nej to jmeno stoji.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
f7ad429b3a
commit
1532ea0af7
+60
-25
@@ -1106,39 +1106,74 @@ function seedRealAutomations(): void {
|
||||
priority: 'low',
|
||||
},
|
||||
},
|
||||
/*
|
||||
* **Nejdriv se ptame, jestli vysledek vubec prisel.**
|
||||
*
|
||||
* Jeden hovor posle vic zprav a ta prvni jen ohlasi, ze zacal:
|
||||
* `data` je null, takze `{{result}}` je prazdne. Bez teto podminky
|
||||
* spadlo prazdno rovnou do vetve "neni to Chybejici informace"
|
||||
* a ticket se zavrel uz pri zvoneni. Na instanci to znamenalo, ze
|
||||
* vsech 131 ticketu bylo vyrizenych a ve frontě nezustalo nic.
|
||||
*/
|
||||
{
|
||||
id: 'st_mtjqwey5_4',
|
||||
kind: 'condition',
|
||||
fieldId: 'f_mtjqv4qj_1',
|
||||
operator: 'neq',
|
||||
value: 'Chybějící informace',
|
||||
// Vyresene hovory se rovnou zaviraji.
|
||||
operator: 'isNotEmpty',
|
||||
value: '',
|
||||
yes: [
|
||||
/*
|
||||
* Az ted se rozhoduje podle vysledku, a **kladne**: hledame
|
||||
* "Chybejici informace". Puvodni `neq` znamenalo "vsechno
|
||||
* ostatni vcetne toho, co jeste nevime".
|
||||
*/
|
||||
{
|
||||
id: 'st_mtjqx6t1_5',
|
||||
kind: 'action',
|
||||
serviceId: 'ticket',
|
||||
operationId: 'upsert',
|
||||
inputs: {
|
||||
externalId: '{{callSid}}',
|
||||
closed: 'true',
|
||||
},
|
||||
},
|
||||
],
|
||||
// Chybejici informace jde na servicedesk a s vyssi prioritou.
|
||||
no: [
|
||||
{
|
||||
id: 'st_mtjqxs41_6',
|
||||
kind: 'action',
|
||||
serviceId: 'ticket',
|
||||
operationId: 'upsert',
|
||||
inputs: {
|
||||
externalId: '{{callSid}}',
|
||||
priority: 'high',
|
||||
groupId: 'grp_servicedesk',
|
||||
},
|
||||
id: 'st_mtml9001_2',
|
||||
kind: 'condition',
|
||||
fieldId: 'f_mtjqv4qj_1',
|
||||
operator: 'eq',
|
||||
value: 'Chybějící informace',
|
||||
// Chybejici informace jde na servicedesk a s vyssi prioritou.
|
||||
yes: [
|
||||
{
|
||||
id: 'st_mtjqxs41_6',
|
||||
kind: 'action',
|
||||
serviceId: 'ticket',
|
||||
operationId: 'upsert',
|
||||
inputs: {
|
||||
externalId: '{{callSid}}',
|
||||
priority: 'high',
|
||||
groupId: 'grp_servicedesk',
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'st_mtml8hx0_1',
|
||||
kind: 'action',
|
||||
serviceId: 'ticket',
|
||||
operationId: 'assign-group',
|
||||
inputs: {
|
||||
groupId: 'grp_servicedesk',
|
||||
autoAssign: 'true',
|
||||
},
|
||||
},
|
||||
],
|
||||
// Hovor dopadl, ticket se zavira.
|
||||
no: [
|
||||
{
|
||||
id: 'st_mtjqx6t1_5',
|
||||
kind: 'action',
|
||||
serviceId: 'ticket',
|
||||
operationId: 'upsert',
|
||||
inputs: {
|
||||
externalId: '{{callSid}}',
|
||||
closed: 'true',
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
// Vysledek jeste nedorazil. Ticket uz existuje, vic se ted delat nema.
|
||||
no: [],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
+37
-1
@@ -151,7 +151,15 @@ export async function runFlow(
|
||||
ok: true,
|
||||
branch,
|
||||
summary: branch === 'yes' ? 'splněno' : 'nesplněno',
|
||||
detail: null,
|
||||
/*
|
||||
* Do logu i to, **s cim se porovnavalo**.
|
||||
*
|
||||
* "splneno" samo nerekne nic. Kdyz podminka "vysledek neni
|
||||
* Chybejici informace" sedla proto, ze vysledek jeste nedorazil
|
||||
* a prazdno se opravdu nerovna, nikdo to z logu nepozna - a strom
|
||||
* tise zavira tickety pri zvoneni.
|
||||
*/
|
||||
detail: conditionDetail(step, working, options),
|
||||
durationMs: 0,
|
||||
});
|
||||
|
||||
@@ -523,6 +531,34 @@ function conditionValue(
|
||||
return getPath(context, fieldId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Co se v podmince porovnavalo, do logu.
|
||||
*
|
||||
* Rozlisuje **nedorazilo** a **prazdne**: prvni je bezny stav u nepovinneho
|
||||
* parametru, ktery prijde az pozdejsi zpravou, druhy je prazdny retezec.
|
||||
* Pro porovnani jsou obe totez, pro cloveka, ktery hleda chybu, ne.
|
||||
*/
|
||||
function conditionDetail(
|
||||
step: Extract<FlowStep, { kind: 'condition' }>,
|
||||
context: RunContext,
|
||||
options: RunOptions,
|
||||
): string {
|
||||
const raw = conditionValue(step.fieldId, context, options);
|
||||
const name = options.fieldNames?.[step.fieldId] ?? step.fieldId;
|
||||
|
||||
const got =
|
||||
raw === undefined
|
||||
? 'nedorazilo'
|
||||
: raw === null
|
||||
? 'null'
|
||||
: stringify(raw) === ''
|
||||
? 'prázdné'
|
||||
: JSON.stringify(stringify(raw));
|
||||
|
||||
if (isUnary(step.operator)) return `${name} = ${got}`;
|
||||
return `${name} = ${got}, porovnáno s ${JSON.stringify(step.value ?? '')}`;
|
||||
}
|
||||
|
||||
/** Vyhodnoti podminku nad kontextem. */
|
||||
function evaluate(
|
||||
step: Extract<FlowStep, { kind: 'condition' }>,
|
||||
|
||||
Reference in New Issue
Block a user