Reporting Events Using Kotlin SDK

Events are used to track meaningful user interactions (purchase, add to cart, form completion, rating a product, and so on) for the purpose of behavioral targeting, reporting, and recommendations. Learn more about Events.

Use the DYSdk object to report events to Dynamic Yield.

Required events per vertical

reportPurchaseEvent

Mandatory event for E-commerce sections

Returns DYResult

ParameterData Structure
name: String
Required
String
value: Float
Required
Float
currencyCurrencyType? = null
uniqueTransactionIdString? = null
cart
Required
<CartInnerItem>
CartInnerItem.productIdString
CartInnerItem.quantityInt
CartInnerItem.ItempriceFloat

Example

private suspend fun reportPurchaseEvent() {
        var result = DYSdk.getInstance().events.reportPurchaseEvent(
            "purchase-event",
            value = 5.3f,
            currency = CurrencyType.IDR,
            uniqueTransactionId = "unique-id",
            cart = listOf(
                CartInnerItem(
                    productId = "product-id",
                    quantity = 2u,
                    itemPrice = 8f
                )
            )
        )
        //Check the result status
    }

reportAddToCartEvent

Mandatory event for Section with Ecommerce Vertical

Returns DYResult

ParameterData Structure
name
Required
String
value
Required
Float
currencyCurrencyType? = null
quantity
Required
Int
productId
Required
String
cart<CartInnerItem>? = null
CartInnerItem.productIdString
CartInnerItem.quantityInt
CartInnerItem.ItempriceFloat

Example

private suspend fun reportAddToCartEvent() {
        var result = DYSdk.getInstance().events.reportAddToCartEvent(
            "add-to-cart-event",
            value = 5.3f,
            currency = CurrencyType.IDR,
            productId = "product-id",
            quantity = 3u,
            cart = listOf(
                CartInnerItem(
                    productId = "product-id-red-shirt",
                    quantity = 2u,
                    itemPrice = 8f
                )
            )
        )
        //Check the result status
    }

reportApplicationEvent

Mandatory event for Financial Institute sections

Returns DYResult

ParameterData Structure
name
Required
String
value
Required
Float
currencyCurrencyType? = null
quantity
Required
Int
productId
Required
String
cart<CartInnerItem>? = null
CartInnerItem.productIdString
CartInnerItem.quantityInt
CartInnerItem.ItempriceFloat

Example

private suspend fun reportApplicationEvent() {
        var result = DYSdk.getInstance().events.reportApplicationEvent(
            "application-event",
            value = 5.3f,
            currency = CurrencyType.IDR,
            productId = "application-id",
            quantity = 3u,
            cart = listOf(
                CartInnerItem(
                    productId = "application-id",
                    quantity = 2u,
                    itemPrice = 8f
                )
            )
        )
        //Check the result status
    }

reportSubmissionEvent

Mandatory event for Financial Institute sections

Returns DYResult

ParameterData Structure
name: String
Required
String
value: Float
Required
Float
currencyCurrencyType? = null
uniqueTransactionIdString? = null
cart:
Required
<CartInnerItem>
CartInnerItem.productIdString
CartInnerItem.quantityInt
CartInnerItem.ItempriceFloat

Example

private suspend fun reportSubmissionEvent() {
        var result = DYSdk.getInstance().events.reportSubmissionEvent(
            "submission-event",
            value = 5.3f,
            currency = CurrencyType.IDR,
            uniqueTransactionId = "unique-id",
            cart = listOf(
                CartInnerItem(
                    productId = "product-id",
                    quantity = 2u,
                    itemPrice = 8f
                )
            )
        )
        //Check the result status
    }

Events used for cross-channel identification

reportSignUpEvent

Returns DYResult

ParameterData Structure
name
Required
String
cuidTypeString?
cuidString?=null
secondaryIdentifiers<SecondaryIdentifier>? = null
secondaryIdentifiers.typeString
secondaryIdentifiers.valueString

Example

 private suspend fun reportSignUpEvent() {
        var result = DYSdk.getInstance().events.reportSignUpEvent(
            "sign-in-event",
            cuidType = "email",
            cuid = "cuid",
            secondaryIdentifiers = listOf(
                SecondaryIdentifier(
                    type = "phoneNumber",
                    value = "+972503803434"
                )
            )
        )
        //Check the result status
    }

reportLoginEvent

Returns DYResult

ParameterData Structure
name
Required
String
cuidType
Required
String
cuid
Required
String?=null
secondaryIdentifiers<SecondaryIdentifier>? = null
secondaryIdentifiers.typeString
secondaryIdentifiers.valueString

Example

  private suspend fun reportLoginEvent() {
        var result = DYSdk.getInstance().events.reportLoginEvent(
            "log-in-event",
            cuidType = "email",
            cuid = "cuid",
            secondaryIdentifiers = listOf(
                SecondaryIdentifier(
                    type = "phoneNumber",
                    value = "+972503803434"
                )
            )
        )
        //Check the result status
    }

