twilioPhoneService = $twilioPhoneService; } public function assignProxyPhone(Client $client, string $areaCode): ?ClientPhoneNumber { $availableNumbers = $this->twilioPhoneService->getAvailablePhoneNumbers($areaCode); if (empty($availableNumbers)) { throw new Exception("No phone numbers available for the given area code"); } $phoneNumber = array_key_first($availableNumbers); $companyName = $client->name; $result = $this->twilioPhoneService->purchasePhoneNumberAndSetWebhook( $phoneNumber, $companyName, 'proxy', 'proxy' ); $clientPhoneNumber = ClientPhoneNumber::create([ 'client_id' => $client->id, 'type' => 'proxy', 'value' => 'proxy', 'phone_number' => $result['phone_number'], 'route_to' => $client->phone_number, 'sid' => $result['sid'], ]); $client->update(['proxy_phone' => $result['phone_number']]); return $clientPhoneNumber; } public function updateProxyPhoneConfiguration(ClientPhoneNumber $clientPhoneNumber, string $routeTo): void { $clientPhoneNumber->update(['route_to' => $routeTo]); } }