Private/Invoke-GCApiRequest.ps1
|
function Invoke-GCApiRequest { [CmdletBinding()] param( [Parameter(Mandatory = $true)] [string]$Endpoint, [Parameter(Mandatory = $false)] [ValidateSet('GET', 'POST', 'PUT', 'PATCH', 'DELETE')] [string]$Method = 'GET', [Parameter(Mandatory = $false)] [object]$Body, [Parameter(Mandatory = $false)] [hashtable]$QueryParameters ) $AccessToken = [Environment]::GetEnvironmentVariable('GC_ACCESS_TOKEN') $BaseURL = [Environment]::GetEnvironmentVariable('GC_BASE_URL') if ([string]::IsNullOrEmpty($AccessToken)) { throw "Not authenticated. Run Connect-GenesysCloud first." } if ([string]::IsNullOrEmpty($BaseURL)) { throw "Base URL not set. Run Connect-GenesysCloud first." } $headers = @{ 'Authorization' = "Bearer $AccessToken" 'Content-Type' = 'application/json' } $uri = "https://api.$BaseURL/api/v2/$Endpoint" if ($QueryParameters -and $QueryParameters.Count -gt 0) { $queryString = New-GCQueryString -Parameters $QueryParameters $uri = "$uri$queryString" } $invokeParams = @{ Method = $Method Uri = $uri Headers = $headers } if ($Body) { if ($Body -is [string]) { $invokeParams['Body'] = $Body } else { $invokeParams['Body'] = ($Body | ConvertTo-Json -Depth 10) } } try { $response = Invoke-RestMethod @invokeParams return $response } catch { Write-Debug $_ throw $_ } } |