Class UserEventServiceAsyncClient (0.10.13)

UserEventServiceAsyncClient(*, credentials: typing.Optional[google.auth.credentials.Credentials] = None, transport: typing.Optional[typing.Union[str, google.cloud.recommendationengine_v1beta1.services.user_event_service.transports.base.UserEventServiceTransport, typing.Callable[[...], google.cloud.recommendationengine_v1beta1.services.user_event_service.transports.base.UserEventServiceTransport]]] = 'grpc_asyncio', client_options: typing.Optional[google.api_core.client_options.ClientOptions] = None, client_info: google.api_core.gapic_v1.client_info.ClientInfo = <google.api_core.gapic_v1.client_info.ClientInfo object>)

Service for ingesting end user actions on the customer website.

Properties

api_endpoint

Return the API endpoint used by the client instance.

Returns
Type Description
str The API endpoint used by the client instance.

transport

Returns the transport used by the client instance.

Returns
Type Description
UserEventServiceTransport The transport used by the client instance.

universe_domain

Return the universe domain used by the client instance.

Returns
Type Description
str The universe domain used by the client instance.

Methods

UserEventServiceAsyncClient

UserEventServiceAsyncClient(*, credentials: typing.Optional[google.auth.credentials.Credentials] = None, transport: typing.Optional[typing.Union[str, google.cloud.recommendationengine_v1beta1.services.user_event_service.transports.base.UserEventServiceTransport, typing.Callable[[...], google.cloud.recommendationengine_v1beta1.services.user_event_service.transports.base.UserEventServiceTransport]]] = 'grpc_asyncio', client_options: typing.Optional[google.api_core.client_options.ClientOptions] = None, client_info: google.api_core.gapic_v1.client_info.ClientInfo = <google.api_core.gapic_v1.client_info.ClientInfo object>)

Instantiates the user event service async client.

Parameters
Name Description
credentials Optional[google.auth.credentials.Credentials]

The authorization credentials to attach to requests. These credentials identify the application to the service; if none are specified, the client will attempt to ascertain the credentials from the environment.

transport Optional[Union[str,UserEventServiceTransport,Callable[..., UserEventServiceTransport]]]

The transport to use, or a Callable that constructs and returns a new transport to use. If a Callable is given, it will be called with the same set of initialization arguments as used in the UserEventServiceTransport constructor. If set to None, a transport is chosen automatically.

client_options Optional[Union[google.api_core.client_options.ClientOptions, dict]]

Custom options for the client. 1. The api_endpoint property can be used to override the default endpoint provided by the client when transport is not explicitly provided. Only if this property is not set and transport was not explicitly provided, the endpoint is determined by the GOOGLE_API_USE_MTLS_ENDPOINT environment variable, which have one of the following values: "always" (always use the default mTLS endpoint), "never" (always use the default regular endpoint) and "auto" (auto-switch to the default mTLS endpoint if client certificate is present; this is the default value). 2. If the GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable is "true", then the client_cert_source property can be used to provide a client certificate for mTLS transport. If not provided, the default SSL client certificate will be used if present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not set, no client certificate will be used. 3. The universe_domain property can be used to override the default "googleapis.com" universe. Note that api_endpoint property still takes precedence; and universe_domain is currently not supported for mTLS.

client_info google.api_core.gapic_v1.client_info.ClientInfo

The client info used to send a user-agent string along with API requests. If None, then default info will be used. Generally, you only need to set this if you're developing your own client library.

Exceptions
Type Description
google.auth.exceptions.MutualTlsChannelError If mutual TLS transport creation failed for any reason.

collect_user_event

collect_user_event(
    request: typing.Optional[
        typing.Union[
            google.cloud.recommendationengine_v1beta1.types.user_event_service.CollectUserEventRequest,
            dict,
        ]
    ] = None,
    *,
    parent: typing.Optional[str] = None,
    user_event: typing.Optional[str] = None,
    uri: typing.Optional[str] = None,
    ets: typing.Optional[int] = None,
    retry: typing.Optional[
        typing.Union[
            google.api_core.retry.retry_unary_async.AsyncRetry,
            google.api_core.gapic_v1.method._MethodDefault,
        ]
    ] = _MethodDefault._DEFAULT_VALUE,
    timeout: typing.Union[float, object] = _MethodDefault._DEFAULT_VALUE,
    metadata: typing.Sequence[typing.Tuple[str, str]] = ()
) -> google.api.httpbody_pb2.HttpBody