reportIdentifyUserEvent

Returns DYResult

ParameterData Structure
name
Required
String
cuidType
Required
String
cuidString?=null
secondaryIdentifiers<SecondaryIdentifier>? = null
secondaryIdentifiers.typeString
secondaryIdentifiers.valueString

Example

private suspend fun reportIdentifyUserEvent() {
        var result = DYSdk.getInstance().events.reportIdentifyUserEvent(
            "identify-user-id-event",
            cuidType = "email",
            cuid = "cuid",
            secondaryIdentifiers = listOf(
                SecondaryIdentifier(
                    type = "phoneNumber",
                    value = "+972503803434"
                )
            )
        )
        //Check the result status
    }

reportNewsletterEvent

Returns DYResult

ParameterData Structure
name
Required
String
cuidTypeString?
cuidString?=null
secondaryIdentifiers<SecondaryIdentifier>? = null
secondaryIdentifiers.typeString
secondaryIdentifiers.valueString

Example

    private suspend fun reportNewsletterEvent() {
        var result = DYSdk.getInstance().events.reportNewsletterEvent(
            "news-letter-event",
            cuidType = "email",
            cuid = "cuid",
            secondaryIdentifiers = listOf(
                SecondaryIdentifier(
                    type = "phoneNumber",
                    value = "+972503803434"
                )
            )
        )
        //Check the result status
    }

Additional event schemas

reportRemoveFromCartEvent

Returns DYResult

ParameterData Structure
name
Required
String
value
Required
Float
quantity
Required
int
productId
Required
String
currencyCurrencyType? = null
cart<CartInnerItem>? = null
CartInnerItem.productIdString
CartInnerItem.quantityint
CartInnerItem.ItempriceFloat

Example

    private suspend fun reportRemoveFromCartEvent() {
        var result = DYSdk.getInstance().events.reportRemoveFromCartEvent(
            "submission-event",
            value = 5.3f,
            currency = CurrencyType.IDR,
            productId = "product-id",
            quantity = 1u,
            cart = listOf(
                CartInnerItem(
                    productId = "product-id",
                    quantity = 2u,
                    itemPrice = 8f
                )
            )
        )
        //Check the result status
    }

reportSyncCartEvent

Returns DYResult

ParameterData Structure
name
Required
String
value
Required
Float
currency
Required
CurrencyType? = null
cart<CartInnerItem>? = null
CartInnerItem.productIdString
CartInnerItem.quantityint
CartInnerItem.ItempriceFloat

Example

private suspend fun reportSyncCartEvent() {
        var result = DYSdk.getInstance().events.reportSyncCartEvent(
            "submission-event",
            value = 5.3f,
            currency = CurrencyType.IDR,
            cart = listOf(
                CartInnerItem(
                    productId = "product-id",
                    quantity = 2u,
                    itemPrice = 8f
                )
            )
        )
        //Check the result status
    }

reportMessageOptInEvent

Returns DYResult

ParameterData Structure
name
Required
String
cuidType
Required
CuidType
plainTextEmailString?
externalIdString?

Example

  private suspend fun reportMessageOptInEvent() {
        var result = DYSdk.getInstance().events.reportMessageOptInEvent(
            "message-opt-in-event",
            cuidType = CuidType.EMAIL,
            plainTextEmail = "a@a",
            externalId = "externalId"
        )
        //Check the result status
    }

reportMessageOptOutEvent

Returns DYResult

ParameterData Structure
name
Required
String
cuidType
Required
CuidType
plainTextEmailString?
externalIdString?

Example

 private suspend fun reportMessageOptOutEvent() {
        var result = DYSdk.getInstance().events.reportMessageOptInEvent(
            "message-opt-out-event",
            cuidType = CuidType.EMAIL,
            plainTextEmail = "a@a",
            externalId = "externalId"
        )
        //Check the result status
    }

reportInformAffinityEvent

Returns DYResult

ParameterData Structure
name
Required
String
sourceString? = null
data
Required
<InformAffinityData>

Example

 private suspend fun reportInformAffinityEvent() {
        var result = DYSdk.getInstance().events.reportInformAffinityEvent(
            "report-inform-affinity",
            source = "source",
            data = listOf(
                InformAffinityData(
                    attribute = "attribute",
                    listOf("value-1", "value-2")
                )
            ),
        )
        //Check the result status
    }
}

reportAddToWishListEvent

Returns DYResult

ParameterData Structure
name
Required
String
productId
Required
String
sizeString? = null

Example

private suspend fun reportAddToWishListEvent() {
        var result = DYSdk.getInstance().events.reportAddToWishListEvent(
            "add-to-wish-list-event",
            productId = "productId",
            size = "medium"
        )
    }

