feat(supplier-webhook): accept non-B-prefix projects as platform=DIRECT

Drops regex /^B[123]_.+$/ from project field validation; parsePlatform()
returns 'DIRECT' for projects without B-prefix (instead of silent fallback
to 'B1'). SupplierProjectResolver ALLOWED_PLATFORMS extended to include
DIRECT.

Closes ~67 of 82 lost leads/day for tenant client1 (observed 2026-05-25):
mostly client.carmoney.ru (55), B2_Caranga (7), cabinet.caranga.ru (3),
cashmotor.ru (2), numeric callback IDs (~10).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Дмитрий
2026-05-25 17:31:13 +03:00
parent 8ad4e18707
commit 3aaa597baf
3 changed files with 9 additions and 5 deletions
@@ -83,7 +83,7 @@ class SupplierWebhookController extends Controller
$validated = $request->validate([
'vid' => 'required|integer|min:1',
'project' => ['required', 'string', 'max:255', 'regex:/^B[123]_.+$/'],
'project' => ['required', 'string', 'max:255'], // Phase 3: regex /^B[123]_.+$/ снят — non-B → platform=DIRECT
'phone' => ['required', 'string', 'regex:/^7\d{10}$/'],
'time' => ['required', 'integer', "min:{$minTime}", "max:{$maxTime}"],
'tag' => 'nullable|string|max:255',
@@ -182,8 +182,12 @@ class SupplierWebhookController extends Controller
private function parsePlatform(string $project): string
{
preg_match('/^(B[123])_/', $project, $m);
// Phase 3: проекты без B-префикса → DIRECT (раньше silent fallback на 'B1'
// приводил к неверной маршрутизации).
if (preg_match('/^(B[123])_/', $project, $m) === 1) {
return $m[1];
}
return $m[1] ?? 'B1';
return 'DIRECT';
}
}
@@ -21,7 +21,7 @@ use InvalidArgumentException;
*/
class SupplierProjectResolver
{
private const ALLOWED_PLATFORMS = ['B1', 'B2', 'B3'];
private const ALLOWED_PLATFORMS = ['B1', 'B2', 'B3', 'DIRECT'];
private const ALLOWED_SIGNAL_TYPES = ['site', 'call', 'sms'];
+1 -1
View File
@@ -1,6 +1,6 @@
# Brain Status (auto-generated)
Last updated: 2026-05-25T14:59:02.312Z
Last updated: 2026-05-25T14:59:04.311Z
| Контролёр | Состояние | Детали |
|---|---|---|