### Start a Cellular Network Conversation with LiveCommunicationKit Source: https://developer.apple.com/documentation/livecommunicationkit/preparing-your-app-to-be-the-default-dialer-app Initiates a cellular network conversation using LiveCommunicationKit. It requires creating a Handle for the recipient and a StartCellularConversationAction, then using TelephonyConversationManager to start the conversation. Error handling is included for the dialing process. ```swift // ... let manager = TelephonyConversationManager.sharedInstance let cellularServices = manager.cellularServices // Code to choose a cellular service. // ... // Start a cellular network conversation. func startCellularConversation(_ phoneNumber: String, using cellularService: CellularService? = nil) async throws { let handle = Handle(type: .phoneNumber, value: phoneNumber) do { let action = StartCellularConversationAction(handle, cellularService: cellularService) try await manager.startCellularConversation(action) } catch { print("error dialing \(error)") // ... // Additional error handling. throw error } } ``` -------------------------------- ### StartCellularConversationAction Initialization Source: https://developer.apple.com/documentation/livecommunicationkit/startcellularconversationaction/init%28_%3Acellularservice%3A%29 Initializes an action to start a cellular conversation with a specified recipient handle and an optional cellular service. ```APIDOC ## init(_:cellularService:) ### Description Creates an action that initiates a cellular network conversation. ### Method Initializer ### Endpoint N/A (Initializer) ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None ### Request Example ```swift init( _ handle: Handle, cellularService: CellularService? = nil ) ``` ### Response #### Success Response (200) N/A (Initializer) #### Response Example None ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None ### Request Example ```swift init( _ handle: Handle, cellularService: CellularService? = nil ) ``` ### Response #### Success Response (200) N/A (Initializer) #### Response Example None ## Parameters `handle` (Handle) - Required - The handle of the conversation’s recipient. `cellularService` (CellularService?) - Optional - The cellular service for the conversation. ## Discussion If you don’t provide an cellular service, the system chooses a service for the conversation or fails the action. ## See Also ### Request creation `init(ConversationHistoryManager.RecentConversation)` Creates an action that initiates a cellular conversation using information from a recent conversation. ``` -------------------------------- ### Start Cellular Conversation Swift Source: https://developer.apple.com/documentation/livecommunicationkit/telephonyconversationmanager/startcellularconversation%28_%3A%29 Starts a cellular conversation using the provided action. This method is available on iOS 26.0+, iPadOS 26.0+, and Mac Catalyst. It takes a StartCellularConversationAction as input and can throw errors. ```swift final func startCellularConversation(_ action: StartCellularConversationAction) async throws ``` -------------------------------- ### Initialize ConversationHistoryManager (Swift) Source: https://developer.apple.com/documentation/livecommunicationkit/conversationhistorymanager/conversationhistorydidupdate/init%28%29 The init() method is the initializer for the ConversationHistoryManager class. It is available on iOS, iPadOS, and Mac Catalyst starting from version 26.0. This method is essential for setting up an instance of the ConversationHistoryManager. ```swift init() ``` -------------------------------- ### Start a VoIP Conversation with LiveCommunicationKit Source: https://developer.apple.com/documentation/livecommunicationkit/initiating-voip-conversations-with-livecommunicationkit This Swift code snippet demonstrates how to initiate an outgoing VoIP conversation using LiveCommunicationKit. It utilizes `ConversationManager` and `StartConversationAction` to manage the conversation lifecycle, including reporting connection status. ```swift // ... let configuration: ConversationManager.Configuration let manager: ConversationManager // Code to set up the manager and configuration for the conversation. // ... // Start the conversation. func startOutgoingConversation(handles: [Handle], isVideo: Bool) async throws { let uuid = UUID() let action = StartConversationAction( conversationUUID: uuid, handles: handles, isVideo: isVideo ) try await manager.perform([action]) // Code to initiate a VoIP conversation using your VoIP services. // ... Task { try await Task.sleep(for: .seconds(1)) for conversation in manager.conversations { if conversation.uuid == uuid { // Report conversation status. manager.reportConversationEvent(.conversationConnected(Date()), for: conversation) } } } } ``` -------------------------------- ### Indicate Conversation Start with fulfill(dateStarted:) Source: https://developer.apple.com/documentation/livecommunicationkit/startconversationaction/fulfill%28datestarted%3A%29 The fulfill(dateStarted:) instance method is used to indicate that a local participant has successfully started a conversation. It requires a Date object specifying the exact time the conversation commenced. This method is available on iOS, iPadOS, Mac Catalyst, visionOS, and watchOS starting from version 17.4 (or 1.1 for visionOS). ```swift final func fulfill(dateStarted: Date) ``` -------------------------------- ### Conversation.Event.conversationStartedConnecting(_:) Source: https://developer.apple.com/documentation/livecommunicationkit/conversation/event/conversationstartedconnecting%28_%3A%29 This event informs the system that a conversation has started the process of connecting participants at a specific point in time. ```APIDOC ## Conversation.Event.conversationStartedConnecting(_:) ### Description Informs the system that a conversation has started to connect participants at a point in time. ### Method Not Applicable (Event) ### Endpoint Not Applicable (Event) ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None ### Request Example None ### Response #### Success Response (200) None #### Response Example None ### Related Events * `case conversationConnected(Date)` * `case conversationEnded(Date, Conversation.EndedReason)` * `case conversationUpdated(Conversation.Update)` ``` -------------------------------- ### Swift: conversationManagerDidBegin(_:) Delegate Method Source: https://developer.apple.com/documentation/livecommunicationkit/conversationmanagerdelegate/conversationmanagerdidbegin%28_%3A%29 This Swift method is called on the delegate when your app successfully starts a ConversationManager. It is a required method for implementing the ConversationManagerDelegate protocol. The method receives the ConversationManager instance that was started as a parameter. ```swift func conversationManagerDidBegin(_ manager: ConversationManager) ``` -------------------------------- ### Instance Method: fulfill(dateStarted:) Source: https://developer.apple.com/documentation/livecommunicationkit/startconversationaction/fulfill%28datestarted%3A%29 Indicates that a local participant successfully started a conversation. Available on iOS 17.4+, iPadOS 17.4+, Mac Catalyst 17.4+, visionOS 1.1+, and watchOS 10.4+. ```APIDOC ## Instance Method: fulfill(dateStarted:) ### Description Indicates that a local participant successfully started a conversation. ### Method Instance Method ### Endpoint N/A (This is a client-side method) ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None ### Request Example ```swift // Example usage within your application let conversationKit = LiveCommunicationKit() let startTime = Date() conversationKit.fulfill(dateStarted: startTime) ``` ### Response #### Success Response N/A (This is a client-side method) #### Response Example N/A ``` -------------------------------- ### Start Cellular Conversation (Swift) Source: https://developer.apple.com/documentation/livecommunicationkit/telephonyconversationmanager/sharedinstance Initiates a new cellular conversation using the `startCellularConversation` function. This function requires a `StartCellularConversationAction` object as input and can throw errors. ```swift func startCellularConversation(StartCellularConversationAction) async throws ``` -------------------------------- ### LiveCommunicationKit - conversationManagerDidBegin(_:) Source: https://developer.apple.com/documentation/livecommunicationkit/conversationmanagerdelegate/conversationmanagerdidbegin%28_%3A%29 This delegate method is called when your app has successfully started a conversation manager. It provides the conversation manager instance to the delegate. ```APIDOC ## Instance Method ### conversationManagerDidBegin(_:) Tells the delegate that your app has started a conversation manager. **Availability** iOS 17.4+, iPadOS 17.4+, Mac Catalyst 17.4+, visionOS 1.1+, watchOS 10.4+ ```swift func conversationManagerDidBegin(_ manager: ConversationManager) ``` ### Parameters #### `manager` - **ConversationManager** - Required - The conversation manager that your app started. ### See Also - `func conversationManagerDidReset(ConversationManager)`: Tells the delegate that the app has reset the conversation manager. ``` -------------------------------- ### Create Outgoing Conversation Action (Swift) Source: https://developer.apple.com/documentation/livecommunicationkit/startconversationaction/init%28conversationuuid%3Ahandles%3Aisvideo%3A%29 Initializes an action to start an outgoing conversation. Requires iOS 17.4+, iPadOS 17.4+, Mac Catalyst 17.4+, visionOS 1.1+, or watchOS 10.4+. Takes a conversation UUID, an array of handles for remote members, and a boolean indicating if it's a video call. ```swift init( conversationUUID: UUID, handles: [Handle], isVideo: Bool ) ``` -------------------------------- ### Fulfill StartConversationAction Source: https://developer.apple.com/documentation/livecommunicationkit/startconversationaction Marks a StartConversationAction as fulfilled, indicating that a local participant has successfully initiated a conversation. This method takes the date when the conversation started as an argument and is vital for tracking the lifecycle of conversation actions. ```swift func fulfill(dateStarted: Date) ``` -------------------------------- ### Initialize Merge Conversation Action (Swift) Source: https://developer.apple.com/documentation/livecommunicationkit/mergeconversationaction/init%28conversationuuid%3Aconversationuuidtomergewith%3A%29 Creates an action that merges two conversations using their unique identifiers. This initializer is part of the LiveCommunicationKit framework and is available on multiple Apple platforms starting from specific OS versions. ```swift init( conversationUUID: UUID, conversationUUIDToMergeWith: UUID ) ``` -------------------------------- ### SetTranslatingAction Initialization Source: https://developer.apple.com/documentation/livecommunicationkit/settranslatingaction Initializes a SetTranslatingAction to start or stop translation for a conversation. It requires the conversation ID, a boolean indicating whether to translate, and the local and remote languages. ```APIDOC ## Initializing SetTranslatingAction ### Description Creates an action that starts or stops translation for a given conversation. ### Method `init` ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body * **conversationID** (UUID) - Required - The unique identifier of the conversation. * **isTranslating** (Bool) - Required - A boolean value indicating whether to start (true) or stop (false) translation. * **localLanguage** (Locale.Language) - Required - The language of the local participant. * **remoteLanguage** (Locale.Language) - Required - The language of the remote participant. ### Request Example ```swift let action = SetTranslatingAction(conversationID: conversationId, isTranslating: true, localLanguage: .english, remoteLanguage: .spanish) ``` ### Response #### Success Response (200) This initializer does not return a value directly upon creation. The action is then executed via a conversation context. #### Response Example N/A ``` -------------------------------- ### Initialize LiveCommunicationKit Translation Action Source: https://developer.apple.com/documentation/livecommunicationkit/settranslatingaction/init%28conversationid%3Aistranslating%3Alocallanguage%3Aremotelanguage%3A%29 Creates an action to start or stop translation for a given conversation. This initializer requires a conversation ID, a boolean indicating if translation is active, and the local and remote participant languages. Available on iOS and iPadOS 26.0 and later. ```swift init( conversationID: UUID, isTranslating: Bool, localLanguage: Locale.Language, remoteLanguage: Locale.Language ) ``` -------------------------------- ### Initialize ConversationManager with Configuration (Swift) Source: https://developer.apple.com/documentation/livecommunicationkit/conversationmanager/init%28configuration%3A%29 Creates a new conversation manager using a provided configuration object. This initializer is available on iOS, iPadOS, Mac Catalyst, visionOS, and watchOS starting from version 17.4 (or 1.1 for visionOS). ```swift convenience init(configuration: ConversationManager.Configuration) ``` -------------------------------- ### Initialize Pause Conversation Action Source: https://developer.apple.com/documentation/livecommunicationkit/pauseconversationaction/init%28conversationuuid%3Aispaused%3A%29 Creates an action to start or stop audio and video streams for a conversation. This initializer requires the conversation's unique identifier and a boolean value specifying whether to pause the streams. Available on iOS 17.4+ and later. ```swift init( conversationUUID: UUID, isPaused: Bool ) ``` -------------------------------- ### Get Conversation Capabilities (Swift) Source: https://developer.apple.com/documentation/livecommunicationkit/conversation/update/capabilities Retrieves the supported capabilities of a conversation after a system update. This property is optional and returns a Conversation.Capabilities object. ```swift var capabilities: Conversation.Capabilities? ``` -------------------------------- ### Handle.Kind Enumeration Definition Source: https://developer.apple.com/documentation/livecommunicationkit/handle/kind Defines the possible types for a participant's handle within a conversation. This enumeration is available on iOS, iPadOS, Mac Catalyst, visionOS, and watchOS starting from version 17.4 (or 1.1 for visionOS). ```swift enum Kind ``` -------------------------------- ### Conversation Started Connecting Event Source: https://developer.apple.com/documentation/livecommunicationkit/conversation/event Represents the event where the system has initiated the process of connecting participants to a conversation. It includes the timestamp when this connection attempt began. This is a case within the Conversation.Event enumeration. ```swift case conversationStartedConnecting(Date) ``` -------------------------------- ### Declare StartConversationAction Class Source: https://developer.apple.com/documentation/livecommunicationkit/startconversationaction Declares the StartConversationAction class, a core component for initiating outgoing conversations within the LiveCommunicationKit framework. This class is available on iOS, iPadOS, Mac Catalyst, visionOS, and watchOS starting from version 17.4 (or 1.1 for visionOS). ```swift final class StartConversationAction ``` -------------------------------- ### CellularService Structure Definition (Swift) Source: https://developer.apple.com/documentation/livecommunicationkit/cellularservice Defines the CellularService structure, which represents a cellular service account for starting or joining a conversation. It includes attributes like label and id, and conforms to several standard Swift protocols. ```swift struct CellularService ``` -------------------------------- ### Conversation.State.left Case Example (Swift) Source: https://developer.apple.com/documentation/livecommunicationkit/conversation/state-swift.enum/left This code snippet demonstrates the usage of the 'left' case within the Conversation.State enum in Swift. It represents a conversation that has ended and all media sessions have been terminated. This is a simple enum case declaration. ```swift case left ``` -------------------------------- ### ConversationManager.Configuration.supportsVideo Source: https://developer.apple.com/documentation/livecommunicationkit/conversationmanager/configuration-swift.struct/supportsvideo This property indicates whether the application supports video communication in addition to audio. It is available on iOS, iPadOS, Mac Catalyst, visionOS, and watchOS starting from version 17.4 (or 1.1 for visionOS, 10.4 for watchOS). ```APIDOC ## Instance Property: supportsVideo ### Description A Boolean value that indicates whether the app supports video in addition to audio. ### Availability iOS 17.4+
iPadOS 17.4+
Mac Catalyst 17.4+
visionOS 1.1+
watchOS 10.4+ ### Syntax ```swift var supportsVideo: Bool ``` ### See Also #### Configuration options - `var iconTemplateImageData: Data?` - `var includesConversationInRecents: Bool` - `var maximumConversationGroups: Int` - `var maximumConversationsPerConversationGroup: Int` - `var ringtoneName: String?` - `var supportedHandleTypes: Set` - `var supportsAudioTranslation: Bool` ``` -------------------------------- ### Initialize ConversationManager Configuration (Swift) Source: https://developer.apple.com/documentation/livecommunicationkit/conversationmanager/configuration-swift.struct/init%28ringtonename%3Aicontemplateimagedata%3Amaximumconversationgroups%3Amaximumconversationsperconversationgroup%3Aincludesconversationinrecents%3Asupportsvideo%3Asupportedhandletypes%3A%29 Creates a new configuration for a conversation manager. This initializer takes parameters such as ringtone name, icon image data, maximum conversation group limits, and support for video and handle types. It is available on iOS, iPadOS, Mac Catalyst, visionOS, and watchOS starting from specific versions. ```swift init( ringtoneName: String?, iconTemplateImageData: Data?, maximumConversationGroups: Int, maximumConversationsPerConversationGroup: Int, includesConversationInRecents: Bool, supportsVideo: Bool, supportedHandleTypes: Set ) ``` -------------------------------- ### Get Conversation Start Date (Swift) Source: https://developer.apple.com/documentation/livecommunicationkit/conversationhistorymanager/recentconversation/date Retrieves the date when a recent conversation was initiated. This property is available on iOS 26.0+, iPadOS 26.0+, and Mac Catalyst. It returns a standard Swift Date object. ```swift let date: Date ``` -------------------------------- ### LiveCommunicationKit - init(_:) Source: https://developer.apple.com/documentation/livecommunicationkit/startcellularconversationaction/init%28_%3A%29 Creates an action that initiates a cellular conversation using information from a recent conversation. ```APIDOC ## POST /websites/developer_apple_livecommunicationkit/init ### Description Creates an action that initiates a cellular conversation using information from a recent conversation. This initializer is available on iOS 26.0+ and iPadOS 26.0+. ### Method POST ### Endpoint /websites/developer_apple_livecommunicationkit/init ### Parameters #### Request Body - **recentConversation** (ConversationHistoryManager.RecentConversation) - Required - A recent conversation to use for the new dial request. ### Request Example ```json { "recentConversation": { "handle": "+1234567890", "account": "account123", "timestamp": "2023-10-27T10:00:00Z" } } ``` ### Response #### Success Response (200) - **actionInitiated** (boolean) - Indicates if the action to initiate the conversation was successfully created. #### Response Example ```json { "actionInitiated": true } ``` ### See Also - `init(Handle, cellularService: CellularService?)` ``` -------------------------------- ### LiveCommunicationKit - init(conversationUUID:digits:tone:) Source: https://developer.apple.com/documentation/livecommunicationkit/playtoneaction/init%28conversationuuid%3Adigits%3Atone%3A%29 Creates an action that plays a sequence of tones that indicate an interaction with the keypad. ```APIDOC ## init(conversationUUID:digits:tone:) ### Description Creates an action that plays a sequence of tones that indicate an interaction with the keypad. ### Method Initializer ### Endpoint N/A (Initializer) ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None ### Request Example ```swift init( conversationUUID: UUID, digits: String, tone: PlayToneAction.Tone ) ``` ### Response #### Success Response (200) N/A (Initializer) #### Response Example N/A (Initializer) ### Parameters `conversationUUID` (UUID) - The unique identifier of the conversation to which this action will be applied. `digits` (String) - The digits tapped by the user into the keypad or included in the dial string. `tone` (PlayToneAction.Tone) - The tone to play. ``` -------------------------------- ### LiveCommunicationKit - isTranslating Property Source: https://developer.apple.com/documentation/livecommunicationkit/settranslatingaction/istranslating The isTranslating property is a boolean value that indicates whether the translation feature should be started or stopped. It is available for iOS and iPadOS starting from version 26.0. ```APIDOC ## LiveCommunicationKit - isTranslating Property ### Description A value that indicates whether to start or stop translation. ### Availability iOS 26.0+ iPadOS 26.0+ ### Property `final let isTranslating: Bool` ### See Also * Accessing action attributes * `let localLanguage: Locale.Language` - The local participant’s language. * `let remoteLanguage: Locale.Language` - The remote participant’s language. ``` -------------------------------- ### Initialize PlayToneAction with Tones Source: https://developer.apple.com/documentation/livecommunicationkit/playtoneaction/init%28conversationuuid%3Adigits%3Atone%3A%29 Creates an action to play keypad tones for a given conversation. Requires a conversation UUID, the digits entered, and the specific tone to be played. This initializer is available on multiple Apple platforms. ```swift init( conversationUUID: UUID, digits: String, tone: PlayToneAction.Tone ) ``` -------------------------------- ### LiveCommunicationKit Initializer: init(conversationUUID:timeoutDate:) Source: https://developer.apple.com/documentation/livecommunicationkit/conversationaction/init%28conversationuuid%3Atimeoutdate%3A%29 Initializes a new conversation action with a specified conversation UUID and an optional timeout date. ```APIDOC ## Initializer: init(conversationUUID:timeoutDate:) ### Description Creates a conversation action. ### Method `convenience init` ### Endpoint N/A (Initializer) ### Parameters #### Path Parameters N/A #### Query Parameters N/A #### Request Body N/A ### Request Example ```swift convenience init( conversationUUID: UUID, timeoutDate: Date = Date(timeIntervalSinceNow: 30) ) ``` ### Response #### Success Response (200) N/A (Initializer) #### Response Example N/A (Initializer) ## Parameters `conversationUUID` The unique identifier of the action’s associated conversation. `timeoutDate` The point in time that marks when the action can’t be completed anymore. ``` -------------------------------- ### Declare Generic Handle Kind (Swift) Source: https://developer.apple.com/documentation/livecommunicationkit/handle/kind/generic This code snippet demonstrates how to declare the 'generic' case for Handle.Kind in Swift. This case represents an unspecified handle type and is available on iOS, iPadOS, Mac Catalyst, visionOS, and watchOS starting from version 17.4 (or 1.1 for visionOS). ```swift case generic ``` -------------------------------- ### ConversationHistoryManager.RecentConversation.date Source: https://developer.apple.com/documentation/livecommunicationkit/conversationhistorymanager/recentconversation/date Retrieves the point in time when the conversation started. ```APIDOC ## Instance Property ### date The point in time when the conversation started. **Availability:** iOS 26.0+, iPadOS 26.0+, Mac Catalyst ```swift let date: Date ``` ### Description This property returns a `Date` object indicating the exact moment a conversation began. It is crucial for ordering conversations chronologically or for time-based filtering and analysis. ### Method N/A (Instance Property) ### Endpoint N/A (Instance Property) ### Parameters N/A ### Request Example N/A ### Response #### Success Response (200) - **date** (Date) - The date and time the conversation started. #### Response Example ```json { "date": "2023-10-27T10:30:00Z" } ``` ``` -------------------------------- ### LiveCommunicationKit Initializer Source: https://developer.apple.com/documentation/livecommunicationkit/unmergeconversationaction/init%28conversationuuid%3A%29 Initializes an action to unmerge conversations. ```APIDOC ## init(conversationUUID:) ### Description Creates an action that separates two previously merged conversations. ### Method Initializer ### Endpoint N/A (This is an initializer, not a network endpoint) ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None ### Request Example ```swift init(conversationUUID: UUID) ``` ### Response #### Success Response (N/A) N/A #### Response Example N/A ## Parameters `conversationUUID` (UUID) - Required - The unique identifier of the conversation that represents two previously merged conversations. ``` -------------------------------- ### Initialize LiveCommunicationKit Handle Source: https://developer.apple.com/documentation/livecommunicationkit/handle/init%28type%3Avalue%3Adisplayname%3A%29 Creates a new handle to identify a participant in a conversation. Requires specifying the handle type, its raw value, and an optional display name. If the display name is not provided, the raw value will be used. ```swift init( type: Handle.Kind, value: String, displayName: String? = nil ) ``` -------------------------------- ### Create StartCellularConversationAction with Handle and CellularService Source: https://developer.apple.com/documentation/livecommunicationkit/startcellularconversationaction Initializes a StartCellularConversationAction to begin a cellular network conversation. Requires a Handle to identify the participant and an optional CellularService to specify the service account. ```swift init(Handle, cellularService: CellularService?) ``` -------------------------------- ### PlayToneAction.Tone.single Case Example (Swift) Source: https://developer.apple.com/documentation/livecommunicationkit/playtoneaction/tone-swift.enum/single This code snippet demonstrates the 'single' case within the PlayToneAction.Tone enum. This case is used to signify that a single digit has been entered by a user. It is available on iOS 17.4, iPadOS 17.4, Mac Catalyst 17.4, visionOS 1.1, and watchOS 10.4 or later. ```swift case single ``` -------------------------------- ### markConversationsAsRead(_:) Source: https://developer.apple.com/documentation/livecommunicationkit/conversationhistorymanager/markconversationsasread%28_%3A%29 Marks a list of conversations as read. This method is available on iOS, iPadOS, and Mac Catalyst starting from version 26.0. ```APIDOC ## Instance Method markConversationsAsRead(_:) ### Description Marks a list of conversations as read. ### Method `async throws` ### Endpoint N/A (Instance Method) ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body * **recentConversations** (Array) - Required - A list of recent conversations that you want to mark as read. ### Request Example ```json { "recentConversations": [ { "conversationId": "conv_123", "lastMessageId": "msg_456" } ] } ``` ### Response #### Success Response (200) This method does not return a value upon success, but it may throw an error. #### Response Example N/A ``` -------------------------------- ### Handle.Kind.phoneNumber Source: https://developer.apple.com/documentation/livecommunicationkit/handle/kind/phonenumber Represents a phone number within the LiveCommunicationKit. This type is available on various Apple platforms starting from specific OS versions. ```APIDOC ## Handle.Kind.phoneNumber ### Description A phone number. ### Availability iOS 17.4+ iPadOS 17.4+ Mac Catalyst 17.4+ visionOS 1.1+ watchOS 10.4+ ### Type Definition ```swift case phoneNumber ``` ### See Also - `case emailAddress`: An email address. - `case generic`: An unspecified handle type. ``` -------------------------------- ### Initialize StartConversationAction Source: https://developer.apple.com/documentation/livecommunicationkit/startconversationaction Initializes a StartConversationAction object to begin an outgoing conversation. Requires a unique conversation identifier, a list of participant handles, and a boolean indicating if the conversation will include video. This method is crucial for setting up new conversations. ```swift init(conversationUUID: UUID, handles: [Handle], isVideo: Bool) ``` -------------------------------- ### Initialize Cellular Conversation Action Source: https://developer.apple.com/documentation/livecommunicationkit/startcellularconversationaction/init%28_%3Acellularservice%3A%29 Creates an action that initiates a cellular network conversation. Requires a handle for the recipient and optionally accepts a cellular service. If no cellular service is provided, the system will attempt to select one or the action may fail. ```swift init( _ handle: Handle, cellularService: CellularService? = nil ) ``` -------------------------------- ### init(conversationUUID:conversationUUIDToMergeWith:) Source: https://developer.apple.com/documentation/livecommunicationkit/mergeconversationaction/init%28conversationuuid%3Aconversationuuidtomergewith%3A%29 This initializer creates a MergeConversationAction, which merges two conversations identified by their UUIDs. It takes two UUID parameters, representing the unique identifiers of the conversations to be merged. ```APIDOC ## init(conversationUUID:conversationUUIDToMergeWith:) ### Description Creates an action that merges two conversations. ### Method Initializer ### Parameters #### Parameters - **conversationUUID** (UUID) - Required - The unique identifier of the first conversation. - **conversationUUIDToMergeWith** (UUID) - Required - The unique identifier of the other conversation. ### Request Example ```json { "conversationUUID": "your_conversation_uuid", "conversationUUIDToMergeWith": "other_conversation_uuid" } ``` ### Response #### Success Response (200) - **Merge Successful** (Boolean) - Indicates if the merge was successful. #### Response Example ```json { "mergeSuccessful": true } ``` ``` -------------------------------- ### ConversationHistoryManager.RecentConversation.Status.connected Source: https://developer.apple.com/documentation/livecommunicationkit/conversationhistorymanager/recentconversation/status-swift.enum/connected Represents the status of a recent conversation being connected on the current device. This status is available starting from iOS 26.0 and iPadOS 26.0. ```APIDOC ## ConversationHistoryManager.RecentConversation.Status.connected ### Description The conversation was connected on this device. ### Method N/A (Enum Case) ### Endpoint N/A (Enum Case) ### Parameters N/A ### Request Example N/A ### Response #### Success Response (N/A) - **status** (enum) - The conversation status, specifically `.connected`. #### Response Example N/A ### See Also - `case answeredElsewhere`: The conversation was answered on another device. - `case cancelled`: The outgoing conversation was cancelled by the initiating participant before it was connected. - `case missed`: The receiving participant didn’t answer the incoming conversation. - `case unknown`: The conversation’s status is unknown. ``` -------------------------------- ### Initialize Cellular Conversation Action (Swift) Source: https://developer.apple.com/documentation/livecommunicationkit/startcellularconversationaction/init%28_%3A%29 Creates an action to initiate a cellular conversation using data from a `RecentConversation`. This initializer leverages existing conversation details like handles and account information for the new dial request. It requires iOS, iPadOS, or Mac Catalyst version 26.0 or later. ```swift init(_ recentConversation: ConversationHistoryManager.RecentConversation) ``` -------------------------------- ### ConversationManager Initialization Source: https://developer.apple.com/documentation/livecommunicationkit/conversationmanager/init%28configuration%3A%29 Initializes a new ConversationManager instance with the provided configuration. This allows for customization of conversation settings upon creation. ```APIDOC ## POST /websites/developer_apple_livecommunicationkit/ConversationManager/init(configuration:) ### Description Creates a new conversation manager with a given configuration. ### Method POST ### Endpoint /websites/developer_apple_livecommunicationkit/ConversationManager/init(configuration:) ### Parameters #### Request Body - **configuration** (ConversationManager.Configuration) - Required - A collection of options for configuring the conversation manager. ### Request Example ```json { "configuration": { "example_setting": "value" } } ``` ### Response #### Success Response (200) - **manager_id** (string) - A unique identifier for the newly created conversation manager. #### Response Example ```json { "manager_id": "conv-mgr-12345" } ``` ``` -------------------------------- ### Swift: ConversationHistoryManager.RecentConversation.Status Enum Cases Source: https://developer.apple.com/documentation/livecommunicationkit/conversationhistorymanager/recentconversation/status-swift.enum/missed Provides examples of different connection statuses for a conversation within the ConversationHistoryManager.RecentConversation.Status enum. These cases help determine how a conversation concluded. ```swift case answeredElsewhere case cancelled case connected case unknown ``` -------------------------------- ### Conversation Manager and Related Interfaces Source: https://developer.apple.com/documentation/livecommunicationkit/conversation Documentation for managing and observing VoIP conversations. ```APIDOC ## VoIP Conversations ### Class ConversationManager An interface for managing and observing VoIP conversations. ### Protocol ConversationManagerDelegate Methods for managing conversations and receiving VoIP conversation updates. ### Class ConversationHistoryManager An interface for managing and providing conversation history. ``` -------------------------------- ### Create StartCellularConversationAction from Recent Conversation Source: https://developer.apple.com/documentation/livecommunicationkit/startcellularconversationaction Initializes a StartCellularConversationAction using data from a recent conversation. This allows for quick re-initiation of previously established cellular conversations. ```swift init(ConversationHistoryManager.RecentConversation) ``` -------------------------------- ### LiveCommunicationKit Overview Source: https://developer.apple.com/documentation/livecommunicationkit/index LiveCommunicationKit provides functionalities for managing VoIP conversations, integrating with system communication apps, and enabling your app to be a default dialer or calling app. ```APIDOC ## LiveCommunicationKit Framework ### Description LiveCommunicationKit allows you to offer VoIP conversation functionalities in your app, and to integrate your communication services with other communication apps in the system. With LiveCommunicationKit, your app can initiate and receive VoIP conversations, and forward cellular network conversations to the system. Using LiveCommunicationKit in your app allows people to configure their device to use your app as the default dialer or calling app. ### Topics - **Essentials**: Initiating and receiving VoIP conversations, preparing your app to be the default dialer. - **Cellular network conversations**: Manage cellular conversations using `TelephonyConversationManager`, `StartCellularConversationAction`, `CellularService`, and `Handle`. - **VoIP conversations**: Manage and observe VoIP conversations using `ConversationManager`, `ConversationManagerDelegate`, `ConversationHistoryManager`, and `Conversation`. - **Conversation actions**: Perform actions on conversations such as `EndConversationAction`, `JoinConversationAction`, `MergeConversationAction`, `MuteConversationAction`, `PauseConversationAction`, `PlayToneAction`, `SetTranslatingAction`, `StartConversationAction`, and `UnmergeConversationAction`. ``` -------------------------------- ### Define ConversationAction Class Source: https://developer.apple.com/documentation/livecommunicationkit/conversationaction Defines the ConversationAction class, which represents an action within a conversation. This class is available on iOS, iPadOS, Mac Catalyst, visionOS, and watchOS starting from version 17.4. ```swift class ConversationAction ``` -------------------------------- ### Instance Property: handles Source: https://developer.apple.com/documentation/livecommunicationkit/startconversationaction/handles Retrieves the handles of all remote members who receive an invite to join the conversation. ```APIDOC ## Instance Property: handles ### Description The handles of all remote members who receive an invite to join the conversation. ### Method GET ### Endpoint N/A (Instance Property) ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None ### Request Example ``` // Accessing the handles property on a LiveCommunicationKit instance let invitedHandles = liveCommunicationKitInstance.handles ``` ### Response #### Success Response (200) - **handles** ([Handle]) - An array of Handle objects representing the invited remote members. #### Response Example ```json { "handles": [ { "type": "email", "value": "member1@example.com" }, { "type": "phoneNumber", "value": "+1234567890" } ] } ``` ``` -------------------------------- ### Handle Structure Source: https://developer.apple.com/documentation/livecommunicationkit/handle Details about the Handle structure, including its creation, type, and attributes. ```APIDOC ## Handle A way to reach a participant, such as a phone number or email address. ### Topics #### Creation `init(type: Handle.Kind, value: String, displayName: String?)` Creates a new handle that identifies a participant in a conversation. #### Type `var type: Handle.Kind` The type of the handle; for example a phone number or email address. `enum Kind` Values that define the handle that identifies a participant in a conversation. #### Attributes `var displayName: String` The name for a participant in a conversation that appears in the conversation UI. `var value: String` The raw value of the handle. ### Relationships #### Conforms To * `Decodable` * `Encodable` * `Equatable` * `Hashable` * `Sendable` * `SendableMetatype` ``` -------------------------------- ### ConversationManager - perform(_:) Source: https://developer.apple.com/documentation/livecommunicationkit/conversationmanager/perform%28_%3A%29 Asynchronously performs a series of actions for a given conversation using the ConversationManager. ```APIDOC ## POST /websites/developer_apple_livecommunicationkit/perform ### Description Tells the conversation manager to asynchronously perform actions for a conversation. ### Method POST ### Endpoint /websites/developer_apple_livecommunicationkit/perform ### Parameters #### Request Body - **actions** (array[ConversationAction]) - Required - An array of actions to perform for a conversation. ### Request Example ```json { "actions": [ { "type": "sendMessage", "content": "Hello!" } ] } ``` ### Response #### Success Response (200) - **status** (string) - Indicates the success of the operation. #### Response Example ```json { "status": "success" } ``` ### See Also - `func invalidate()` - Invalidates the conversation manager, ends all conversations, and fails all pending conversation actions. ``` -------------------------------- ### Access Conversation Participant Handles (Swift) Source: https://developer.apple.com/documentation/livecommunicationkit/conversationhistorymanager/recentconversation/handles Retrieves the handles of a conversation's participants. This property is an array of Handle objects and is available on iOS, iPadOS, and Mac Catalyst starting from version 26.0. ```swift let handles: [Handle] ``` -------------------------------- ### Mark Conversation as Read in Swift Source: https://developer.apple.com/documentation/livecommunicationkit/conversationhistorymanager/markconversationasread%28_%3A%29 Marks a specific recent conversation as read using the ConversationHistoryManager. This asynchronous method can throw errors and is available on iOS, iPadOS, and Mac Catalyst starting from version 26.0. ```swift final func markConversationAsRead(_ recentConversation: ConversationHistoryManager.RecentConversation) async throws ``` -------------------------------- ### Declare ConversationManager Class - Swift Source: https://developer.apple.com/documentation/livecommunicationkit/conversationmanager Declares the ConversationManager class, an interface for managing and observing VoIP conversations. This class is available on iOS, iPadOS, Mac Catalyst, visionOS, and watchOS starting from version 17.4. ```swift final class ConversationManager ``` -------------------------------- ### Swift Initializer: ConversationManager.Configuration with Audio Translation Source: https://developer.apple.com/documentation/livecommunicationkit/conversationmanager/configuration-swift Initializes a new ConversationManager.Configuration object, allowing for the specification of audio translation support. Requires parameters for ringtone, icon data, conversation group limits, recency inclusion, video support, handle types, and audio translation. ```swift init(ringtoneName: String?, iconTemplateImageData: Data?, maximumConversationGroups: Int, maximumConversationsPerConversationGroup: Int, includesConversationInRecents: Bool, supportsVideo: Bool, supportedHandleTypes: Set, supportsAudioTranslation: Bool) ``` -------------------------------- ### Instance Method: fulfill(dateEnded:) Source: https://developer.apple.com/documentation/livecommunicationkit/endconversationaction/fulfill%28dateended%3A%29 Indicates that the conversation was successfully ended for the local member. This method is available on iOS, iPadOS, Mac Catalyst, visionOS, and watchOS starting from version 17.4. ```APIDOC ## Instance Method: fulfill(dateEnded:) ### Description Indicates that conversation was successfully ended for the local member. ### Method Instance Method ### Endpoint N/A (Instance Method) ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None ### Request Example ```swift // Example usage (conceptual, as this is an instance method) let conversationKit = LiveCommunicationKit() conversationKit.fulfill(dateEnded: Date()) ``` ### Response #### Success Response N/A (Instance Method) #### Response Example N/A (Instance Method) ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None ### Parameters #### `dateEnded` (Date) - Required The date when the conversation ended. ### Request Example ```swift // Example of calling the method let endedDate = Date() // Assuming 'self' is an instance of a class conforming to the relevant protocol self.fulfill(dateEnded: endedDate) ``` ### Response #### Success Response (200) N/A (This is a method call, not an API endpoint response) #### Response Example N/A ``` -------------------------------- ### Instance Method: fulfill() Source: https://developer.apple.com/documentation/livecommunicationkit/conversationaction/fulfill%28%29 Reports that the action was successful. This method is available on iOS 17.4+, iPadOS 17.4+, Mac Catalyst 17.4+, visionOS 1.1+, and watchOS 10.4+. ```APIDOC ## Instance Method: fulfill() ### Description Reports that the action was successful. ### Method `final func fulfill()` ### Endpoint N/A (Instance Method) ### Parameters None ### Request Example N/A (Instance Method) ### Response N/A (Instance Method) ### See Also * `func fail()` - Reports that performing the action failed. ``` -------------------------------- ### Initialize LiveCommunicationKit Conversation Source: https://developer.apple.com/documentation/livecommunicationkit/conversation/update/init%28localmember%3Amembers%3Aactiveremotemembers%3Acapabilities%3A%29 Initializes a LiveCommunicationKit Conversation object with details about local and remote participants, and the conversation's capabilities. This initializer is crucial for setting up or updating the state of a communication session. ```swift init( localMember: Handle? = nil, members: Set? = nil, activeRemoteMembers: Set? = nil, capabilities: Conversation.Capabilities? = nil ) ``` -------------------------------- ### Get Conversation UUID (Swift) Source: https://developer.apple.com/documentation/livecommunicationkit/conversation/uuid Retrieves the unique identifier for a LiveCommunicationKit conversation. This property is available on iOS 17.4+, iPadOS 17.4+, Mac Catalyst 17.4+, visionOS 1.1+, and watchOS 10.4+. ```swift final let uuid: UUID ``` -------------------------------- ### Access StartConversationAction Attributes Source: https://developer.apple.com/documentation/livecommunicationkit/startconversationaction Provides access to the handles of remote participants invited to the conversation and a boolean indicating if the conversation is video-enabled. These attributes are essential for understanding the state and participants of an ongoing or initiated conversation. ```swift let handles: [Handle] let isVideo: Bool ``` -------------------------------- ### Initialize PlayToneAction - Swift Source: https://developer.apple.com/documentation/livecommunicationkit/playtoneaction Initializes a PlayToneAction object to play a sequence of tones representing keypad input. This initializer requires the conversation's unique identifier, the tapped digits, and the specific tone to be played. ```swift init(conversationUUID: UUID, digits: String, tone: PlayToneAction.Tone) ``` -------------------------------- ### Declare TelephonyConversationManager Class Source: https://developer.apple.com/documentation/livecommunicationkit/telephonyconversationmanager Declares the final class TelephonyConversationManager, which is part of the LiveCommunicationKit framework for initiating cellular network conversations. This class is available on iOS, iPadOS, and Mac Catalyst starting from version 26.0. ```swift final class TelephonyConversationManager ``` -------------------------------- ### Define JoinConversationAction Class Source: https://developer.apple.com/documentation/livecommunicationkit/joinconversationaction Defines the JoinConversationAction class, a final class intended for joining incoming conversations. This class is available on iOS, iPadOS, Mac Catalyst, visionOS, and watchOS starting from version 17.4 (or 1.1 for visionOS). ```swift final class JoinConversationAction ``` -------------------------------- ### ConversationManager.Configuration Initializer Source: https://developer.apple.com/documentation/livecommunicationkit/conversationmanager/configuration-swift.struct/init%28ringtonename%3Aicontemplateimagedata%3Amaximumconversationgroups%3Amaximumconversationsperconversationgroup%3Aincludesconversationinrecents%3Asupportsvideo%3Asupportedhandletypes%3A%29 Initializes a new configuration for a conversation manager with detailed settings for ringtones, icons, conversation limits, and media support. ```APIDOC ## Initializer: ConversationManager.Configuration ### Description Creates a new configuration for a conversation manager, allowing customization of various aspects like ringtones, icon images, conversation group limits, and media type support (audio/video). ### Method Initializer ### Endpoint N/A (This is an initializer for a class) ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None ### Request Example ```swift let configuration = ConversationManager.Configuration( ringtoneName: "my_custom_ringtone", iconTemplateImageData: nil, // Provide PNG data if available maximumConversationGroups: 10, maximumConversationsPerConversationGroup: 5, includesConversationInRecents: true, supportsVideo: true, supportedHandleTypes: [.email, .phoneNumber] ) ``` ### Response #### Success Response (200) N/A (Initializers do not return HTTP responses) #### Response Example N/A ### Parameters Details - **`ringtoneName`** (String?) - The name of the sound resource in the app bundle for your app’s ringtone. - **`iconTemplateImageData`** (Data?) - The PNG data for the icon image of your app. - **`maximumConversationGroups`** (Int) - The maximum number of conversation groups. - **`maximumConversationsPerConversationGroup`** (Int) - The maximum number of conversations per conversation group. - **`includesConversationInRecents`** (Bool) - A Boolean value that indicates whether your app includes a conversation in the system’s Recents list after the conversation ends. - **`supportsVideo`** (Bool) - A Boolean value that indicates whether your app supports video in addition to audio. - **`supportedHandleTypes`** (Set) - The supported handle types (e.g., email, phone number). ``` -------------------------------- ### Conversation Class Overview Source: https://developer.apple.com/documentation/livecommunicationkit/conversation Provides details about the Conversation class, its properties, and states. ```APIDOC ## Class Conversation A type that describes a video or audio conversation. ### Properties - **localMember** (`Handle?`) - The handle that identifies the local participant to remote participants. - **state** (`Conversation.State`) - The current state of the conversation. - **uuid** (`UUID`) - The unique identifier for a conversation. ### Enums - **State**: Values that describe the current state of a conversation. - **Event**: Values that tell the system what happened during a conversation. - **EndedReason**: Values that describe why a conversation ended. ### Structs - **Update**: A type that describes new, changed, or deleted capabilities and attributes of a conversation. - **Capabilities**: A type that describes capabilities of a conversation. ### Conforms To - `Copyable` - `CustomDebugStringConvertible` - `Escapable` - `Observable` - `Sendable` - `SendableMetatype` ``` -------------------------------- ### Swift: Conversation Duration Property Source: https://developer.apple.com/documentation/livecommunicationkit/conversationhistorymanager/recentconversation/duration The 'duration' property represents the length of a conversation in seconds, measured from when the system successfully connected all participants. This property is available on iOS, iPadOS, and Mac Catalyst starting from version 26.0. ```swift let duration: TimeInterval ``` -------------------------------- ### ConversationManagerDelegate Methods Source: https://developer.apple.com/documentation/livecommunicationkit/conversationmanagerdelegate This section outlines the methods available for the ConversationManagerDelegate protocol, categorized by their functionality. ```APIDOC ## ConversationManagerDelegate Protocol Methods for managing conversations and receiving VoIP conversation updates. ### Observing the conversation manager `func conversationManagerDidBegin(ConversationManager)` **Description**: Tells the delegate that your app has started a conversation manager. **Required**: Yes `func conversationManagerDidReset(ConversationManager)` **Description**: Tells the delegate that the app has reset the conversation manager. **Required**: Yes ### Receiving status updates `func conversationManager(ConversationManager, conversationChanged: Conversation)` **Description**: Tells the delegate that a conversation changed. **Required**: Yes `func conversationManager(ConversationManager, didActivate: AVAudioSession)` **Description**: Tells the delegate that the app activated the conversation’s audio session. **Required**: Yes `func conversationManager(ConversationManager, didDeactivate: AVAudioSession)` **Description**: Tells the delegate that the app deactivated a conversation’s audio session. **Required**: Yes ### Performing actions `func conversationManager(ConversationManager, perform: ConversationAction)` **Description**: Tells the delegate that the system requires a conversation action. **Required**: Yes `func conversationManager(ConversationManager, timedOutPerforming: ConversationAction)` **Description**: Tells the delegate that a conversation action wasn’t completed and timed out. **Required**: Yes ``` -------------------------------- ### Get ConversationHistoryManager Shared Instance (Swift) Source: https://developer.apple.com/documentation/livecommunicationkit/conversationhistorymanager/sharedinstance Retrieves the singleton instance of `ConversationHistoryManager`. This instance is used to manage conversation history within the LiveCommunicationKit framework. It is available on iOS 26.0+, iPadOS 26.0+, and Mac Catalyst. ```swift static let sharedInstance: ConversationHistoryManager ``` -------------------------------- ### ConversationManager Initialization Source: https://developer.apple.com/documentation/livecommunicationkit/conversationmanager Provides details on how to create and configure a new ConversationManager instance. ```APIDOC ## Initializing ConversationManager ### Description Creates a new conversation manager with a given conversation configuration. ### Method `convenience init(configuration: ConversationManager.Configuration)` ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body - **configuration** (ConversationManager.Configuration) - Required - The configuration of a conversation manager. ### Request Example ```swift let configuration = ConversationManager.Configuration(/* ... */) let manager = ConversationManager(configuration: configuration) ``` ### Response #### Success Response (200) N/A (Initializers do not return a value in this context). #### Response Example N/A ``` -------------------------------- ### Declare PauseConversationAction Class (Swift) Source: https://developer.apple.com/documentation/livecommunicationkit/pauseconversationaction Declares the PauseConversationAction class, a fundamental component for managing conversation media streams. This class is available on iOS, iPadOS, Mac Catalyst, visionOS, and watchOS starting from version 17.4 (or 1.1 for visionOS). ```swift final class PauseConversationAction ``` -------------------------------- ### Handle.Kind Cases Source: https://developer.apple.com/documentation/livecommunicationkit/handle/kind Represents the specific types of handles that can identify a participant. These include an email address, a phone number, or an unspecified generic type. These cases are fundamental to distinguishing how a participant is referenced. ```swift case emailAddress case phoneNumber case generic ``` -------------------------------- ### Define StartCellularConversationAction Structure Source: https://developer.apple.com/documentation/livecommunicationkit/startcellularconversationaction Defines the structure for the StartCellularConversationAction, which is used to initiate a cellular conversation. This action leverages the system's default calling application for routing. ```swift struct StartCellularConversationAction ``` -------------------------------- ### Declare MuteConversationAction Class (Swift) Source: https://developer.apple.com/documentation/livecommunicationkit/muteconversationaction Declares the MuteConversationAction class, a type representing an action to mute or unmute a conversation. This class is part of the LiveCommunicationKit framework and is available on iOS, iPadOS, Mac Catalyst, visionOS, and watchOS starting from version 17.4. ```swift final class MuteConversationAction ``` -------------------------------- ### StartConversationAction Source: https://developer.apple.com/documentation/livecommunicationkit/startconversationaction Represents an action to initiate an outgoing conversation, causing remote participants' devices to ring. ```APIDOC ## Class: StartConversationAction ### Description An action that starts an outgoing conversation and causes the devices of a remote participant to ring. ### Initializer #### `init(conversationUUID: UUID, handles: [Handle], isVideo: Bool)` Creates an action that starts an outgoing conversation. ### Attributes #### `handles: [Handle]` The handles of all remote members who receive an invite to join the conversation. #### `isVideo: Bool` A value that specifies if the conversation contains a video stream. ### Methods #### `fulfill(dateStarted: Date)` Indicates that a local participant successfully started a conversation. ### Inheritance This class inherits from `ConversationAction`. ``` -------------------------------- ### Perform Conversation Actions (Swift) Source: https://developer.apple.com/documentation/livecommunicationkit/conversationmanager/perform%28_%3A%29 The `perform(_:)` method asynchronously executes a series of actions for a given conversation. It takes an array of `ConversationAction` objects as input and can throw errors if the operation fails. This method is crucial for managing the flow of conversations within the LiveCommunicationKit framework. ```swift final func perform(_ actions: [ConversationAction]) async throws ``` -------------------------------- ### Access Conversation Attributes - Swift Source: https://developer.apple.com/documentation/livecommunicationkit/conversationhistorymanager/recentconversation Provides access to key attributes of a recent conversation, including its start date, direction, duration, participant handles, read status, and overall status. These properties allow for detailed inspection of conversation metadata. ```swift let date: Date let direction: ConversationHistoryManager.RecentConversation.Direction let duration: TimeInterval let handles: [Handle] let isRead: Bool let status: ConversationHistoryManager.RecentConversation.Status ```