Writes a single user event from the browser. This uses a GET request to due to browser restriction of POST-ing to a 3rd party domain.

This method is used only by the Recommendations AI JavaScript pixel. Users should not call this method directly.

# This snippet has been automatically generated and should be regarded as a
# code template only.
# It will require modifications to work:
# - It may require correct/in-range values for request initialization.
# - It may require specifying regional endpoints when creating the service
#   client as shown in:
#   https://googleapis.dev/python/google-api-core/latest/client_options.html
from google.cloud import recommendationengine_v1beta1

async def sample_collect_user_event():
    # Create a client
    client = recommendationengine_v1beta1.UserEventServiceAsyncClient()

    # Initialize request argument(s)
    request = recommendationengine_v1beta1.CollectUserEventRequest(
        parent="parent_value",
        user_event="user_event_value",
    )

    # Make the request
    response = await client.collect_user_event(request=request)

    # Handle the response
    print(response)
Parameters
Name Description
request Optional[Union[google.cloud.recommendationengine_v1beta1.types.CollectUserEventRequest, dict]]

The request object. Request message for CollectUserEvent method.

parent str

Required. The parent eventStore name, such as projects/1234/locations/global/catalogs/default_catalog/eventStores/default_event_store. This corresponds to the parent field on the request instance; if request is provided, this should not be set.

user_event str

Required. URL encoded UserEvent proto. This corresponds to the user_event field on the request instance; if request is provided, this should not be set.

uri str

Optional. The url including cgi-parameters but excluding the hash fragment. The URL must be truncated to 1.5K bytes to conservatively be under the 2K bytes. This is often more useful than the referer url, because many browsers only send the domain for 3rd party requests. This corresponds to the uri field on the request instance; if request is provided, this should not be set.

ets int

Optional. The event timestamp in milliseconds. This prevents browser caching of otherwise identical get requests. The name is abbreviated to reduce the payload bytes. This corresponds to the ets field on the request instance; if request is provided, this should not be set.

retry google.api_core.retry_async.AsyncRetry

Designation of what errors, if any, should be retried.

timeout float

The timeout for this request.

metadata Sequence[Tuple[str, str]]

Strings which should be sent along with the request as metadata.

Returns
Type Description
google.api.httpbody_pb2.HttpBody Message that represents an arbitrary HTTP body. It should only be used for payload formats that can't be represented as JSON, such as raw binary or an HTML page. This message can be used both in streaming and non-streaming API methods in the request as well as the response. It can be used as a top-level request field, which is convenient if one wants to extract parameters from either the URL or HTTP template into the request fields and also want access to the raw HTTP body. Example: message GetResourceRequest { // A unique request id. string request_id = 1; // The raw HTTP body is bound to this field. google.api.HttpBody http_body = 2; } service ResourceService { rpc GetResource(GetResourceRequest) returns (google.api.HttpBody); rpc UpdateResource(google.api.HttpBody) returns (google.protobuf.Empty); } Example with streaming methods: service CaldavService { rpc GetCalendar(stream google.api.HttpBody) returns (stream google.api.HttpBody); rpc UpdateCalendar(stream google.api.HttpBody) returns (stream google.api.HttpBody); } Use of this type only changes how the request and response bodies are handled, all other features will continue to work unchanged.

common_billing_account_path

common_billing_account_path(billing_account: str) -> str

Returns a fully-qualified billing_account string.

common_folder_path

common_folder_path(folder: str) -> str

Returns a fully-qualified folder string.

common_location_path

common_location_path(project: str, location: str) -> str

Returns a fully-qualified location string.

common_organization_path

common_organization_path(organization: str) -> str

Returns a fully-qualified organization string.

common_project_path

common_project_path(project: str) -> str

Returns a fully-qualified project string.

event_store_path

event_store_path(
    project: str, location: str, catalog: str, event_store: str
) -> str

Returns a fully-qualified event_store string.

from_service_account_file

from_service_account_file(filename: str, *args, **kwargs)

Creates an instance of this client using the provided credentials file.

Parameter
Name Description
filename str

