Public/Webhooks/Set-MMOutgoingWebhook.ps1

# Updates an existing outgoing webhook in MatterMost

function Set-MMOutgoingWebhook {
    <#
    .SYNOPSIS
        Updates an existing MatterMost outgoing webhook.
    .EXAMPLE
        Set-MMOutgoingWebhook -HookId 'abc123' -DisplayName 'New Name' -CallbackUrls @('https://example.com/hook')
    .EXAMPLE
        Get-MMOutgoingWebhook -HookId 'abc123' | Set-MMOutgoingWebhook -DisplayName 'New Name' -CallbackUrls @('https://example.com/hook')
    #>

    [CmdletBinding()]
    [OutputType('MMOutgoingWebhook')]
    param(
        [Parameter(Mandatory, ValueFromPipelineByPropertyName)]
        [Alias('id')]
        [string]$HookId,

        [Parameter(Mandatory)]
        [string]$DisplayName,

        [Parameter(Mandatory)]
        [string[]]$CallbackUrls,

        [Parameter()]
        [string[]]$TriggerWords,

        [Parameter()]
        [string]$ChannelId,

        [Parameter()]
        [string]$Description
    )

    process {
        $body = @{
            id            = $HookId
            display_name  = $DisplayName
            callback_urls = $CallbackUrls
        }
        if ($TriggerWords) { $body['trigger_words'] = $TriggerWords }
        if ($ChannelId)    { $body['channel_id']    = $ChannelId }
        if ($Description)  { $body['description']   = $Description }

        Invoke-MMRequest -Endpoint "hooks/outgoing/$HookId" -Method PUT -Body $body | ConvertTo-MMOutgoingWebhook
    }
}