JSON Форматирование объектов с использованием Powershell для http-запроса - PullRequest
0 голосов
/ 03 марта 2020

Я работаю над проектом, интегрирующимся со Slack, и у меня возникают некоторые проблемы, когда я пытаюсь отправить данные в API, поскольку он ожидает объект Json для блоков, которые необходимо отформатировать.

Используя Slack Block Builder, я знаю, что он ожидает:

    "blocks": [        
        {
            "type": "section",
            "text": {
                "type": "mrkdwn",
                "text": "http://bar.com"
            }
        }
    ]

И вот как я пытаюсь построить объект и параметры для метода chat.postMessage для отправки в API

$messageText = 'http://bar.com'
$blocksDetailObj = [PSCustomObject]@{'type' = '"mrkdwn"'
                     'text' = $messageText}


$blocksObject = [PSCustomObject]@{ 'type' = '"section"'
                   'text' = $blocksDetailObj }

$blocksArray = @()

$blocksArray += $blocksObject

$queryStringParameters = @{ 'token' = $botToken 
                            'channel' = $channelID
                            'text' = 'fallback text'
                            'blocks' = $blocksArray 
                                     }

Любая помощь или документация будет принята с благодарностью.

1 Ответ

0 голосов
/ 03 марта 2020

Вы можете оформить заказ PSSlack - PS-модуль для взаимодействия со Slack API или PoshBot , как предлагается. Здесь вы можете найти длинную запись в блоге, в которой рассказывается, как можно использовать PSSlack.

Если вы не хотите использовать эти модули напрямую, вам следует взглянуть на Send-SlackMessage функция :

$body = @{ }

    switch ($psboundparameters.keys)
    {
        'channel'     {$body.channel = $channel }
        'text'        {$body.text     = $text}
        'username'    {$body.username = $username}
        'asuser'      {$body.as_user = $AsUser}
        'iconurl'     {$body.icon_url = $iconurl}
        'iconemoji'   {$body.icon_emoji   = $iconemoji}
        'linknames'   {$body.link_names = 1}
        'parse'       {$body.parse = $Parse}
        'UnfurlLinks' {$body.unfurl_links = $UnfurlLinks}
        'UnfurlMedia' {$body.unfurl_media = $UnfurlMedia}
        'attachments' {$body.attachments = $Attachments}
    }
    $Messages += $Body
}
else
{
    foreach($Message in $SlackMessage)
    {
        $Messages += $SlackMessage
    }
}


foreach($Message in $Messages)
{
    if($Token -or ($Script:PSSlack.Token -and -not $Uri))
    {
        if($Message.attachments)
        {
            $Message.attachments = ConvertTo-Json -InputObject     @$Message.attachments) -Depth 6 -Compress
        }

        Write-Verbose "Send-SlackApi -Body $($Message | Format-List | Out-String)"
        $response = Send-SlackApi @ProxyParam -Method chat.postMessage -Body $Message -Token $Token -ForceVerbose:$ForceVerbose

        if ($response.ok)
        {
            $link = "$($Script:PSSlack.ArchiveUri)/$($response.channel)/p$($response.ts -replace '\.')"
            $response | Add-Member -MemberType NoteProperty -Name link -Value $link
        }

        $response
    }
    elseif($Uri -or $Script:PSSlack.Uri)
    {
        if(-not $ForceVerbose) {
            $ProxyParam.Add('Verbose', $False)
        }
        if($ForceVerbose) {
            $ProxyParam.Add('Verbose', $true)
        }
        $json = ConvertTo-Json -Depth 6 -Compress -InputObject $Message
        Invoke-RestMethod @ProxyParam -Method Post -Body $json -Uri $Uri
    }
    else
    {
        Throw 'No Uri or Token specified.  Specify a Uri or Token in the parameters or via Set-PSSlackConfig'
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...