The path to the service account private key json file.

Returns
Type Description
UserEventServiceAsyncClient The constructed client.

from_service_account_info

from_service_account_info(info: dict, *args, **kwargs)

Creates an instance of this client using the provided credentials info.

Parameter
Name Description
info dict

The service account private key info.

Returns
Type Description
UserEventServiceAsyncClient The constructed client.

from_service_account_json

from_service_account_json(filename: str, *args, **kwargs)

Creates an instance of this client using the provided credentials file.

Parameter
Name Description
filename str

The path to the service account private key json file.

Returns
Type Description
UserEventServiceAsyncClient The constructed client.

get_mtls_endpoint_and_cert_source

get_mtls_endpoint_and_cert_source(
    client_options: typing.Optional[
        google.api_core.client_options.ClientOptions
    ] = None,
)

Return the API endpoint and client cert source for mutual TLS.

The client cert source is determined in the following order: (1) if GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable is not "true", the client cert source is None. (2) if client_options.client_cert_source is provided, use the provided one; if the default client cert source exists, use the default one; otherwise the client cert source is None.

The API endpoint is determined in the following order: (1) if client_options.api_endpoint if provided, use the provided one. (2) if GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable is "always", use the default mTLS endpoint; if the environment variable is "never", use the default API endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise use the default API endpoint.

More details can be found at https://google.aip.dev/auth/4114.

Parameter
Name Description
client_options google.api_core.client_options.ClientOptions

Custom options for the client. Only the api_endpoint and client_cert_source properties may be used in this method.

Exceptions
Type Description
google.auth.exceptions.MutualTLSChannelError If any errors happen.
Returns
Type Description
Tuple[str, Callable[[], Tuple[bytes, bytes]]] returns the API endpoint and the client cert source to use.

get_transport_class

get_transport_class(
    label: typing.Optional[str] = None,
) -> typing.Type[
    google.cloud.recommendationengine_v1beta1.services.user_event_service.transports.base.UserEventServiceTransport
]

Returns an appropriate transport class.

Parameter
Name Description
label typing.Optional[str]

The name of the desired transport. If none is provided, then the first transport in the registry is used.

import_user_events

import_user_events(
    request: typing.Optional[
        typing.Union[
            google.cloud.recommendationengine_v1beta1.types.import_.ImportUserEventsRequest,
            dict,
        ]
    ] = None,
    *,
    parent: typing.Optional[str] = None,
    request_id: typing.Optional[str] = None,
    input_config: typing.Optional[
        google.cloud.recommendationengine_v1beta1.types.import_.InputConfig
    ] = None,
    errors_config: typing.Optional[
        google.cloud.recommendationengine_v1beta1.types.import_.ImportErrorsConfig
    ] = None,
    retry: typing.Optional[
        typing.Union[
            google.api_core.retry.retry_unary_async.AsyncRetry,
            google.api_core.gapic_v1.method._MethodDefault,
        ]
    ] = _MethodDefault._DEFAULT_VALUE,
    timeout: typing.Union[float, object] = _MethodDefault._DEFAULT_VALUE,
    metadata: typing.Sequence[typing.Tuple[str, str]] = ()
) -> google.api_core.operation_async.AsyncOperation

Bulk import of User events. Request processing might be synchronous. Events that already exist are skipped. Use this method for backfilling historical user events.

Operation.response is of type ImportResponse. Note that it is possible for a subset of the items to be successfully inserted. Operation.metadata is of type ImportMetadata.

# This snippet has been automatically generated and should be regarded as a
# code template only.
# It will require modifications to work:
# - It may require correct/in-range values for request initialization.
# - It may require specifying regional endpoints when creating the service
#   client as shown in:
#   https://googleapis.dev/python/google-api-core/latest/client_options.html
from google.cloud import recommendationengine_v1beta1

async def sample_import_user_events():
    # Create a client
    client = recommendationengine_v1beta1.UserEventServiceAsyncClient()

    # Initialize request argument(s)
    request = recommendationengine_v1beta1.ImportUserEventsRequest(
        parent="parent_value",
    )

    # Make the request
    operation = client.import_user_events(request=request)

    print("Waiting for operation to complete...")

    response = (await operation).result()

    # Handle the response
    print(response)