reportVideoWatchEvent

Returns DYResult

ParameterData Structure
name
Required
String
itemId
Required
String
autoplay
Required
Boolean
progress
Required
VideoProgressType
progressPercent
Required
uint
categories<String>? = null

Example

 private suspend fun reportVideoWatchEvent() {
        var result = DYSdk.getInstance().events.reportVideoWatchEvent(
            "report-video-watch-event",
            itemId = "itemId",
            categories = listOf("category-1", "category-2"),
            autoplay = true,
            progress = VideoProgressType.VIDEO_PROGRESS,
            progressPercent = 3u
        )
        //Check the result status
    }

reportKeywordSearchEvent

Returns DYResult

ParameterData Structure
name
Required
String
keywords
Required
String

Example

private suspend fun reportKeywordSearchEvent() {
        var result = DYSdk.getInstance().events.reportKeywordSearchEvent(
            "keyword-search-event",
            keywords = "search"
        )
        //Check the result status
    }

reportChangeAttributesEvent

Returns DYResult

ParameterData Structure
name
Required
String
attributeType
Required
String
attributeValue
Required
String

Example

 private suspend fun reportChangeAttributesEvent() {
        var result = DYSdk.getInstance().events.reportChangeAttributesEvent(
            "change-attribute-event",
            attributeType = "price",
            attributeValue = "5"
        )
        //Check the result status
    }

reportFilterItemsEvent

Returns DYResult

ParameterData Structure
name
Required
String
filterType
Required
String
filterStringValueString? = null
filterNumericValue
Required
int?=null

Example

private suspend fun reportFilterItemsEvent() {
        var result = DYSdk.getInstance().events.reportFilterItemsEvent(
            "filter-items-event",
            filterType = "someType",
            filterStringValue = "value"
        )
        //Check the result status
    }

reportSortItemsEvent

Returns DYResult

ParameterData Structure
name
Required
String
sortBy
Required
String
sortOrder
Required
SortOrderType

Example

  private suspend fun reportSortItemsEvent() {
        var result = DYSdk.getInstance().events.reportSortItemsEvent(
            "sort-items-event",
            sortBy = "price",
            sortOrder = SortOrderType.ASC
        )
        //Check the result status
    }

reportPromoCodeEnterEvent

Returns DYResult

ParameterData Structure
name
Required
String
code
Required
Float

Example

private suspend fun reportSingleEvent() {
    var result = DYSdk.getInstance().events.reportPromoCodeEnterEvent(
        "promoCodeEvent",
        code = "code-example"
    )
    when (result.status) {
        ResultStatus.SUCCESS -> {
            //Event reported successfully
        }
        ResultStatus.WARNINGS -> {
            //Event reported successfully with warnings received from the server
            result.warnings?.let { warnings ->
            }
        }
        ResultStatus.ERROR -> {
            //Failed
            result.error?.let {
                //Handle the error
            }
        }
    }
}

Custom Events

Use custom events to report events that are not defined in the SDK but are significant to your business.

reportCustomEvents

Returns DYResult

ParameterData Structure
name
Required
properties
Required
CustomProperties

Note:To create your own custom event, create a class that inherits from the CustomProperties class and use the @Serializable annotation (org.jetbrains.kotlinx:kotlinx-serialization-json). After that, register your new class. after doing do you can then report your custom event.

Example

@Serializable 
class CustomEventProperties(val color: String, val size: Int): 
    CustomProperties(dyType = "CustomEventProperties-id")

//register your new class
DYSdk.getInstance().choose.encodingManager.addCustomPropertiesSerializer(CustomEventProperties::class, CustomEventProperties.serializer())

private suspend fun reportCustomEvent() { 
    var result = DYSdk.getInstance().events.reportCustomEvents( 
        "custom-event-name", 
        CustomEventProperties(color = "red", size = 38) 
    ) 
    when (result.status) { 
        ResultStatus.SUCCESS -> { 
            //Event reported successfully
        } 
        ResultStatus.WARNINGS -> { 
            //Event reported successfully with warnings received from the server
            result.warnings?.let { warnings -> 
            } 
        } 
        ResultStatus.ERROR -> { 
            //Failed 
            result.error?.let { 
                //Handle the error 
            } 
        } 
    } 
} 

Reporting multiple events

reportEvents

Returns DYResult

ParameterData Structure
DYEvent
Required

Example

private suspend fun reportMultiEvent() {
    var result = DYSdk.getInstance().events.reportEvents(
        PredefinedEvent(
            "promo-code-event",
            PromoCodeEnterEventProperties(code = "code-example")
        ),
        PredefinedEvent(
            "keyword-search-event",
            KeywordSearchEventProperties(keywords = "word-example")
        )
    )
}