Nvoip.psm1
|
function Get-NvoipBasicAuth { param( [string]$OAuthClientId = $env:NVOIP_OAUTH_CLIENT_ID, [string]$OAuthClientSecret = $env:NVOIP_OAUTH_CLIENT_SECRET ) if (-not $OAuthClientId -or -not $OAuthClientSecret) { throw "Missing OAuth client credentials. Configure NVOIP_OAUTH_CLIENT_ID + NVOIP_OAUTH_CLIENT_SECRET." } return [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("$OAuthClientId`:$OAuthClientSecret")) } function Invoke-NvoipRequest { param( [Parameter(Mandatory = $true)][string]$Method, [Parameter(Mandatory = $true)][string]$Path, [string]$BaseUrl = $env:NVOIP_BASE_URL, [hashtable]$Headers = @{}, [object]$Body = $null, [string]$Napikey ) if (-not $BaseUrl) { $BaseUrl = "https://api.nvoip.com.br/v2" } $url = "$($BaseUrl.TrimEnd('/'))$Path" if ($Napikey) { $separator = $url.Contains("?") ? "&" : "?" $url = "$url${separator}napikey=$([uri]::EscapeDataString($Napikey))" } $params = @{ Method = $Method Uri = $url Headers = $Headers ErrorAction = "Stop" } if ($Body -ne $null) { $params.Body = $Body } Invoke-RestMethod @params } function New-NvoipAccessToken { param( [string]$Numbersip = $env:NVOIP_NUMBERSIP, [string]$UserToken = $env:NVOIP_USER_TOKEN ) $basicAuth = Get-NvoipBasicAuth $body = "username=$([uri]::EscapeDataString($Numbersip))&password=$([uri]::EscapeDataString($UserToken))&grant_type=password" Invoke-NvoipRequest -Method POST -Path "/oauth/token" -Headers @{ Authorization = "Basic $basicAuth" "Content-Type" = "application/x-www-form-urlencoded" } -Body $body } function Get-NvoipBalance { param([Parameter(Mandatory = $true)][string]$AccessToken) Invoke-NvoipRequest -Method GET -Path "/balance" -Headers @{ Authorization = "Bearer $AccessToken" } } function Send-NvoipSms { param( [Parameter(Mandatory = $true)][string]$AccessToken, [Parameter(Mandatory = $true)][string]$NumberPhone, [Parameter(Mandatory = $true)][string]$Message ) Invoke-NvoipRequest -Method POST -Path "/sms" -Headers @{ Authorization = "Bearer $AccessToken" "Content-Type" = "application/json" } -Body (@{ numberPhone = $NumberPhone message = $Message flashSms = $false } | ConvertTo-Json -Depth 4) } function New-NvoipCall { param( [Parameter(Mandatory = $true)][string]$AccessToken, [Parameter(Mandatory = $true)][string]$Caller, [Parameter(Mandatory = $true)][string]$Called ) Invoke-NvoipRequest -Method POST -Path "/calls/" -Headers @{ Authorization = "Bearer $AccessToken" "Content-Type" = "application/json" } -Body (@{ caller = $Caller called = $Called } | ConvertTo-Json -Depth 4) } function Send-NvoipOtp { param( [Parameter(Mandatory = $true)][string]$AccessToken, [string]$Sms, [string]$Voice, [string]$Email ) $payload = @{} if ($Sms) { $payload.sms = $Sms } if ($Voice) { $payload.voice = $Voice } if ($Email) { $payload.email = $Email } Invoke-NvoipRequest -Method POST -Path "/otp" -Headers @{ Authorization = "Bearer $AccessToken" "Content-Type" = "application/json" } -Body ($payload | ConvertTo-Json -Depth 4) } function Test-NvoipOtp { param( [Parameter(Mandatory = $true)][string]$Code, [Parameter(Mandatory = $true)][string]$Key ) Invoke-NvoipRequest -Method GET -Path "/check/otp?code=$([uri]::EscapeDataString($Code))&key=$([uri]::EscapeDataString($Key))" } function Get-NvoipWhatsAppTemplates { param([Parameter(Mandatory = $true)][string]$AccessToken) Invoke-NvoipRequest -Method GET -Path "/wa/listTemplates" -Headers @{ Authorization = "Bearer $AccessToken" } } function Send-NvoipWhatsAppTemplate { param( [Parameter(Mandatory = $true)][string]$AccessToken, [Parameter(Mandatory = $true)][string]$TemplateId, [Parameter(Mandatory = $true)][string]$Destination, [Parameter(Mandatory = $true)][string]$Instance, [string]$Language = "pt_BR", [array]$BodyVariables = @(), [array]$HeaderVariables = @(), [bool]$ToFlow = $false ) $payload = @{ idTemplate = $TemplateId destination = $Destination instance = $Instance language = $Language } if ($BodyVariables.Count -gt 0) { $payload.bodyVariables = $BodyVariables } if ($HeaderVariables.Count -gt 0) { $payload.headerVariables = $HeaderVariables } if ($ToFlow) { $payload.functions = @{ to_flow = $true } } Invoke-NvoipRequest -Method POST -Path "/wa/sendTemplates" -Headers @{ Authorization = "Bearer $AccessToken" "Content-Type" = "application/json" } -Body ($payload | ConvertTo-Json -Depth 6) } Export-ModuleMember -Function *-Nvoip* |