Parameters
Name Description
request Optional[Union[google.cloud.recommendationengine_v1beta1.types.ImportUserEventsRequest, dict]]

The request object. Request message for the ImportUserEvents request.

parent str

Required. projects/1234/locations/global/catalogs/default_catalog/eventStores/default_event_store This corresponds to the parent field on the request instance; if request is provided, this should not be set.

request_id str

Optional. Unique identifier provided by client, within the ancestor dataset scope. Ensures idempotency for expensive long running operations. Server-generated if unspecified. Up to 128 characters long. This is returned as google.longrunning.Operation.name in the response. Note that this field must not be set if the desired input config is catalog_inline_source. This corresponds to the request_id field on the request instance; if request is provided, this should not be set.

input_config InputConfig

Required. The desired input location of the data. This corresponds to the input_config field on the request instance; if request is provided, this should not be set.

errors_config ImportErrorsConfig

Optional. The desired location of errors incurred during the Import. This corresponds to the errors_config field on the request instance; if request is provided, this should not be set.

retry google.api_core.retry_async.AsyncRetry

Designation of what errors, if any, should be retried.

timeout float

The timeout for this request.

metadata Sequence[Tuple[str, str]]

Strings which should be sent along with the request as metadata.

Returns
Type Description
google.api_core.operation_async.AsyncOperation An object representing a long-running operation. The result type for the operation will be ImportUserEventsResponse Response of the ImportUserEventsRequest. If the long running operation was successful, then this message is returned by the google.longrunning.Operations.response field if the operation was successful.

list_user_events

list_user_events(
    request: typing.Optional[
        typing.Union[
            google.cloud.recommendationengine_v1beta1.types.user_event_service.ListUserEventsRequest,
            dict,
        ]
    ] = None,
    *,
    parent: typing.Optional[str] = None,
    filter: typing.Optional[str] = None,
    retry: typing.Optional[
        typing.Union[
            google.api_core.retry.retry_unary_async.AsyncRetry,
            google.api_core.gapic_v1.method._MethodDefault,
        ]
    ] = _MethodDefault._DEFAULT_VALUE,
    timeout: typing.Union[float, object] = _MethodDefault._DEFAULT_VALUE,
    metadata: typing.Sequence[typing.Tuple[str, str]] = ()
) -> (
    google.cloud.recommendationengine_v1beta1.services.user_event_service.pagers.ListUserEventsAsyncPager
)

Gets a list of user events within a time range, with potential filtering.

# This snippet has been automatically generated and should be regarded as a
# code template only.
# It will require modifications to work:
# - It may require correct/in-range values for request initialization.
# - It may require specifying regional endpoints when creating the service
#   client as shown in:
#   https://googleapis.dev/python/google-api-core/latest/client_options.html
from google.cloud import recommendationengine_v1beta1

async def sample_list_user_events():
    # Create a client
    client = recommendationengine_v1beta1.UserEventServiceAsyncClient()

    # Initialize request argument(s)
    request = recommendationengine_v1beta1.ListUserEventsRequest(
        parent="parent_value",
    )

    # Make the request
    page_result = client.list_user_events(request=request)

    # Handle the response
    async for response in page_result:
        print(response)
Parameters
Name Description
request Optional[Union[google.cloud.recommendationengine_v1beta1.types.ListUserEventsRequest, dict]]

The request object. Request message for ListUserEvents method.

parent str

Required. The parent eventStore resource name, such as projects//locations//catalogs/default_catalog/eventStores/default_event_store. This corresponds to the parent field on the request instance; if request is provided, this should not be set.

filter str

