Public/Actions/New-AMOpenUrlAction.ps1

function New-AMOpenUrlAction {
    <#
    .SYNOPSIS
        Creates an OpenUrl Action for an Adaptive Card.
 
    .DESCRIPTION
        Creates an Action.OpenUrl element that opens a URL in a web browser when clicked.
        This action is commonly used to provide links to external resources, documentation,
        or related web pages from within your Adaptive Card.
 
    .PARAMETER Title
        The title text to display on the action button.
 
    .PARAMETER Url
        The URL to open when the button is clicked. This must be a valid URL including
        the protocol (e.g., "https://").
 
    .PARAMETER Id
        Optional unique identifier for the action. If not specified, a new GUID will be
        generated automatically. The ID can be useful when you need to reference this
        action programmatically.
 
    .PARAMETER Tooltip
        Optional tooltip text to display when the user hovers over the button.
        Use this to provide additional context about what will happen when clicked.
 
    .EXAMPLE
        # Create a simple "Learn More" button
        $learnMoreAction = New-AMOpenUrlAction -Title "Learn More" -Url "https://example.com"
        Add-AMElement -Card $card -Element (New-AMActionSet -Actions @($learnMoreAction))
 
    .EXAMPLE
        # Create a button with custom ID and tooltip
        $docsButton = New-AMOpenUrlAction -Title "View Documentation" `
            -Url "https://docs.contoso.com/project" `
            -Id "docs-button" `
            -Tooltip "Open the project documentation in a new browser window"
 
    .EXAMPLE
        # Creating multiple URL actions in an ActionSet
        $actions = @(
            (New-AMOpenUrlAction -Title "Product Page" -Url "https://contoso.com/products"),
            (New-AMOpenUrlAction -Title "Support" -Url "https://contoso.com/support")
        )
        $actionSet = New-AMActionSet -Id "links" -Actions $actions
 
    .INPUTS
        None. You cannot pipe input to New-AMOpenUrlAction.
 
    .OUTPUTS
        System.Collections.Hashtable
        Returns a hashtable representing the Action.OpenUrl element.
 
    .NOTES
        Action.OpenUrl is one of the most commonly used action types in Adaptive Cards.
        Unlike other action types, Action.OpenUrl doesn't require any special permissions
        or registrations since it simply opens a URL in the user's browser.
 
        In Outlook, the URL will typically open in the user's default web browser.
 
    .LINK
        https://adaptivecards.io/explorer/Action.OpenUrl.html
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)]
        [string]$Title,

        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [string]$Url,

        [Parameter()]
        [string]$Id = [guid]::NewGuid().ToString(),

        [Parameter()]
        [string]$Tooltip
    )

    $action = [ordered]@{
        'type' = 'Action.OpenUrl'
        'id' = $Id
        'title' = $Title
        'url' = $Url
    }

    if ($Tooltip) {
        $action.tooltip = $Tooltip
    }

    return $action
}