diff --git a/services/NormalBot.php b/services/NormalBot.php index 90cf2a8..45c9f98 100644 --- a/services/NormalBot.php +++ b/services/NormalBot.php @@ -509,6 +509,7 @@ class NormalBot $cap['collected_labels'][$field['key']] = $value; unset($cap['__awaiting_other']); $cap['index'] = $idx + 1; + while ($cap['index'] < count($fields) && self::capShouldSkip($fields[$cap['index']], $cap['collected'])) { $cap['index']++; } $meta['__cap'] = $cap; ConversationContext::updateMetadata($ctxId, $meta); if ($cap['index'] < count($fields)) { @@ -566,6 +567,7 @@ class NormalBot } $cap['index'] = $idx + 1; + while ($cap['index'] < count($fields) && self::capShouldSkip($fields[$cap['index']], $cap['collected'])) { $cap['index']++; } $meta['__cap'] = $cap; ConversationContext::updateMetadata($ctxId, $meta); @@ -713,6 +715,17 @@ class NormalBot return self::sendText($text, $to, $company); } + // skip_if: {"field":"novedad_id","not_in":["35","41"]} → skip this field if collected[field] not in list + private static function capShouldSkip(array $field, array $collected): bool + { + $si = $field['skip_if'] ?? null; + if (!$si) return false; + $val = (string)($collected[$si['field'] ?? ''] ?? ''); + if (isset($si['not_in'])) return !in_array($val, array_map('strval', $si['not_in'])); + if (isset($si['equals'])) return $val !== (string)$si['equals']; + return false; + } + private static function capFieldLabel(array $fields, string $key): string { foreach ($fields as $f) { @@ -1128,6 +1141,7 @@ class NormalBot $cap['collected_labels'][$field['key']] = $pending['label']; unset($cap['__lookup_pending']); $cap['index'] = $idx + 1; + while ($cap['index'] < count($fields) && self::capShouldSkip($fields[$cap['index']], $cap['collected'])) { $cap['index']++; } $meta['__cap'] = $cap; ConversationContext::updateMetadata($ctxId, $meta); if ($cap['index'] < count($fields)) {