Optional. Filtering expression to specify restrictions over returned events. This is a sequence of terms, where each term applies some kind of a restriction to the returned user events. Use this expression to restrict results to a specific time range, or filter events by eventType. eg: eventTime > "2012-04-23T18:25:43.511Z" eventsMissingCatalogItems eventTime<"2012-04-23T18:25:43.511Z" eventType=search We expect only 3 types of fields: :: * eventTime: this can be specified a maximum of 2 times, once with a less than operator and once with a greater than operator. The eventTime restrict should result in one contiguous valid eventTime range. * eventType: only 1 eventType restriction can be specified. * eventsMissingCatalogItems: specififying this will restrict results to events for which catalog items were not found in the catalog. The default behavior is to return only those events for which catalog items were found. Some examples of valid filters expressions: - Example 1: eventTime > "2012-04-23T18:25:43.511Z" eventTime < "2012-04-23T18:30:43.511Z" - Example 2: eventTime > "2012-04-23T18:25:43.511Z" eventType = detail-page-view - Example 3: eventsMissingCatalogItems eventType = search eventTime < "2018-04-23T18:30:43.511Z" - Example 4: eventTime > "2012-04-23T18:25:43.511Z" - Example 5: eventType = search - Example 6: eventsMissingCatalogItems This corresponds to the filter field on the request instance; if request is provided, this should not be set.

retry google.api_core.retry_async.AsyncRetry

Designation of what errors, if any, should be retried.

timeout float

The timeout for this request.

metadata Sequence[Tuple[str, str]]

Strings which should be sent along with the request as metadata.

Returns
Type Description
google.cloud.recommendationengine_v1beta1.services.user_event_service.pagers.ListUserEventsAsyncPager Response message for ListUserEvents method. Iterating over this object will yield results and resolve additional pages automatically.

parse_common_billing_account_path

parse_common_billing_account_path(path: str) -> typing.Dict[str, str]

Parse a billing_account path into its component segments.

parse_common_folder_path

parse_common_folder_path(path: str) -> typing.Dict[str, str]

Parse a folder path into its component segments.

parse_common_location_path

parse_common_location_path(path: str) -> typing.Dict[str, str]

Parse a location path into its component segments.

parse_common_organization_path

parse_common_organization_path(path: str) -> typing.Dict[str, str]

Parse a organization path into its component segments.

parse_common_project_path

parse_common_project_path(path: str) -> typing.Dict[str, str]

Parse a project path into its component segments.

parse_event_store_path

parse_event_store_path(path: str) -> typing.Dict[str, str]

Parses a event_store path into its component segments.

purge_user_events

purge_user_events(
    request: typing.Optional[
        typing.Union[
            google.cloud.recommendationengine_v1beta1.types.user_event_service.PurgeUserEventsRequest,
            dict,
        ]
    ] = None,
    *,
    parent: typing.Optional[str] = None,
    filter: typing.Optional[str] = None,
    force: typing.Optional[bool] = None,
    retry: typing.Optional[
        typing.Union[
            google.api_core.retry.retry_unary_async.AsyncRetry,
            google.api_core.gapic_v1.method._MethodDefault,
        ]
    ] = _MethodDefault._DEFAULT_VALUE,
    timeout: typing.Union[float, object] = _MethodDefault._DEFAULT_VALUE,
    metadata: typing.Sequence[typing.Tuple[str, str]] = ()
) -> google.api_core.operation_async.AsyncOperation

Deletes permanently all user events specified by the filter provided. Depending on the number of events specified by the filter, this operation could take hours or days to complete. To test a filter, use the list command first.

# This snippet has been automatically generated and should be regarded as a
# code template only.
# It will require modifications to work:
# - It may require correct/in-range values for request initialization.
# - It may require specifying regional endpoints when creating the service
#   client as shown in:
#   https://googleapis.dev/python/google-api-core/latest/client_options.html
from google.cloud import recommendationengine_v1beta1

async def sample_purge_user_events():
    # Create a client
    client = recommendationengine_v1beta1.UserEventServiceAsyncClient()

    # Initialize request argument(s)
    request = recommendationengine_v1beta1.PurgeUserEventsRequest(
        parent="parent_value",
        filter="filter_value",
    )

    # Make the request
    operation = client.purge_user_events(request=request)

    print("Waiting for operation to complete...")

    response = (await operation).result()

    # Handle the response
    print(response)
Parameters
Name Description
request Optional[Union[google.cloud.recommendationengine_v1beta1.types.PurgeUserEventsRequest, dict]]

The request object. Request message for PurgeUserEvents method.

parent str

Required. The resource name of the event_store under which the events are created. The format is projects/${projectId}/locations/global/catalogs/${catalogId}/eventStores/${eventStoreId} This corresponds to the parent field on the request instance; if request is provided, this should not be set.

filter str

