getVariable('CALLERID(num)')); if ($callerNumber === null) { \Log::warning('Order callback number was not stored because caller ID did not match an outbound route pattern'); return 1; } DB::transaction(function () use ($callerNumber) { $alreadyWaiting = DB::table('order_callback_requests') ->where('caller_number', $callerNumber) ->where('status', 'waiting') ->lockForUpdate() ->exists(); if (!$alreadyWaiting) { DB::table('order_callback_requests')->insert([ 'caller_number' => $callerNumber, 'status' => 'waiting', 'created_at' => now(), 'updated_at' => now(), ]); } }, 3); return 0; } catch (Throwable $e) { \Log::error('Order callback number storage failed', ['exception' => $e]); return 1; } } public static function normalizeCallerNumber(string $callerNumber): ?string { $number = preg_replace('/[\s().-]/', '', trim($callerNumber)); if (!is_string($number) || !preg_match('/^\+?[0-9]+$/D', $number)) { return null; } $digits = preg_replace('/\D/', '', $number); if (preg_match('/^1[1-9][0-9]{3}$/D', $digits)) { return $digits; } $localNumber = PhoneNormalizer::toLocal( $number, config('sms.country_code', '20'), config('sms.trunk_prefix', '0') ); if ( preg_match('/^01[0-9]{9}$/D', $localNumber) || preg_match('/^0[1-9][0-9]{8}$/D', $localNumber) || preg_match('/^1[1-9][0-9]{3}$/D', $localNumber) ) { return $localNumber; } return null; } }