Required. The filter string to specify the events to be deleted. Empty string filter is not allowed. This filter can also be used with ListUserEvents API to list events that will be deleted. The eligible fields for filtering are: - eventType - UserEvent.eventType field of type string. - eventTime - in ISO 8601 "zulu" format. - visitorId - field of type string. Specifying this will delete all events associated with a visitor. - userId - field of type string. Specifying this will delete all events associated with a user. Example 1: Deleting all events in a time range. eventTime > "2012-04-23T18:25:43.511Z" eventTime < "2012-04-23T18:30:43.511Z" Example 2: Deleting specific eventType in time range. eventTime > "2012-04-23T18:25:43.511Z" eventType = "detail-page-view" Example 3: Deleting all events for a specific visitor visitorId = visitor1024 The filtering fields are assumed to have an implicit AND. This corresponds to the filter field on the request instance; if request is provided, this should not be set.

force bool

Optional. The default value is false. Override this flag to true to actually perform the purge. If the field is not set to true, a sampling of events to be deleted will be returned. This corresponds to the force field on the request instance; if request is provided, this should not be set.

retry google.api_core.retry_async.AsyncRetry

Designation of what errors, if any, should be retried.

timeout float

The timeout for this request.

metadata Sequence[Tuple[str, str]]

Strings which should be sent along with the request as metadata.

Returns
Type Description
google.api_core.operation_async.AsyncOperation An object representing a long-running operation. The result type for the operation will be PurgeUserEventsResponse Response of the PurgeUserEventsRequest. If the long running operation is successfully done, then this message is returned by the google.longrunning.Operations.response field.

write_user_event

write_user_event(
    request: typing.Optional[
        typing.Union[
            google.cloud.recommendationengine_v1beta1.types.user_event_service.WriteUserEventRequest,
            dict,
        ]
    ] = None,
    *,
    parent: typing.Optional[str] = None,
    user_event: typing.Optional[
        google.cloud.recommendationengine_v1beta1.types.user_event.UserEvent
    ] = None,
    retry: typing.Optional[
        typing.Union[
            google.api_core.retry.retry_unary_async.AsyncRetry,
            google.api_core.gapic_v1.method._MethodDefault,
        ]
    ] = _MethodDefault._DEFAULT_VALUE,
    timeout: typing.Union[float, object] = _MethodDefault._DEFAULT_VALUE,
    metadata: typing.Sequence[typing.Tuple[str, str]] = ()
) -> google.cloud.recommendationengine_v1beta1.types.user_event.UserEvent

Writes a single user event.

# This snippet has been automatically generated and should be regarded as a
# code template only.
# It will require modifications to work:
# - It may require correct/in-range values for request initialization.
# - It may require specifying regional endpoints when creating the service
#   client as shown in:
#   https://googleapis.dev/python/google-api-core/latest/client_options.html
from google.cloud import recommendationengine_v1beta1

async def sample_write_user_event():
    # Create a client
    client = recommendationengine_v1beta1.UserEventServiceAsyncClient()

    # Initialize request argument(s)
    user_event = recommendationengine_v1beta1.UserEvent()
    user_event.event_type = "event_type_value"
    user_event.user_info.visitor_id = "visitor_id_value"

    request = recommendationengine_v1beta1.WriteUserEventRequest(
        parent="parent_value",
        user_event=user_event,
    )

    # Make the request
    response = await client.write_user_event(request=request)

    # Handle the response
    print(response)
Parameters
Name Description
request Optional[Union[google.cloud.recommendationengine_v1beta1.types.WriteUserEventRequest, dict]]

The request object. Request message for WriteUserEvent method.

parent str

Required. The parent eventStore resource name, such as projects/1234/locations/global/catalogs/default_catalog/eventStores/default_event_store. This corresponds to the parent field on the request instance; if request is provided, this should not be set.

user_event UserEvent

Required. User event to write. This corresponds to the user_event field on the request instance; if request is provided, this should not be set.

retry google.api_core.retry_async.AsyncRetry

Designation of what errors, if any, should be retried.

timeout float

The timeout for this request.

metadata Sequence[Tuple[str, str]]

Strings which should be sent along with the request as metadata.

Returns
Type Description
google.cloud.recommendationengine_v1beta1.types.UserEvent UserEvent captures all metadata information recommendation engine needs to know about how end users interact with customers' website.