# Check for spelling mistakes Source: https://docs.asapp.com/apis/autocompose/check-for-spelling-mistakes post /autocompose/v1/spellcheck/correction Get spelling correction for a message as it is being typed, if there is a misspelling. Only the current word will be corrected, once it's fully typed (so it is recommended to call this endpoint after space characters). # Create a custom response Source: https://docs.asapp.com/apis/autocompose/create-a-custom-response post /autocompose/v1/responses/customs/response Add a single custom response for an agent # Create a message analytic event Source: https://docs.asapp.com/apis/autocompose/create-a-message-analytic-event post /autocompose/v1/conversations/{conversationId}/message-analytic-events To improve the performance of ASAPP suggestions, provide information about the actions performed by the agent while composing a message by creating `message-analytic-events`. These analytic events indicate which AutoCompose functionality was used or not. This information along with the conversation itself is used to optimize our models, resulting in better results for the agents. We track the following types of message analytic events: - suggestion-1-inserted: The agent selected the first of the `suggestions` from a `Suggestion` API response. - suggestion-2-inserted: The agent selected the second of the `suggestions` from a `Suggestion` API response. - suggestion-3-inserted: The agent selected the third of the `suggestions` from a `Suggestion` API response. - phrase-completion-accepted: The agent selected the `phraseCompletion` from a `Suggestion` API response. - spellcheck-applied: A correction provided in a `SpellcheckCorrection` API response was applied automatically. - spellcheck-undone: A correction provided in a `SpellcheckCorrection` API response was undone by clicking the undo button. - custom-response-drawer-inserted: The agent inserted one of their custom responses from the custom response drawer. - custom-panel-inserted: The agent inserted a response from their custom response list in the custom response panel. - global-panel-inserted: The agent inserted a response from the global response list in the global response panel. Some of the event types have a corresponding event object to provide details. # Create a MessageSent analytics event Source: https://docs.asapp.com/apis/autocompose/create-a-messagesent-analytics-event post /autocompose/v1/analytics/message-sent Create a MessageSent analytics event describing the agent's usage of AutoCompose augmentation features while composing a message # Create a response folder Source: https://docs.asapp.com/apis/autocompose/create-a-response-folder post /autocompose/v1/responses/customs/folder Add a single folder for an agent # Delete a custom response Source: https://docs.asapp.com/apis/autocompose/delete-a-custom-response delete /autocompose/v1/responses/customs/response/{responseId} Delete a specific custom response for an agent # Delete a response folder Source: https://docs.asapp.com/apis/autocompose/delete-a-response-folder delete /autocompose/v1/responses/customs/folder/{folderId} Delete a folder for an agent # Evaluate profanity Source: https://docs.asapp.com/apis/autocompose/evaluate-profanity post /autocompose/v1/profanity/evaluation Get an evaluation of a text to verify if it contains profanity, obscenity or other unwanted words. This service should be called before sending a message to prevent the agent from sending profanities in the chat. # Generate suggestions Source: https://docs.asapp.com/apis/autocompose/generate-suggestions post /autocompose/v1/conversations/{conversationId}/suggestions Get suggestions for the next agent message in the conversation. There are several times when this should be called: - when an agent joins the conversation, - after a message is sent by either the customer or the agent, - and as the agent is typing in the composer (to enable completing the agent's in-progress message). Optionally, add a message to the conversation. # Get autopilot greetings Source: https://docs.asapp.com/apis/autocompose/get-autopilot-greetings get /autocompose/v1/autopilot/greetings Get autopilot greetings for an agent # Get autopilot greetings status Source: https://docs.asapp.com/apis/autocompose/get-autopilot-greetings-status get /autocompose/v1/autopilot/greetings/status Get autopilot greetings status for an agent # Get custom responses Source: https://docs.asapp.com/apis/autocompose/get-custom-responses get /autocompose/v1/responses/customs Get custom responses for an agent. Responses are sorted by title, and folders are sorted by name. # Get settings for AutoCompose clients Source: https://docs.asapp.com/apis/autocompose/get-settings-for-autocompose-clients get /autocompose/v1/settings Get settings for AutoCompose clients, such as whether any features should not be used. It may be desirable to disable some features in high-latency scenarios. # List the global responses Source: https://docs.asapp.com/apis/autocompose/list-the-global-responses get /autocompose/v1/responses/globals Get the global responses and folder organization for a company. Responses are sorted by text, and folders are sorted by name. # Update a custom response Source: https://docs.asapp.com/apis/autocompose/update-a-custom-response put /autocompose/v1/responses/customs/response/{responseId} Update a specific custom response for an agent # Update a response folder Source: https://docs.asapp.com/apis/autocompose/update-a-response-folder put /autocompose/v1/responses/customs/folder/{folderId} Update a folder for an agent # Update autopilot greetings Source: https://docs.asapp.com/apis/autocompose/update-autopilot-greetings put /autocompose/v1/autopilot/greetings Update autopilot greetings for an agent # Update autopilot greetings status Source: https://docs.asapp.com/apis/autocompose/update-autopilot-greetings-status put /autocompose/v1/autopilot/greetings/status Update autopilot greetings status for an agent # Create free text summary Source: https://docs.asapp.com/apis/autosummary/create-free-text-summary post /autosummary/v1/free-text-summaries Generates a concise, human-readable summary of a conversation. Provide an agentExternalId if you want to get the summary for a single agent's involvment with a conversation. You can use the id from ASAPP's system (conversationId or IssueId) or your own id (externalConversationId). # Create structured data Source: https://docs.asapp.com/apis/autosummary/create-structured-data post /autosummary/v1/structured-data Creates and returns set of structured data about a conversation that is already known to ASAPP. You can use the id from ASAPP's system (conversationId or IssueId) or your own id (externalConversationId). Provide an agentExternalId if you want to get the structured data for a single agent's involvment with a conversation. # Get conversation intent Source: https://docs.asapp.com/apis/autosummary/get-conversation-intent get /autosummary/v1/intent/{conversationId} Retrieves the primary intent of a conversation, represented by both an intent code and a human-readable intent name. If no intent is detected, "NO_INTENT" is returned. This endpoint requires: 1. Intent support to be explicitly enabled for your account. 2. A valid conversationId, which is an ASAPP-generated identifier created when using the ASAPP /conversations endpoint. Use this endpoint to gain insights into the main purpose or topic of a conversation. # Get free text summary Source: https://docs.asapp.com/apis/autosummary/get-free-text-summary get /autosummary/v1/free-text-summaries/{conversationId} **Deprecated** Replaced by [POST /autosummary/v1/free-text-summaries](/apis/autosummary/create-free-text-summary) Generates a concise, human-readable summary of a conversation. Provide an agentExternalId if you want to get the summary for a single agent's involvment with a conversation. # Provide feedback. Source: https://docs.asapp.com/apis/autosummary/provide-feedback post /autosummary/v1/feedback/free-text-summaries/{conversationId} Create a feedback event with the full and updated summary. Each event is associated with a specific summary id. The event must contain the final summary, in the form of text. # Get Twilio media stream url Source: https://docs.asapp.com/apis/autotranscribe-media-gateway/get-twilio-media-stream-url get /mg-autotranscribe/v1/twilio-media-stream-url Returns url where [Twilio media stream](/autotranscribe/deploying-autotranscribe-for-twilio) should be sent to. # Start streaming Source: https://docs.asapp.com/apis/autotranscribe-media-gateway/start-streaming post /mg-autotranscribe/v1/start-streaming This starts the transcription of the audio stream. Use in conjunction with the [stop-streaming](/apis/media-gateway/stop-streaming-audio) endpoint to control when transcription occurs for a given call. This allow you to prevent transcription of sensitive parts of a conversation, such as entering PCI data. # Stop streaming Source: https://docs.asapp.com/apis/autotranscribe-media-gateway/stop-streaming post /mg-autotranscribe/v1/stop-streaming This stops the transcription of the audio stream. Use in conjunction with the [start-streaming](/apis/media-gateway/start-streaming-audio) endpoint to control when transcription occurs for a given call. This allow you to prevent transcription of sensitive parts of a conversation, such as entering PCI data. # Get streaming URL Source: https://docs.asapp.com/apis/autotranscribe/get-streaming-url post /autotranscribe/v1/streaming-url Get [websocket streaming URL](/autotranscribe/deploying-autotranscribe-via-websocket) to transcribe audio in real time. This websocket is used to send audio to ASAPP's transcription service and receive transcription results. # Authenticate a user in a conversation Source: https://docs.asapp.com/apis/conversations/authenticate-a-user-in-a-conversation post /conversation/v1/conversations/{conversationId}/authenticate Stores customer-specific authentication credentials for use in integrated flows. - Can be called at any point during a conversation - Commonly used at the start of a conversation or after mid-conversation authentication - May trigger additional actions, such as GenerativeAgent API signals to customer webhooks This API only accepts the customer-specific auth credentials; the customer is responsible for handling the specific authentication mechanism. # Create a message Source: https://docs.asapp.com/apis/conversations/create-a-message post /conversation/v1/conversations/{conversationId}/messages Creates a message object, adding it to an existing conversation. Use this endpoint to record each new message in the conversation. # Create multiple messages Source: https://docs.asapp.com/apis/conversations/create-multiple-messages post /conversation/v1/conversations/{conversationId}/messages/batch This creates multiple message objects at once, adding them to an existing conversation. Use this endpoint when you need to add several messages at once, such as when importing historical conversation data. # Create or update a conversation Source: https://docs.asapp.com/apis/conversations/create-or-update-a-conversation post /conversation/v1/conversations Creates a new conversation or updates an existing one based on the provided `externalId`. Use this endpoint when: - Starting a new conversation - Updating conversation details (e.g., reassigning to a different agent) If the `externalId` is not found, a new conversation will be created. Otherwise, the existing conversation will be updated. # List conversations Source: https://docs.asapp.com/apis/conversations/list-conversations get /conversation/v1/conversations Retrieves a list of conversation resources that match the specified criteria. You must provide at least one search criterion in the query parameters. # List messages Source: https://docs.asapp.com/apis/conversations/list-messages get /conversation/v1/conversations/{conversationId}/messages Lists all messages within a conversation. This messages are returned in chronological order. # List messages with an externalId Source: https://docs.asapp.com/apis/conversations/list-messages-with-an-externalid get /conversation/v1/conversation/messages Get all messages from a conversation. # Retrieve a conversation Source: https://docs.asapp.com/apis/conversations/retrieve-a-conversation get /conversation/v1/conversations/{conversationId} Retrieves the details of a specific conversation using its `conversationId`. This endpoint returns detailed information about the conversation, including participants and metadata. # Retrieve a message Source: https://docs.asapp.com/apis/conversations/retrieve-a-message get /conversation/v1/conversations/{conversationId}/messages/{messageId} Retrieve the details of a message from a conversation. # List feed dates Source: https://docs.asapp.com/apis/file-exporter/list-feed-dates post /fileexporter/v1/static/listfeeddates Lists dates for a company feed/version/format # List feed files Source: https://docs.asapp.com/apis/file-exporter/list-feed-files post /fileexporter/v1/static/listfeedfiles Lists files for a company feed/version/format/date/interval # List feed formats Source: https://docs.asapp.com/apis/file-exporter/list-feed-formats post /fileexporter/v1/static/listfeedformats Lists feed formats for a company feed/version/ # List feed intervals Source: https://docs.asapp.com/apis/file-exporter/list-feed-intervals post /fileexporter/v1/static/listfeedintervals Lists intervals for a company feed/version/format/date # List feed versions Source: https://docs.asapp.com/apis/file-exporter/list-feed-versions post /fileexporter/v1/static/listfeedversions Lists feed versions for a company # List feeds Source: https://docs.asapp.com/apis/file-exporter/list-feeds post /fileexporter/v1/static/listfeeds Lists feed names for a company # Retrieve a feed file Source: https://docs.asapp.com/apis/file-exporter/retrieve-a-feed-file post /fileexporter/v1/static/getfeedfile Retrieves a feed file URL for a company feed/version/format/date/interval/file # Analyze conversation Source: https://docs.asapp.com/apis/generativeagent/analyze-conversation post /generativeagent/v1/analyze Call this API to trigger GenerativeAgent to analyze and respond to a conversation. This API should be called after a customer sends a message while not speaking with a live agent. The Bot replies will not be returned on this request; they will be delivered asynchronously via the webhook callback. This API also adds an optional **message** field to create a message for a given conversation before triggering the bot replies. The message object is the exact same message used in the conversations API /message endpoint # Create stream URL Source: https://docs.asapp.com/apis/generativeagent/create-stream-url post /generativeagent/v1/streams This API creates a generative agent event streaming URL to start a streaming connection (SSE). This API should be called when the client boots-up to request a streaming_url, before it calls endpoints whose responses are delivered asynchronously (and most likely before calling any other endpoint). Provide the streamId to reconnect to a previous stream. # Get GenerativeAgent state Source: https://docs.asapp.com/apis/generativeagent/get-generativeagent-state get /generativeagent/v1/state This API provides the current state of the generative agent for a given conversation. # Check ASAPP's API's health. Source: https://docs.asapp.com/apis/health-check/check-asapps-apis-health get /v1/health The API Health check endpoint enables you to check the operational status of our API platform. # Create a submission Source: https://docs.asapp.com/apis/knowledge-base/create-a-submission post /knowledge-base/v1/submissions Initiate a request to add a new article or update an existing one. The provided title and content will be processed to create the final version of the submission. A `submission` is the programmatic creation or editing of an article. All submissions need to be approved by a human in the ASAPP Console in order to be applied. All content in a submission may be refined by our AI in order to make it easy to be used by GenerativeAgent Head to [Connecting your Knowledge Base](/generativeagent/configuring/connecting-your-knowledge-base#step-1-importing-your-knowledge-base) to see how to enter the API from the ASAPP Console. # Retrieve a submission Source: https://docs.asapp.com/apis/knowledge-base/retrieve-a-submission get /knowledge-base/v1/submissions/{id} This service retrieves the details of a specific submission using its unique identifier. A `submission` is the programmatic creation or editing of an article. All submissions need to be approved by a human in the ASAPP Console in order to be applied. All content in a submission may be refined by our AI in order to make it easy to be used by GenerativeAgent Head to [Connecting your Knowledge Base](/generativeagent/configuring/connecting-your-knowledge-base#step-1-importing-your-knowledge-base) to see how to enter the API from the ASAPP Console. # Retrieve an article Source: https://docs.asapp.com/apis/knowledge-base/retrieve-an-article get /knowledge-base/v1/articles/{id} Fetch a specific article by its unique identifier. If the article has not been created because the associated submission was not approved, a 404 status will be returned. # Add a conversation metadata Source: https://docs.asapp.com/apis/metadata/add-a-conversation-metadata post /metadata-ingestion/v1/single-convo-metadata Add metadata attributes of one issue/conversation # Add a customer metadata Source: https://docs.asapp.com/apis/metadata/add-a-customer-metadata post /metadata-ingestion/v1/single-customer-metadata Add metadata attributes of one customer # Add an agent metadata Source: https://docs.asapp.com/apis/metadata/add-an-agent-metadata post /metadata-ingestion/v1/single-agent-metadata Add metadata attributes of one agent # Add multiple agent metadata Source: https://docs.asapp.com/apis/metadata/add-multiple-agent-metadata post /metadata-ingestion/v1/many-agent-metadata Add multiple agent metadata items; submit items in a batch in one request # Add multiple conversation metadata Source: https://docs.asapp.com/apis/metadata/add-multiple-conversation-metadata post /metadata-ingestion/v1/many-convo-metadata Add multiple issue/conversation metadata items; submit items in a batch in one request # Add multiple customer metadata Source: https://docs.asapp.com/apis/metadata/add-multiple-customer-metadata post /metadata-ingestion/v1/many-customer-metadata Add multiple customer metadata items; submit items in a batch in one request # Overview Source: https://docs.asapp.com/apis/overview Overview of the ASAPP API The ASAPP API is Resource oriented, relying on REST principles. Our APIs accept and respond with JSON. ## Authentication The ASAPP API uses a combination of an API Id and API Secret to authenticate requests. ```bash curl -X GET 'https://api.sandbox.asapp.com/conversation/v1/conversations' \ --header 'asapp-api-id: ' \ --header 'asapp-api-secret: ' \ ``` Learn how to find your API Id and API Secret in the [Developer quickstart](/getting-started/developers). ## Environments The ASAPP API is available in two environments: * **Sandbox**: Use the Sandbox environment for development and testing. * **Production**: Use the Production environment for production use. Use the API domain to make requests to the relevant environment. | Environment | API Domain | | :---------- | :------------------------------------------------------------- | | Sandbox | [https://api.sandbox.asapp.com](https://api.sandbox.asapp.com) | | Production | [https://api.asapp.com](https://api.asapp.com) | ## Errors The ASAPP API uses standard HTTP status codes to indicate the success or failure of a request. | Status Code | Description | | :---------- | :-------------------- | | 200 | OK | | 201 | Created | | 204 | No Content | | 400 | Bad Request | | 401 | Unauthorized | | 403 | Forbidden | | 404 | Not Found | | 429 | Too Many Requests | | 500 | Internal Server Error | We also return a `code` and `message` in the response body for each error. Learn more about error codes in the [Error handling](/getting-started/developers/error-handling) section. # AutoCompose Source: https://docs.asapp.com/autocompose ASAPP AutoCompose helps agents compose the best response to customers, using machine learning techniques to suggest complete responses, partial sentences, key phrases and spelling fixes in real-time based on both the context of the conversation and past agent behavior. ## Features AutoCompose provides the following features: | Feature | Description | | :----------------------- | :------------------------------------------------------------------------------------------------------------------------ | | **Autosuggest** | Provides up to three suggestions that appear in a suggestion drawer above the typing field before the agent begins typing | | **Autocomplete** | Provides up to three suggestions that appear in a suggestion drawer above the typing field after the agent begins typing | | **Phrase autocomplete** | Provides in-line phrase suggestions that appear while an agent is typing | | **Response quicksearch** | Allows in-line search of global and custom responses | | **Fluency correction** | Applies automatic grammar corrections that an agent can undo | | **Profanity blocking** | Prevents an agent from sending a message containing profanity to the customer | | **Custom response list** | Enables management of an individual agent’s custom responses in a simple library interface | | **Global response list** | Enables management of global responses in a simple tooling interface | ## How it works AutoCompose takes in a live feed of your agent's conversations, and then using our various AI models, returns a list of changes or suggested responses based on the state of conversation and currently typed message. 1. Provide Conversation data via Conversation API. 2. In your Agent Application, call the AutoCompose APIs to retrieve the list of changes or suggested responses. 3. Show the potential changes or responses to your Agent for them to incorporate. This streamlines your agent's effeciancy while still allowing agents to review changes, ensuring only the highest quality of responses are sent to your customers. AutoCompose has the following technical components: | Component | Description | | :--------------------- | :----------------------------------------------------------------------------------------------------------------------------------- | | **Autosuggest model** | LLM Retrained by ASAPP with agent usage data | | **Data Storage** | A storage for historical conversations, global response lists and agent historical feature usage that are used for weekly retraining | | **Conversation API**\* | An API for creating and updating conversations and conversation data | ## Get Started Integrate AutoCompose into your applications and upscale your agent response rates. ### Integrate AutoCompose AutoCompose is available both as an integration into leading messaging applications and as an API for custom-built messaging interfaces. For technical instructions on how to implement the service for each approach, refer to the deployment guides below: Learn more on the use of AutoCompose API Deploy AutoCompose via LivePerson Deploy AutoCompose on your Salesforce solution ### Use AutoCompose For a functional breakdown and walkthrough of effective use cases and configurations, refer to the guides below: Learn more on the use of AutoCompose Check the tooling options for AutoCompose ### Feature Releases Visit the feature releases for new additions to AutoCompose functionality Product and Deployment Guides will be updated as new features become available in production. ## Enhance AutoCompose ASAPP AutoSummary is a recommended pairing with AutoCompose, generating conversation summaries of key events for 100% of customer interactions. Note-taking and disposition questions take call time and agent focus, both of which can have a negative impact on agent performance. Removing summarization tasks from agents through automation can keep agents focused on messaging with customers and yield higher summary data coverage than manual agent notes. Head to AutoSummary Overview to learn more. Learn more about AutoSummary on ASAPP.com # AutoCompose Tooling Guide Source: https://docs.asapp.com/autocompose/autocompose-tooling-guide Learn how to use the AutoCompose tooling UI ## Overview This page outlines how to manage and configure global response lists for AutoCompose in ASAPP Messaging. The global response list is created and maintained by program administrators, and the responses contained within it can be suggested to the full agent population. Suggestions given to agents can also include custom responses created by agents and organic responses, which are a personalized response list of frequently-used responses by each agent. To learn more about AutoCompose Features, go to [AutoCompose Product Guide](/autocompose/product-guide). ASAPP Messaging gives program administrators full control over the global response list. In ASAPP Messaging, click on **AutoCompose** and then on **Global Responses** in the sidebar. ## Best Practices The machine learning models powering AutoCompose look at the global response list and select the response that is most likely to be said by the agent. To create an effective global response list, take into account the following best practices: 1. We recommend having a global response list containing 1000-5000 responses. * The more global responses, the better. Having responses that cover the full range of common conversational scenarios enables the models to make better selections. * Deploying a small response list that contains only one way of saying each phrase is not recommended. The best practice is to include several ways of saying the same phrase, as that will enable our machine learning models to match each agent's conversational style. * Typically, the list is generated by collecting and curating the most frequent agent messages from historical chats at the beginning of an ASAPP deployment. 2. Responses should be kept up-to-date as there are changes to business logic and policies to avoid suggestions with stale information. ## Managing Responses The Global Responses page contains a table where each row represents a response that can be suggested to an agent. There are two ways of managing the global response list: 1. Directly add or edit responses through the AI-Console UI, which provides a simple and intuitive experience. This method is best suited for small volumes of changes. 2. Upload a .csv file containing the entire global response list, doing a bulk edit. This method is best suited for large volumes of changes. The following table describes the elements that can be included with each response: | Field | Description | Required | | :--------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------- | | Text | The text field contains the response that can be suggested to an agent. Optionally, the text can include [metadata inserts](#metadata "Metadata") to dynamically embed information into a response. | Yes | | Title | Used to provide short descriptors for responses. If a title is specified, when a response is suggested to an agent it will display its title. | No | | Metadata filters | Used to determine when a response can appear as a suggestion. Allows responses to be filtered to specific agents based on one or more conditions (e.g. filtering responses to specific queues). | No | | Folder path | Used to organize responses into folder hierarchies. Agents can access and navigate these folders to discover relevant responses. | No | ## Uploading Responses in Bulk The global response list can be updated by uploading a .csv file containing the full response list. The recommended workflow is to first download the most recent response list, make changes, and upload the list back into AI-Console. ### .csv Templates The following instructions provide detailed descriptions of how responses need to be defined when using a .csv file. **Text** The text field should contain the exact response that will be suggested to an agent. Optionally, the text field may contain metadata inserts. To use a metadata insert within a response, type the key of the metadata insert inside curly brackets: > "Hello, my name is \{rep\_name}. How may I assist you today?" To learn more about which metadata inserts are available to use within responses, see [Metadata](#metadata "Metadata"). **Folder path** Responses can be organized within a folder structure. This field can contain a single folder name, or a series of nested folders. If using nested folders, each folder should be separated by the ">" character (e.g. "PARENT FOLDER > CHILD FOLDER"). **Title** The title field enables short descriptions for responses. Titles do not need to be unique. **Metadata filters** Metadata filters can be added by specifying conditions using the metadata filter key and metadata filter value columns. Key: The metadata filter key contains the field on which to condition the response. For example, if we want to filter a response to a specific queue, the metadata key should be "queue\_name". Value: The metadata filter value specifies for which values of the metadata key the response will be valid. A single metadata filter key can have multiple values, which should be written as a comma-separated list. For example, if the response should be available to the "general" and "escalation" queues, then the metadata filter value should be "general, escalation". A response can contain multiple conditions. To define multiple conditions, separate each with a new line; use shift+enter in Windows or option+enter in Mac to enter a new line in the same cell. [Click here to download a global responses template file](https://docs-sdk.asapp.com/product_features/global-responses-template.csv). **Getting the "invalid character �" when uploading a response list?** If you are uploading a response list and seeing an error message that a response contains the invalid character �, it is likely caused by using Microsoft Excel to edit the response list, as Excel uses a non-standard encoding mechanism. To fix this issue, select **Save as...** and under **File Format**, select **CSV UTF-8 (Comma delimited) (.csv)**. ## Saving and Deploying Saving changes to the global response list or uploading a new list from a .csv file will create a new version. Past versions can be seen by selecting **Past Versions** under the vertical ellipses menu. The global response list can be easily deployed into testing or production environments. An indicator at the top of each version indicates the status of the response list: unsaved draft, saved draft, deployed in a testing environment, or deployed in production. ## Metadata The Metadata Dictionary, accessible through the navigation panel, provides an overview of metadata that is available for your organization to use in global responses. There are two types of metadata: * **Metadata inserts** are used within the text of each response as templates that can dynamically insert information. Inserts are defined using curly brackets (e.g. Hello, this is \{rep\_name}, how may I assist you today?). * **Metadata filters** introduce conditions to control in which conversations responses can be suggested. By default, responses without any metadata filters are available as suggestions for the entire agent population. Common patterns for filtering include restricting responses to specific queues or lines of business. Metadata Inserts A response that contains a metadata insert is a templated response. When a templated response is suggested, it will be shown to the agent with the metadata insert filled in. *Adding a templated response in AI-Console* *Templated response being suggested to the agent in AutoCompose* If the needed metadata insert (such as customer or agent name) is unavailable for a particular response (e.g. the customer in the conversation is unidentifiable), the response will not be suggested by AutoCompose. To view all metadata inserts available to use within a conversation, navigate to **Metadata Dictionary** in the navigation panel. Metadata Filters Responses that do not have associated metadata filters will be available to the full agent population. In the metadata dictionary, click on any metadata filter to view details about the filter and all possible values available for it. # Deploying AutoCompose API Source: https://docs.asapp.com/autocompose/deploying-autocompose-api Communicate with AutoCompose via API. ASAPP AutoCompose has the following technical components: * **An autosuggest model** that ASAPP retrains weekly with [agent usage data you provide through the `/analytics/message-sent` endpoint](#sending-agent-usage-data "Sending Agent Usage Data") * **Data storage** for historical conversations, global response lists and agent historical feature usage that are used for weekly retraining * The **Conversation API** for creating and updating conversation data and the **AutoCompose API** that interfaces with the application with which agents interact and receives agent usage data in the form of message analytics events ### Setup ASAPP provides an AI Services [Developer Portal](/getting-started/developers). Within the portal, developers can do the following: * Access relevant API documentation (e.g. OpenAPI reference schemas) * Access API keys for authorization * Manage user accounts and apps In order to use ASAPP's APIs, all apps must be registered through the portal. Once registered, each app will be provided unique API keys for ongoing use. Visit the [Get Started](/getting-started/developers) page on the Developer Portal for instructions on creating a developer account, managing teams and apps, and setup for using AI Service APIs. ## Usage ASAPP AutoCompose exposes API endpoints that each enable distinct features in the course of an agent's message composition workflow. Requests should be sent to each endpoint based on events in the conversation and actions taken by the agent in their interface. For example, the sequence below shows requests made for a typical new conversation in which the agent begins creating their first message, sends the first message and receives one message in return from an end-customer: This example is not comprehensive of every possible endpoint request supported by AutoCompose. Refer to the [Endpoints](#endpoints-25843 "Endpoints") section for a full listing of endpoints. **In this example:**

Conversation Event

API Request

Conversation starts

1. Create a new ASAPP conversation record

2. Request first set of response suggestions

Agent keystroke

1. Request updated response suggestions

Agent uses the spacebar

1. Request updated response suggestions

2. Check the spelling of the most recent word

Agent searches for a response

1. Get the response list that pertains to their search

Agent saves a custom response

1. Add the new response to their personal library

Agent submits their message

1. Check if any profanity is present in the message

Agent message is sent

1. Add the message to ASAPP’s conversation record

2. Create analytics event for the message that details how the agent used AutoCompose 

3. Request updated response suggestions

Customer message is sent

1. Add the message to ASAPP’s conversation record

2. Request updated response suggestions

The [Endpoints](#endpoints-25843 "Endpoints") section below outlines how to use each endpoint. ### Endpoints Listing For all requests, you must provide a header containing the `asapp-api-id` API Key and the `asapp-api-secret`. You can find them under your Apps in the [AI Services Developer Portal](https://developer.asapp.com/). All requests to ASAPP sandbox and production APIs must use `HTTPS` protocol. Traffic using `HTTP` will not be redirected to `HTTPS`. Use the links below to skip to information about the relevant fields and parameters for the corresponding endpoint(s): **[Conversations](#conversations-api-25843 "Conversations API")** * `POST /conversation/v1/conversations` * `POST /conversation/v1/conversations/\{conversationId\}/messages` [**Requesting Suggestions**](#requesting-suggestions "Requesting Suggestions") * `POST /autocompose/v1/conversations/\{conversationId\}/suggestions` [**Checking Profanity & Spelling**](#check-profanity-spelling "Check Profanity & Spelling") * `POST /autocompose/v1/profanity/evaluation` * `POST /autocompose/v1/spellcheck/correction` [**Sending Agent Usage Data**](#sending-agent-usage-data "Sending Agent Usage Data") * `POST /autocompose/v1/analytics/message-sent` [**Getting Response Lists**](#getting-response-lists "Getting Response Lists") * `GET /autocompose/v1/responses/globals` * `GET /autocompose/v1/responses/customs` [**Updating Custom Response Lists**](#updating-custom-response-lists "Updating Custom Response Lists") * `POST /autocompose/v1/responses/customs/response` * `PUT /autocompose/v1/responses/customs/response/\{responseId\}` * `DELETE /autocompose/v1/responses/customs/response/\{responseId\}` * `POST /autocompose/v1/responses/customs/folder` * `PUT /autocompose/v1/responses/customs/folder/\{folderId\}` * `DELETE /autocompose/v1/responses/customs/folder/\{folderId\}` ### Conversations API ASAPP receives conversations through POST requests to the Conversations API. This service creates a record of conversations referenced as a source of truth by all ASAPP services. By promptly sending conversation and message data to this API, you ensure that ASAPP's conversation records match your own and that ASAPP services use the most current information available. [`POST /conversation/v1/conversations`](/apis/conversations/create-or-update-a-conversation) Use this endpoint to create a new conversation record or update an existing conversation record. **When to Call** This service should be called when a conversation starts or when something about the conversation changes (e.g. a conversation is reassigned to a different agent). **Request Details** Requests must include a conversation identifier from your system of record (external to ASAPP) and a timestamp (formatted in RFC3339 micro second date-time expressed in UTC) for when the conversation started. Requests to create a conversation record must also include identifying information about the human participants. Two types of requests are supported to create a new conversation: 1. **Conversations started with an agent:** Provide both the `agent` and `customer` objects in the request when the conversation begins. 2. **Conversations started with a virtual agent:** Provide only the `customer` object in the initial request when the conversation with the virtual agent begins; you must send a subsequent request that includes both the `agent` and `customer` objects once the agent joins the conversation. Requests may also include key-value pair metadata for the conversation that can be used either (1) to insert values into templated responses for agents or (2) as filter criteria to determine whether a conversation is eligible for specific response suggestions. To support inserting the customer's time of day (morning, afternoon, evening) into templated agent responses, conversation metadata key-value pairs should take the format of `CUSTOMER_TIMEZONE: ` **Response Details** When successful, this endpoint responds with a unique ASAPP identifier (`id`) for the conversation. This identifier should be used whenever referencing this conversation in the future. For example, adding new messages to this conversation record will require use of this identifier so that ASAPP knows to which conversation messages should be added. [`POST /conversation/v1/conversations/\{conversationId\}/messages`](/apis/conversations/create-a-message) Use this endpoint to add a message to an existing conversation record. **When to Call** This service should be called after each sent message by a participant in the conversation. If a conversation begins with messages between a customer and virtual agent/bot, ensure the conversation record is updated once the agent joins the conversation, prior to posting messages to this endpoint for the agent. **Request Details** The path parameter for this request is the unique ASAPP conversation ID that was provided in the response body when the conversation record was initially created. Requests must include the message's text and the message's sent timestamp (formatted in RFC3339 micro second date-time expressed in UTC). Requests must also include identifying information about the sender of the message, including their `role`; supported values include `agent`, `customer`, or `system` for virtual agent messages. **Response Details** When successful, this endpoint responds with a unique ASAPP identifier (`id`) for the message. This identifier should be used if a need arises to reference this message in the future. When a conversation message is posted, ASAPP applies redaction to the message text to prevent storage of sensitive information.  Visit the [Data Redaction](/security/data-redaction "Data Redaction") section to learn more. Reach out to your ASAPP account contact for information on available redaction capabilities to configure for your implementation. ### Requesting Suggestions ASAPP provides suggestions through one POST request to the AutoCompose API. [`POST /autocompose/v1/conversations/\{conversationId\}/suggestions`](/apis/autocompose/generate-suggestions) Use this endpoint to get suggestions for the next agent message in the conversation. **When to Call** This service should be called when an agent joins the conversation, after every agent keystroke, and after a message is sent by either the customer or the agent. In each of these instances, AutoCompose takes into account new conversation context (e.g. the next letter the agent typed) and will return suggestions suitable for that context. If a conversation begins with messages between a customer and virtual agent/bot, ensure the conversation record is updated once the agent joins the conversation. Suggestion requests to this endpoint will fail if no agent is associated with a conversation. While making a request for a suggestion, a new sent message by either the customer or agent can be posted to the conversation record by including it in the request body. This optional approach to updating the conversation record is in lieu of sending a separate request to the `/messages` endpoint. New messages cannot be added to the conversation record using the suggestions endpoint if no agent is associated with the conversation. **Request Details** The path parameter for this request is the unique ASAPP conversation ID that was provided in the response body when the conversation record was initially created. Requests must include any text that the agent has already typed (called the `query`). To add a message to the conversation record during a suggestion request, you must also include a message object that contains the text of the sent message, the sender role and ID, and the timestamp for the sent message. **Response Details** When successful, this endpoint responds with a set of suggestions or phrase completions, and a unique ASAPP identifier (`id`) that corresponds to this set of suggestions. Full suggestions will be returned when the agent has not yet typed and early in the composition of their typed message. Once the agent's typed message is sufficiently complete, no suggestions will be returned. Phrase completions are only provided when a high-confidence phrase is available to complete a partially typed message with several words. If no such phrases fit the message, phrase completions will not be returned. If a message object was included in the request body, the response will include a message object with a unique message identifier. **Metadata Inserts** Suggestions will always include messages with `text` and `templateText` fields. `Text` fields contain the message as it should be shown in the end-user interface, whereas `templateText` indicates where metadata was inserted into a templated part of the message. For example, `text` would read `"Sure John"`and `templateText` would read `"Sure \{NAME\}"`. AutoCompose currently supports inserting metadata about a customer name or agent name into a templated suggestion. `templateText` will be returned even if there are no metadata elements being inserted into the suggestion `text`. In these cases, the `templateText` and `text` will be identical. ### Check Profanity & Spelling [`POST /autocompose/v1/profanity/evaluation`](/apis/autocompose/evaluate-profanity) Use this endpoint to receive an evaluation of a text string to verify if it contains a word present on ASAPP's profanity blocklist. **When to Call** This service should be called when a carriage return or "enter" is used to send an agent message in order to prevent sending profanities in the chat. **Request Details** Requests need only specify the text required to be checked for profanity **Response Details** When successful, this endpoint responds with a boolean indicating whether or not the submitted text contains profanity. [`POST /autocompose/v1/spellcheck/correction`](/apis/autocompose/check-for-spelling-mistakes) Use this endpoint to get a spelling correction for a message as it is being typed. **When to Call** This service should be called after a space character is entered, checking  the most recently completed word in the sentence. **Request Details** Requests must include the text the agent has typed and the position of the cursor to indicate which word the agent has just typed to be checked for spelling. The request may also specify a user dictionary of any words that should not be corrected if present. **Response Details** When successful and a spelling mistake is present, this endpoint identifies the misspelled text, the correct spelling of the word and start position of the cursor where the misspelled word begins so that it can be replaced. ### Sending Agent Usage Data [`POST /autocompose/v1/analytics/message-sent`](/apis/autocompose/create-a-messagesent-analytics-event) Use this endpoint to create an analytics event describing the agent's usage of AutoCompose for a given message. ASAPP uses these events to train AutoCompose, identifying which forms of augmentation should be credited for contributing to the final sent message. **When to Call** This service should be called after both of the following have occurred: 1. A message has been submitted by an agent 2. A successful request has been made to add this message to ASAPP's record of the conversation Message sent analytics events should be posted after every agent message regardless of whether any AutoCompose capabilities were used. **Request Details** Requests must include the ASAPP identifiers for the conversation and the specific message about which the analytics data is about. Requests must also include an array called `augmentationType` that describes the agent's sequence of AutoCompose usage before sending the message. Valid `augmentationType` values are described below: | augmentationType | When to Use | | :------------------- | :---------------------------------------------------------------------------------------------------- | | AUTOSUGGEST | When agent uses a full response suggestion with no text in the composer | | AUTOCOMPLETE | When agent uses a full response suggestion with text already in the composer | | PHRASE\_AUTOCOMPLETE | When agent uses a phrase completion rather than a full response suggestion | | CUSTOM\_DRAWER | When agent inserts a custom message from a drawer menu in the composer | | CUSTOM\_INSERT | When agent inserts a custom message from a response panel | | GLOBAL\_INSERT | When agent inserts a global message from a response panel | | FLUENCY\_APPLY | When a fluency correction is applied to a word | | FLUENCY\_UNDO | When a fluency correction is undone | | FREEHAND | When the agent types the entire message themselves and does not use any augmentation from AutoCompose | Requests should include identifiers for the initial set of suggestions shown to the agent and the last set of suggestions where the agent made a selection (if any selections were made). If a selection was made, the index of the selected message (from the list of three) should also be specified. Requests may also include further metadata describing the agents editing keystrokes after selecting a suggestion, their time crafting and waiting to send the message, the time between the last sent message and their first action, and their interactions with phrase completion suggestions (if relevant). **Response Details** When successful, this endpoint confirms the analytics message event was received and returns no response body. ### Getting Response Lists ASAPP provides access to the global response list and agent-specific custom response lists through GET requests to two endpoints. Each endpoint is designed to be used to show an agent the contents of the response list in a user interface as they browse or search the list. [`GET /autocompose/v1/responses/globals`](/apis/autocompose/list-the-global-responses) Use this endpoint to retrieve the global responses and associated folder organization. **When to Call** This service should be called to show an agent the global response list - the list of responses available to all agents - in a user interface in response to an action taken by the agent, such as clicking on a response panel icon or searching for a specific response. **Request Details** Requests must include the agent's unique identifier from your system - this is the same identifier used to create conversation and conversation message records. * Only values within a specific folder * Only responses, only folders, or both * Only values that match an agent search term Requests can be returned in multiple pages based on a maximum per page parameter set to ensure a user interface only receives the number responses it can support. This endpoint can be called again with the same query parameters and a pageToken to indicate which page to retrieve in a multi-page list. **Response Details** When successful, this endpoint responds with a response list (if requested) that fits the criteria of the request query parameters, including the id of the response along with the text, title, corresponding folder to which it belongs and any key-value pair metadata associated with the response. As discussed previously in Metadata Inserts, responses can be templated to insert metadata into specific parts of the message, such as the customer or agent's name. ASAPP can also use metadata associated with a response (e.g. agent skills for which that response is allowed) to filter out that response from suggestions for a given conversation. If there is a next page to the response list, a pageToken is provided in the response for use in a subsequent call to show the next page to the user. This endpoint also responds with a folder list (if requested) including the identifier of the folder, its name, and parent folder (if one exists), and version information about the global list of responses from which this list is sourced. Global responses are returned in alphabetical order, sorted on the text of the response. Folders are sorted by folder name. [`GET /autocompose/v1/responses/customs`](/apis/autocompose/get-custom-responses) Use this endpoint to retrieve the custom responses and associated folder organization. **When to Call** This service should be called to show an agent their custom response list - the list of responses available to only that agent - in a user interface in response to an action taken by the agent, such as clicking on a response panel icon or searching for a specific response. **Request Details** Requests must include the agent's unique identifier from your system - this is the same identifier used to create conversation and conversation message records. Requests may include parameters about what values the returned list should contain based on the context of the request: * Only values within a specific folder * Only responses, only folders, or both * Only values that match an agent search term Requests can be returned in multiple pages based on a maximum per page parameter set to ensure a user interface only receives the number responses it can support. This endpoint can be called again with the same query parameters and a pageToken to indicate which page to retrieve in a multi-page list. **Response Details** When successful, this endpoint responds with a response list (if requested) that fits the criteria of the request query parameters, including the identifier of the response along with the text, title, corresponding folder to which it belongs and any key-value pair metadata associated with the response. As discussed previously in Metadata Inserts, responses can be templated to insert metadata into specific parts of the message, such as the customer or agent's name. ASAPP can also use metadata associated with a response (e.g. agent skills/queues for which that response is allowed) to filter out that response from suggestions for a given conversation. If there is a next page to the response list, a pageToken is provided in the response for use in a subsequent call to show the next page to the user. This endpoint also responds with a folder list (if requested) including the identifier of the folder, its name, and parent folder (if one exists). Custom responses are returned in alphabetical order, sorted on the title of the response. Folders are sorted by folder name. ### Updating Custom Response Lists Each agent's custom responses and the related folders can be added, updated and deleted using six endpoints. These endpoints are designed to carry out actions taken by agents in their personal list management interface. #### For Responses [`POST /autocompose/v1/responses/customs/response`](/apis/autocompose/create-a-custom-response) Use this endpoint to add a single custom response for an agent. **When to Call** This service should be called when an agent creates a new custom response. **Request Details** Requests must include the agent's unique identifier from your system - this is the same identifier used to create conversation and conversation message records. Requests must also include the text of the custom response and its title. Requests may include the identifier of the folder in which the response should be stored; if not provided, the response is created at the \_\_root folder level. Requests may also specify metadata to be inserted into specific parts of the message, such as the customer or agent's name. **Response Details** When successful, the endpoint responds with a unique ASAPP identifier for the response. This value should be used to update and delete the same response. [`PUT /autocompose/v1/responses/customs/response/\{responseId\}`](/apis/autocompose/update-a-custom-response) Use this endpoint to update a specific custom response for an agent. **When to Call** This service should be called once an agent edits a custom response. **Request Details** The path parameter for this request is the unique ASAPP response ID provided in the response body when creating the response. Requests must also include the text and title values of the updated custom response. Requests may include the identifier of the folder in which the response should be stored and may also specify metadata to be inserted into specific parts of the message, such as the customer or agent's name. **Response Details** When successful, this endpoint confirms the update and returns no response body. [`DELETE /autocompose/v1/responses/customs/response/\{responseId\}`](/apis/autocompose/delete-a-custom-response) Use this endpoint to delete a specific custom response for an agent. **When to Call** This service should be called when an agent deletes a response. **Request Details** The path parameter for this request is the unique ASAPP response ID provided in the response body when creating the response. Requests must also include the agent's unique identifier from your system. **Response Details** When successful, this endpoint confirms the deletion and returns no response body. #### For Folders [`POST /autocompose/v1/responses/customs/folder`](/apis/autocompose/create-a-response-folder) Use this endpoint to add a single folder for an agent. **When to Call** This service should be called when an agent creates a new custom response folder. **Request Details** Requests must include the agent's unique identifier from your system - this is the same identifier used to create conversation and conversation message records. Requests must also include the name of the custom response folder. Requests may include the identifier of the parent folder in which to create the new folder. **Response Details** When successful, the endpoint responds with a unique ASAPP identifier for the folder. This value should be used to update and delete the same folder. [`PUT /autocompose/v1/responses/customs/folder/\{folderId\}`](/apis/autocompose/update-a-response-folder) Use this endpoint to update a specific folder for an agent. **When to Call** This service should be called once an agent edits the name or hierarchy location of the folder. **Request Details** The path parameter for this request is the unique ASAPP folder ID provided in the response body when creating the folder. Requests must include the agent's unique identifier from your system and the name of the folder once updated. Requests may include the identifier of the folder in which the response should be stored if that parent folder has been updated. **Response Details** When successful, this endpoint confirms the update and returns no response body. [`DELETE /autocompose/v1/responses/customs/folder/\{folderId\}`](/apis/autocompose/delete-a-response-folder) Use this endpoint to delete a specific folder for an agent. **When to Call** This service should be called when an agent deletes a folder. **Request Details** The path parameter for this request is the unique ASAPP folder ID provided in the folder body when creating the folder. Requests must include the agent's unique identifier from your system. **Response Details** When successful, this endpoint confirms the deletion and returns no response body. ## Certification Before providing credentials for applications to use production services, ASAPP reviews your completed integration in the sandbox environment to certify that your application is ready. The following criteria are used to certify that the integration is ready to use the AutoCompose API in a production environment: * Under normal conditions, the integration is free of errors * Under abnormal conditions, the integration provides the correct details in order to troubleshoot the issue * The correct analytics events are being provided for agent messages that are sent To test these criteria, an ASAPP Solution Architect will review these AutoCompose functionalities: * Load a new customer conversation onto the agent desktop/view (with existing customer messages) * Present the agent with suggestions and enable them to select an option and send * Enable the agent to modify or add to a selected suggestion, and then send * Enable the agent to freely type and use a phrase completion * Enable the agent to use the spell check and profanity functionality * Verify that correct analytics details are sent to ASAPP when an agent sends a message * Disable API Keys in developer.asapp.com and generate an error message The following are the test scenarios and accompanying sequence of expected API requests:

Scenario

Expected Requests

A

Start new chat for agent with pre-existing customer messages

POST /conversation

POST /messages

POST /suggestions

B

Populate suggestions, select a suggestion and send

POST /suggestions

POST /spellcheck

POST /profanity

POST /messages

POST /message-sent

C

Populate suggestions, don’t choose one and type “Hello” and send message

POST /suggestions

POST /suggestions per keystroke

POST /spellcheck

POST /profanity

POST /messages

POST /message-sent

D

Choose a suggestion and edit suggestion and select a phrase completion

POST /suggestions

POST /suggestions per keystroke

POST /spellcheck

POST /profanity

POST /messages

POST /message-sent

E

Choose a suggestion and add to it, purposely misspelling a word and undoing the spelling correction

POST /suggestions

POST /suggestions per keystroke

POST /spellcheck

POST /profanity

POST /messages

POST /message-sent

F

Choose a suggestion and edit with profanity

POST /suggestions

POST /suggestions per keystroke

POST /spellcheck

POST /profanity

POST /messages

POST /message-sent

## Use Case Examples ### 1. Create a Conversation and Ask for Suggestions The example below is a conversation post request with one customer message. Notice that the `id` value provided in the `/conversations` response is used as the `conversationId` path parameter in subsequent calls. The conversation and message calls are followed by a suggestion request and response for the agent's reply which includes two suggestions without a title and one suggestion with a title. The `phraseCompletion` field is not returned, as the agent has only just begun typing their message with `"query": "Sure"` when this suggestion request was made. **POST** `/conversation/v1/conversations` **Request** ```json { "externalId": "33411121", "agent": { "externalId": "671", "name": "agentname" }, "customer": { "externalId": "11462", "name": "Sarah Jones" }, "metadata": { "organizationalGroup": "some-group", "subdivision": "some-division", "queue": "some-queue" }, "timestamp": "2021-11-23T12:13:14.55Z" } ``` **Response** *STATUS 200: Successfully created or updated conversation* ```json { "id": "5544332211" } ``` **POST** `/conversation/v1/conversations/5544332211/messages` **Request** ```json { "text": "Hello, I would like to upgrade my internet plan to GOLD.", "sender": { "role": "customer", "externalId": "3455123" }, "timestamp": "2021-11-23T12:13:18.55Z" } ``` **Response** *STATUS 200: Successfully created message in conversation* ```json { "id": "099455443322115544332211" } ``` **POST** `/autocompose/v1/conversations/5544332211/suggestions` **Request** ```json { "query": "Sure" } ``` **Response** *STATUS 200: Successfully fetched suggestions for the conversation* ```json { "id": "453466732233", "suggestions": [ { "text": "Sure, can I get your account number for verification please?", "templateText": "Sure, can I get your account number for verification please?", "title": "" }, { "text": "Sure Sarah, I can certainly help you with that.", "templateText": "Sure {NAME}, I can certainly help you with that.", "title": "" }, { "text": "The GOLD plan is a great choice", "templateText": "The GOLD plan is a great choice", "title": "Gold plan great choice" } ] } ``` ### 2. Check Profanity The example below is of a profanity check request and response for a text string that does not contain any words found in the profanity blocklist: **POST** `/autocompose/v1/profanity/evaluation` **Request** ```json { "text": "This is a perfectly decent sentence." } ``` **Response** *STATUS 200: Successfully fetched an evaluation result of the sentence.* ```json { "hasProfanity": false } ``` ### 3. Check Spelling The example below is of a spell check request and response for a text string that contains a misspelling in the last typed word of the string: **POST** `/autocompose/v1/spellcheck/correction` **Request** ```json { { "text": "How is tihs ", "typingEvent": { "cursorStart": 11, "cursorEnd": 12 }, "userDictionary": [ "Hellooo" ] } ``` **Response** *STATUS 200: Successfully checked for a spelling mistake.* ```json { "misspelledText": "tihs", "correctedText": "this", "position": 7 } ``` ### 4. Send an Analytics Message Event The example below is of an analytics message event being sent to ASAPP that provides metadata about how an agent used AutoCompose for a given message. For this message example, the agent used a spelling correction, selected the first response suggestion offered, and subsequently used the first phrase completion presented to finish the sentence, in that order. **POST** `/autocompose/v1/analytics/message-sent` **Request** ```json { "conversationId": "5544332211", "messageId": "ee675e6576c0faf40dbb92d0d5993f5f", "augmentationType": [ "FLUENCY_APPLY", "AUTOSUGGEST", "PHRASE_AUTOCOMPLETE" ], "numEdits": 2, "selectedSuggestionText": "How can I help you today?", "selectedSuggestionsId": "5e9491b203e6ecccfef964e26fb1a5d3", "selectedSuggestionIndex": 1, "initialSuggestionsId": "5e9491b203e6ecccfef964e26fb1a5d3", "timeToAction": 1.891412, "craftingTime": 10.9472, "dwellTime": 4.132985, "phraseAutocompletePresentedCt": 1, "phraseAutocompleteSelectedCt": 1 } ``` **Response** *STATUS 200: Successfully created a MessageSent event.* In this example, the agent typed a message and sent it without using any assistance from AutoCompose: **Request** ```json { "messageId": "ee675e6576c0faf40dbb92d0d5993e2q", "augmentationType": [ "FREEHAND" ], "initialSuggestionsId": "5e9491b303e6ecccfef164e26fb1afq9", "timeToAction": 2.891412, "craftingTime": 20.9472, "dwellTime": 5.132985 } ``` **Response** *STATUS 200: Successfully created a MessageSent event.* In this example, the agent typed "hel", selected the second suggestion presented to them and sent it: **Request** ```json { "messageId": "ee675e1236c0faf40dcb92h0e5y93e2p", "augmentationType": [ "AUTOCOMPLETE" ], "selectedSuggestionText": "Hello there, welcome to customer support chat!", "selectedSuggestionsId": "4d2fd982640c311394008259594399a1", "selectedSuggestionIndex": 2, "initialSuggestionsId": "4d2fd982640c311394008259594399a1", "timeToAction": 1.891412, "craftingTime": 11.9472, "dwellTime": 2.132985 } ``` **Response** *STATUS 200: Successfully created a MessageSent event.* In this example, the agent typed "htis", hit the space bar, and spellcheck corrected the text to "this". Then the agent accidentally reversed the spell check and sent the message to the customer without using any other AutoCompose assistance: **Request** ```json { "messageId": "fe675e1236c0fbf40dcb33h0e5y93e1d", "augmentationType": [ "FLUENCY_APPLY", "FLUENCY_UNDO" ], "initialSuggestionsId": "2d2fd982640c311146008259594399a2", "timeToAction": 1.891412, "craftingTime": 11.9472, "dwellTime": 2.132985 } ``` **Response** *STATUS 200: Successfully created a MessageSent event.* ### 5. Show an Agent Global Responses The example below is of a request to show global responses only to an agent who is searching the greetings folder for a particular response. **NOTE**: The response below is shortened to show two responses. **GET** `/autocompose/v1/responses/globals` **Request** *Query Parameters:* ```json folderId: "9923599" resourceType: "responses" searchTerm: "transfer" ``` **Response** *STATUS 200: The global responses for this company* ```json { "responses": { "responsesList": [ { "id": "425523523599", "text": "I’d be happy to transfer you to my supervisor.", "title": "Sup Transfer 2", "folderId": "9923599", }, { "id": "425523523598", "text": "No problem {NAME}, I’d be happy to transfer you to my supervisor.", "title": "Sup Transfer 1", "folderId": "9923599 ", "metadata": [ { "name": "NAME", "allowedValues": [ "customer.name" ] } ] } ], }, "version": { "id": "12134", "description": "June 5 2022 Update" } } ``` ### 6. Creating a New Custom Response Folder and Response The example below shows the calls that would accompany an agent creating a new greeting custom response without a folder, then adding it to an existing folder. **POST** `/autocompose/v1/responses/customs/response` **Request** ```json { "text": "Howdy, how can I help you today?", "title": "Howdy Help" } ``` **Response** *STATUS 200: Acknowledgement that the response was successfully added* ```json { "id": "425523523523", "text": "Howdy, how can I help you today?", "title": "Howdy Help", "folderId": "__root" } ``` **PUT** `/autocompose/v1/responses/customs/response/425523523523` **Request** ```json { "text": "Howdy, how can I help you today?", "title": "Howdy Help", "folderId": "9923523" } ``` **Response** *STATUS 201: Acknowledgement that the custom response was successfully updated* ## Data Security ASAPP's security protocols protect data at each point of transmission, from first user authentication, to secure communications, to our auditing and logging system, all the way to securing the environment when data is at rest in the data logging system. Access to data by ASAPP teams is tightly constrained and monitored. Strict security protocols protect both ASAPP and our customers. The following security controls are particularly relevant to AutoCompose: 1. Client sessions are controlled using a time-limited authorization token. Privileges for each active session are controlled server-side to mitigate potential elevation-of-privilege and information disclosure risks. 2. To avoid unauthorized disclosure of information, unique, non-guessable IDs are used to identify conversations. These conversations can only be accessed using a valid client session. 3. Requests to API endpoints that can potentially receive sensitive data are put through a round of redaction to strip the request of sensitive data (like SSNs and phone numbers). ## Additional Considerations ### Historical Conversation Data for Generating a Response List ASAPP uses past agent conversations to generate a customized response list tailored to a given use case. In order to create an accurate and relevant list, ASAPP requires a minimum of 200,000 historical transcripts to be supplied ahead of implementing AutoCompose. For more information on how to transmit the conversation data, reach out to your ASAPP account contact. Visit [Transmitting Data to SFTP](/reporting/send-sftp "Transmitting Data to SFTP") for instructions on how to send historical transcripts to ASAPP. # Deploying AutoCompose for LivePerson Source: https://docs.asapp.com/autocompose/deploying-autocompose-for-liveperson Use AutoCompose on your LivePerson application. ## Overview This page describes how to Integrate AutoCompose in your LivePerson application. ### Integration Steps There are four parts to the AutoCompose setup process. Use the links below to skip to information about a specific part of the process: 1. [Install the ASAPP browser extension](#1-install-the-asapp-browser-extension) on all agents' desktop (via a system policy or using your company's existing deployment processes) 2. [Configure the LivePerson organization](#2-configure-liveperson) centrally using an administrator account 3. [Setup agent/user authentication](#3-set-up-single-sign-on) through the existing single sign-on (SSO) service 4. [Work with your ASAPP contact to configure Auto-Pilot Greetings](#4-configure-auto-pilot-greetings), if desired ## Requirements **Browser Support** ASAPP AutoCompose is supported in Google Chrome and Microsoft Edge * NOTE: This support covers the latest version of each browser and extends to the previous two versions Please consult your ASAPP account contact if your installation requires support for other browsers **LivePerson** ASAPP supports LivePerson's Messaging conversation type **SSO Support** The AutoCompose widget supports SP-initiated SSO with either OIDC (preferred method) or SAML. **Domain Whitelisting** In order for AutoCompose to interact with ASAPP's backend and third-party support services, the following domains need to be accessible from end-user environments: | Domain | Description | | :----------------------------------------- | :----------------------------------------------------------------- | | \*.asapp.com | ASAPP service URLs | | \*.ingest.sentry.io | Application performance monitoring tool | | fonts.googleapis.com | Fonts | | google-analytics.com | Page analytics | | asapp-chat-sdk-production.s3.amazonaws.com | Static ASAPP AWS URL for desktop network connectivity health check | **Policy Check** Before proceeding, check the current order of precedence of policies deployed in your organization. Platform-deployed policies (like Group Policy Objects) and cloud-deployed policies (like Google Admin Console) are enforced in a priority order that can lead to lower-priority policies not being enforced. * If installing the ASAPP browser extension via Group Policy Objects, set platform policies to have precedence over cloud policies. * If installing the ASAPP browser extension via Google Admin Console, set cloud policies to have precedence over platform policies. For more on how to check and modify order of precedence, see [policy management guides from Google Enterprise](https://support.google.com/chrome/a/answer/9037717). ## Integrate with LivePerson ### 1. Install the ASAPP Browser Extension Customers have two options for installing the AutoCompose browser extension: A. Group Policy Objects (GPO) B. Google Admin Console #### A. Install Group Policy Objects (GPO) Customers can automatically install and manage the ASAPP AutoCompose browser extension via Group Policy Objects (GPO). ASAPP provides an installation server from which the extension can be downloaded and automatically updated. The Customer's system administrator must configure GPO rules to allow the installation server URL and the software component ID. Through GPO, the administrator can choose to force the installation (i.e., install without requiring human intervention). The following policies will configure Chrome and Edge to download the AutoCompose browser extension in all on-premise managed devices via GPO: | **Policy Name** | **Value to Set** | | :---------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | [ExtensionInstallSources](https://cloud.google.com/docs/chrome-enterprise/policies/?policy=ExtensionInstallSources) | https\://\*.asapp.com/\* | | [ExtensionInstallAllowlist](https://cloud.google.com/docs/chrome-enterprise/policies/?policy=ExtensionInstallAllowlist) | bfcmlmledhddbnialbbdopfefoelbbei | | [ExtensionInstallForcelist](https://cloud.google.com/docs/chrome-enterprise/policies/?policy=ExtensionInstallForcelist) | bfcmlmledhddbnialbbdopfefoelbbei;[https://app.asapp.com/autocompose-liveperson-chrome-extension/updates](https://app.asapp.com/autocompose-liveperson-chrome-extension/updates) | Each Policy Name above links to documentation that describes how to set the values with the proper format depending on the platform. When policy changes occur, you may need to reload policies manually or force restart the browser to ensure newly deployed policies are applied. Figure 2 shows example policy files for the Windows platform. The policy adds the URL 'https\://\*.asapp.com/\*' as a valid extension install source, allows the extension ID 'bfcmlmledhddbnialbbdopfefoelbbei', and forces the extension installation. Google Chrome: ```registry Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome] [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\ExtensionInstallAllowlist] "1"="bfcmlmledhddbnialbbdopfefoelbbei" [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\ExtensionInstallSources] "1"="https://*.asapp.com/*" [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\ExtensionInstallForcelist] "1"="bfcmlmledhddbnialbbdopfefoelbbei;https://app.asapp.com/autocompose-liveperson-chrome-extension/updates” ``` Microsoft Edge: ```registry Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge] [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge\ExtensionInstallAllowlist] "1"="bfcmlmledhddbnialbbdopfefoelbbei" [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge\ExtensionInstallSources] "1"="https://*.asapp.com/*" [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge\ExtensionInstallForcelist] "1"="bfcmlmledhddbnialbbdopfefoelbbei;https://app.asapp.com/autocompose-liveperson-chrome-extension/updates” ``` Figure 2: Example policy files to install the AutoCompose browser extension in Google Chrome and Microsoft Edge browsers respectively (*Windows Registry*) #### B. Install via Google Admin Console For Google Chrome deployments, customers can install and manage the ASAPP AutoCompose browser extension using Managed Chrome Device policies in the Google Admin console. The Customer's system administrator must set up the AutoCompose browser extension through the Google Admin console by creating a custom app and configuring the extension ID and XML manifest URL. Through managed Chrome policies the administrator can choose to force the installation (i.e. install without requiring human intervention). In order to have Chrome download the ASAPP hosted extension in all managed devices through the Google Admin console: 1. Navigate to **Device management > Chrome**. 2. Click **Apps & Extensions**. 3. Click on **Add (+)** and look for **Add Chrome app or extension by ID** option. 4. Complete the fields using the values provided below. Be sure to select the **From a custom URL** option. | **Field** | **Value** | | :-------- | :--------------------------------------------------------------------------------------------------------------------------------------------- | | ID | bfcmlmledhddbnialbbdopfefoelbbei | | URL | [https://app.asapp.com/autocompose-liveperson-chrome-extension/updates](https://app.asapp.com/autocompose-liveperson-chrome-extension/updates) | Please check Google's [Managing Extensions in Your Enterprise](https://docs.google.com/document/d/1pT0ZSbGdrbGvuCsVD2jjxrw-GVz-80rMS2dgkkquhTY/edit#heading=h.ojow7ntunwpx) for more information. To ensure that cloud policies are enabled for production environment users in a given organizational unit, locate that group of users by navigating to **Devices** > **Chrome** > **Settings** menu in Google Suite. Ensure the setting **[Chrome management for signed-in users](https://support.google.com/chrome/a/answer/2657289?hl=en#zippy=%2Cchrome-management-for-signed-in-users)** is set to **Apply all user policies when users sign into Chrome, and provide a managed Chrome experience.** **Testing** The following two checks on a target machine will verify the extension is installed correctly: 1. **The extension is force-installed in the browser** a. Expand the extension icon in the browser toolbar. b. Alternatively, navigate to chrome://extensions/ or edge://extensions/ and look for 'ASAPP Extension' c. Alternatively, navigate to edge://extensions/ and look for 'ASAPP Extension' 2. **The extension is properly configured** a. Click the extension icon and validate that the allowlist and denylist values in the extension's options are as they were set. b. Alternatively, navigate to chrome://policy and search for the extension policies. c. Alternatively, navigate to edge://policy and search for the extension policies. ### 2. Configure LivePerson **Before You Begin** You will need the following information to configure ASAPP for LivePerson: * The URL for your custom widget, which will be provided to you by ASAPP * Credentials to login to your LivePerson organization as an administrator **Configuration Steps** 1. **Add New Widget** * Open the LivePerson website and login as an administrator. * Go to 'agent workspace' and click **Night Vision**, in the top right: * Click +, then **Add new widget**. 2. **Enter Widget Attributes** * Fill in the **Widget name** as 'ASAPP' * Assign the conversation skill(s) to which ASAPP is being deployed in the **Assigned skills** dropdown menu. Leaving **Assigned skills** blank will show the ASAPP widget for all conversation regardless of skill. * Enter the URL that contains the API key you were provided by your ASAPP account contact for your custom widget in the **URL** field. When configuring for a sandbox environment, use this URL format: `https://app.asapp.com/autocompose-liveperson/autocompose.html?apikey=\{your_sandbox_api_key\}&asapp_api_domain=api.sandbox.asapp.com` When configuring for a production environment, use this URL format: `https://app.asapp.com/autocompose-liveperson/autocompose.html?apikey=\{your_prod_api_key\}` * Click the **Save** button. Ensure **Hide** and **Manager View** are unselected once you are ready for agents to see the widget for conversations with the assigned skill(s). 3. **Move Widget to Top** * Click the **Organize** button * Scroll down to the ASAPP widget, and click the **Move top** button: * Click the **Done** button 4. **Enable Pop-in Composer** * In the Agent Workspace, click the nut icon (similar to a gear shape) next to the **+** icon at the bottom of the AutoCompose panel widget. * Enable the **Pop-in Composer** option. Press the escape key and reload the page to see the changes; the ASAPP widget should now be available across your LivePerson organization Upon login to the Agent Workspace, the ASAPP widget for AutoCompose will appear in place of the standard LivePerson composer, underneath the conversation transcript. By default, the response panel for AutoCompose will appear to the right of the conversational panel. ### 3. Set Up Single Sign-On ASAPP handles authentication through the customer's SSO service to confirm the identity of the agent. ASAPP acts as the Service Provider (SP) with the customer acting as the Identity Provider (IDP). The customer's authentication system performs user authentication using their existing user credentials. ASAPP supports SP-initiated SSO with either OIDC (preferred method) and SAML. Once the user initiates sign-in, ASAPP detects that the user is authenticated and requests an assertion from the customer's SSO service. **Configuration Steps for OIDC (preferred method)** 1. Create a new IDP OIDC application with type `Web` 2. Set the following attributes for the app:

Attribute

Value\*

Grant Type

authorization code

Sign-in Redirect URIs

Production: [https://api.asapp.com/auth/v1/callback/\\\{company\_marker\\}](https://api.asapp.com/auth/v1/callback/\\\{company_marker\\})

Sandbox: [https://api.sandbox.asapp.com/auth/v1/callback/\\\{company\_marker\\}-sandbox](https://api.sandbox.asapp.com/auth/v1/callback/\\\{company_marker\\}-sandbox)

**\*NOTE:** ASAPP to provide `company_marker` value 3. Save the application and send ASAPP the `Client ID` and `Client Secret` from the app through a secure communication channel 4. Set scopes for the OIDC application: * Required: `openid` * Preferred: `email`, `profile` 5. Tell ASAPP which end-user attribute should be used a unique identifier 6. Tell ASAPP your IDP domain name **Configuration Steps for SAML** 1. Create a new IDP SAML application. 2. Set the following attributes for the app: | Attribute | Value\* | | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Single Sign On URL | Production: [https://sso.asapp.com/auth/realms/standalone-\{company\_marker}-auth/broker/saml/endpoint/clients/asapp-saml](https://sso.asapp.com/auth/realms/standalone-\{company_marker}-auth/broker/saml/endpoint/clients/asapp-saml)

Sandbox: [https://sso.asapp.com/auth/realms/standalone-\{company\_marker}-auth/broker/saml-sandbox/endpoint/clients/asapp-saml-sandbox](https://sso.asapp.com/auth/realms/standalone-\{company_marker}-auth/broker/saml-sandbox/endpoint/clients/asapp-saml-sandbox) | | Recipient URL | Production: [https://sso.asapp.com/auth/realms/standalone-\{company\_marker}-auth/broker/saml/endpoint/clients/asapp-saml](https://sso.asapp.com/auth/realms/standalone-\{company_marker}-auth/broker/saml/endpoint/clients/asapp-saml)

Sandbox: [https://sso.asapp.com/auth/realms/standalone-\{company\_marker}-auth/broker/saml-sandbox/endpoint/clients/asapp-saml-sandbox](https://sso.asapp.com/auth/realms/standalone-\{company_marker}-auth/broker/saml-sandbox/endpoint/clients/asapp-saml-sandbox) | | Destination URL | Production: [https://sso.asapp.com/auth/realms/standalone-\{company\_marker}-auth/broker/saml/endpoint/clients/asapp-saml](https://sso.asapp.com/auth/realms/standalone-\{company_marker}-auth/broker/saml/endpoint/clients/asapp-saml)

Sandbox: [https://sso.asapp.com/auth/realms/standalone-\{company\_marker}-auth/broker/saml-sandbox/endpoint/clients/asapp-saml-sandbox](https://sso.asapp.com/auth/realms/standalone-\{company_marker}-auth/broker/saml-sandbox/endpoint/clients/asapp-saml-sandbox) | | Audience Restriction | Production: [https://sso.asapp.com/auth/realms/standalone-\{company\_marker}-auth/broker/saml/endpoint/clients/asapp-saml](https://sso.asapp.com/auth/realms/standalone-\{company_marker}-auth/broker/saml/endpoint/clients/asapp-saml)

Sandbox: [https://sso.asapp.com/auth/realms/standalone-\{company\_marker}-auth/broker/saml-sandbox/endpoint/clients/asapp-saml-sandbox](https://sso.asapp.com/auth/realms/standalone-\{company_marker}-auth/broker/saml-sandbox/endpoint/clients/asapp-saml-sandbox) | | Response | Signed | | Assertion | Signed | | Signature Algorithm | RSA\_SHA256 | | Digest Algorithm | SHA256 | | Attribute Statements | externalUserId: {unique_id_to_identify_the_user} | **\*NOTE:** ASAPP to provide `company_marker` value 3. Save the application and send the Public Certificate to validate Signature for this app SAML payload to ASAPP team 4. Send ASAPP team the URL of the SAML application ### 4. Configure Auto-Pilot Greetings If you so choose, you can work with your ASAPP contact to enable Auto-Pilot Greetings in your AutoCompose installation. Auto-Pilot Greetings automatically generates a greeting at the beginning of a conversation, and that greeting can be automatically sent to a customer on your agent's behalf after a configurable timer elapses. Your ASAPP contact can: * Turn Auto-Pilot Greetings on or off for your organization * Set a countdown timer value after which the Auto-Pilot Greeting is sent if an agent does not cancel Auto-Pilot by typing or clicking a "cancel" button * Set the global default messages that will be provided for Auto-Pilot Greetings across your organization (note that agents can optionally customize their Auto-Pilot Greetings messages within the Auto-Pilot tab of the AutoCompose panel) ## Usage ### Customization #### LivePerson For LivePerson, the standard process is to download ASAPP AutoCompose as a standalone widget. In the case that you already have your own LivePerson custom widget, ASAPP also provides the option for you to embed our custom widget inside your own custom widget, thus economizing on-screen real estate. **Conversation Attributes** Once the ASAPP AutoCompose widget is embedded, LivePerson shares the following conversation attributes with ASAPP: customer name, agent name and skill. ASAPP can use name attributes to populate values into templated responses (e.g. "Hi \[customer name], how can I help you today?") and to selectively filter response lists based on the skill of the conversation. **Conversation Redaction** When message text in the conversation transcript is sent to ASAPP, ASAPP applies redaction to the message text to prevent transmission of sensitive information. Reach out to your ASAPP account contact for information on available redaction capabilities to configure for your implementation. ### Data Security ASAPP's security protocols protect data at each point of transmission from first user authentication, to secure communications, to our auditing and logging system, all the way to securing the environment when data is at rest in the data logging system. Access to data by ASAPP teams is tightly constrained and monitored. Strict security protocols protect both ASAPP and our customers. The following security controls are particularly relevant to AutoCompose: 1. Client sessions are controlled using a time-limited authorization token. Privileges for each active session are controlled server-side to mitigate potential elevation-of-privilege and information disclosure risks. 2. To avoid unauthorized disclosure of information, unique, non-guessable IDs are used to identify conversations. These conversations can only be accessed using a valid client session. 3. Requests to API endpoints that can potentially receive sensitive data are put through a round of redaction to strip the request of sensitive data (like SSNs and phone numbers). ### Additional Considerations #### Historical Conversation Data for Generating a Response List ASAPP uses past agent conversations to generate a customized response list tailored to a given use case. In order to create an accurate and relevant list, ASAPP requires a minimum of 200,000 historical transcripts to be supplied ahead of implementing AutoCompose. For more information on how to transmit the conversation data, reach out to your ASAPP account contact. #### LivePerson ASAPP uses a browser extension to replace the LivePerson composer with the ASAPP composer. In the unlikely event that the DOM of the LivePerson composer or its surrounding area changes, the LivePerson composer may no longer be replaced by the ASAPP composer. In this case, the CSR has the option to toggle the ASAPP composer so that it 'retreats' into the ASAPP Custom Widget. In such a case, the ASAPP composer will continue to be fully functional, even if it is no longer ideally placed just below the LivePerson chat history. In order to quickly restore the placement of the ASAPP composer directly beneath the LivePerson chat log, ASAPP deploys its extension so that the extension's configuration is pulled down from our servers in real-time. If the LivePerson DOM does change, we can deploy a fix rapidly. # Deploying AutoCompose for Salesforce Source: https://docs.asapp.com/autocompose/deploying-autocompose-for-salesforce Use AutoCompose on Salesforce Lightning Experience. ## Overview This page describes how to Integrate AutoCompose in your Salesforce application. ### Integration Steps There are three parts to the AutoCompose setup process. Use the links below to skip to information about a specific part of the process: 1. [Configure the Salesforce organization](#1-configure-the-salesforce-organization-centrally) centrally using an administrator account 2. [Setup agent/user authentication](#2-set-up-single-sign-on) through the existing single sign-on (SSO) service 3. [Work with your ASAPP contact to configure Auto-Pilot Greetings](#3-configure-auto-pilot-greetings), if desired Expected effort for each part of the setup process: * 1 hour for installation and configuration of the ASAPP chat componentd * 1-2 hours to enable user authentication, depending on SSO system complexity ## Requirements **Browser Support** ASAPP AutoCompose is supported in Google Chrome and Microsoft Edge NOTE: This support covers the latest version of each browser and extends to the previous two versions Please consult your ASAPP account contact if your installation requires support for other browsers **Salesforce** ASAPP supports Lightning-based chat (cf. classic) **SSO Support** The AutoCompose widget supports SP-initiated SSO with either OIDC (preferred method) or SAML. **Domain Whitelisting** In order for AutoCompose to interact with ASAPP's backend and third-party support services, the following domains need to be accessible from end-user environments: | Domain | Description | | :----------------------------------------- | :----------------------------------------------------------------- | | \*.asapp.com | ASAPP service URLs | | \*.ingest.sentry.io | Application performance monitoring tool | | fonts.googleapis.com | Fonts | | google-analytics.com | Page analytics | | asapp-chat-sdk-production.s3.amazonaws.com | Static ASAPP AWS URL for desktop network connectivity health check | ## Integrate with Salesforce ### 1. Configure the Salesforce Organization Centrally **Before You Begin** You will need the following information to configure ASAPP for Salesforce: * Administrator credentials to login to your Salesforce organization account. * **NOTE:** Organization and Administrator should be enabled for 'chat'. * A URL for the ASAPP installation package, which will be provided by ASAPP. ASAPP provides the same install package for implementing both AutoCompose and AutoSummary in Salesforce. Use this guide to configure AutoCompose. If you're looking to implement AutoSummary, [use this guide](/autosummary/salesforce-plugin). * API Id and API URL values, which can be found in your ASAPP Developer Portal account (developer.asapp.com) in the **Apps** section. **Configuration Steps** **1. Install the ASAPP Package** * Open the package installation URL from ASAPP. * Login with your Salesforce organization administrator credentials. The package installation page appears: * Choose **Install for All Users** (as shown above). * Check the acknowledgment statement and click the **Install** button: * The Installation runs. An **Installation Complete!** message appears: * Click the **Done** button. **2. Add ASAPP to the Chat Transcript Page** * Open the 'Service Console' page (or your chat page). * Choose an existing chat session or start a new chat session so that the chat transcript page appears (the exact mechanism is organization-specific). * In the top-right, click the **gear** icon, then right-click **Edit Page**, and **Open Link in a New Tab**. * Navigate to the new tab to see the chat transcript edit page: * Select the conversation panel (middle) and delete it. * Drag the **chatAsapp** component (left), inside the conversation panel: * Drag the **exploreAsapp** component (left), to the right column. Next, add your organization's **API key** and **API URL** (found in the ASAPP Developer Portal) in the rightmost panel: The API key is labeled as **API Id** in the ASAPP Developer Portal. The API URL should be listed as `https://api.sandbox.asapp.com` for lower environments and `https://api.asapp.com` for production. * Click **Save**, then click **Activate** * Click **Assign as org default**. * Choose **Desktop** form factor, then click **Save**. * Return to the chat transcript page and refresh - the ASAPP composer should appear. ### 2. Set Up Single Sign-On ASAPP handles authentication through the customer's SSO service to confirm the identity of the agent. ASAPP acts as the Service Provider (SP) with the customer acting as the Identity Provider (IDP). The customer's authentication system performs user authentication using their existing user credentials. ASAPP supports SP-initiated SSO with either OIDC (preferred method) and SAML. Once the user initiates sign-in, ASAPP detects that the user is authenticated and requests an assertion from the customer's SSO service. **Configuration Steps for OIDC (preferred method)** 1. Create a new IDP OIDC application with type `Web` 2. Set the following attributes for the app:

Attribute

Value\*

Grant Type

authorization code

Sign-in Redirect URIs

Production: `https://api.asapp.com/auth/v1/callback/\{company_marker\}`

Sandbox: `https://api.sandbox.asapp.com/auth/v1/callback/\{company_marker\}-sandbox`

**\*NOTE:** ASAPP to provide `company_marker` value 3. Save the application and send ASAPP the `Client ID` and `Client Secret` from the app through a secure communication channel 4. Set scopes for the OIDC application: * Required: `openid` * Preferred: `email`, `profile` 5. Tell ASAPP which end-user attribute should be used a unique identifier 6. Tell ASAPP your IDP domain name **Configuration Steps for SAML** 1. Create a new IDP SAML application. 2. Set the following attributes for the app: | Attribute | Value\* | | :------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Single Sign On URL | Production: `https://sso.asapp.com/auth/realms/standalone-{company_marker}-auth/broker/saml/endpoint/clients/asapp-sam`l

Sandbox: `https://sso.asapp.com/auth/realms/standalone-{company_marker}-auth/broker/saml-sandbox/endpoint/clients/asapp-saml-sandbox` | | Recipient URL | Production: `https://sso.asapp.com/auth/realms/standalone-{company_marker}-auth/broker/saml/endpoint/clients/asapp-saml`

Sandbox: `https://sso.asapp.com/auth/realms/standalone-{company_marker}-auth/broker/saml-sandbox/endpoint/clients/asapp-saml-sandbox` | | Destination URL | Production: `https://sso.asapp.com/auth/realms/standalone-{company_marker}-auth/broker/saml/endpoint/clients/asapp-saml`

Sandbox: `https://sso.asapp.com/auth/realms/standalone-{company_marker}-auth/broker/saml-sandbox/endpoint/clients/asapp-saml-sandbox` | | Audience Restriction | Production: `https://sso.asapp.com/auth/realms/standalone-{company_marker}-auth/broker/saml/endpoint/clients/asapp-saml`

Sandbox: `https://sso.asapp.com/auth/realms/standalone-{company_marker}-auth/broker/saml-sandbox/endpoint/clients/asapp-saml-sandbox` | | Response | Signed | | Assertion | Signed | | Signature Algorithm | RSA\_SHA256 | | Digest Algorithm | SHA256 | | Attribute Statements | externalUserId: `{unique_id_to_identify_the_user}` | **\*NOTE:** ASAPP to provide `company_marker` value 3. Save the application and send the Public Certificate to validate Signature for this app SAML payload to ASAPP team 4. Send ASAPP team the URL of the SAML application ### 3. Configure Auto-Pilot Greetings If you so choose, you can work with your ASAPP contact to enable Auto-Pilot Greetings in your AutoCompose installation. Auto-Pilot Greetings automatically generates a greeting at the beginning of a conversation, and that greeting can be automatically sent to a customer on your agent's behalf after a configurable timer elapses. Your ASAPP contact can: * Turn Auto-Pilot Greetings on or off for your organization * Set a countdown timer value after which the Auto-Pilot Greeting is sent if an agent does not cancel Auto-Pilot by typing or clicking a "cancel" button * Set the global default messages that will be provided for Auto-Pilot Greetings across your organization (note thatagents can optionally customize their Auto-Pilot Greetings messages within the Auto-Pilot tab of the AutoCompose panel) ## Usage ### Customization #### Conversation Attributes Once the ASAPP AutoCompose widget is embedded, Salesforce shares the following conversation attributes with ASAPP: customer name, agent name and skill. ASAPP can use name attributes to populate values into templated responses (e.g. "Hi \[customer name], how can I help you today?") and to selectively filter response lists based on the skill of the conversation. #### Conversation Redaction When message text in the conversation transcript is sent to ASAPP, ASAPP applies redaction to the message text to prevent transmission of sensitive information. Reach out to your ASAPP account contact for information on available redaction capabilities to configure for your implementation. #### Composer Placement ASAPP currently targets Lightning desktops. Within Lightning-based desktops, you are free to place our composer wherever you choose. However, we suggest placing it immediately below the Salesforce conversation widget, such that the chat log appears above the ASAPP composer. ### Data Security ASAPP's security protocols protect data at each point of transmission from first user authentication, to secure communications, to our auditing and logging system, all the way to securing the environment when data is at rest in the data logging system. Access to data by ASAPP teams is tightly constrained and monitored. Strict security protocols protect both ASAPP and our customers. The following security controls are particularly relevant to AutoCompose: 1. Client sessions are controlled using a time-limited authorization token. Privileges for each active session are controlled server-side to mitigate potential elevation-of-privilege and information disclosure risks. 2. To avoid unauthorized disclosure of information, unique, non-guessable IDs are used to identify conversations. These conversations can only be accessed using a valid client session. 3. Requests to API endpoints that can potentially receive sensitive data are put through a round of redaction to strip the request of sensitive data (like SSNs and phone numbers). ### Additional Considerations #### Historical Conversation Data for Generating a Response List ASAPP uses past agent conversations to generate a customized response list tailored to a given use case. In order to create an accurate and relevant list, ASAPP requires a minimum of 200,000 historical transcripts to be supplied ahead of implementing AutoCompose. For more information on how to transmit the conversation data, reach out to your ASAPP account contact. # Feature Releases Overview Source: https://docs.asapp.com/autocompose/feature-releases | Feature Name | Feature Release Details | Additional Relevant Information (if available) | | :------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------ | :---------------------------------------------------- | | **Tooling** | [Tooling for AutoCompose](/autocompose/feature-releases/tooling-for-autocompose "Tooling for AutoCompose") | | | **Auto-Pilot Greetings** | [Auto-Pilot Greetings for AutoCompose](/autocompose/feature-releases/auto-pilot-greetings-for-autocompose "Auto-Pilot Greetings for AutoCompose") | Available for all implementation types of AutoCompose | | **Health Check API** | [Health Check API](/autocompose/feature-releases/health-check-api "Health Check API") | | | ****Sandbox for AutoCompose**** | [Sandbox for AutoCompose](/autocompose/feature-releases/sandbox-for-autocompose "Sandbox for AutoCompose") | | # Auto-Pilot Greetings for AutoCompose Source: https://docs.asapp.com/autocompose/feature-releases/auto-pilot-greetings-for-autocompose ## Feature Release This is the announcement for an upcoming ASAPP feature. Your ASAPP account team will provide a target release date and can direct you to more detailed information as needed. ## Overview Sending a prompt and personalized greeting message is critical to making a great first impression with a newly assigned customer. However, at the moment of assignment, agents are often in the middle of other important tasks. Switching context to get caught up on the conversation can be disruptive to the agent's productivity. With Auto-Pilot Greetings for AutoCompose, agents can configure an adaptive greeting message which will auto-send upon issue assignment following a configurable timeout period. The greeting can optionally use the customer's first name when it's available. Agents retain control of the feature --- they can turn Auto-Pilot Greetings on/off for themselves, individualize their automatically composed greeting messages, and intervene to either cancel or send the message immediately. ## Use and Impact Auto-Pilot Greetings automates agents' initial interaction with customers, freeing them for higher value tasks. AutoCompose's Auto-Pilot Greetings is intended to reduce an agent's average response time across concurrent issues by freeing up their attention, and ultimately reduce average handle time. ## How It Works For each conversation, Auto-Pilot Greetings follows a simple sequence: 1. Customer enters the chat 2. Auto-Pilot Greeting message and countdown timer appears above the composer 3. Timer counts down to zero 4. Greeting message is sent ### Configurations **Global On/Off** * This setting configures whether Auto-Pilot Greetings will be enabled or disabled for all agents. * Customers must reach out to their ASAPP contact to configure Auto-Pilot Greetings globally for their program. **Global Default Auto-Pilot Greeting Messages** * Two default Auto-Pilot Greetings messages must be configured: one version where the customer's name is known and one where the customer's name is not known. * Customers must reach out to their ASAPP contact to configure Global Default Auto-Pilot Greeting messages. **Agent Specific Auto-Pilot Greeting Messages and On / Off Settings** * Agents can optionally customize the Auto-Pilot Greeting messages composed on their behalf, and use their individualized messages in lieu of the global default messages; often agents include their name in their customized messages. Additionally, they can toggle whether Auto-Pilot Greetings is on or off for themselves by default. * If using AutoCompose for Salesforce or LivePerson, agents configure customized messages and the on / off setting themselves through the Auto-Pilots tab of their AutoCompose panel. This agent functionality can also be enabled via API for custom implementations of AutoCompose. **Countdown Timer** * The countdown timer is the amount of time after a customer enters the chat before an Auto-Pilot Greeting is sent. A countdown timer will display to the agent notifying them of the time remaining before auto-sending. * Customers must reach out to their ASAPP contact to set an appropriate countdown timer value, which will apply across their AutoCompose implementation. ## FAQs * **What are best practices for Auto-Pilot Greetings?** ASAPP recommends setting the default message to include questions that agents often need to ask in the beginning of a call to resolve a dispute. For example: > \*"Hi, \[NAME]. This is Robert and I'm happy to assist you today. So I can best help you, can you please provide me with your account number and a description of your issue?" Furthermore, ASAPP recommends setting a countdown timer value in the range of 10-15 seconds. Too long of a default may increase handle times. Too short of a default may not give an agent a chance to cancel the Auto-Pilot Greeting should they so desire. # Health Check API Source: https://docs.asapp.com/autocompose/feature-releases/health-check-api ## Feature Release This is the announcement for an upcoming ASAPP feature. Your ASAPP account team will provide a target release date and can direct you to more detailed information as needed. ## Overview ASAPP provides a means for our customers to check the operational status of our API platform. Developers can ping this endpoint to verify that the ASAPP infrastructure is working as expected. ## Use and Impact Developers can either check ad hoc if the ASAPP infrastructure is up at a given time or implement automated API monitoring to send a request to the Health Check API at a preset interval. This feature is intended to improve developer confidence when integrating with ASAPP services. It also removes the need for developers to send requests to other ASAPP services to check their status, which may trigger errors unnecessarily. ## How It Works Developers can run a `GET https://api.sandbox.asapp.com/v1/health` operation and inspect for a 200 response with either the SUCCESS or FAILED value for the status of the core ASAPP platform. **Configuration** Developers must request access to the API endpoint in the Developer Portal: 1. Access the Developer Portal. 2. Navigate to **Apps**, select your application, and authorize the Health Check API. 3. Reach out to your ASAPP account team to authorize access. # Sandbox for AutoCompose Source: https://docs.asapp.com/autocompose/feature-releases/sandbox-for-autocompose ## Feature Release This is the announcement for an upcoming ASAPP feature. Your ASAPP account team will provide a target release date and can direct you to more detailed information as needed. ## Overview AutoCompose Sandbox is a playground designed to preview an agent's experience with AutoCompose without having to wait for an integration to complete. AutoCompose Sandbox enables administrators to step into the role of an agent and experience the real-time suggestions that AutoCompose provides. ## Use and Impact AutoCompose Sandbox enables administrators to visualize the experience that AutoCompose gives to agents presented in two areas of the screen: in the composer, which is where the agent types, and in the AutoCompose panel on the right-hand side. Beyond showcasing the operational features of AutoCompose, the sandbox environment also delivers a proposed UI design. This design is rooted in thorough research on agent experience, resulting in increased product adoption and time savings. AutoCompose provides both complete response suggestions above the composer and in-line suggestions while typing. The sandbox replicates the experience an agent would get, receiving suggestions from the response library. As AutoCompose learns from agents' most common responses, the response library will grow, which will be reflected in the suggestions provided in the sandbox. ## How It Works Watch the following video walkthrough to learn how to use the AutoCompose Sandbox: ``` ### iframe Styling You can customize the ASAPP Chat SDK iframe by using the ID `#asapp-chat-sdk-iframe` or classname `.asappChatSDKIFrame` selectors. The following snippet is an example of how you may want to use these selectors to customize the element to your brand. ```json @media only screen and (min-width: 415px) { #asapp-chat-sdk-iframe { box-shadow: 0 2px 12px 0 rgba(35, 6, 60, .05), 0 2px 49px 0 rgba(102, 51, 153, .25); } } ``` Modifying the sizing or positioning of the iframe is currently not supported. Change those properties at your own risk; a moved or resized iframe is not guaranteed to work with upcoming releases of the ASAPP platform ## Customize the Chat UI ASAPP will customize the Chat SDK iframe User Interface (UI) in close collaboration with design and business stakeholders. ASAPP will work within your branding guidelines to apply an appropriate color palette, logo, and typeface. There are two particularly technical requirements that we can assess early on to provide a more seamless delivery of requirements: ### 1. Chat Header Logo The ASAPP SDK Team will embed your logo into the Chat SDK Header. Please provide your logo in the following format: * SVG format * Does not exceed 22 pixels in height * Does not exceed 170 pixels in width * Should not contain animations * Should not contain filter effects If you follow the above guidelines your logo will: * display at the most optimal size for responsive devices * sit well within the overall design * display properly ### 2. Custom Typefaces Using a custom typeface within the ASAPP Chat SDK requires detailed technical requirements to ensure that the client is performant, caching properly, and displaying the expected fonts. For the best experience, you should provide ASAPP with the following: * The font should be available in any of the following formats: WOFF2, WOFF, OTF, TTF, and EOT. * The font should be hosted in the same place that your own site's custom typeface is hosted. * The same hosted font files should have an `Access-Control-Allow-Origin` that allows `sdk.asapp.com` or `*`. * The files should have proper cache-control headers as well as GZIP compression. For more information on web font performance enhancements, ASAPP recommends the article: [Web Font Optimization](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/webfont-optimization), published by Google and Ilya Grigorik. * You acknowledge that you will provide ASAPP with the URLs for each of the hosted font formats for use in a CSS @font-face declaration, hosted on sdk.asapp.com. * If your font becomes unavailable for display, ASAPP will default to using [Lato](https://fonts.google.com/specimen/Lato), then Arial, Helvetica, or a default sans-serif font. # Web Examples Source: https://docs.asapp.com/messaging-platform/integrations/web-sdk/web-examples This section provides a few common integration scenarios with the ASAPP Chat SDK. Before continuing, make sure you've [integrated the ASAPP SDK](/messaging-platform/integrations/web-sdk/web-quick-start "Web Quick Start") script on your page. You must have the initial script available before utilizing any of the examples below. Also, be sure that you have a [Trigger](/messaging-platform/integrations/web-sdk/web-features#triggers "Triggers") enabled for the page(s) you wish to display the Chat SDK. * [Basic Integration (no Authentication)](#basic-integration-no-authentication "Basic Integration (no Authentication)") * [Basic Integration (With Authentication)](#basic-integration-with-authentication "Basic Integration (With Authentication)") * [Customizing the Interface](#customizing-the-interface "Customizing the Interface") * [Advanced Integration](#advanced-integration "Advanced Integration") ## Basic Integration (no Authentication) The most basic integrations are ones with no customizations to the ASAPP interface and no integrated use cases. If your company is simply providing an un-authed user experience, an integration like the one below may suffice. ee the [App Settings](/messaging-platform/integrations/web-sdk/web-app-settings "Web App Settings") page for details on the [APIHostname](/messaging-platform/integrations/web-sdk/web-app-settings#apihostname "APIHostName") and [AppId](/messaging-platform/integrations/web-sdk/web-app-settings#appid "AppId") settings. The following code snippet is an example of a non-authenticated integration with the ASAPP Chat SDK. ```json document.addEventListener('DOMContentLoaded', function () { ASAPP('load', { APIHostname: 'example-co.api.asapp.com', AppId: 'example-co' }); }); ``` With the above information set, a user will be able to access integrated use cases. If their session or token information has expired, then the user will be presented with a "Sign In" button. Once the user clicks the Sign In button, the Chat SDK will call your provided UserLoginHandler, allowing them to authorize. Here's a sample of what the Sign In button looks like. ## Basic Integration (With Authentication) Integrating the Chat SDK with authenticated users requires the addition of the `CustomerId`, `ContextProvider`, and `UserLoginHandler` keys. See the [App Settings](/messaging-platform/integrations/web-sdk/web-app-settings "Web App Settings") page for more detailed information on their usage. With each of these keys set, a user will be able to access integrated use cases or be capable of logging in if they are not already. The following code snippet is an example of providing user credentials for allowing a user to enter integrated use cases. ```json document.addEventListener('DOMContentLoaded', function () { ASAPP('load', { APIHostname: 'example-co.api.asapp.com', AppId: 'example-co', CustomerId: 'hashed-customer-identifier', ContextProvider: function (callback, tokenIsExpired) { var context = { Auth: { Token: 'secure-session-user-token' } }; callback(context); }, // If a user's token expires or their user credentials // are not available, handle their login path UserLoginHandler: function () { window.location.href = '/login'; } }); }); ``` With the above information set, a user will be able to access integrated use cases. If their session or token information has expired, then the user will be presented with a "Sign In" button. Once the user clicks the Sign In button, the Chat SDK will call your provided `UserLoginHandler`, allowing them to authorize. Here's a sample of what the Sign In button looks like. ## Customizing the Interface The Chat SDK offers a few basic keys for customizing the interface to your liking. The `Display` key enables you to perform those customizations as needed. Please see the [Display Settings](/messaging-platform/integrations/web-sdk/web-app-settings#display "Display") section for detailed information on each of the available keys. The following code snippet shows how to add the Display key to your integration to customize the display settings of the Chat SDK. ```json document.addEventListener('DOMContentLoaded', function () { ASAPP('load', { APIHostname: 'example-co.api.asapp.com', AppId: 'example-co', Display: { Align: 'left', AlwaysShowMinimize: true, BadgeColor: '#36393A', BadgeText: 'Chat With Us', BadgeType: 'tray', FrameDraggable: true, FrameStyle: 'sideBar' } }); }); ``` For cases in which you have more specific styling needs, you may utilize the available IDs or classnames for targeting and customizing the Chat SDK elements with CSS. These selectors are stable and can be used to target the ASAPP Badge and iFrame for specific styling needs. The following code snippet provides a CSS example showcasing a few advanced style changes. ```json #asapp-chat-sdk-badge, #asapp-chat-sdk-badge, #asapp-chat-sdk-badge { border-radius: 25px; bottom: 10px; box-shadow: 0 0 0 2px #fff, 0 0 0 4px #36393A; } #asapp-chat-sdk-iframe { border-radius: 0; } ``` With the above customizations in place, the Chat SDK Badge will look like the following. ## Advanced Integration Here's a more robust example showing how to utilize most of the ASAPP Chat SDK settings. In the examples below we will define a few helper methods, then pass those helpers to the [Load](/messaging-platform/integrations/web-sdk/web-javascript-api#load "'load'") or [SetCustomer](/messaging-platform/integrations/web-sdk/web-javascript-api#setcustomer "'setCustomer'") APIs. The following example showcases a [ContextProvider](/messaging-platform/integrations/web-sdk/web-contextprovider "Web ContextProvider") that sets some basic session information, then sets any available user authentication information. Once that information is retrieved, it passes the prepared context to the `callback` so that ASAPP can process each Chat SDK request. The following code snippet is a ContextProvider example utilizing session expiration conditionals. ```javascript function asappContextProvider (callback, tokenIsExpired, sessionInfo) { var context = { CustomerInfo: { Region: 'north-america', ViewingProduct: 'New Smartphone', } }; if (tokenIsExpired || !sessionInfo) { sessionInfo = retrieveSessionInfo(); }; if (sessionInfo) { context.Auth = { Cookies: { 'X-User-Header': sessionInfo.cookies.userValue }, Token: sessionInfo.access_token }; } callback(context); } ``` The next example shows conditional logic for logging a user in on single or multi-page application. You'll likely only need to handle one of the cases in your application. If a user enters a use case they are not authorized for, they will be presented with a "Sign In" button within the SDK. When the user clicks that link, it will trigger your provided [UserLoginHandler](/messaging-platform/integrations/web-sdk/web-app-settings#userloginhandler "UserLoginHandler") so you can allow the user to authenticate. The following code snippet shows a UserLoginHandler utilizing page redirection or modals to log a user in. ```javascript function asappUserLoginHandler () { if (isSinglePageApp) { displayUserLoginModal() .then(function (customer, sessionInfo) { ASAPP('SetCustomer', { CustomerId: customer, ContextProvider: function (callback, tokenIsExpired) { asappContextProvider(callback, tokenIsExpired, sessionInfo) } }); }) } else { window.location.href = '/login'; } } ``` The next helper defines the [onLoadComplete](/messaging-platform/integrations/web-sdk/web-app-settings#onloadcomplete "onLoadComplete") handler. It is used for preparing any additional logic you wish to tie to ASAPP or your own page functionality. The below example checks whether the Chat SDK loaded via a [Trigger](/messaging-platform/integrations/web-sdk/web-features#triggers "Triggers") (via the `isDisplayingChat` argument). If it's configured to display, it prepares some event bindings through the [Action API](/messaging-platform/integrations/web-sdk/web-javascript-api#action-on-or-off "action: 'on' or 'off'") which in turn call an example metrics service. The following code snippet shows an `onLoadComplete` handler being used with the isDisplayingChat conditional and Action API. ```javascript function asappOnLoadComplete (isDisplayingChat) { if (isDisplayingChat) { // Chat SDK has loaded and exists on the page document.body.classList.add('chat-sdk-loaded'); var customerId = retrieveCurrentSessionOrUserId(); ASAPP('on', 'issue:new', function (event) { metricService('set', 'chat:action', { actionName: event.type, customerId: customerId, externalCustomerId: event.detail.customerId, issueId: event.detail.issueId }) }); ASAPP('on', 'message:received', function (event) { metricService('set', 'chat:action', { actionName: event.type, customerId: customerId, externalCustomerId: event.detail.customerId, isLiveChat: event.detail.isLiveChat, issueId: event.detail.issueId, senderType: event.detail.senderType }) }); } else { // Chat SDK is not configured to display on this page. // See Display Settings: Triggers documentation } } ``` Finally, we tie everything together. The example below shows a combination of adding the above helper functions to the ASAPP [Load API](/messaging-platform/integrations/web-sdk/web-javascript-api#load "'load'"). It also combines many of the [App Settings](/messaging-platform/integrations/web-sdk/web-app-settings "Web App Settings") available to you and your integration. ```javascript document.addEventListener('DOMContentLoaded', function () { var customerId = retrieveCustomerIdentifier(); ASAPP('load', { APIHostname: 'example-co.api.asapp.com', AppId: 'example-co', Display: { Align: 'left', AlwaysShowMinimize: true, BadgeColor: 'rebeccapurple', BadgeText: 'Chat With Us', BadgeType: 'tray', FrameDraggable: true, FrameStyle: 'sideBar', Identity: 'subsidiary-branding' }, Intent: { Code: 'PAYBILL' }, RegionCode: 'US', Sound: true, CustomerId: customerId, ContextProvider: asappContextProvider, UserLoginHandler: asappUserLoginHandler, onLoadComplete: asappOnLoadComplete }); }); ``` # Web Features Source: https://docs.asapp.com/messaging-platform/integrations/web-sdk/web-features This section describes various features that are unique to the ASAPP Web SDK: * [Triggers](#triggers "Triggers") * [Deeplinks](#deeplinks-11865 "Deeplinks") In addition, please see [Chat Instead](/messaging-platform/integrations/chat-instead/web "Web"). ## Triggers A Trigger is an ASAPP feature that allows you to specify which pages display the ASAPP Chat UI. You may choose to show the ASAPP Chat UI on all pages where the ASAPP Chat SDK is [embedded and loaded](/messaging-platform/integrations/web-sdk/web-quick-start "Web Quick Start"), or on just a subset of those pages. You must enable at least one Trigger in order for the ASAPP Chat UI to display anywhere on your site. Until you define at least one Trigger, the ASAPP Chat UI will not display on your site. Once you've [embedded](/messaging-platform/integrations/web-sdk/web-quick-start#1-embed-the-script "1. Embed the Script") and [loaded](/messaging-platform/integrations/web-sdk/web-javascript-api#load "'load'") the Chat SDK on your web pages, ASAPP will determine whether or not to display the Chat UI on the user's current URL. URLs that are enabled for displaying the UI are configured by a feature known as Triggers. You will need to be set up as a user of the ASAPP Admin Control Panel in order to make the changes described below. Once you are granted permissions, you may utilize the Triggers as a means of specifying which pages are eligible to show the ASAPP Chat UI. ### Creating a Trigger 1. Visit the **Admin > Triggers** section of your Admin Desk. 2. Click the **Add +** button from the Triggers settings page. 3. In the **URL Link** field, enter the URL for the page where you would like to display the ASAPP Chat UI. (See the **Types of Triggers** section below for some example values.) 4. Click **Next >**. 5. Give the Trigger a display name. (Display names are used only on the Triggers settings page to help you organize and manage your triggers.) 6. Click **Save**. 7. You should now see the new entry on your Trigger settings page. 8. Visit the newly configured page on your site to double-check that the ASAPP Chat UI is loading or hiding as you expect. ### Types of Triggers You may finely control the display of the ASAPP Chat UI on your site by adding as many Triggers as you like. Triggers can be defined in two different ways: as **Wildcard** and as **Single-Page Triggers**. #### Wildcard Triggers You can use the wildcard character in the URL Link field of a Trigger to enable the display of the Chat SDK pages that follow a URL pattern. The asterisk (i.e., `/*` is the wildcard character you use when defining a Trigger. When you use an asterisk in the URL Link of your Trigger definition, that character will match any sequence of one or more characters. To set a wildcard for your entire domain, enter a **URL Link** value for your domain name, followed by `/*` (e.g., `example.com/*` ). This will enable the display of the ASAPP Chat UI on all pages of your site. To enable the ASAPP Chat UI to appear on a more limited set of pages, enter a **URL Link** value that includes the appropriate sub-route path, followed by the `/*` wildcard (e.g., `example.com/settings/*`). This will cause the Chat UI to display on any pages that start with the URL and sub-route `example.com/settings/`, such as `example.com/settings/profile` and `example.com/settings/payment`. #### Single-Page Triggers If you want the ASAPP Chat UI to display on only a few specific pages, you can create a separate Trigger for each of those pages, one at a time, by entering the exact URL for the page you wish to enable in the URL Link field of the Trigger definition. For example, entering `example.com/customer-support/shipping.html` in the URL Link field of your Trigger definition will enable the ASAPP Chat UI to display on that single page. ## Deeplinks A feature that defines how the SDK opens hyperlinks when a user clicks a link to another document. In the ASAPP Web SDK, we use the browser's `window.location.origin` API to determine whether the link should open in the same window or a new window. In order for a link to open in the same window as the user's current SDK window, the `window.location.origin` must return a matching protocol and hostname. For example, if a user is on `https://www.example.com` and clicks a link to `https://www.example.com/page-two`, the SDK changes the current page to the destination page in the same window. A link opens in a *new* window if there is any difference between the current page and the destination page origin. When a user clicks a link from `https://www.example.com` to `https://subdomain.example.com` , the SDK opens the destination page in a new window due to hostname variation. A link from `https://example.com` to `http://example.com` also opens a new window due to a mismatched protocol. When a link opens a new window, the user's SDK window remains open. # Web JavaScript API Source: https://docs.asapp.com/messaging-platform/integrations/web-sdk/web-javascript-api This section details the various API methods you can call to the ASAPP Chat SDK. Before making any API calls, make sure you've [integrated the ASAPP SDK](/messaging-platform/integrations/web-sdk/web-quick-start "Web Quick Start") script on your page. Once you've integrated the SDK with your site, you can use the JavaScript API to toggle settings in the Chat SDK, trigger events, or send information to ASAPP. The Chat SDK Web JavaScript API allows you to perform a variety of actions. The most common are: initializing the SDK with the ['load'](#load "'load'")method, setting customer authorizations with ['setCustomer'](#setcustomer "'setCustomer'"), or toggling the display of the iFrame with the ['show'](#show "'show'") or ['hide'](#hide "'hide'") methods. Read on for details on each of these methods: * [action: 'on' or 'off'](#action-on-or-off "action: 'on' or 'off'") * ['getState'](#getstate "'getState'") * ['hide'](#hide "'hide'") * ['load'](#load "'load'") * ['refresh'](#refresh "'refresh'") * ['send'](#send "'send'") * ['set'](#set-"'set'") * ['setCustomer'](#setcustomer "'setCustomer'") * ['setIntent'](#setintent "'setIntent'") * ['show'](#show "'show'") * ['showChatInstead'](#showchatinstead "'showChatInstead'") [unload](#unload "unload") ## action: 'on' or 'off' This API subscribes or unsubscribes to events that occur within the Chat SDK. A developer can apply custom behavior, track metrics, and more by subscribing to one of the Chat SDK custom events. To utilize the Action API, pass either the `on` (subscribes) or `off` (unsubscribes) keywords to the `ASAPP` method. The next argument is the name of the event binding. The final argument is the callback handler you wish to attach. The following code snippet is an example of the Action API subscribing and unsubscribing to the `agent:assigned` and `message:received` events: ```json function agentAssignedHandler (event) { onAgentAssigned(event.detail.issueId, event.detail.externalSenderId); } function messageHandler (event) { const { isFirstMessage, externalSenderId } = event.detail; if (isFirstMessage && externalSenderId) { OnAgentInteractive(event.detail.issueId, event.detail.customerId); } else if (isFirstMessage === false && isFromRep) { ASAPP('off', 'message:received', messageHandler); } } ASAPP('load', { onLoadComplete: () => { ASAPP('on', 'agent:assigned', agentAssignedHandler); ASAPP('on', 'message:received', messageHandler); } }); ``` ### Event Object Each event receives a `CustomEvent` object as the first argument to your event handler. This is a [standard event object](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent) with all typical interfaces. The object has an `event.type` with the name of the event and an `event.detail` key which contains the following custom properties: `issueId` (Number) The ASAPP identifier for an individual issue. This ID may change as a user completes and starts new queries to the ASAPP system. `customerId` (Number) The ASAPP identifier for a customer. This ID is consistent for authenticated users but may be different for anonymous ones. Anonymous users will have a consistent ID for the duration of their session. `externalSenderId` (String) The external identifier you provide to ASAPP that represents an agent identifier. This property will be undefined if the user is not connected with an agent. ### Chat Events Chat events trigger when a user opens or closes the Chat SDK window. These events do not have any additional event details. `chat:show` * Cancellable: true This event triggers when a user opens the Chat SDK. It may fire multiple times per session if a user repeatedly closes and opens the chat. `chat:hide` * Cancellable: true This event triggers when a user closes the Chat SDK. It may fire multiple times per session if a user repeatedly opens and closes the chat. ### Issue Events Issue events occur when a change in state of an Issue occurs within the ASAPP system. These events do not have any additional event details. `issue:new` * Cancellable: false This event triggers when a user has opened a new issue. It fires when they first open the Chat SDK or if they complete an issue and start another one. `issue:end` * Cancellable: false This event triggers when a user or agent has ended an issue. It fires when the user has completed an automated support request or when a user/agent ends an active chat. ### Agent Events Agent events occur when particular actions occur with an agent within ASAPP's system. These events do not have any additional event details. `agent:assigned` * Cancellable: false This event triggers when a user is connected to an agent for the first time. It fires once the user has left an automated support flow and has been connected to a live support agent. ### Message Events Message events occur when the user receives a message from either SRS or an agent. These events have the following additional event details: `senderType` (String)  Returns either `srs` or `agent`. `isLiveChat` (Boolean)  Returns `true` when a user is connected with an agent. Returns `false` when a user is within an automated flow. `isFirstMessage` (Boolean)  Returns `true` only when a message is the first message received from an agent or SRS. Otherwise returns `false`. `message:received` * Cancellable: false This event triggers whenever the Chat SDK receives a message event to the chat log. It will fire when a user receives a message from SRS or an agent. ## 'getState' This API returns the current state of Chat SDK session. It accepts a callback which receives the current state object. ```json ASAPP('getState', function(state) { console.log(state); }); ``` ### State Object The state object contains the following keys which give you insight into the user's actions: `hasContext` (Object)  Returns the current [context](/messaging-platform/integrations/web-sdk/web-contextprovider "Web ContextProvider") known by the SDK. `hasCustomerId` (Boolean)  Returns true when the SDK has been provided with a [CustomerId](/messaging-platform/integrations/web-sdk/web-app-settings#customerid "CustomerId") setting. `isFullscreen` (Boolean)  Returns true when the SDK will render in fullscreen for mobile web devices. `isLiveChat` (Boolean)  Returns true when the use is connected to an agent. `isLoggingIn` (Boolean)  Returns true if the user has been presented with and clicked on a button to Log In. `isMobile`(Boolean)  Returns true when the SDK is rendering on a mobile or tablet device. `isOpen` (Boolean)  Returns true if the user has the SDK open on the current or had it open on the previous page. `unreadMessages` (Integer)  Returns a count of how many messages the user has received since minimizing the SDK. ## 'hide' This API hides the Chat SDK iframe. See [Show](#-show- "'show'") for revealing the Chat SDK iframe. This method is useful for when you want to close the SDK iframe after certain page interactions or if you've provided a custom Badge entry point. ```json ASAPP('hide'); ``` ## 'load' This API initializes the ASAPP Chat SDK for display on your pages. The method's second argument is an object accepting a variety of properties. The `Load` method has two required properties, [APIHostname](/messaging-platform/integrations/web-sdk/web-app-settings#apihostname "APIHostName") and [AppId](/messaging-platform/integrations/web-sdk/web-app-settings#appid "AppId"). ```json ASAPP('load', { APIHostname: 'API_HOSTNAME', AppId: 'APP_ID' }); ``` Please see the [SDK Settings](/messaging-platform/integrations/web-sdk/web-app-settings "Web App Settings") page for a list of all the available properties that can be passed to the `Load` API. ## 'refresh' This API checks to make sure that [Triggers](/messaging-platform/integrations/web-sdk/web-features#triggers "Triggers") work properly when a page URL changes in a SPA (Single-Page Application). You should call this API every time the page URL changes if your website is a SPA. ```json ASAPP('refresh') ``` ## 'send' This API proactively sends the context object defined in your `contextProviderHandler` function to ASAPP's API. It is primarily used to send information that is used to show a proactive chat prompt when a specific criteria or set of criteria are met. The `Send` API is rate limited to one request for every 5 seconds. It accepts a single argument, represented as an object. This should contain the `CustomerInfo` object, which enables you to send a set of key-value pairs to ASAPP. For example, you could use a key within `CustomerInfo` to indicate that a customer had abandoned their shopping cart. Do not use the send API for transmitting any information that you would consider sensitive or Personally Identifiable Information (PII). The accepted keys are listed below. ### Send Properties These keys are required when calling the `send` API. `type` (String) Required The type of event you're sending to ASAPP. Below are the possible values you may set as an event type: * '`customer`'. See the "[Event Type: Customer](#event-type-customer "Event Type: Customer")" section below. `data` (Object) The data you're attaching to the event. The `data` object contains key and value pairs that are appropriate to the event `type` you are sending. ### Event Type: Customer This event type sends information about a user's interaction on your site to ASAPP. This allows you to send promotional messages or route them to particular use cases when they interact with the Chat SDK. The `data` for a `customer` event type should be an object containing properties similar to your `CustomerInfo` object. ```json ASAPP('send', { type: 'customer', data: { "key1": "value1", "key2": "value2" } }); ``` ## 'set' This API applies various user information to the Chat SDK. Calling this API does not make a network request. The API accepts two arguments. The first is the name of the key you want to update. The second is the value that you wish to assign the key. ```json ASAPP('set', 'Auth', { Token: '3858f62230ac3c915f300c664312c63f' }); ASAPP('set', 'ExternalSessionId', 'j6oAOxCWZh...'); ``` Please see the [Context Provider](/messaging-platform/integrations/web-sdk/web-contextprovider "Web ContextProvider") page for a list of all the properties you can provide to this API. ## 'setCustomer' This API provides an access token with your customer's account after the Chat SDK has already loaded. This method is useful if a customer logs into their account or if you need to refresh your customer's auth token from time to time. See the [SDK Settings](/messaging-platform/integrations/web-sdk/web-app-settings "Web App Settings") section for details on the [CustomerId](/messaging-platform/integrations/web-sdk/web-app-settings#customerid "CustomerId") (Required), [ContextProvider](/messaging-platform/integrations/web-sdk/web-app-settings#contextprovider "ContextProvider") (Required), and [UserLoginHandler](/messaging-platform/integrations/web-sdk/web-app-settings#userloginhandler "UserLoginHandler") properties accepted for SetCustomer's second argument. ```json ASAPP('setCustomer', { CustomerId: 'a1b2c3x8y9z0', ContextProvider: function (callback) { var context = { Auth: { Token: '3858f62230ac3c915f300c664312c63f' } }; callback(context); } }); ``` ## 'setIntent' This API lets you set an intent after Chat SDK has already been loaded and will take effect even if the user is in chat. ASAPP recommends that you use [Intent](/messaging-platform/integrations/web-sdk/web-app-settings#intent "Intent") via App Settings during load. This method takes an object as a parameter, with a required key of `Code`. `Code` accepts a string. Your team and your ASAPP Implementation Manager will determine the available values. ```js ASAPP('setIntent', {Code: 'PAYBILL'}); ``` ## 'show' This API shows the Chat SDK iframe. See [Hide](#-hide- "'hide'") for hiding the Chat SDK iframe. This method is useful for when you want to open the SDK iframe after certain page interactions or if you've provided a custom Badge entry point. ```json ASAPP('show'); ``` ## 'showChatInstead' This API displays the [Chat Instead](../chat-instead/web "Web") feature. This API displays the Chat Instead feature. In order to enable this feature, please integrate with the `showChatInstead` API and then contact your Implementation Manager. **Options:**

Key

Description

Required

phoneNumber

Phone number used when a user clicks phone in Chat Instead.

Yes

APIHostName

Sets the ASAPP APIHostName for connecting customers with customer support.

No

(Required if you have not initialized the WebSDK via the Load API on the page)

AppId

Your unique Company Identifier.

**Example Use Case:** ```json (800) 123-4567 ``` ## unload This API removes all the SDK related elements from the DOM (Badge, iframe, and Proactive Messages if any). If the SDK is already open or a user is in live chat, ASAPP will ignore this call. To reload the SDK, you need to call the "Load" API. ```json ASAPP('unload') ``` # Web Quick Start Source: https://docs.asapp.com/messaging-platform/integrations/web-sdk/web-quick-start If you want to start fast, follow these steps: 1. Embed the Script 2. Initialize the SDK 3. Customize the SDK 4. Authenticate Users In addition, see an example of a [Full Snippet](#full-snippet "Full Snippet"). ## 1. Embed the Script 1. Embed the script directly inline. See the instructions below. 2. Use a tag manager to control where and how the scripts load. The ASAPP Chat SDK works with most tag managers. See the tag manager documentation for more detailed instructions. To enable the ASAPP Chat SDK, you'll first need to paste the [ASAPP Chat SDK Web snippet](#full-snippet) into your site's HTML. You can place it anywhere in your markup, but it's ideal to place it near the top of the `` element. ``` ``` This snippet does two things: 1. Creates a ` ``` **Note:** The `APIHostname` and `AppId` values will be provided to you by ASAPP after coordination between your organization and your ASAPP Implementation Manager. Once these values have been determined and provided, you can make the following updates: 1. Replace `API_HOSTNAME` with the hostname of your ASAPP API location. This string will look something like ```screen 'examplecompanyapi.asapp.com'. ``` 2. Replace `APP_ID` with your Company Marker identifier. This string will look something like `'examplecompany'`. Calling `ASAPP('load')` will make a network request to your APIHostname and determine whether or not it should display the Chat SDK Badge. The Badge will display based on your company's business hours, your trigger settings, and whether or not you have enabled the SDK in your Admin control panel. For more advanced ways to display the ASAPP Chat SDK, see the [JavaScript API Documentation](/messaging-platform/integrations/web-sdk/web-javascript-api "Web JavaScript API"). ## 3. Customize the SDK After you Embed the Script and Initialize the SDK, the ASAPP Chat SDK should display and function on your web page. You may wish to head to the [Customization](/messaging-platform/integrations/web-sdk/web-customization "Web Customization") section of the documentation to learn how to customize the appearance of the ASAPP Chat SDK. ## 4. Authenticate Users Some integrations of the ASAPP Chat SDK allow users to access sensitive account information. If any of your use cases fall under this category, please read the [Authentication](/messaging-platform/integrations/web-sdk/web-authentication "Web Authentication") section to ensure your users experience a secure and seamless session. ## Full Snippet For additional legibility, here's the full Chat SDK Web integration snippet: ```json (function(win, doc, hostname, namespace, script) { script = doc.createElement('script'); win[namespace] = win[namespace] || function() { (win[namespace]._ = win[namespace]._ || []).push(arguments) } win[namespace].Host = hostname; script.async = 1; script.src = hostname + '/chat-sdk.js'; script.type = 'text/javascript'; doc.body.appendChild(script); })(window, document, 'https://sdk.asapp.com', 'ASAPP'); ``` # WhatsApp Business Source: https://docs.asapp.com/messaging-platform/integrations/whatsapp-business WhatsApp Business is a service that enables your organization to communicate directly with your customers in WhatsApp through your Customer Service Platform (CSP), which in this case will be ASAPP. ## Quick Start Guide 1. Create a Business Manager (BM) Account with Meta 2. Create WhatsApp Business Accounts (WABA) in AI-Console 3. Modify Flows and Test 4. Create and Implement Entry Points 5. Determine Launch and Throttling Strategy ### Create a Business Manager (BM) Account Before integrating with ASAPP's WhatsApp adapter, you must create a Business Manager (BM) account with Meta - visit [this page for account creation](https://www.facebook.com/business/help/1710077379203657?id=180505742745347). Following account creation, Meta will also request you follow a [business verification](https://www.facebook.com/business/help/1095661473946872?id=180505742745347) process before proceeding. ### Create WhatsApp Business Accounts (WABAs) Once a Business Manager account is created and verified, proceed to set up WhatsApp Business Accounts (WABAs) using Meta's embedded signup flow in AI-Console's **Messaging Channels** section. Five total WABAs need to be created: three for lower environments, one for the demo (testing) environment and one for production. Your ASAPP account team can assist with creation of WABAs for lower environments if needed - please reach out with your teams to coordinate account creation. In this signup flow, you will set up an account name, time zone and payment method for the WABA and assign full control permissions to the `ASAPP (System User)`. #### Register Phone Numbers As part of the signup flow, each WABA must have at least one phone number assigned to it (multiple phone #s per WABA are supported). Before adding a number, you must also create a profile display name, **which must match the name of the Business Manager (BM) account.** For implementation speed, ASAPP recommends using ASAPP-provisioned phone numbers for the three lower environment WABAs. Your ASAPP account team can guide you through this process. All provisioned phone numbers registered to WABAs need to meet [requirements specified by Meta](https://developers.facebook.com/docs/whatsapp/phone-numbers#pick-number). ### Modify Flows and Test The WhatsApp customer experience is distinct from ASAPP SDKs in several ways - some elements of the Virtual Agent are displayed differently while others are not supported. Your ASAPP account team will work with you to implement intent routing and flows to account for nodes with unsupported elements and to validate expected behaviors during testing before launch. #### Buttons and Forms All buttons with external links are displayed using message text with a link for each button. See below for an example of two buttons (**Hello, I open a link** and **Hello, I open a view**) that each render as a message with a link: Similarly, forms sent by agents and feedback forms at the end of chat also send messages with links to a separate page to complete the survey. Once the survey is completed, users are redirected back to WhatsApp. #### Quick Reply Limitations Quick replies in WhatsApp also have different limitations from other ASAPP SDKs: * Each node may only include up to three quick reply options; a node with more than three replies will be truncated and only the first three replies will be shown. * Each quick reply may only include up to 20 characters; a quick reply with more than 20 characters will be truncated and only show the first 17 characters, followed by an ellipsis * Sending a node that includes both a button in the message and quick replies is not recommended, as the links will be sent to the customer out of order #### Authentication The WhatsApp Cloud API currently **does not support authentication**. As such, login nodes should not be used in flows that can be reached by users on WhatsApp. #### Attachments Cards Nodes that include attachments, such as cards and carousels, are not supported in this channel. In addition to differences in the Virtual Agent experience, the live chat experience with an agent also excludes some features that are typically supported: * **Images**: Agents will not be able to view images sent by customers. The same is true of voice messages and emojis, which are also part of the WhatsApp interface. * **Typing preview and indicators**: Agents will not see typing previews or indicators while the customer is typing. The customer will not see a typing indicator while the agent is typing. * **Co-browsing**: This capability is not currently supported in WhatsApp ### Create and Implement Entry Points Entry points are where your customers start conversations with your business. You have the option to embed a WhatsApp entry point into your websites in multiple ways: a clickable logo, text link, on-screen QR code, etc. You can also direct to WhatsApp from social media pages or using Meta's Ads platform to provide an entry point. Ads are fully configurable within the Meta suite of products and will result in no costs incurred for conversations that originate via interactions with them. ASAPP does not currently support [Chat Instead](/messaging-platform/integrations/chat-instead "Chat Instead") functionality for WhatsApp. ### Determine Launch and Throttling Strategy Depending on the entry points configured, your ASAPP account team will share launch best practices and throttling strategies. # Virtual Agent Source: https://docs.asapp.com/messaging-platform/virtual-agent Learn how to use Virtual Agent to automate your customer interactions. Virtual Agent is a set of automation tooling that enables you to automate your customer interactions and route them to the right agents when needed. Virtual Agent provides a means for better understanding customer issues, offering self-service options, and connecting with live agents when necessary. Virtual Agent can be deployed to your website or mobile app via our Chat SDKs, or directly to channels like Apple Messages for Businesses. While you'll start off with a baseline set of [core dialog capabilities](#core-dialog "Core Dialog"), the Virtual Agent will require thoughful configuration to appropriately handle the use cases specific to your business. ## Customization Virtual Agent is fully customizable to fit your brand's unique needs. This includes: * Determing the list of Intents and how they are routed. * Advanced flows to take in structured and unstructured input. * Reach out to APIs to both receive and send data. ### Access The Virtual Agent is configured through the AI-Console. To access AI-Console, log into [Insights Manager](/messaging-platform/insights-manager "Insights Manager"), click on your user icon, and then **Go to AI-Console**. This option will only be available if your organization has granted you permission to access AI-Console. ## How It Works The Virtual Agent understands what customers say and transforms it into structured data that you can use to define how the Virtual Agent responds. This is accomplished via the following core concepts and components: ### Intents Intents are the set of reasons that a customer might contact your business and are recognized by the Virtual Agent when the customer first reaches out. The Virtual Agent can also understand when a user changes intent in the middle of a conversation (see: [digressions](#core-dialog "Core Dialog")). Our teams can work with you to refine your intent list on an ongoing basis, and train the Virtual Agent to recognize them. Examples include requests to "Pay Bill" or "Reset Password". Once an intent is recognized, it can be used to determine what happens next in the dialog. ### Intent Routes Once an intent has been recognized, the next question is "so what?". Intent routes house the logic that determines what will happen after an intent has been recognized. * Once a customer's intent is classified, the default behaviour is for the Virtual Agent to place the customer in an agent queue * Alternatively, an intent route can be used to specify a pre-defined flow for the Virtual Agent to execute, which can be used to collect additional information, offer solutions, or link a customer out to self-serve elsewhere. * To promote flexibility, intent routes can point to different flows based on conditional logic that uses contextual data, like customer channels. For a comprehensive breakdown of the intent list and routes, please refer to the Intent Routing Selection. For a comprehensive breakdown of the intent list and routes, please refer to the [Intent Routing](/messaging-platform/virtual-agent/intent-routing "Intent Routing") section. ### Flows Flows define how the Virtual Agent interacts with the customer given a specific situation. They can be as simple as an answer to an FAQ, or as complex as a multi-turn dialog used to offer self-service recommendations. Flows are built through a series of [nodes](#flow-nodes "Flow Nodes") that dictate the flow of the conversation as well as any business logic it needs to perform. Once built, flows can be reached through [intent routing](#intent-routes "Intent Routes"), or redirected to from other flows. For more information on how flows are built, see our Flow Building Guide ### Core Dialog While much of what the Virtual Agent does is customized in flows, some fundamental aspects are driven by the Virtual Agent's core dialog system. This system defines the behavior for: * **Welcome experience**: The messages that are sent when a chat window is opened, or a first message is received. * **Disambiguation**: How the Virtual Agent clarifies ambiguous or vague initial utterances. * **Digressions**: How the Virtual Agent handles a new path of dialog when customer expresses a new intent. * **Enqueuement & waiting**: How the Virtual Agent transitions customers to live chat, including enqueuement, wait time, & business hours messaging. * **Post-live-chat experience**: What the Virtual Agent does when a customer concludes an interaction with a Live agent. * **Error handling**: How the Virtual Agent handles API errors or unrecognized customer responses. If you have any questions about these settings, please contact your ASAPP Team. ## Flow Nodes Flows are built through a series of nodes that dictate the flow of the conversation as well as any business logic it needs to perform. 1. **Response Node**: The most basic function of a flow is to define how the Virtual Agent should converse with the customer. This is accomplished through response nodes which allow you to configure Virtual Agent responses, send deeplinks, and classify what customers say in return. 2. **Login Node** When building a flow, you may want to force users to login before proceeding to later nodes in a flow. This is accomplished by adding a login node to your flow that directs the customer to authenticate in order to proceed. 3. **API Node** If API integrations are available within the virtual agent, you are able to leverage those integrations to display data dynamically to customers and to route to different responses based on what is returned from an API. API nodes allow for the retrieval of data fields and the usage of that data within a flow. 4. **Redirect Node** Flows also have the ability to link to one another through the use of redirect notes. This is powerful in situations where the same series of dialog turns appear in multiple flows. Flow redirects allow you to manage those dialog turns in a single location that is referenced by many flows. 5. **Agent Node** In cases where the flow is unable to address the customer's concern on its own, an agent node is used to direct the customer to an agent queue. The data associated with this customer will be used to determine the live agent queue to put them in. 6. **End Node** When your flow has reached its conclusion, an end node wraps up the conversation by confirming whether the customer needs additional help. # Attributes Source: https://docs.asapp.com/messaging-platform/virtual-agent/attributes ASAPP supports attributes that can be routed on to funnel customers to the right flow through [intent routing](/messaging-platform/virtual-agent/intent-routing "Intent Routing"). Attributes tell the virtual agent who the customer is. For example, they indicate if a customer is currently authenticated, which channel the customer is using to communicate with your business, or which services and products the customer is engaged with. ## Attributes List The Attributes List contains all the attributes available for intent routing. Here, you'll find the following information displayed in table format: 1. **Attribute name:** display name of the attribute 2. **Definition:** Indicates if the attribute is Standard or Custom. Standard attributes are natively supported by ASAPP. Custom attributes are added in accordance with your business requirements\* 3. **Type:** Indicates the value type of an attribute. There are two possible types: Boolean, or Value. a. **Boolean:** A boolean attribute includes two values. For example: Yes/No, True/False, On/Off. b. **Value:** A value attribute can include any number of values. For example: Market 1, Market 2, Market 3. 4. **Origin Key:** exact value that is passed from the company to ASAPP. Contact your ASAPP team for more details on how to add a custom attribute. ## Attribute Details To view specific attribute details, click an **attribute name** to launch the details modal. 1. **Description:** Describes what the attribute is. 2. **Value ID:** Unique, non-editable key that is directly passed to ASAPP for that attribute (can be non-human readable). 3. **Value name:** Display name for the value to describe what the attribute value is. These value names are reflected in intent routing for ease of use. Descriptions and value names can be edited. To modify these fields, make your changes and click **Save**. On click, changes will be automatically saved, and changes take effect immediately. There is no support for versioning or adding new attributes and/or values at this time, please contact your ASAPP team for support in this area. # Best Practices Source: https://docs.asapp.com/messaging-platform/virtual-agent/best-practices ## Designing your Virtual Agent ### 1. Focus on Customer Problems The most important thing to keep in mind when designing a good flow is whether it is likely to resolve the intent for most of your customers. It can be easy to diverge from this strategy (perhaps because a flow is designed with containment top of mind; perhaps because of inherent business process limitations). But it's the best way you can truly allow customers to self-serve. ### (a) Understanding the Intent Since flows are invoked when ASAPP classifies an intent, understanding the intent in question is key to successfully designing a flow. The best way to do this is to review recent utterances that have been classified to the intent and categorizing them into more nuanced use cases that your flow must address. This will ensure that the flow you design is complete in its coverage given how customers will enter the flow. These utterances are accessible through ASAPP Historical Reporting, in the First Utterance table. ### (b) Ongoing Refinement Every flow you build can be thought of as a hypothesis for how to effectively understand and respond to your customers in a given scenario. Your ability to refine those hypotheses over time--and test new ones--is key to managing a truly effective virtual agent program that meets your customers needs. We recommend performing the following steps on a regular basis--at least monthly--to identify opportunities for flow refinement, and improve effectiveness over time. #### Step 1: Identify opportunity areas in particular flows 1. **Flows with relatively high containment, but a low success rate:** This indicates that customers are dropping out of the flow before they receive useful information. 2. **Flows with the highest negative EndSRS rates:** This indicates that the flow did not meet the customer's needs. #### Step 2: Determine Likely Causes for Flow Underperformance, Identify Remedies Once you've identified problematic flows, the next step is to determine why they are under-performing. In most cases you'll quickly identify at least one of the following issues with your flow by reviewing transcripts of issueIDs from Conversation Manager in Insights Manager: **1. General unhelpfulness or imprecise responses** Oftentimes flows break down when the virtual agent responds confidently in a manner that is on-topic but completely misses the customers' point. A common example is customers reaching out about a difficulty to log in, only to be sent to the same "forgot your password" experience they were experiencing issues with in the first place. Issues of this type typically receive a negative EndSRS score from the customer, who doesn't believe their problem has been solved. The key to increase the performance of these flows is to configure the virtual agent to ask further, more specific questions before jumping to conclusions. Following the example above, you could ask "Have you tried resetting your password yet?". Including this question can go a long way to ensure that the customer receives the support they're looking for. **2. Unrecognized customer responses** This happens when the customer says or wants to say something that the virtual agent is unable to understand. In free-text channels, this will result in classification errors where the virtual agent has re-prompted the customer to no avail, or has incorrectly attempted to digress to another intent. You can identify these issues by searching for re-prompt language in transcripts where customers have escalated to an agent from the flow in question. Looking at the customers' problematic response, you can determine how best to improve your flow. If customers' response is reasonable given the prompt, you can introduce a new response route in the flow and train it to understand what the customer is saying. Even if it's a path of dialog you don't want the virtual agent to pursue, it's better for the virtual agent to acknowledge what they said and redirect rather than failing to understand entirely. **Don't:** * "Which option would you prefer?" * "Let's do both" * "Sorry I didn't understand that. Could you try again?" **Do:** * "Which option would you prefer?" * "Let's do both" * "Sorry, but we can only accommodate one. Do you have a preference?" Another option for avoiding unrecognized customer responses in free-text channels, is to rephrase the prompt in a manner that reduces the number of ways that a customer is likely to respond. This is often the best approach in cases where the virtual agent prompt is vague or open-ended. **Don't:** * "What issue are you having with your internet?" * "I think maybe my router is broken" * "Sorry I didn't understand that. Could you try again?" **Do:** * "Is your internet slow, or is it completely down?" * "It's completely down" In SDK channels (web or mobile apps), which are driven by quick replies, the concern here is to ensure that customers have the opportunity to respond in the way that makes sense given their situation. A common example failing to provide an "I'm not sure" quick reply option when asking a "yes or no" question. Faced with this situation, customers will often click on "new question" or abandon the chat entirely, leaving very little signal on what they intended. The best way to improve quick reply coverage is to maintain a clear understanding of the different contexts in which a customer might enter the flow---how they conceive of their issue, what information they might or might not have going in, etc. Gaining this perspective is helped greatly by reviewing live chat interactions that relate to the flow in question, and determining whether your flow could have accommodated the customer's situation. **3. Incorrect classification** This issue is unique to free-text use cases and happens when the virtual agent thinks the customer said one thing, when in fact the customer meant something else. One example would be a response like "no idea" being misclassified as "no" rather than the expected "I'm not sure." Another example might be a response triggering a digression (i.e., a change of intent in the middle of a conversation), rather than an expected trained response route. This can happen in flows where you've trained response routes to help clarify a customer's issue but their response sounds like an intent and thus triggers a digression instead of the response route you intended. For example: ``` "I need help with a refund" "No problem. What is the reason for the refund?" "My flight got cancelled" "Are you trying to rebook travel due to a cancelled flight?"\<\< Digression "No, I'm asking about a refund" ``` While these issues tend to occur infrequently, when you do encounter them, the best place to start is revising the prompt to encourage responses that are less likely to be classified incorrectly. For example, instead of asking an open-ended question like "What is the reason for your refund?"---to which a customer response is very likely to sound like an intent---you can ask directly ("Was your flight cancelled?") or ask for more concrete information from which you can infer the answer ("No problem! What's the confirmation number?"). Alternatively, you can solve issues of incorrect classification by training a specific response route that targets the exact language that is proving problematic. In the case of the unclear "I'm not sure" route, a response route that's trained explicitly to recognize "no idea" might perform better than one that is broadly trained to recognize the long tail of phrases that more or less mean "I'm not sure." In this case, you can point the response route to the same node as your generic "I'm not sure" route to resolve the issue. **4. Too much friction** Another cause for underperformance is too much friction in a particular flow. This happens when the virtual agent is asking a lot of the customer. One type of friction is authentication. Customers don't always remember their specific login or PINs, so authentication requests should be used only when needed. If customers are asked to find their authentication information unnecessarily, many will oftentimes abandon the chat. Another type of friction is repetitive or redundant steps--particularly around disambiguating the customer. While it's helpful to clarify what a customer wants to do to adequately solve their need, repetitive questions that don't feel like they are progressing the customer forward often lead to a feeling of frustration--and abandonment. #### Step 3: Version, improve, and track the impact of flow changes Once you've identified an issue with a specific flow, create a new version of it in AI-Console with one of the remedies outlined above. After you have implemented a new version, you can save and release the new version to a lower environment to test it, and subsequently to production. Then, track the impact in Historical Reporting in Insights Manager by looking at the Flow Success Rate for such flow on the Business Flow Details tab of the Flow Dashboard. ### 2. Know your Channels Messaging channels have advantages and limitations. Appreciating the differences will help you optimize virtual agents for the channels they live on, and avoid channel-specific pitfalls. To illustrate this, look at a single flow rendered in Apple Messages for Business vs the ASAPP SDK: The ASAPP SDK has quick replies, while Apple Messages for Business supports list pickers. #### (a) General rules of thumb * Be aware of each channel's strengths and limitations and optimize accordingly--these are described below. * Pay particular attention to potentially confusing interface states, and compensate by being explicit about how you expect customers to interact with a flow (e.g., "Choose an option below ...") * Be sure to test the flow on the device/channel it is deployed to in a lower environment. #### (b) Channel-specific considerations ##### ASAPP SDK The ASAPP SDKs (Web, Android, and iOS) have a number of features that help to build rich virtual agent experiences. Strengths of SDKs: 1. Quick Replies - surface explicit text options to a customer to tap/click on, and route to the next part of a flow. 2. Authentication / context - with the authentication of customers, the SDK allows for a persistent chat history which provides seamless continuity. Additionally, authentication allows for the direct calling of APIs (e.g. retrieving a bill amount). Limitations: * Not as sticky of an experience (i.e. it's not an application the customer has top of mind/high visibility), so the customer may abandon the chat. One cause for this is the lack of guaranteed push notifications -- particularly in the Web SDK. How to optimize for ASAPP SDKs: * We encourage you to build more complicated, multi-step flows, leveraging quick replies that keep customers on the rails. ### 3. Promote Function over Form First and foremost, your virtual agent needs to be effective at facilitating dialog. It may be tempting to prioritize focus on virtual agent tone and voice but that can ultimately detract from virtual agent's functional purpose. Next we'll offer examples that illustrate effective or ineffective dialogs that will help you when building out your flows. #### (a) It's OK to sound Bot-like The virtual agent **is** a bot, and it primarily serves a functional purpose. It is much better to be explicit with customers and move the conversation forward, rather than making potential UX sacrifices to sound friendly or human-like. Customers are coming to a virtual agent to solve a specific problem efficiently. Here is a positive example of a greeting that, while bot-like, is clear and effective: ``` "Hello! How can I help you today? Choose from a topic below or type a specific question." ``` #### (b) Tell People How to Interact Customers interact with virtual agents to solve a problem and/or to achieve something. They benefit from explicit guidance with how they are supposed to interact with the virtual agent. If your flow design expects the customer to do something, tell them upfront. Here is a positive example of clear instructions telling a customer how to interact with the virtual agent: ``` "Please choose an option below so we can best help" ``` #### (c) Set Clear Expectations for Redirects The virtual agent can't always handle a customer's issue. When you need to redirect the customer to self-serve on a website, or even on a phone number, set clear expectations for what they need to do next. You never want a customer to feel abandoned. Here are two positive examples of very clear instructions about what the customer will need to do next, and what they can expect: ``` "To process your payment and complete your request, you'll need to call us at 1-800-555-5555. **Agents are available** from 8am to 9pm ET, Monday through Friday" "You can check the status of your order on website by either **entering your order number** or **logging in**". ``` #### (d) Acknowledge Progress & Justify Steps Think of a bot like a standard interaction funnel -- a customer has to go through multiple steps to achieve an outcome. Acknowledging progress made and justifying steps to the customer makes for a better user experience, and makes it more like for the customer to complete all of the steps (think of a breadcrumb in a checkout flow). The customer should have a sense of where they are in the process. Here's a simple example of orienting a customer to where they are in a process: ``` "We're happy to help answer questions about your bill, but will need you to sign in so we can access your account information." ``` #### (e) Be careful with Personification Over-personifying your virtual agent can make for a frustrating customer experience: * **Do** frame language in a more impersonal "we" * **Don't** make the virtual agent "I" * **Do** frame the virtual agent as a representative for your company. * **Don't** give your virtual agent a name / distinct personality. * **Do** give your virtual agent a warm, action-oriented tone. * **Don't** give your virtual agent an overly friendly, text-heavy tone. * **Do** "Great! We can help you pay your bill now. What payment method would you like to use?" * **Don't** "Great, thank you so much for clarifying that! I am so happy to help you with your bill today." #### (f) Affirm What Customers Say, Not What the Flow Does Affirmations help customers feel heard, and they help customers understand what the virtual agent is taking away from their responses. When drafting a virtual agent response, ensure that you match the copy to the variety of customer responses that may precede it -- historical customer responses can be viewed in the utterance table in historical reporting. If there is a broad set reasons for a customer to end up on a node or a flow, your affirmation should likewise be broad: * **Do** "We can help with that" * **Do** "We can help you with your bill" * **Don't** "We can help you pay your bill online" Similarly, if there is a narrow set of reasons for a customer to end up in a node or a flow, your affirmation should likewise be narrow. Even then, it's important to not phrase things in such a way that you're putting words in the mouth of the customer, so they don't feel frustrated by the virtual agent. * **Do** "To set up autopay ..." * **Don't** "It sounds like you want to set up autopay" * **Don't** "Okay, so autopay" In some cases where writing a good affirmation feels particularly tricky, feel free to err on the side of not having one. It's all good so long as the virtual agent responds in an expected manner given what the customer just said. ### 4. Reduce Friction If interacting with your virtual agent is confusing or hard, people will revert to tried and true escalation pathways like shouting "agent" or just calling in. As you are designing flows, be mindful about the following friction points you could potentially introduce in your flows. #### (a) Be Judicious with Deep Links Deep links are used when you link a customer out of chat to self-serve. It is tempting to leverage existing web pages, and to create dozens of flows that are simple link outs. But this often does not provide a good customer experience. A virtual agent that is mostly single step deep links will feel like a frustrating search engine. Wherever possible, try to solve a customer's problem conversationally within the chat itself. Don't rely on links as a default. But, when you **do** rely on a deep link, make sure to: 1. Validate the link actually solves the customers intent and is accessible to all customers (e.g. not behind an authentication wall, or only accessible to certain types of customers). 2. Leverage native app links where possible. 3. Be clear about what the customer needs to do when they go to the link and leave the chat experience. #### (b) Avoid All-or-Nothing Flow Requirements Be careful with "all or nothing" requirements in a flow; if you want a customer to sign in to allow you to access an API, that's great, but give customers an alternative option at that moment too. Some customers might not remember their password. When you are at a point in a flow where there is a required step or just one direction a customer can go, think about what alternative answer there could be for a customer. If you don't, those customers might just abandon the virtual agent at that point. ### 5. Anticipate Failure It's tempting to design with the happy path in mind, but customers don't always go down the flow you expect. Anticipate the failure points in a virtual agent, and design for them explicitly. #### (a) Explicit Design for Error Cases Always imagine something will go wrong when asking the customer to do something: * When asking customer to complete something manually, give them a response route or a quick reply that allows them to acknowledge it's not working (e.g. the speed test isn't working). * When asking the customer to self-serve on a web page or in chat: allow them to go down a path in case that doesn't work (e.g. login isn't working). * When designing flows that involve self-service through APIs: explicitly design for what happens when the API doesn't work. #### (b) Consider Free Text Errors In channels where free text is always enabled (i.e.. AMB, SMS), the customer input may not be recognized. We recommend writing language that guides the customer to explicitly understand the types of answers we're expecting. Leverage "else" conditions in your flows (on Response Nodes). **Don't:** * "What issue are you having with your internet?" * "I think maybe my router is broken" * "Sorry I didn't understand that. Could you try again?" **Do:** * "Is your internet slow, or is it completely down?" * "I think maybe my router is broken" * "Sorry I didn't understand that. Is your internet slower than usual, or is your internet completely off?" ## Measuring Virtual Agents ### 1. Flow Success Containment is a measure of whether a customer was prevented from escalating to an agent; it is the predominant measure in the industry for chatbot effectiveness. ASAPP, however, layers a more stringent definition called "Flow success," which indicates whether or not a customer was actually helped by the virtual agent. ### Important When you are designing a new flow or modifying an existing flow, be sure to enable flow success when you have provided useful information to the customer. "Flow success" is defined as when a customer arrives at a screen or receives a response that: 1. Provides useful information addressing the recognized intent of the inquiry. 2. Confirms a completed transaction in a back-end system. 3. Acknowledges the customer has resolved an issue successfully. With flow success, chronology matters. If a customer starts a flow, and is presented with insightful information (i.e. success), but then escalates to an agent in the middle of a flow (i.e. negation of success), that issue will be recorded as not successful. ### How It Works Flow success is an event that can be emitted on a [node](/messaging-platform/virtual-agent/flows#node-types "Node Types"). It is incumbent on the author of a flow to define which steps in the flow they design could be considered successful. Default settings: * **Response Nodes:** When flow reporting status is **on**, the **success** option will be chosen by default. * **Agent Node:** When flow reporting status is **on**, the **failure** option will be chosen. * **End & Redirect:** Flow success is not available in the tooling. By default, the End Node question will emit or not emit flow success depending on the customer response. ### 2. Assessing a Flow's Performance You're able to track your flows' performance on the "Automation Success" report in historical reporting. There you can assess containment metrics and flow success which will help you determine whether a flow is performing according to expectations. ## Tactical Flow Creation Guide ### 1. Naming Nodes Flows are composed of different node types, which represent a particular state/act of a given flow. When you create a flow, you create a number of different nodes. We recommend naming nodes to describe what the node accomplishes in a flow. Clear node names will make the data more readable going forward. Here are some best practices to keep in mind: * Response node (no prompt): name is by the content (e.g. "NoBalanceMessage") * Response node (with prompt): name by the request (e.g. "RequestSeatPreferences") * Any node that takes an action of some sort should start with the action being taken and end with what is being acted upon (e.g. "ResetModem") ### 2. Training Response Routes When you create a Response Node that is expected to classify free text customer input (e.g. "Would you like a one way flight or a round trip flight?"), you need to supply training utterances to train a response route. There are some best practices you should keep in mind: * Be explicit where possible. * Vary your language. * More training utterances is almost always better. * Keep neighboring routes in mind -- what are the different types of answers you will be training, and how will the responses differ between them? ### 3. Designing Disambiguation Sometimes customers initiate conversations with vague utterances like "Help with bill" or "Account issues." In these cases the virtual agent understands enough to classify the customer's intent, but not enough to immediately solve their problem. In these cases, you are able to design a flow that asks follow-up questions to disambiguate the customer's particular need. Based on the customer's response you can redirect them to more granular intents where they can better be helped. Designing effective disambiguation starts with reviewing historical conversations to get a sense of what types of issues customer's are having related to the vague intent. Once you've determined these, you'll want to optimize your prompt and response routes for the channel your designing for: #### (a) ASAPP SDKs These channels are driven by quick replies only, meaning that the customer can only choose an option that is provided by the virtual agent. Here, the prompt matters less than the response branches / quick replies you write. Just make sure they map to things a customer would say---even if multiple response routes lead to the same place. For example: ``` We're happy to help! Please choose an option below: - Billing history - Billing complaint - Billing question - Something else ``` #### (b) Free-Text Channels, with Optional Quick Replies (Post-iOS 15 AMB) These channels offer quick replies, but do not prevent customers from responding with free text. The key here is optimizing your question to increase the likelihood that customers choose a quick reply. ``` We're happy to help! Please tap on one of the options below: - Billing history - Billing complaint - Billing question - Something else ``` #### (c) Free-Text-Only Channels (Pre iOS 15 AMB, SMS ) These channels are often the most challenging, as the customer could respond in any number of ways, and given the minimal context of the conversation it's challenging to train the virtual agent to adequately understand all of them. Similar to other channels, the objective is to prompt in a manner that limits how customers are likely to respond. The simplest approach here is to list out options as part of your prompt: ``` Please tell us more about your billing needs. You can say things like "Billing history" "Question" "Complaint" or "Something else" ``` ### 4. Message Length Keep messages to be short and to the point. Walls of text can be intimidating. Never allow an individual message to exceed 400 characters (or, even less if there are spaces).. An example of something to avoid: ### 5. Quick Replies Quick Replies should be short and to the point. Some things to keep in mind when writing Quick Replies: * Avoid punctuation * Use sentence case capitalization, unless you're referring to a specific product or feature. * Keep to at least two and up to five quick replies per node. * While this is generally best practice, it is required for Quick Replies in Apple Messages for Business. * If there are more than 3 Quick Replies, the list will be truncated to the first 3 in WhatsApp Business * External channels have character limits and any Quick Replies longer than these limits will be truncated: * Apple Messages for Business: 24 characters maximum * WhatsApp Business: 20 characters maximum # Flows Source: https://docs.asapp.com/messaging-platform/virtual-agent/flows Learn how to build flows to define how the virtual agent interacts with the customer. Flows define how the virtual agent interacts with the customer. They can be as simple as an answer to an FAQ, or as complex as a multi-turn dialog used to offer self-service recommendations. Flows are built through a series of [nodes](getting-started#flow-nodes "Flow Nodes") that dictate the flow of the conversation as well as any business logic it needs to perform. Once built, flows can be reached from intents, or redirected to from other flows. ## Flows List In the flows page, you will find a list of existing flows for your business. The following information displays in table format: * **Flow Name** A unique flow name, with letters and numbers only. * **Flow Description** A brief description that describes the objective of the flow. * **Traffic from Intent** Intents can be routed to specific flows through [intent routing](/messaging-platform/virtual-agent/intent-routing "Intent Routing"). In this column, you will see which intents route to the respective flow. You can click the intent to navigate to the specific [intent routing detail page](/messaging-platform/virtual-agent/intent-routing#intent-routing-detail-page "Intent Routing Detail Page") to view routing behavior details. * **Traffic from Redirect** Flows have the ability to link to one another through the use of [redirect nodes](#redirect-node "Redirect Node"). In this column, you will be able to see which existing flows redirect to the respective flow. You can click the flow to navigate to the specific [flow builder page](#flow-builder "Flow Builder") to view flow details. ## Flow Builder The flow builder consists of three major parts: 1. Flow Graph 2. Node Configuration Panel 3. Toolbar ### Flow Graph The Flow Graph is a visual representation of the conversation flow you're designing, and displays all possible paths of dialog as you create them. #### Select Nodes Each node in the graph can be selected by clicking anywhere on the node. Upon selection, the node configuration panel will automatically expand on the right. #### Flow Graph Zoom You can zoom in on particular parts of the flow by using the zoom percentage bar at the bottom right or using your computer trackpad or mouse. ### Node Configuration Panel The node configuration panel allows you to manage settings and configure routing rules for the following [node types](#node-types "Node Types"): * [Response Node](#node-types "Node Types"): configure virtual agent responses, send deeplinks, and classify what customers say in return. * [Login Node](#login-node "Login Node"): direct the customer to authenticate before proceeding in the flow. * [Redirect Node](#redirect-node "Redirect Node"): redirect customer to another flow. * [Agent Node](#agent-node "Agent Node"): direct the customer to an agent queue. * [End Node](#end-node "End Node"): wrap up the conversation by confirming whether the customer needs additional help. * [API Node](#api-node): use API fields dynamically in your flows. ### Toolbar The toolbar displays the flow name and allows to you perform a number of different functions: 1. [Version Dropdown:](#navigate-flow-versions "Navigate Flow Versions") view and toggle through multiple versions of the flow. 2. [Version Indicators](#version-indicators "Version Indicators"): keep track of flow version deployment to Test or Production environments 3. [Manage Versions](#manage-versions "Manage Versions"): manage flow version deployment to Test or Production environments 4. [Preview](#preview-flow "Preview Flow"): click to preview your current flow version in real-time 5. More Actions: * Copy link to test: Navigate to your demo environment to test a flow. * Flow Settings: View flow information such as name, description, and flow shortcut. Learn more: [Save, Deploy, and Test](#save-new-flow "Save New Flow") ## Node Types ### Response Node The **Response** node allows you to configure virtual agent responses, send deeplinks, and classify what customers say in return. It consists of three sections: 1. **Content** 2. **Routing** 3. **Advanced Settings** ### Content The **Content** section allows you to specify the responses and deeplinks that will be sent to the customer. You can add as many of either as you like by clicking **Add Content** and selecting from the menu. Once added, this content can be easily reordered by dragging, or deleted by hovering over the content block and clicking the trash icon. In the flow graph, you will be able to preview how the content will be displayed to the customer. #### Responses Any response text you specify will be sent to the customer when they reach the node. #### Deeplinks After selecting **Deeplink** from the **Add Content** menu, the following additional fields will appear: * **Link to**: select an existing link from the dropdown or directly [create a new link](/messaging-platform/virtual-agent/links#create-a-link "Create a Link"). If you select an existing link, you can click **View link definition** to open the specific [link details](/messaging-platform/virtual-agent/links#edit-a-link "Edit a Link") in a new tab. * **Call to action**: define the accompanying text that the customer will click on in order to navigate to the link. * **Hide button after new message**: choose to remove the deeplink after a new response appears to prevent users from navigating to the link past this node. ### Routing The **Routing** section is where you will configure what happens after the content is sent. You have two options: * **Jump to node** Choosing to **Jump to node** allows you to define a default routing rule that will execute immediately after the node content has been delivered to the user. * **Wait for response** Choosing to **Wait for response** means that the virtual agent will pause until the customer responds, then attempt to classify their response and branch accordingly. When this option is selected, you'll need to specify the branches and [quick reply text](#quick-replies "Quick Replies") for each type of response you wish the virtual agent to classify. See [Branch Classifiers](#branch-classifiers "Branch Classifiers") section for more detailed information. Flows cannot end on a response node. To appropriately end a flow after a response node, please route to an [End node](#end-node "End Node"). #### Branch Classifiers When **Wait for response** is selected for routing, you can define the branches for each type of response you wish the virtual agent to classify. There are two types of branch classifiers that you can use: * **System classifiers** ASAPP supports pre-trained system templates to classify free text user input. You can use branches like `CONFIRM` or `DENY` that are already trained by our system and are readily available for use for polar (yes/no) questions. You do not need to supply training utterances for system classifiers. * **Custom classifiers** If pre-trained classifiers do not meet your needs, define your own custom branches and supply training utterances. You must give your branch classifier a **Display Name** and supply at least five training utterances to train this custom classification. Learn more about how to best train your custom branches in the [Training response route](/messaging-platform/virtual-agent/best-practices#2-training-response-routes "2. Training Response Routes") section. #### Quick Replies For each branch classifier, you should define the corresponding **Quick Reply text**. These will appear in our SDKs (web, mobile) and third-party channels as tapable options. ### Advanced Settings In the **Advanced Settings** section, you can set flow success reporting for the response node. #### Flow Success Flow success attempts to accurately measure whether a customer has successfully self-served through the virtual agent. You measure this by setting the appropriate flow reporting status on certain nodes within a flow. Learn more: [How do I determine flow success?](/messaging-platform/virtual-agent/best-practices#measuring-virtual-agents "Measuring Virtual Agents") To set flow reporting status for response nodes: 1. Toggle **Set flow reporting status** on. 2. By default, **Success** is selected for response nodes but this can be modified for your particular flow. ### Login Node The **Login Node** enables customer authentication within a flow. In this node, you can define the following: * **Content** * **Routing** * **Advanced Settings** #### Content The **Content** section allows you to define the text to be shown to the customer to accompany the login action. All login nodes will have default text which you can modify to suit your particular flow needs. * **Message text**: Define the main text that will prompt the customer to login * **Call to action**: Define the accompanying text that the customer will click on in order to login * **Text sent to indicate that a login is in process**: customize the text that is sent after the customer has tried to log in. In the flow graph, you can preview how the content will be displayed to the customer. #### Routing Flows cannot end on a login node. The **Routing** section is where you can configure what happens after a customer successfully logs in or optionally configure branches for exceptional conditions. ##### On login In the **On login** section, you must define the default routing rule that will execute after the customer successfully logs in. ##### On response Similar to response nodes, you can optionally add response branches in the **On response** section to account for exceptional conditions that may occur when a customer is trying to authenticate, such as login errors or retries and refreshes. Please see [Branch Classifiers](#branch-classifiers "Branch Classifiers") on the response node for more information on how to configure these routing rules. ##### Else In the **Else** section, you can define what happens if login is unsuccessful and we do not recognize customer responses. #### Advanced Settings In **Advanced Settings**, you have the option to **Force reauthentication** which will prompt all customers to log in again, regardless of current authentication state. ### API Node The API node allows you to use API fields dynamically in your flows. The data you retrieve on an API node can be used for two things: 1. **Displaying the data** on subsequent nodes. 2. **Routing to different nodes** based on the data. #### Data Request The **Data Request** section allows you to add data fields from an existing API integration. Select **Add data fields** to choose objects from existing integrations, which will allow you to add collections of data fields to the node. There is a search bar that allows you to easily search through the available fields. After you select objects, all of the referenced fields will automatically populate in the API node. In addition to objects and arrays, you can request actions. You can only select one action per node; selecting an action will automatically disable the selection of additional objects, actions, and arrays. #### Input Parameters Some actions require input parameters for the API call, which you can define in AI-Console. In the node edit panel, you can see a field for defining parameters that will be passed as part of the API call. This field leverages curly brackets: click the **curly bracket** icon or select the **shift>\{** or **}** keys to choose the API value to pass as an input parameter. Only valid data can be used for input parameters; objects or arrays will not be surfaced through curly brackets. #### Displaying Data You are easily able to display API fields from an API node in subsequent response nodes. This field leverages curly brackets: click the **curly bracket** icon or select the **shift>\{** or **}** keys in the Response Node Content section to choose API values to display, which will render as a dynamic API field in the flow graph. When you click on the API field itself, data format options appear that will allow you to specify exactly what format to display to the end user. #### Routing to Different Nodes Routing and data operators allow you to specify different flow branching based on what is returned from an API. This leverages the same framework as routing on other nodes, but provides additional functionality around operators to give you flexibility in configuring routing conditions. Operators allow you to contextually define conditions to route on. #### Error Handling API nodes provide default error handling, but you are able to create custom error handling on the node itself if desired. You can specify where a user should be directed in the event of an error with the API call. #### API Library API fields are available under the integrations menu. In this page, you can view and search through all available objects and associated data fields. ### Redirect Node The **Redirect Node** serves to link flows with one another by directing the customer to a separate flow. A Redirect Node does not display content to the customer. In this node, you can define the following: * **Destination** * **Routing** * **Advanced Settings** #### Destination The **Destination** section allows you to define where to redirect the customer. You can redirect to an existing **flow** or an **intent**. * Select **Flow** to redirect to an individual flow destination. * Select **Intent** to redirect the customer to solve for a broader issue intent that may route them to different flows depending on the [intent routing rules](/messaging-platform/virtual-agent/intent-routing "Intent Routing"). Depending on the option you select, you will be able to select the destination flow or intent from the dropdown. #### Routing (Return Upon Completion) Redirect nodes can end your flow or you can choose to have the customer return your flow after the destination flow has completed. To do so, toggle on **Return upon completion**. After doing so, you can define the default routing rule that will execute upon customer return. ### Agent Node The **Agent Node** enables you to direct the customer to an agent queue in order to help resolve their issue. The data associated with this customer will be used to determine the live agent queue to put them in. #### Advanced Settings In the Advanced Settings section, you can set flow success reporting for the agent node. ##### Flow Success Flow success attempts to accurately measure whether a customer has successfully self-served through the virtual agent. This is measured by setting the appropriate flow reporting status on certain nodes within a flow. Learn more: [How do I determine flow success?](/messaging-platform/virtual-agent/best-practices#measuring-virtual-agents "Measuring Virtual Agents") For agent nodes, this is always considered a failure. To set flow reporting status for agent nodes: 1. Toggle **Set flow reporting status** on. 2. By default, **Failure** will be selected for agent nodes ### End Node The **End Node** wraps up the conversation by confirming whether the customer needs additional help. #### Advanced Settings In the **Advanced Settings** section, you can select the end Semantic Response Score (SRS) options (see below) for your flow. By default, all three options will be selected when an end node is added, thus presenting all three options for the customer to select from. You can expand the section to modify these options to present to the customer. ##### End SRS Options At the end of a flow, the virtual agent will ask the customer: "Is there anything else we can help you with today?"\* After the above message is sent, there are three options available for the customer to select from: * **"Thanks, I'm all set"** A customer selecting this **positive** option will prompt the virtual agent to wrap up and resolve the issue. * **"I have another question"** A customer selecting this **neutral** option will prompt the virtual agent to ask the customer what their question is. * **"My question has not been answered"** A customer selecting this **negative** option will prompt the virtual agent to escalate the customer into agent chat to help resolve their issue. \*Exact end SRS options and text may vary. Please contact your ASAPP team for more details. ## Quick Start: Flows ### Create Flow Click **Create** to trigger a dialog for creating a new flow. The following data must be provided: * **Name:** Give a unique name for your flow, using letters and numbers only. * **Description:** Give a brief description of the purpose of the flow. Avoid vague flow names. Using clear names & descriptions allow others to quickly distinguish the purpose of your flow. We recommend following an "Objective +**Topic**" naming convention, such as: Find **Food** or Pay **Bill**. Click **Next** to go to the flow builder where you will design and build your flow using the various [node types](#node-types "Node Types"). ### Preview Flow You can preview your flow as you are building it! In the toolbar, select the **eye** icon to open the in-line preview. This panel will then allow you to preview the version of the flow that is currently displayed. As you are actively editing a flow, select this icon at any time to preview your progress. To preview a previously saved version of the flow, navigate to the flow version in the [version dropdown](#version-indicators "Version Indicators"), then click the **eye** icon to preview. #### Preview Capabilities There are a few capabilities to leverage in preview: * **Re-setting:** puts you back to the first node of the flow and allows you to test it again. * **Debug information:** opens a panel that provides more detailed insights into where you are in a flow and the associated metadata with your preview. * **Close:** close the in-line preview. #### Preview with Mocked Data The real time preview also has the ability to preview integrated flows using mocked data. By mocking data directly in the preview, you can test different flow paths based on the different values an API can return. 1. Define Request * You can define if the request is a success or failure when previewing. Each API node is treated as a separate call in the preview experience. 2. View and Edit Mock Data Fields * For a successful API call, you can view and edit mock data fields, which will inform the subsequent flow path in the preview. * By default, all returned values are selected and pre-filled. Values set in the preview will be cached until you leave the flow builder, to prevent the need to re-enter each mock data form. ### Save New Flow When you are building a new flow, the following buttons will display in the toolbar: * **Discard changes:** remove all unsaved changes made to the flow. * **Save:** save changes to the flow as a new version or override an existing version. To save your new flow, select **Save**. ### Deploy New Flow Newly created flows (i.e. the initial version) will **immediately deploy to test environments and production**. These new flows can be deployed without harm since customers will not be able to invoke the flow unless there are incoming routes due to [intent routing](/messaging-platform/virtual-agent/intent-routing "Intent Routing"). ### Test New Flow After deploying your flow to test, navigate to your respective test environment in order to verify your flow changes: 1. In the upper right corner of the toolbar, click the icon for **More actions**. 2. Select **Copy link to demo**. 3. Copy the **Flow Shortcut**. 4. Choose to **Go to demo env.** 5. Once there, select the chat bubble and paste the flow shortcut into the text entry to start testing your flow. ### Edit & Save New Version You can make changes to your new flow by selecting a node and making edits in the [Node Configuration Panel](#node-configuration-panel "Node Configuration Panel"). Once you are ready to save your changes, select **Save**. Since the current version of the flow is already deployed to production, you will **NOT** be able to save over the current version and **MUST** save as a new version to prevent unintentional changes to flows in production. For future flow versions that are not deployed to production, you will be able to save your changes as a **new flow version** or to overwrite the **current flow version**. ### Deploy Version to Test After saving, you will be directed to **Manage Versions** where you will manage which flow version is deployed to test environments and to production.. All flows should be verified in test environments, such as demo or pre-production environments before production. Therefore, new flow versions **MUST** be deployed to test **PRIOR** to [deployment in production](#deploy-version-to-prod "Deploy Version to Prod"). To deploy a flow version to test environments: 1. Select the new version you want to deploy in the version dropdown for **Test**. 2. After selection, click **Save**. 3. Flow version will deploy to all lower test environments within 5-10 minutes. ### Test Version After deploying your flow to test, navigate to your respective test environment in order to verify your flow changes: 1. In the upper right corner of the toolbar, click the icon for **More actions**. 2. Select **Copy link to demo**. 3. Copy the **Flow Shortcut**. 4. Choose to **Go to demo env**. 5. Once there, select the chat bubble and paste the flow shortcut into the text entry to start testing your flow. ### Deploy Version to Prod After verifying the expected flow behavior in **Test**, you can deploy the flow version to production, which will impact customers if there the [flow is routed from an intent](/messaging-platform/virtual-agent/intent-routing "Intent Routing"): 1. Select the version you want to deploy in the version dropdown for **Prod**. 2. After selection, click **Save**. 3. Flow version will deploy to Production within 5-10 minutes. ### Manage Versions When you are simply viewing a flow without making any changes, **Manage Versions** will always be at the top of the toolbar for you to manage flow version deployments. Upon selection, the versions that are currently deployed to Test and Prod environments will display, which you can edit as appropriate. In addition to version deployments, you can view any existing [intents that route to this flow](/messaging-platform/virtual-agent/intent-routing "Intent Routing") in **Incoming Routes**. Upon selection, you will be directed to the specific [intent detail](/messaging-platform/virtual-agent/intent-routing#intent-routing-detail-page "Intent Routing Detail Page") page where you can view the intent routing rules. ### Navigate Flow Versions Many flows may iterate through multiple versions. You can toggle to view previous flow versions using the version dropdown: 1. Next to the flow name, click the version dropdown in the toolbar. 2. Selecting the version you want to view. 3. Once selected, the version details will display in the flow graph. 4. You can click any node to start editing that specific flow version. #### Version Indicators As flow versions are iteratively edited and deployed to Test and Prod, there are a few indicators in the toolbar to help the you quickly understand which version is being edited and which versions have been deployed to an environment: * **Unsaved changes** If the version is denoted with an asterisk along with a filled gray indicator of "Unsaved Changes", the flow version is currently being edited and must be saved before navigating away from the page. * **Unreleased version** If a version is denoted with a hollow *gray* indicator *Unreleased version* , the flow version is saved but not deployed to any environment. * **Available in test** If a version is denoted with a hollow *orange* indicator of *Available in test*, the flow version is deployed to test environments (e.g. demo) but it is **not routed** from an intent. * **Live in test** If a version is denoted with a filled *orange* indicator of *Live in test*, the flow version is deployed to test environments (e.g. demo) and it is **routed from an intent**. * **Available in prod** If a version is denoted with a hollow *green* indicator of *Available in prod*, the flow version is deployed to the production environment but it is **not routed** from an intent. * **Live in prod** If a version is denoted with a filled *green* indicator of *Live in prod*, the flow version is deployed to the production environment and it **is routed from an intent which can be reached by customers**. * **Available in test and prod** If a version is denoted with a hollow *green* indicator of *Available in test and prod*, the flow version is deployed to test environments (e.g. demo) but it is **not routed** from an intent. * **Live in test and prod** If a version is denoted with a filled *green* indicator of *Live in test and prod*, the flow version is deployed to all environments and it **is routed from an intent which can be reached by customers**. #### View Intent Routing If a flow is **routed from an intent** (e.g. Live in...), you can hover over these indicators to view and navigate to the respective intent routing page. # Glossary Source: https://docs.asapp.com/messaging-platform/virtual-agent/glossary | | | | :------------------------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Term** | **Definition** | | **Agent Node** | A flow node used to direct customers to a live agent. | | **AI-Console** | A web-based application for managing your implementation of ASAPP's virtual agent. | | **AMB** | See "Apple Messages for Business" | | **Ambiguous Utterance** | Customer utterances characterized by having multiple distinct meanings like "My battery died." This is contrasted from "vague" utterances which are characterized by having broad, but still distinct meaning ( e.g. "Phone issue"). | | **Apple Messages for Business (AMB**) | Offers the ability for customers to chat with businesses directly in the Apple Messages app. Includes dedicated uis to facilitate more efficient interactions than would be possible using traditional SMS, as well as support for highly impactful entry points in Siri Suggestions and chat intercepts for customers who tap on phone numbers while on their iOS device. Learn more at: [apple.com/ios/business-chat](https://www.apple.com/ios/business-chat/). | | **ASAPP Team** | Your direct representatives at ASAPP, inclusive of your assigned Solutions Architect, Customer Success Manager, and Implementation Manager. | | **Business Flow** | Business Flows are flows that are built to resolve a customer need as indicated by their intent. This is in contrast to "Non-Business Flows," which are flows that serve more generic purposes such as greeting a customer, disambiguating an utterance, or enabling customers to log in or connect with an agent. | | **Chat SDKs** | Embeddable chat UI that ASAPP offers for web, iOS, and Android applications. Each SDK supports quick replies, rich components and various other content interactions to facilitate conversations between businesses and their customers. | | **Classification** | Refers to the process of classifying the customer's intent by analyzing the language they use. | | **Containment** | The success rate of the virtual agent prevents human interaction. | | **Core Dialog** | Refers to the settings that define how the virtual agent behaves in common dialog scenarios like initial welcome, live chat enquement, digressions (triggering a new intent in the middle of a flow), and error handling. | | **Customer** | Your customer who is engaging with your virtual agent. | | **Customer Channels** | The set of UIs and applications that your customers can use to engage with your business. Includes chat SDKs, Apple Messages for Business, SMS, etc. | | **Deeplinks** | Links that send users directly to a web page or to a specific page in an app. | | **Dialog Turns** | The conversational steps required for a virtual agent to acquire the relevant information from the end-user. | | **Disambiguation** | The process whereby the virtual agent gets clarification from the consumer on what is meant by the customer's message. Disambiguation is often triggered when the customer's message matches multiple intents. | | **End Node** | The flow node used to end a flow and trigger end SRS options (See: Semantic Response Score) | | **Enqueuement** | Refers to the process where a customer is waiting in queue to chat with a live agent. | | **Flow** | Flows define how the virtual agent interacts with the customer given a specific situation. They are built through a series of nodes. | | **Flow Success** | Metric to accurately measure whether a customer has successfully self-served through the virtual agent. | | **Free Text** | The unstructured customer utterances that can be freely typed and submitted without Autocomplete or quick replies. | | **Insights Manager** | The operational hub through which users can monitor traffic and conversations in real time, gain insights through Historical Reporting, and manage queues and queue settings. Learn more in the [Insights Manager overview](../insights-manager "Insights Manager"). | | **Intent** | Intents are the set of reasons that a customer might contact your business and are recognized by the virtual agent when the customer first reaches out. The virtual agent can also understand when a user changes intent in the middle of a conversation (see: digressions). | | **Intent Code** | Unique, capitalized identifier for an intent. | | **Intent Routes** | The logic that determines what will happen after an intent has been recognized. | | **Library** | The panel that houses content that can be used within intent routing and flows. | | **Login Node** | A flow node used to enable customer authentication within a flow. | | **Multi-Turn Dialog** | Questions that should be filtered or refined to determine the correct answer. | | **Node** | Functional objects used in flows to dictate the conversation as well as any business logic it needs to perform. | | **Queue** | A group of agents assigned to handle a particular set of issues or types of incoming customers. | | **Quick Reply** | The set of buttons that customers can directly choose to respond to the virtual agent. | | **Redirect Node** | A flow node used to link to other flows. | | **Response Node** | A flow node used to configure virtual agent responses, send deeplinks, and classify what customers say in return. | | **Response Routes** | On a response node, the set of routes defined to classify a customer response and branch accordingly. Users will define the training data and quick reply text for each type of response. | | **Routing (within flows)** | On any given node, the set of rules that determine what node the virtual agent should execute next. | | **Self-Serve** | Regarding the virtual agent, self-serve refers to cases where the virtual agent helps a customer resolve their issue without the need for human agent intervention. | | **Semantic Response Score (SRS)** | Options presented at the end of a flow to help gauge whether or not the virtual agent met the customer's needs. | | **User** | Refers to the user of AI-Console. Users of the chat experience are referred to as "customers." | | **Vague Utterance** | Customer utterances characterized by having broad, but still distinct meaning ( e.g. "Phone issue"). This is contrasted from "ambiguous" utterances which are characterized by having multiple distinct meanings like "My battery died." | | **Virtual Agent** | The ASAPP "Virtual agent" is chat-based, multi-channel artificial intelligence that can understand customer issues, offer self-service options, and connect customers with live agents when necessary. | # Intent Routing Source: https://docs.asapp.com/messaging-platform/virtual-agent/intent-routing Learn how to route intents to flows or agents. Intents are the set of reasons that a customer might contact your business and are recognized by the virtual agent when the customer first reaches out. Our ASAPP teams work with you to optimize your intent list on an ongoing basis. Within intent routing, you can view the full list of intents and the routing behavior after an intent is recognized. Creators have the ability to modify this behavior. ## Navigate to Intent Routing You can access **Intent Routing** in the **Virtual Agent** navigation panel. ## Intent Routing List On the intent routing page, you will find a filterable list of intents along with their routing information. The following information is displayed in the table: 1. **Intent name:** displays the name of the intent, as well as a brief description on what it is. 2. **Code:** unique identifier for each intent. 3. **Routing:** displays the flow routing rules currently configured for an intent, if available. a. If the intent is routed to one or more flows, the column will list such flow(s). b. If the intent is not routed to any flow, the column will display an 'Add Route...'. These intents will immediately direct customers to an agent queue. ## Intent Routing Detail Page Clicking on a specific intent in the list will direct you to a page where routing behavior for the intent can be defined. The intent detail page is broken down as follows: 1. **Routing behavior** 2. **Conditional rules and default flow** 3. **Intent information** 4. **Intent toolbar** ### Routing Behavior Routing behavior for a specific intent is determined by selecting one of the following options: 1. **Route to a live agent** When the intent is identified, the customer will be immediately directed to an agent queue. This is the default selection for any new intents unless configured otherwise. 2. **Route to a flow** When the intent is identified, the customer will be directed to a flow in accordance with the [conditional rules](#conditional-rules-and-default-flow) that you will subsequently define. ### Conditional Rules and Default Flow If an intent is configured to be [routed to a flow](#routing-behavior), you have the option to build conditional rules and route to a flow only when the conditions are validated TRUE. If all the conditional rules are invalid, customers will be routed to a [default flow](#default-flow) of your choosing. #### Add Conditional Route To add a new conditional route: 1. Select **Add Conditional Route**. 2. Define a conditional statement in the **Conditional Route** editor by: a. Selecting an available [attribute](/messaging-platform/virtual-agent/attributes) as target from the drop-down menu and choose the value to validate against. E.g. authentication equals true. i. Multiple conditions can be added by clicking **Add Conditions**. Once added, they can be reordered by dragging, or deleted by clicking the trash can icon. b. Selecting the flow to route customers to, if the conditions are validated in the dropdown. c. Click **Apply** to save your changes. 3. Edit or delete a route by hovering over the route and selecting the respective icons. #### Multiple Conditional Routes You can add multiple conditional rules that can route to different flows. You can reorder these conditions by dragging the conditional rule from the icon on the left. Once saved, conditions are evaluated from top to bottom, with the customer being routed to the first flow for which the conditions are validated. If no conditional route is valid, the customer will be routed to the [default flow](#default-flow). #### Default Flow A default flow must be selected if the routing behavior is defined to [route to a flow](#routing-behavior). Customers will be routed to the selected default flow if no conditional routes exist, or if none of the conditional routes were valid. ### Intent Information The **Intent Information** panel will display the intent name, code, and description for easy reference as you are viewing or editing intent routes. The **Assigned routes** will display any flow(s) that are currently routed from the intent. ### Intent Toolbar When you are editing intent routing, the following buttons will display in the toolbar: * **Discard changes**: remove all unsaved changes. * **Save**: save changes to intent routing. ## Save Intent Routing To save any changes to intent routing, click **Save** from the toolbar. By default, when saving an intent route, it is immediately released to production. There is currently no versioning available when saving intent routes. ### Test a Different Intent Route in Test Environments To avoid impacting customer routing and assignments in production you can test a particular intent route in a test environment before releasing it to customers by following the steps below: * In the **Conditional Route** editor, add a condition that targets the 'InTest' attribute. a. The value assigned to 'InTest' should equal 'TRUE'. b. Select the flow that you want to test the routing for. c. Click **Apply**. To fully release the intent route to Production, delete the conditional statement and update the routing to the new flow. ## Test Intent Routes Intent routes can be tested in demo environments. To test an intent route: 1. Access your demo environment. 2. Type `INTENT_INTENTCODE`, where `INTENTCODE` is the code associated with the intent you want to test. Please note that this is case sensitive. 3. Press **Enter** to test intent routes for that intent. # Links Source: https://docs.asapp.com/messaging-platform/virtual-agent/links Learn how to manage external links and URLs that direct customers to web pages. ASAPP provides a powerful mechanism to manage external links and URLs that direct customers to web pages. Links are predominantly used in flows, core dialogs, and customer profiles. ## Links List The Links list page displays a list of all links available to use in AI-Console. When a link is created, it can be attached to content in a node in Flow Tooling, included in the Customer Profile panels, assigned to a View, etc. Here, you'll find the **Link name & URL**. When adding a link to a flow or other feature, you will be required to add it from a list of all link names. ## Create a Link To create a link: 1. From the **Links** landing page, click the **+** button at the bottom right. 2. A modal window will open. 3. **Link name:** Provide a name for the link. Make the name descriptive so that other users can recognize its purpose. 4. **URL:** Include the full external URL, including **http\://** (e.g., `http://example.com/about`). 5. **Channel Targets:** This feature is optional. It allows users to create a link variant that targets customers using a specific channel. See details below. ### Add a Channel Target Variant 1. Click **Add Channel Target** to add a URL variant. A new input field will be added. a. **URL Override:** Include the URL variant for the targeted channel. Please follow the same URL syntax as described under **Create a Link**. b. **Channel Target:** From the drop-down menu, select which channel to target. Bear in mind that a single variant per channel is currently supported. 2. **Delete targets:** To remove a target, click the **Delete** icon. 3. **Save:** To save the link, click the **Save** button. The link will not be active until it is assigned to a flow, customer profile or any other feature that supports **Links**. 4. **Cancel:** On click, all changes will be cleared. ### Link Assignments Once a link has been created, it can be sent to customers in flows. The **Links** feature will keep tabs on where each link has been assigned and provide quick access to those feature areas. When viewing a specific link, the Usage section indicates which flows are currently using the respective link. On click, you can navigate directly to the flow. When a link is not assigned in any flow, 'Not yet assigned' will be displayed. ## Edit a Link Link changes are global, which means that saved changes are immediately pushed to all features that reference the link. 1. From the **Links** landing page, click the **link name** you want to edit. 2. **Link ID:** After a link is saved for the first time, a unique identifier is automatically assigned to the link. This identifier does not change over time, including when the link is edited. a. The **Link ID** can be referenced in **Historical Reporting** for your reporting needs. 3. Assign changes to the configurations. 4. **Save:** When changes are complete, click **Save** to automatically apply the changes. ## Delete a Link Links can be deleted, but only if they are not currently assigned. To delete a link that is assigned, remove the assignments first. 1. If the link is assigned: When opening the Link modal, the **Delete** button will be disabled. The delete function will remain disabled until all link assignments have been removed. 2. If the link is not assigned: The link can be deleted by clicking on the **Delete** button on the bottom-left area of the link modal. # Reporting and Insights Source: https://docs.asapp.com/reporting ASAPP reports data back via several channels, each with different use cases: Retrieve data and reports via a secure API for programmatic access to ASAPP data. Download data and reports via S3. Access real-time data from ASAPP Messaging. Send data to ASAPP via S3 or SFTP. Send conversation, agent, and customer metadata. ## Batch vs Realtime One high-level differentiating feature of these channels is how the underlying data is processed for reporting: * **Real-time**: Processed data flows to the reporting channel as it happens. * **Batch**: Processed data aggregates into time-based buckets, delivered with some delay to the reporting channel. For reference: * Reports visible in ASAPP's Desk/Admin are considered *real-time reports*. * RTCI reports are *real-time reports*. * ASAPP's S3 reports are *batch reports,* delivered with a predictable time delay. * Historical Reports are *batch reports*. Often, metrics similar in both name and in underlying definition are delivered both via batch and via real-time channels. This can be confusing: a metric in viewed in a real-time context (say, via ASAPP's Desk/Admin) might well differ in value from a similar metric viewed in a time-delayed batch context (say, via a report delivered by S3). ***In fact, customers should not expect that values for similar metrics will line up across real-time and batch reporting channels.*** The short explanation for such differences is that **real-time and batch processed metrics are necessarily calculated using different underlying data sets** (with the real-time set current up-to-the-minute, and the batch set delayed as a function of the time bucketing aggregation). It is expected that different underlying data will yield different reported values for your metrics between delivery channels. The balance of this document provides a few concrete examples to further explain the variance you will typically see between real-time and batch reported values for similar metrics. ### Batch vs Real-time Metric Discrepancies Real-time metrics are calculated with a continual process, where computations are evaluated repeatedly with the most current data available. With multiple active and potentially geographically dispersed instances of an application communicating asynchronously across a global message bus, at times the data used to calculate real-time metrics can be intermediate or incomplete. On the other hand, metrics computed using batch processing are computed with all available, terminal data for each reported interaction, and so can provide a more accurate metric at the expense of a time delay vs real-time reporting. ASAPP S3 reports, for example, are normally computed over hours or days, and can therefore incorporate the most complete set of data points required to calculate a metric. As a simplified example, let's consider a metric that shows a daily average for customer satisfaction ratings. Let's assume: * the day starts at 8:00AM * batch processing works against hourly aggregate buckets * batch calculations run at 5 minutes past the hour * it is a *very slow* day :) Over the course of our pretend day, the following interactions are handled by the system: | TIME | Rating | Real-time avg for day | batch avg for day | | :------- | :----- | :-------------------- | :---------------- | | 8:00 AM | 4 | 4 | N/A | | 8:05 AM | 4 | 4 | N/A | | 8:10 AM | 4 | 4 | N/A | | 12:00 PM | 1 | 3.25 | 4 | | 12:05 PM | 1 | 2.8 | 4 | | 1:10 PM | 4 | 3 | 2.8 | At 8:00 AM, batch processing will not have incorporated the rating that was provided at 8:00AM. So the average rating can't be computed for a batch report. Since real-time reporting has access to up-to-the-minute data, real-time reporting shows a value of 4 for the daily average customer satisfaction rating. At 12:00PM, the real-time metric shows an average satisfaction over 4 transactions as 3.25. The batch system shows the average satisfaction rating as 4 over 3 transactions, since the 12:00 transaction has not yet been incorporated into the batch processing calculation. Given our example scenario, the interactions at 12:00 and 12:05 would not be incorporated into the batch reported metric until 1:05PM. In this simplified example, the batch processed metric would align with the real-time metric around 2:05 PM, once both the batch metric and the real-time metric are calculated against the same underlying data set. The next example shows how values provided by real-time vs batch processing might show inconsistent values for "rep assigned time". ```json 8:00AM: NEW ISSUE 8:01AM: ENQUEUED 8:02AM: REP ASSIGNED: rep0 8:03AM: REP UNASSIGNED 8:04AM: REENQUEUED 8:05AM: REP ASSIGNED: rep0 8:06AM: ... ``` With real time reporting, the value for rep\_assigned\_time might show either 8:02AM or 8:05AM, depending on when the data is read and the real-time metric is viewed. Batch processed data, however, will have the complete historical data, and so will consistently report 8:02AM for the rep\_assigned\_time. Batch processed data and real-time processed data are almost always looking at different underlying data sets. Batch data is complete but time-delayed and real-time data is up-to-the-minute but not necessarily complete. As long as the data sets underlying real-time vs. batch reporting differ, customers should expect that the metrics calculated from those different data sets will differ more often than not. # ASAPP Messaging Feed Schemas Source: https://docs.asapp.com/reporting/asapp-messaging-feeds The tables below provide detailed information regarding the schema for exported data files that we can make available to you for ASAPP Messaging. {/* You can also view the [JSON representation of these schemas](/reporting/asapp-messaging-feeds-json). */} ### Table: admin\_activity The admin\_activity table tracks ONLINE/OFFLINE statuses and logged in time in seconds for agents who use Admin. **Sync Time:** 1h **Unique Condition:** company\_marker, rep\_id, status\_description, status\_start\_ts | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :-------------------- | :----------- | :---------------------------------------------------- | :------------------ | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | rep\_id | varchar(191) | The ASAPP rep/agent identifier. | 123008 | | | 2020-11-10 00:00:00 | 2020-11-10 00:00:00 | no | | | | | | rep\_name | varchar(191) | Name of agent | John | | | 2020-11-10 00:00:00 | 2020-11-10 00:00:00 | no | | | | | | status\_description | varchar | Indicates status of the agent. | ONLINE | | | 2020-11-10 00:00:00 | 2020-11-10 00:00:00 | no | | | | | | status\_start\_ts | datetime | Timestamp at which this agent entered that status. | 2018-06-10 14:23:00 | | | 2020-11-10 00:00:00 | 2020-11-10 00:00:00 | no | | | | | | status\_end\_ts | datetime | Timestamp at which this agent exited that status. | 2018-06-10 14:23:00 | | | 2020-11-10 00:00:00 | 2020-11-10 00:00:00 | no | | | | | | status\_time\_seconds | double | Time in seconds that the agents spent in that status. | 2353.23 | | | 2020-11-10 00:00:00 | 2020-11-10 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2025-01-09 00:00:00 | 2025-01-09 00:00:00 | no | | | | | ### Table: agent\_journey\_rep\_event\_frequency Aggregated counts of various agent journey event types partitioned by rep\_id **Sync Time:** 1d **Unique Condition:** primary-key: rep\_id, event\_type, company\_marker, instance\_ts | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :-------------------- | :----------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | instance\_ts | timestamp | The time window of computed elements. This window is usually 15 minutes or 1 hour depending on the generation time. Times are rounded down to the nearest interval (for a time of 12:34 and an interval of 15m, this is 12:30). As an example, for a 15 minute interval an instance\_ts of 12:30 implies events from 12:30 -> 12:45. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | 2022-01-31 00:00:00 | 2022-01-31 00:00:00 | no | | | | | | company\_marker | varchar(191) | The ASAPP company marker. | spear, aa | | | 2022-01-31 00:00:00 | 2022-01-31 00:00:00 | no | | | | | | rep\_id | varchar(191) | The ASAPP rep/agent identifier. | 123008 | | | 2022-01-31 00:00:00 | 2022-01-31 00:00:00 | no | | | | | | event\_type | varchar(191) | agent journey event type on record | CUSTOMER\_TIMEOUT, TEXT\_MESSAGE | | | 2022-01-31 00:00:00 | 2022-01-31 00:00:00 | no | | | | | | event\_count | bigint | count of the agent journey event type on record | | | | 2022-01-31 00:00:00 | 2022-01-31 00:00:00 | no | | | | | | disconnected\_count | bigint | number of times that a rep disconnected for less than 1 hour | | | | 2022-01-31 00:00:00 | 2022-01-31 00:00:00 | no | | | | | | disconnected\_seconds | bigint | cumulative number of seconds that a rep disconnected for less than 1 hour | | | | 2022-01-31 00:00:00 | 2022-01-31 00:00:00 | no | | | | | ### Table: autopilot\_flow This table contains factual data about autopilot flow. **Sync Time:** 1h **Unique Condition:** company\_marker, issue\_id, form\_start\_ts | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :------------------------- | :-------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | instance\_ts | timestamp | The time window of computed elements. This window is usually 15 minutes or 1 hour depending on the generation time. Times are rounded down to the nearest interval (for a time of 12:34 and an interval of 15m, this is 12:30). As an example, for a 15 minute interval an instance\_ts of 12:30 implies events from 12:30 -> 12:45. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | 2022-03-09 00:00:00 | 2022-03-09 00:00:00 | no | | | | | | company\_id | bigint | DEPRECATED 2024-03-25 | 10001 | | | 2022-03-09 00:00:00 | 2022-03-09 00:00:00 | no | | | | | | issue\_id | bigint | The ASAPP issue or conversation id. | 21352352 | | | 2022-03-09 00:00:00 | 2022-03-09 00:00:00 | no | | | | | | customer\_id | bigint | The ASAPP internal customer identifier. | 123008 | | | 2022-03-09 00:00:00 | 2022-03-09 00:00:00 | no | | | | | | rep\_id | varchar(191) | The ASAPP rep/agent identifier. | 123008 | | | 2022-03-09 00:00:00 | 2022-03-09 00:00:00 | no | | | | | | rep\_assigned\_ts | timestamp without time zone | | | | | 2022-03-09 00:00:00 | 2022-03-09 00:00:00 | no | | | | | | form\_start\_ts | timestamp without time zone | Timestamp of autopilot form/flow being recommended by MLE or timestamp of flow sent from quick send. issue\_id + form\_recommended\_event\_ts should be unique | | | | 2022-03-09 00:00:00 | 2022-03-09 00:00:00 | no | | | | | | form\_dismissed\_event\_ts | timestamp without time zone | Timestamp of recommended autopilot form being dismissed. | | | | 2022-03-09 00:00:00 | 2022-03-09 00:00:00 | no | | | | | | form\_presented\_event\_ts | timestamp without time zone | Timestamp the autopilot form being presented to end user. | | | | 2022-03-09 00:00:00 | 2022-03-09 00:00:00 | no | | | | | | form\_submitted\_event\_ts | timestamp without time zone | Timestamp the autopilot form being submitted by end user | | | | 2022-03-09 00:00:00 | 2022-03-09 00:00:00 | no | | | | | | flow\_id | varchar(255) | An ASAPP identifier assigned to a particular flow executed during a customer event or request. | 347bdddb-d3a1-45fc-bbcd-dbd3a175fc1c | | | 2022-03-09 00:00:00 | 2022-03-09 00:00:00 | no | | | | | | flow\_name | varchar(255) | The ASAPP text name for a given flow which was executed during a customer event or request. | FirstChatMessage, AccountNumberFlow | | | 2022-03-09 00:00:00 | 2022-03-09 00:00:00 | no | | | | | | form\_start\_from | character varying(191) | How the flow is being sent by the agent. manual: sent manually from the quick send dropdown in desk accept: sent by accept recommendation by ML server | | | | 2022-03-09 00:00:00 | 2022-03-09 00:00:00 | no | | | | | | is\_secure\_form | boolean | Is this a secure form flow. | false | | | 2022-03-09 00:00:00 | 2022-03-09 00:00:00 | no | | | | | | queue\_id | integer | The ASAPP queue identifier which the issue was placed. | 210001 | | | 2022-03-09 00:00:00 | 2022-03-09 00:00:00 | no | | | | | | asapp\_mode | varchar(191) | Mode of the desktop that the rep is logged into (CHAT or VOICE). | CHAT, VOICE | | | 2022-03-09 00:00:00 | 2022-03-09 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2022-03-09 00:00:00 | 2022-03-09 00:00:00 | no | | | | | ### Table: convos\_intents The convos\_intents table lists the current state for intent and utterance information associated with a conversation/issue that had events within the identified 15 minute time window. This table will include unended conversations. **Sync Time:** 1h **Unique Condition:** issue\_id | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :------------------------- | :----------- | :------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------ | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | conversation\_id | bigint | deprecated: 2019-09-25 | 21352352 | | | 2018-11-07 00:00:00 | 2018-11-07 00:00:00 | no | | | | | | first\_agent\_id | varchar(191) | deprecated: 2019-09-25 | 123008 | | | 2018-11-07 00:00:00 | 2018-11-07 00:00:00 | no | | | | | | customer\_id | bigint | The ASAPP internal customer identifier. | 123008 | | | 2018-11-07 00:00:00 | 2018-11-07 00:00:00 | no | | | | | | first\_utterance\_ts | varchar(255) | The timestamp of the first customer utterance for an issue. | 2018-09-05 19:58:06 | | | 2018-11-07 00:00:00 | 2018-11-07 00:00:00 | no | | | | | | first\_utterance\_text | varchar(255) | Time of the first customer message in the conversation. | 'Pay my bill', 'Check service availability' | | | 2018-11-07 00:00:00 | 2018-11-07 00:00:00 | no | | | | | | first\_intent\_code | varchar(255) | Code name which are used for classifying customer queries in first interaction. | PAYBILL, COVERAGE | | | 2018-11-07 00:00:00 | 2018-11-07 00:00:00 | no | | | | | | first\_intent\_code\_alt | varchar(255) | Alternative second best code name which are used for classifying customer queries in first interaction. | PAYBILL, COVERAGE | | | 2018-11-07 00:00:00 | 2018-11-07 00:00:00 | no | | | | | | final\_intent\_code | varchar(255) | The final code name classifying the customer's query, based on the flow navigated; defaults to the first interaction code if no flow was followed. | PAYBILL, COVERAGE | | | 2018-11-07 00:00:00 | 2018-11-07 00:00:00 | no | | | | | | intent\_path | varchar(255) | A comma-separated list of all intent codes from the customer’s flow navigation. If no flow was navigated, this will match the first intent code. | OUTAGE,CANT\_CONNECT | | | 2018-11-07 00:00:00 | 2018-11-07 00:00:00 | no | | | | | | disambig\_count | bigint | The number of times a disambiguation event was presented for an issue. | 2 | | | 2018-11-07 00:00:00 | 2018-11-07 00:00:00 | no | | | | | | ftd\_visit | boolean | Indicates whether free-text disambiguation was used to help the customer present a clearer intent, based on the number of texts sent to AI. | true, false | | | 2018-11-07 00:00:00 | 2018-11-07 00:00:00 | no | | | | | | faq\_id | varchar(255) | The last FAQ identifier presented for an issue. | FORGOT\_LOGIN\_faq | | | 2018-11-07 00:00:00 | 2018-11-07 00:00:00 | no | | | | | | final\_action\_destination | varchar(255) | The last deep-link URL clicked during the issue resolution process. | asapp-pil://acme/JSONataDeepLink | | | 2018-11-07 00:00:00 | 2018-11-07 00:00:00 | no | | | | | | is\_first\_intent\_correct | boolean | Indicates whether the initial intent associated with the chat was correct, based on feedback from the agent. | true, false | | | 2018-11-07 00:00:00 | 2018-11-07 00:00:00 | no | | | | | | issue\_id | bigint | The ASAPP issue or conversation id. | 21352352 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | first\_rep\_id | varchar(191) | The first ASAPP rep/agent identifier found in a window of time. | 123008 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-11-01 00:00:00 | 2024-05-24 00:00:00 | no | | | | | ### Table: convos\_intents\_ended The convos\_intents\_ended table lists the current state for intent and utterance information associated with a conversation/issue that have had events within the identified 15 minute time window. This table will filter out unended conversations. **Sync Time:** 1h **Unique Condition:** issue\_id | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :------------------------- | :----------- | :------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | conversation\_id | bigint | deprecated: 2019-09-25 | 21352352 | | | 2018-11-07 00:00:00 | 2019-01-11 00:00:00 | no | | | | | | first\_agent\_id | varchar(191) | deprecated: 2019-09-25 | 123008 | | | 2018-11-07 00:00:00 | 2019-01-11 00:00:00 | no | | | | | | customer\_id | bigint | The ASAPP internal customer identifier. | 123008 | | | 2018-11-07 00:00:00 | 2018-11-07 00:00:00 | no | | | | | | first\_utterance\_ts | varchar(255) | Timestamp of the first customer message in the conversation. | 2018-09-05 19:58:06T00:01:16.203000+00:00 | | | 2018-11-07 00:00:00 | 2018-11-07 00:00:00 | no | | | | | | first\_utterance\_text | varchar(255) | First message from the customer. | I need to pay my bill. | | | 2018-11-07 00:00:00 | 2018-11-07 00:00:00 | no | | | | | | first\_intent\_code | varchar(255) | Code name which are used for classifying customer queries in first interaction | PAYBILL | | | 2018-11-07 00:00:00 | 2018-11-07 00:00:00 | no | | | | | | first\_intent\_code\_alt | varchar(255) | alternative second best code name which are used for classifying customer queries in first interaction. | PAYBILL | | | 2018-11-07 00:00:00 | 2018-11-07 00:00:00 | no | | | | | | final\_intent\_code | varchar(255) | The final code name classifying the customer's query, based on the flow navigated; defaults to the first interaction code if no flow was followed. | PAYBILL | | | 2018-11-07 00:00:00 | 2018-11-07 00:00:00 | no | | | | | | intent\_path | varchar(255) | A comma-separated list of all intent codes from the customer’s flow navigation. If no flow was navigated, this will match the first intent code. | OUTAGE, CANT\_CONNECT | | | 2018-11-07 00:00:00 | 2018-11-07 00:00:00 | no | | | | | | disambig\_count | bigint | The number of times a disambiguation event was presented for an issue. | 2 | | | 2018-11-07 00:00:00 | 2018-11-07 00:00:00 | no | | | | | | ftd\_visit | boolean | Indicates whether free-text disambiguation was used to help the customer present a clearer intent, based on the number of texts sent to AI. | false, true | | | 2018-11-07 00:00:00 | 2018-11-07 00:00:00 | no | | | | | | faq\_id | varchar(255) | The last faq-id presented for an issue. | FORGOT\_LOGIN\_faq | | | 2018-11-07 00:00:00 | 2018-11-07 00:00:00 | no | | | | | | final\_action\_destination | varchar(255) | The last deep-link URL clicked during the issue resolution process. | asapp-pil://acme-mobile/protection-plan-features | | | 2018-11-07 00:00:00 | 2018-11-07 00:00:00 | no | | | | | | is\_first\_intent\_correct | boolean | Indicates whether the initial intent associated with the chat was correct, based on feedback from the agent. | true, false | | | 2018-11-07 00:00:00 | 2018-11-07 00:00:00 | no | | | | | | issue\_id | bigint | The ASAPP issue or conversation id. | 21352352 | | | 2018-11-07 00:00:00 | 2018-11-07 00:00:00 | no | | | | | | first\_rep\_id | varchar(191) | The first ASAPP rep/agent identifier found in a window of time. | 123008 | | | 2018-11-07 00:00:00 | 2018-11-07 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-11-01 00:00:00 | 2024-05-24 00:00:00 | no | | | | | ### Table: convos\_metadata This convos\_metadata table contains data associated with a conversation/ issue during a specific 15 minute window. This table will include data from unended conversations. Expect to see columns containing the app\_version, the conversation\_end timestamp and whether it was escalated to chat or not. **Sync Time:** 1h **Unique Condition:** issue\_id | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :-------------------------------------------- | :-------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | company\_id | bigint | DEPRECATED 2024-03-25 | 10001 | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | company\_subdivision | varchar(255) | String identifier for the company subdivision associated with the conversation. | ACMEsubcorp | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | company\_segments | varchar(255) | String with comma separated segments for the company enclosed by square brackets. | marketing,promotions | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | first\_utterance\_ts | timestamp | Timestamp of the first customer message in the conversation. | 2018-09-05 19:58:06 | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | first\_utterance\_text | varchar(255) | First message content from the customer. | "Hello, please assist me" | | | 2019-01-11 00:00:00 | 2019-01-11 00:00:00 | no | | | | | | issue\_created\_ts | timestamp | Timestamp of the "NEW\_ISSUE" event for an issue. | 2018-09-05 19:58:06 | | | 2019-10-15 00:00:00 | 2019-10-15 00:00:00 | no | | | | | | last\_event\_ts | timestamp | The timestamp of the last event for an issue. | 2018-09-05 19:58:06 | | | 2019-09-16 00:00:00 | 2019-09-16 00:00:00 | no | | | | | | last\_srs\_event\_ts | timestamp without time zone | Timestamp of the last bot assisted event. | 2018-09-05 19:58:06 | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | conversation\_end\_ts | timestamp | Timestamp when the conversation ended. | 2018-09-05 19:58:06 | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | issue\_id | bigint | The ASAPP issue or conversation id. | 21352352 | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | session\_id | varchar(128) | The ASAPP session identifier. It is a uuid generated by the chat backend. Note: a session may contain several conversations. | 347bdddb-d3a1-45fc-bbcd-dbd3a175fc1c | | | 2018-11-26 00:00:00 | 2020-10-24 00:00:00 | no | | | | | | session\_type | character varying(255) | ASAPP session type. | asapp-uuid | | | 2018-11-26 00:00:00 | 2020-10-24 00:00:00 | no | | | | | | session\_event\_type | character varying(255) | Basic type of the session event. | UPDATE, CREATE | | | 2018-11-26 00:00:00 | 2020-10-24 00:00:00 | no | | | | | | internal\_session\_id | character varying(255) | Internal identifier for the ASAPP session. | 347bdddb-d3a1-45fc-bbcd-dbd3a175fc1c | | | 2019-04-30 00:00:00 | 2019-04-30 00:00:00 | no | | | | | | internal\_session\_type | character varying(255) | An ASAPP session type for internal use. | asapp-uuid | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | internal\_user\_identifier | varchar(255) | The ASAPP customer identifier while using the asapp system. This identifier may represent either a rep or a customer. Use the internal\_user\_type field to determine which type the identifier represents. | 123004 | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | internal\_user\_session\_type | varchar(255) | The customer ASAPP session type. | customer | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | external\_session\_id | character varying(255) | Client-provided session identifier passed to the SDK during chat initialization. | 062906ff-3821-4b5d-9443-ed4fecbda129 | | | 2018-11-26 00:00:00 | 2020-10-24 00:00:00 | no | | | | | | external\_session\_type | character varying(255) | Client-provided session type passed to the SDK during chat initialization. | visitID | | | 2018-11-26 00:00:00 | 2020-10-24 00:00:00 | no | | | | | | external\_user\_id | varchar(255) | Customer identifier provided by the client, available if the customer is authenticated. | EECACBD227CCE91BAF5128DFF4FFDBEC | | | 2018-11-26 00:00:00 | 2020-10-24 00:00:00 | no | | | | | | external\_user\_type | varchar(255) | The type of external user identifier. | acme\_CUSTOMER\_ACCOUNT\_ID | | | 2018-11-26 00:00:00 | 2020-10-24 00:00:00 | no | | | | | | external\_issue\_id | character varying(255) | Client-provided issue identifier passed to the SDK (currently unused). | | | | 2018-11-26 00:00:00 | 2020-10-24 00:00:00 | no | | | | | | external\_channel | character varying(255) | Client-provided customer channel passed to the SDK (currently unused). | | | | 2018-11-26 00:00:00 | 2020-10-24 00:00:00 | no | | | | | | customer\_id | bigint | ASAPP customer id | 1470001 | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | escalated\_to\_chat | bigint | Flag indicating whether the issue was escalated to an agent. false, true | 1 | | | 2018-11-26 00:00:00 | 2020-10-24 00:00:00 | no | | | | | | platform | varchar(255) | A value indicating which consumer platform was used. | ios, android, web | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | device\_type | varchar(255) | The last device type used by the customer for an issue. | mobile, tablet, desktop, watch, unknown | | | 2019-06-17 00:00:00 | 2019-06-17 00:00:00 | no | | | | | | first\_agent\_id | varchar(191) | deprecated: 2019-09-25 | 123008 | | | 2022-01-04 00:00:00 | 2022-01-04 00:00:00 | no | | | | | | last\_agent\_id | varchar(191) | deprecated: 2019-09-25 | 123008 | | | 2022-01-04 00:00:00 | 2022-01-04 00:00:00 | no | | | | | | external\_agent\_id | varchar(255) | deprecated: 2019-09-25 | 347bdddb-d3a1-45fc-bbcd-dbd3a175fc1c | | | 2022-01-04 00:00:00 | 2022-01-04 00:00:00 | no | | | | | | assigned\_to\_rep\_time | timestamp | Time when the issue was first assigned to a rep, if applicable. | 2018-09-05 19:58:06 | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | disposition\_event\_type | varchar(255) | Event type indicating how the conversation ended. | resolved, unresolved, timeout | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | disposition\_ts | timestamp | Timestamp when the rep exited the issue or conversation. | 2018-09-05 19:58:06 | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | termination\_event\_type | varchar(255) | Event type indicating the reason for conversation termination. | customer, agent, autoend | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | disposition\_notes | text | Notes added by the last rep after marking the chat as completed. | "The customer wanted to pay his bill. We successfully processed his payment." | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | ended\_resolved | integer | 1 if the rep marked the conversation resolved, 0 otherwise. | 1, 0 | | | 2019-04-30 00:00:00 | 2019-04-30 00:00:00 | no | | | | | | ended\_unresolved | integer | 1 if the rep marked the conversation unresolved, 0 otherwise. | 0, 1 | | | 2019-04-30 00:00:00 | 2019-04-30 00:00:00 | no | | | | | | ended\_timeout | integer | 1 if the customer timed out or abandoned chat, 0 otherwise. | 0, 1 | | | 2019-04-30 00:00:00 | 2019-04-30 00:00:00 | no | | | | | | ended\_auto | integer | 1 if the rep did not disposition the issue and it was auto-ended. | 0, 1 | | | 2019-04-30 00:00:00 | 2019-04-30 00:00:00 | no | | | | | | ended\_other | integer | 1 if the customer or rep terminated the issue but the rep didn't disposition the issue. | 0, 1 | | | 2019-04-30 00:00:00 | 2019-04-30 00:00:00 | no | | | | | | app\_version\_asapp | varchar(255) | ASAPP API version used during customer event or request. | com.asapp.api\_api:-2f1a053f70c57f94752e7616b66f56d7bf1d6675 | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | app\_version\_client | varchar(255) | ASAPP SDK version used during customer event or request. | web-sdk-4.0.0 | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | session\_metadata | character varying(65535) | Additional metadata information about the session, provided by the client. | | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | last\_sequence\_id | integer | Last sequence identifier associated with the issue. | 115 | | | 2019-04-30 00:00:00 | 2019-04-30 00:00:00 | no | | | | | | issue\_queue\_id | varchar(255) | Queue identifier associated with the issue. | 20001 | | | 2019-04-30 00:00:00 | 2019-04-30 00:00:00 | no | | | | | | issue\_queue\_name | varchar(255) | Queue name associated with the issue. | acme-wireless-english | | | 2019-04-30 00:00:00 | 2019-04-30 00:00:00 | no | | | | | | csat\_rating | double precision | Customer Satisfaction (CSAT) rating for the issue. | 400.0 | | | 2019-04-30 00:00:00 | 2019-04-30 00:00:00 | no | | | | | | sentiment\_valence | character varying(50) | Sentiment of the issue. | Neutral, Negative | | | 2019-04-30 00:00:00 | 2019-04-30 00:00:00 | no | | | | | | deep\_link\_queue | character varying(65535) | Deeplink queued for the issue. | | | | 2019-04-30 00:00:00 | 2019-04-30 00:00:00 | no | | | | | | end\_srs\_selection | character varying(65535) | User selected button upon end\_srs. | | | | 2019-04-30 00:00:00 | 2019-04-30 00:00:00 | no | | | | | | trigger\_link | VARCHAR | deprecated: 2020-04-25 aliases: current\_page\_url | | | | 2022-01-04 00:00:00 | 2022-01-04 00:00:00 | no | | | | | | auth\_state | varchar(3) | Flag indicating if the user is authenticated. | false, true | | | 2019-04-30 00:00:00 | 2019-04-30 00:00:00 | no | | | | | | auth\_external\_token\_id | character varying(65535) | Encrypted user identifier, provided by the client system, associated with the first authentication event for an issue. | 82EFDDADC5466501443E3E61ED640162 | | | 2019-05-15 00:00:00 | 2019-05-17 00:00:00 | no | | | | | | auth\_source | character varying(65535) | Source of the first authentication event for an issue. | ivr-url | | | 2019-05-15 00:00:00 | 2019-05-17 00:00:00 | no | | | | | | auth\_external\_user\_type | character varying(65535) | External user type of the first authentication event for an issue. | ACME\_CUSTOMER\_ACCOUNT\_ID | | | 2019-05-15 00:00:00 | 2019-05-17 00:00:00 | no | | | | | | auth\_external\_user\_id | character varying(65535) | User ID provided by the client for the first authentication event. | 9BE62CCD564D6982FF305DEBCEAABBB5 | | | 2019-05-15 00:00:00 | 2019-07-16 00:00:00 | no | | | | | | is\_review\_required | boolean | Flag indicates whether an admin must review this issue. data type: boolean data type: boolean | true, false | | | 2019-07-24 00:00:00 | 2019-07-24 00:00:00 | no | | | | | | mid\_issue\_auth\_ts | timestamp without time zone | Time when the user authenticates during the middle of an issue, | 2020-01-11 08:13:26.094 | | | 2019-07-24 00:00:00 | 2019-07-24 00:00:00 | no | | | | | | first\_rep\_id | varchar(191) | ASAPP provided identifier for the first rep involved with the issue. | 60001 | | | 2019-09-26 00:00:00 | 2019-09-26 00:00:00 | no | | | | | | last\_rep\_id | varchar(191) | ASAPP provided identifier for the last rep involved with the issue. | 60001 | | | 2019-09-26 00:00:00 | 2019-09-26 00:00:00 | no | | | | | | external\_rep\_id | varchar(255) | Client-provided identifier for the rep. | 0671018510 | | | 2019-09-26 00:00:00 | 2019-09-26 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-11-01 00:00:00 | 2024-05-24 00:00:00 | no | | | | | | first\_voice\_customer\_state | varchar(255) | Initial state assigned to the customer when using voice. | IDENTIFIED | | | 2019-11-21 00:00:00 | 2019-11-21 00:00:00 | no | | | | | | first\_voice\_customer\_state\_ts | timestamp | 2020-01-11 08:13:26.094 | 2018-09-05 19:58:06 | | | 2019-11-21 00:00:00 | 2019-11-21 00:00:00 | no | | | | | | first\_voice\_identified\_customer\_state\_ts | timestamp | Time when the customer was first assigned an IDENTIFIED state. | 2020-01-11 08:13:26.094 | | | 2019-11-21 00:00:00 | 2019-11-21 00:00:00 | no | | | | | | first\_voice\_verified\_customer\_state\_ts | timestamp | Time when the customer was first assigned an VERIFIED state. | 2020-01-11 08:13:26.094 | | | 2019-11-21 00:00:00 | 2019-11-21 00:00:00 | no | | | | | | merged\_ts | timestamp | Time when the issue was merged into another issue. data type: timestamp | 2020-01-11 08:13:26.094 | | | 2019-12-28 00:00:00 | 2019-12-28 00:00:00 | no | | | | | | desk\_mode\_flag | bigint | Bitmap encodes if agent handled voice-issue ASAPP desk, had engagement with ASAPP desk. bitmap: 0: null, 1: 'VOICE', 2: 'DESK', 4: 'ENGAGEMENT', 8: 'INACTIVITY' NULL for non voice issues | 0, 1, 2, 5, 7 | | | 2020-02-19 00:00:00 | 2020-02-19 00:00:00 | no | | | | | | desk\_mode\_string | varchar(191) | Decodes the desk\_mode flag. Current possible values (Null, 'VOICE', 'VOICE\_DESK', 'VOICE\_DESK\_ENGAGEMENT','VOICE\_INACTIVITY'). NULL for non voice issues. | VOICE\_DESK | | | 2020-02-19 00:00:00 | 2020-02-19 00:00:00 | no | | | | | | current\_page\_url | varchar(2000) | URL link (stripped of parameters) that triggered the start chat event. Only applicable for WEB platforms. aliases: trigger\_link | https:[www.acme.corp/billing/viewbill](http://www.acme.corp/billing/viewbill) | | | 2020-04-24 00:00:00 | 2020-04-24 00:00:00 | no | | | | | | raw\_current\_page\_url | | Full URL link (including parameters) that triggered the chat event. Only applicable for WEB platforms. aliases: raw\_trigger\_link | | | | 2020-04-25 00:00:00 | 2020-04-25 00:00:00 | no | | | | | | language\_code | VARCHAR(32) | Language code for the issue\_id | English | | | 2022-01-04 00:00:00 | 2022-01-04 00:00:00 | no | | | | | ### Table: convos\_metadata\_ended The convos\_metadata table contains data associated with a conversation/issue during a specific 15 minute window. Expect to see columns containing the app\_version, the conversation\_end timestamp and whether it was escalated to chat or not. This table will filter out data from unended conversations. This export removes any unended issues and any issues which contained no chat activity. **Sync Time:** 1h **Unique Condition:** issue\_id | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :-------------------------------------------- | :-------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------------------------- | :--------- | :---- | :------------------------------- | :------------------------------- | :----- | :-- | :------------ | :----------- | :------------ | | company\_id | bigint | DEPRECATED 2024-03-25 | 10001 | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | company\_subdivision | varchar(255) | String identifier for the company subdivision associated with the conversation. | ACMEsubcorp | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | company\_segments | varchar(255) | String with comma separated segments for the company enclosed by square brackets. | marketing,promotions | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | first\_utterance\_ts | timestamp | Timestamp of the first customer message in the conversation. | 2019-09-22T13:12:26.073000+00:00 | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | first\_utterance\_text | varchar(65535) | First message content from the customer. | "Hello, please assist me" | | | 2019-01-11 00:00:00 | 2022-06-08 00:00:00 | no | | | | | | issue\_created\_ts | timestamp | Timestamp when the "NEW\_ISSUE" event occurred. | 2019-11-21T19:11:01.748000+00:00 | | | 2019-10-15 13:12:26.073000+00:00 | 2019-10-15 13:12:26.073000+00:00 | no | | | | | | last\_event\_ts | timestamp | Timestamp of the last event in the issue. | 2019-09-23T14:00:09.043000+00:00 | | | 2019-09-16 00:00:00 | 2019-09-16 00:00:00 | no | | | | | | last\_srs\_event\_ts | timestamp without time zone | Timestamp of the last bot assisted event. | 2019-09-22T13:12:26.131000+00:00 | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | conversation\_end\_ts | timestamp | Timestamp when the conversation ended. | 2019-10-08T14:00:07.395000+00:00 | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | issue\_id | bigint | The ASAPP issue or conversation id. | 21352352 | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | session\_id | varchar(128) | The ASAPP session identifier. It is a uuid generated by the chat backend. Note: a session may contain several conversations. | 347bdddb-d3a1-45fc-bbcd-dbd3a175fc1c | | | 2018-11-26 00:00:00 | 2020-10-24 00:00:00 | no | | | | | | session\_type | character varying(255) | ASAPP session type. | asapp-uuid | | | 2018-11-26 00:00:00 | 2020-10-24 00:00:00 | no | | | | | | session\_event\_type | character varying(255) | Basic type of the session event. | CREATE, UPDATE, DELETE | | | 2018-11-26 00:00:00 | 2019-01-11 00:00:00 | no | | | | | | internal\_session\_id | character varying(255) | Internal identifier for the ASAPP session. | 347bdddb-d3a1-45fc-bbcd-dbd3a175fc1c | | | 2019-01-11 00:00:00 | 2019-01-11 00:00:00 | no | | | | | | internal\_session\_type | character varying(255) | An ASAPP session type for internal use. | asapp-uuid | | | 2019-01-11 00:00:00 | 2019-01-11 00:00:00 | no | | | | | | internal\_user\_identifier | varchar(255) | The ASAPP customer identifier while using the asapp system. This identifier may represent either a rep or a customer. Use the the internal\_user\_session\_type field to determine which type the identifier represents. | 123004 | | | 2018-11-26 00:00:00 | 2018-12-06 00:00:00 | no | | | | | | internal\_user\_session\_type | varchar(255) | The customer ASAPP session type. | customer | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | external\_session\_id | character varying(255) | Client-provided session identifier passed to the SDK during chat initialization. | 062906ff-3821-4b5d-9443-ed4fecbda129 | | | 2018-11-26 00:00:00 | 2020-10-24 00:00:00 | no | | | | | | external\_session\_type | character varying(255) | Client-provided session type passed to the SDK during chat initialization. | visitID | | | 2018-11-26 00:00:00 | 2020-10-24 00:00:00 | no | | | | | | external\_user\_id | varchar(255) | Customer identifier provided by the client, available if the customer is authenticated. | MjU0ZTRiMDQyNDVlNTcyNWNlOTljNmI1NDc2NWQzNzdmNmJmZTFjZDgyY2IwMzc3MDkwZDI5YmQwZDlkODJhNA== | | | 2018-11-26 00:00:00 | 2020-10-24 00:00:00 | no | | | | | | external\_user\_type | varchar(255) | The type of external user identifier. | acme\_CUSTOMER\_ACCOUNT\_ID | | | 2018-11-26 00:00:00 | 2020-10-24 00:00:00 | no | | | | | | external\_issue\_id | character varying(255) | Client-provided issue identifier passed to the SDK (currently unused). | | | | 2018-11-26 00:00:00 | 2020-10-24 00:00:00 | no | | | | | | external\_channel | character varying(255) | Client-provided customer channel passed to the SDK (currently unused). | | | | 2018-11-26 00:00:00 | 2020-10-24 00:00:00 | no | | | | | | customer\_id | bigint | An ASAPP customer identifier. | 1470001 | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | escalated\_to\_chat | bigint | 1 if an issue escalated to live chat, 0 if not | 1 | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | platform | varchar(255) | The consumer platform in use. | ios, android, web, voice | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | device\_type | varchar(255) | The last device type used by the customer for an issue. | mobile, tablet, desktop, watch, unknown | | | 2019-06-17 00:00:00 | 2019-06-17 00:00:00 | no | | | | | | first\_agent\_id | varchar(191) | deprecated: 2019-09-25 | 123008 | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | last\_agent\_id | varchar(191) | deprecated: 2019-09-25 | 123008 | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | external\_agent\_id | varchar(255) | deprecated: 2019-09-25 | 347bdddb-d3a1-45fc-bbcd-dbd3a175fc1c | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | assigned\_to\_rep\_time | timestamp | Timestamp when the issue was first assigned to a rep, if applicable. | 2018-09-05 19:58:06T16:14:57.289000+00:00 | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | disposition\_event\_type | varchar(255) | Event type indicating how the conversation ended. | resolved, unresolved, timeout | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | disposition\_ts | timestamp | Timestamp when the rep exited the issue or conversation. | 2018-09-05 19:58:06T16:14:57.289000+00:00 | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | termination\_event\_type | varchar(255) | Event type indicating the reason for conversation termination. | customer, agent, autoend | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | disposition\_notes | text | Notes added by the last rep after marking the chat as completed. | "The customer wanted to pay his bill. We successfully processed his payment." | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | ended\_resolved | integer | Indicator (1 or 0) for whether the rep marked the conversation as resolved. | 1, 0 | | | 2019-04-30 00:00:00 | 2019-05-01 00:00:00 | no | | | | | | ended\_unresolved | integer | Indicator (1 or 0) for whether the rep marked the conversation as unresolved. | 0, 1 | | | 2019-04-30 00:00:00 | 2019-05-01 00:00:00 | no | | | | | | ended\_timeout | integer | Indicator (1 or 0) for whether the customer abandoned or timed out of the chat. | 0, 1 | | | 2019-04-30 00:00:00 | 2019-04-30 00:00:00 | no | | | | | | ended\_auto | integer | Indicator (1 or 0) for whether the issue was auto-ended without rep disposition. | 0, 1 | | | 2019-04-30 00:00:00 | 2019-05-01 00:00:00 | no | | | | | | ended\_other | integer | Indicator (1 or 0) for whether the customer or rep terminated the issue without rep disposition. | 0, 1 | | | 2019-04-30 00:00:00 | 2019-05-01 00:00:00 | no | | | | | | app\_version\_asapp | varchar(255) | ASAPP API version used during customer event or request. | com.asapp.api\_api:-b393f2d920bb74ce5bbc4174ac5748acff6e8643 | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | app\_version\_client | varchar(255) | ASAPP SDK version used during customer event or request. | web-sdk-4.0.2 | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | session\_metadata | character varying(65535) | Additional metadata information about the session, provided by the client. | | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | last\_sequence\_id | integer | Last sequence identifier associated with the issue. | 25 | | | 2019-01-11 00:00:00 | 2019-01-11 00:00:00 | no | | | | | | issue\_queue\_id | varchar(255) | Queue identifier associated with the issue. | 2001 | | | 2019-01-11 00:00:00 | 2019-01-11 00:00:00 | no | | | | | | issue\_queue\_name | varchar(255) | Queue name associated with the issue. | acme-mobile-english | | | 2019-01-11 00:00:00 | 2019-01-11 00:00:00 | no | | | | | | csat\_rating | double precision | Customer Satisfaction (CSAT) rating for the issue. | 400.0 | | | 2019-01-11 00:00:00 | 2019-01-11 00:00:00 | no | | | | | | sentiment\_valence | character varying(50) | Sentiment of the issue. | Neutral, Negative | | | 2019-01-11 00:00:00 | 2019-01-11 00:00:00 | no | | | | | | deep\_link\_queue | character varying(65535) | Deeplink queued for the issue. | | | | 2019-01-11 00:00:00 | 2019-01-11 00:00:00 | no | | | | | | end\_srs\_selection | character varying(65535) | User selected button option at the end of the session. | | | | 2019-01-11 00:00:00 | 2019-01-11 00:00:00 | no | | | | | | trigger\_link | VARCHAR | deprecated: 2020-04-25 aliases: current\_page\_url | | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | auth\_state | varchar(3) | Flag indicating if the user is authenticated. | 0, 1 | | | 2018-11-26 00:00:00 | 2018-11-26 00:00:00 | no | | | | | | auth\_external\_token\_id | character varying(65535) | A client provided field. Encrypted user ID from client system associated with the first authentication event for an issue. | 82EFDDADC5466501443E3E61ED640162 | | | 2019-05-15 00:00:00 | 2019-05-17 00:00:00 | no | | | | | | auth\_source | character varying(65535) | The source of the first authentication event for an issue. | ivr-url | | | 2019-05-15 00:00:00 | 2019-05-17 00:00:00 | no | | | | | | auth\_external\_user\_type | character varying(65535) | An external user type of the first authentication event for an issue. | ACME\_CUSTOMER\_ACCOUNT\_ID | | | 2019-05-15 00:00:00 | 2019-05-17 00:00:00 | no | | | | | | auth\_external\_user\_id | character varying(65535) | External user ID provided by the client for the first authentication event. | 9BE62CCD564D6982FF305DEBCEAABBB5 | | | 2019-05-15 00:00:00 | 2019-07-16 00:00:00 | no | | | | | | is\_review\_required | boolean | Flag indicates whether an admin must review this issue. data type: boolean | true, false | | | 2019-07-24 00:00:00 | 2019-07-24 00:00:00 | no | | | | | | mid\_issue\_auth\_ts | timestamp without time zone | Time when the user authenticates during the middle of an issue. | 2020-01-18T03:43:41.414000+00:00 | | | 2019-07-24 00:00:00 | 2019-07-24 00:00:00 | no | | | | | | first\_rep\_id | varchar(191) | Identifier for the first rep involved with the issue. | 60001 | | | 2019-09-26 00:00:00 | 2019-09-26 00:00:00 | no | | | | | | last\_rep\_id | varchar(191) | Identifier for the last rep involved with the issue. | 60001 | | | 2019-09-26 00:00:00 | 2019-09-26 00:00:00 | no | | | | | | external\_rep\_id | varchar(255) | Client-provided identifier for the rep. | 347bdddb-d3a1-45fc-bbcd-dbd3a175fc1c | | | 2019-09-26 00:00:00 | 2019-09-26 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-11-01 00:00:00 | 2024-05-24 00:00:00 | no | | | | | | first\_voice\_customer\_state | varchar(255) | Initial state assigned to the customer when using voice. | IDENTIFIED, VERIFIED | | | 2019-11-21 00:00:00 | 2019-11-21 00:00:00 | no | | | | | | first\_voice\_customer\_state\_ts | timestamp | Timestamp when the customer was first assigned a state. | 2020-01-18T03:43:41.414000+00:00 | | | 2019-11-21 00:00:00 | 2019-11-21 00:00:00 | no | | | | | | first\_voice\_identified\_customer\_state\_ts | timestamp | Time when the customer was first assigned an IDENTIFIED state. | 2020-01-18T03:43:41.414000+00:00 | | | 2019-11-21 00:00:00 | 2019-11-21 00:00:00 | no | | | | | | first\_voice\_verified\_customer\_state\_ts | timestamp | Time when the customer was first assigned an VERIFIED state. | 2020-01-18T03:43:41.414000+00:00 | | | 2019-11-21 00:00:00 | 2019-11-21 00:00:00 | no | | | | | | merged\_ts | timestamp | Time when the issue was merged into another issue. data type: timestamp | 2020-01-18T03:43:41.414000+00:00 | | | 2019-12-28 00:00:00 | 2019-12-28 00:00:00 | no | | | | | | desk\_mode\_flag | bigint | Bitmap encodes if agent handled voice-issue ASAPP desk, had engagement with ASAPP desk. bitmap: 0: null, 1: 'VOICE', 2: 'DESK', 4: 'ENGAGEMENT', 8: 'INACTIVITY' NULL for non voice issues | 0, 1, 2, 5, 7 | | | 2020-02-19 00:00:00 | 2020-02-19 00:00:00 | no | | | | | | desk\_mode\_string | varchar(191) | Decodes the desk\_mode flag. Current possible values (Null, 'VOICE', 'VOICE\_DESK', 'VOICE\_DESK\_ENGAGEMENT','VOICE\_INACTIVITY'). NULL for non voice issues. | VOICE\_DESK | | | 2020-02-19 00:00:00 | 2020-02-19 00:00:00 | no | | | | | | current\_page\_url | varchar(2000) | URL link (stripped of parameters) that triggered the start chat event. Only applicable for WEB platforms. aliases: trigger\_link | https:[www.acme.corp/billing/viewbill](http://www.acme.corp/billing/viewbill) | | | 2020-04-25 00:00:00 | 2020-04-25 00:00:00 | no | | | | | | raw\_current\_page\_url | | Full URL link (including parameters) that triggered the chat event. Only applicable for WEB platforms. aliases: raw\_trigger\_link | | | | 2020-04-25 00:00:00 | 2020-04-25 00:00:00 | no | | | | | ### Table: convos\_metrics The convos\_metrics table contains counts of various metrics associated with an issue/conversation(e.g. "attempted to chat", "assisted"). The table contains data associated with an issue during a given 15 minute window. The convos\_metrics table will include unended conversation data. **Sync Time:** 1h **Unique Condition:** issue\_id | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :--------------------------------------- | :----------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | company\_subdivision | varchar(255) | String identifier for the company subdivision associated with the conversation. | ACMEsubcorp | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | company\_segments | varchar(255) | String with comma separated segments for the company enclosed by square brackets. | marketing,promotions | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | first\_utterance\_ts | timestamp | Time of the first customer message in the conversation. | 2019-05-16T02:47:13+00:00 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | conversation\_id | bigint | deprecated: 2019-09-25 | 21352352 | | | 2018-11-06 00:00:00 | 2018-11-14 00:00:00 | no | | | | | | customer\_id | bigint | The ASAPP internal customer identifier. | 123008 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | platform | varchar(255) | The platform which was used by the customer for a particular event or request (web, ios, android, applebiz, voice). | web, ios, android, applebiz, voice | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | device\_type | varchar(255) | Last device type used by the customer for an issue. | mobile, tablet, desktop, watch, unknown | | | 2019-06-18 00:00:00 | 2019-06-18 00:00:00 | no | | | | | | assisted | tinyint(1) | Flag indicates whether a rep was assigned and responded to the issue (1 if yes, 0 if no). | 0, 1 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | total\_handle\_time | double | Total time in seconds that reps spent handling the issue, from assignment to disposition. | 168.093 | | | 2019-03-05 00:00:00 | 2019-03-05 00:00:00 | no | | | | | | total\_lead\_time | double | Total time in seconds the customer spent interacting during the conversation, from assignment to last utterance. | 163.222 | | | 2018-11-06 00:00:00 | 2019-03-05 00:00:00 | no | | | | | | total\_wrap\_up\_time | double | Total time in seconds spent by reps wrapping up the conversation, calculated as the difference between handle and lead time. | 4.871 | | | 2018-11-06 00:00:00 | 2019-03-05 00:00:00 | no | | | | | | total\_session\_time | double | Total time the customer spent seeking resolution, including time in queue and up until the conversation end event. | 190.87900018692017 | | | 2018-11-06 00:00:00 | 2019-03-05 00:00:00 | no | | | | | | customer\_sent\_msgs | double | The total number of messages sent by the customer, including typed and tapped messages | 1, 3, 5 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | agent\_sent\_msgs | | deprecated: 2019-09-25 | | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | auto\_generated\_msgs | bigint(20) | The number of messages sent by the AI system. | 0,2 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | first\_rep\_response\_count | bigint(20) | The number of first responses by reps, post-assignment. This field will increment if there are transfers and timeouts and then reassigned and a rep answers. This field will NOT increment if a rep is assigned but doesn't get a chance to answer. | 0, 1 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | total\_seconds\_to\_first\_rep\_response | bigint(20) | Total time in seconds that passed before the rep responded to the customer. | 407.5679998397827 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | agent\_response\_count | | deprecated: 2019-09-25 | | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | customer\_response\_count | bigint(20) | The total number of responses (excluding messages) sent by the customer. | 0, 4 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | total\_rep\_seconds\_to\_respond | double | Total time in seconds the rep took to respond to the customer. | 407.5679998397827 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | total\_cust\_seconds\_to\_respond | double | Total time in seconds the customer took to respond to the rep. | 65.87400007247925 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | time\_in\_queue | double | The cumulative time in seconds spent in queue, including all re-queues. | 78.30999994277954 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | auto\_suggest\_msgs | bigint(20) | Total time spent by the customer in the queue, including any re-queues. | 0, 1, 3 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | auto\_complete\_msgs | bigint(20) | The number of autocomplete messages sent by a rep. | 0, 1, 3 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | auto\_wait\_for\_agent\_msgs | bigint | deprecated: 2019-09-25 | | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | customer\_wait\_for\_agent\_msgs | bigint | deprecated: 2019-09-25 | | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | attempted\_chat | tinyint(1) | TinyInt value indicates if there was an attempt to connect the customer to an rep. A value of 1 if the customer receives an out of business hours message or if a customer was asked to wait for a rep. Also a value of 1 if customer was escalated to chat. deprecation-date: 2020-04-14 expected-eol-date: 2021-10-15 | 0, 1 | | | 2018-11-06 00:00:00 | 2019-07-26 00:00:00 | no | | | | | | out\_business\_ct | bigint | The number of times that a customer received an out of business hours message. | 0, 2 | | | 2018-11-06 00:00:00 | 2019-04-23 00:00:00 | no | | | | | | issue\_id | bigint | The ASAPP issue or conversation id. | 21352352 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | rep\_sent\_msgs | bigint(20) | The number of messages a rep sent. | 0, 6, 7 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | rep\_response\_count | bigint(20) | The count of responses (not messages) sent by the reps. (Note: A FAQ or send-to-flow should count as a response, since from the perspective of the customer they are getting a response of some kind.) | 0, 5, 6 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | auto\_wait\_for\_rep\_msgs | bigint(20) | The number of times a user was asked to wait for a rep. | 0, 1, 2 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | customer\_wait\_for\_rep\_msgs | bigint(20) | The number of times a user asked to speak with a rep. | 0, 1 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | hold\_ct | bigint | The number of times the customer was placed on hold. This applies to VOICE only. | 0, 1, 2 | | | 2019-11-08 00:00:00 | 2019-11-08 00:00:00 | no | | | | | | total\_hold\_time\_seconds | float | The total amount of time in seconds that the customer was placed on hold. This applies to VOICE only. | 180.4639995098114 | | | 2019-11-08 00:00:00 | 2019-11-08 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-11-01 00:00:00 | 2024-05-24 00:00:00 | no | | | | | ### Table: convos\_metrics\_ended The convos\_metrics table contains counts of various metrics associated with an issue/conversation(e.g. "attempted to chat", "assisted"). The table contains data associated with an issue during a given 15 minute window. This table will filter out unended conversations and issues with no activity. **Sync Time:** 1h **Unique Condition:** issue\_id | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :--------------------------------------- | :----------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | company\_subdivision | varchar(255) | String identifier for the company subdivision associated with the conversation. | ACMEsubcorp | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | company\_segments | varchar(255) | String with comma separated segments for the company enclosed by square brackets. | marketing,promotions | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | first\_utterance\_ts | timestamp | Time of the first customer message in the conversation. | 2018-09-05 19:58:06 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | conversation\_id | bigint | deprecated: 2019-09-25 | 21352352 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | customer\_id | bigint | The ASAPP internal customer identifier. | 123008 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | platform | varchar(255) | The platform which was used by the customer for a particular event or request (web, ios, android, applebiz, voice). | web, ios, android, applebiz, voice | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | device\_type | varchar(255) | The last device type used by the customer. | mobile, tablet, desktop, watch, unknown | | | 2019-06-18 00:00:00 | 2019-06-18 00:00:00 | no | | | | | | assisted | tinyint(1) | Flag indicates whether a rep was assigned and responded to the issue (1 if yes, 0 if no). | 0,1 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | total\_handle\_time | double | Total time in seconds that reps spent handling the issue, from assignment to disposition. | 718.968 | | | 2019-03-05 00:00:00 | 2019-03-05 00:00:00 | no | | | | | | total\_lead\_time | double | Total time in seconds the customer spent interacting during the conversation, from assignment to last utterance. | 715.627 | | | 2018-11-06 00:00:00 | 2019-03-05 00:00:00 | no | | | | | | total\_wrap\_up\_time | double | Total time in seconds spent by reps wrapping up the conversation, calculated as the difference between handle and lead time. | 27.583 | | | 2018-11-06 00:00:00 | 2019-03-05 00:00:00 | no | | | | | | total\_session\_time | double | Total time the customer spent seeking resolution, including time in queue and up until the conversation end event. | 1441.0329999923706 | | | 2018-11-06 00:00:00 | 2019-03-05 00:00:00 | no | | | | | | customer\_sent\_msgs | double | The total number of messages sent by the customer, including typed and tapped messages | 2, 1 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | agent\_sent\_msgs | | deprecated: 2019-09-25 | | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | auto\_generated\_msgs | bigint(20) | The number of messages sent by SRS. | 5, 3 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | first\_rep\_response\_count | bigint(20) | The number of first responses by reps, post-assignment. This field will increment if there are transfers and timeouts and then reassigned and a rep answers. This field will NOT increment if a rep is assigned but doesn't get a chance to answer. | 0, 1 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | total\_seconds\_to\_first\_rep\_response | bigint(20) | Total time in seconds that passed before the rep responded to the customer. | 4.291000127792358 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | agent\_response\_count | | deprecated: 2019-09-25 | | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | customer\_response\_count | bigint(20) | The total number of responses (excluding messages) sent by the customer. | 3, 0, 8 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | total\_rep\_seconds\_to\_respond | double | Total time in seconds the rep took to respond to the customer. | 240.28499960899353 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | total\_cust\_seconds\_to\_respond | double | Total time in seconds the customer took to respond to the rep. | 227.27100014686584 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | time\_in\_queue | double | Total time spent by the customer in the queue, including any re-queues. | 71.74499988555908 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | auto\_suggest\_msgs | bigint(20) | The number of autosuggest messages sent by rep. | 0, 3, 4 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | auto\_complete\_msgs | bigint(20) | The number of autocomplete messages sent by rep. | 0, 1, 2 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | auto\_wait\_for\_agent\_msgs | bigint | deprecated: 2019-09-25 | | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | customer\_wait\_for\_agent\_msgs | bigint | deprecated: 2019-09-25 | | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | attempted\_chat | tinyint(1) | A binary value of 1 indicates if there was an attempt to connect the customer to a rep. Also if a customer receives an out of business hours message or if customer was asked to wait for a rep or was escalated to chat. deprecation-date: 2020-04-14 expected-eol-date: 2021-10-15 | 0, 1 | | | 2018-11-06 00:00:00 | 2019-03-05 00:00:00 | no | | | | | | out\_business\_ct | bigint | The number of times that a customer received an out of business hours message. | 0, 1 | | | 2018-11-06 00:00:00 | 2019-04-23 00:00:00 | no | | | | | | issue\_id | bigint | The ASAPP issue or conversation id. | 21352352 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | rep\_sent\_msgs | bigint(20) | The number of messages a rep sent. | 0, 4, 7 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | rep\_response\_count | bigint(20) | The number of first responses by reps, post-assignment. This field will increment if there are transfers and timeouts and then reassigned and a rep answers. This field will NOT increment if a rep is assigned but doesn't get a chance to answer. | 0, 1, 20 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | auto\_wait\_for\_rep\_msgs | bigint(20) | The number of times a user was asked to wait for a rep. | 0, 3, 4 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | customer\_wait\_for\_rep\_msgs | bigint(20) | The number of times a user asked to speak with a rep. | 0, 1, 2 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | hold\_ct | bigint | The number of times the customer was placed on hold. This field applies to VOICE. | 0, 1, 2 | | | 2019-11-08 00:00:00 | 2019-11-08 00:00:00 | no | | | | | | total\_hold\_time\_seconds | float | The total amount of time in seconds that the customer was placed on hold. This field applies to VOICE. | 53.472 | | | 2019-11-08 00:00:00 | 2019-11-08 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-11-01 00:00:00 | 2019-11-01 00:00:00 | no | | | | | ### Table: convos\_summary\_tags The convos\_summary\_tags table contains information regarding all AI generated auto-summary tags populated by the system when a rep initiates the "end chat" disposition process. **Sync Time:** 1h **Unique Condition:** company\_id, issue\_id, summary\_tag\_presented | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :--------------------------- | :----------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------ | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | instance\_ts | timestamp | The time window of computed elements. This window is usually 15 minutes or 1 hour depending on the generation time. Times are rounded down to the nearest interval (for a time of 12:34 and an interval of 15m, this is 12:30). As an example, for a 15 minute interval an instance\_ts of 12:30 implies events from 12:30 -> 12:45. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | 2019-12-20 00:00:00 | 2019-12-20 00:00:00 | no | | | | | | issue\_id | bigint | The ASAPP issue or conversation id. | 21352352 | | | 2019-12-20 00:00:00 | 2019-12-20 00:00:00 | no | | | | | | company\_id | bigint | DEPRECATED 2024-03-25 | 10001 | | | 2019-12-20 00:00:00 | 2019-12-20 00:00:00 | no | | | | | | company\_subdivision | varchar(255) | String identifier for the company subdivision associated with the conversation. | ACMEsubcorp | | | 2019-12-20 00:00:00 | 2019-12-20 00:00:00 | no | | | | | | company\_segments | varchar(255) | String with comma separated segments for the company enclosed by square brackets. | marketing,promotions | | | 2019-12-20 00:00:00 | 2019-12-20 00:00:00 | no | | | | | | rep\_id | varchar(191) | The ASAPP rep/agent identifier. | 123008 | | | 2019-12-20 00:00:00 | 2019-12-20 00:00:00 | no | | | | | | queue\_id | integer | The identifier of the group to which the rep (who dispositioned the issue) belongs. | 20001 | | | 2019-12-20 00:00:00 | 2019-12-20 00:00:00 | no | | | | | | queue\_name | varchar(255) | The name of the group to which the rep (who dispositioned the issue) belongs. | acme-mobile-english | | | 2019-12-20 00:00:00 | 2019-12-20 00:00:00 | no | | | | | | disposition\_ts | timestamp | The time at which the rep dispositioned this issue (Exits the screen/frees up a slot). | 2020-01-18T00:21:41.423000+00:00 | | | 2019-12-20 00:00:00 | 2019-12-20 00:00:00 | no | | | | | | summary\_tag\_presented | character varying(65535) | The name of the auto-summary tag populated by the system when a rep ends an issue. The value is an empty string if no tag was populated but the rep. | '(customer)-(cancel)-(phone)', '(rep)-(add)-(account)' | | | 2019-12-20 00:00:00 | 2019-12-20 00:00:00 | no | | | | | | summary\_tag\_selected\_bool | boolean | Boolean field returns true if a rep selects the summary\_tag\_presented. | false, true | | | 2019-12-20 00:00:00 | 2019-12-20 00:00:00 | no | | | | | | disposition\_notes | text | Notes that the rep took when dispositioning the chat. Can be generated from free text or the chat summary tags. | 'no response from customer', 'edu cust on activation handling porting requests' | | | 2019-12-20 00:00:00 | 2019-12-20 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-12-20 00:00:00 | 2019-12-20 00:00:00 | no | | | | | ### Table: csid\_containment The csid\_containment table tracks and organizes customer interactions by associating them with a unique session identifier (csid) with 30min window timeframe. It consolidates data related to customer sessions, including associated issue\_ids, session durations, and indicators of containment success. Containment success measures whether an issue was resolved within a session without escalation. This table is critical for analyzing customer interaction patterns, evaluating the effectiveness of issue resolution processes, and identifying areas for improvement. **Sync Time:** 1h **Unique Condition:** csid, company\_name | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | | | :-------------------------------- | :-------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------- | :--------- | :---------- | :------------------ | :------------------ | :------------------ | :------------------ | :------------ | :----------- | :------------ | - | - | | instance\_ts | timestamp | The time window of computed elements. This window is usually 15 minutes or 1 hour depending on the generation time. Times are rounded down to the nearest interval (for a time of 12:34 and an interval of 15m, this is 12:30). As an example, for a 15 minute interval an instance\_ts of 12:30 implies events from 12:30 -> 12:45. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | | | company\_id | bigint | DEPRECATED 2024-03-25 | 10001 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | | | company\_subdivision | varchar(255) | String identifier for the company subdivision associated with the conversation. | ACMEsubcorp | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | | | company\_segments | varchar(255) | String with comma separated segments for the company enclosed by square brackets. | marketing,promotions | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | | | customer\_id | bigint | The customer identifier on which this session is based, after merge if applicable. | 123008 | | | 2018-11-06 00:00:00 | 2018-11-07 00:00:00 | no | | | | | | | | external\_customer\_id | varchar(255) | The customer identifier as provided by the client. | 347bdddb-d3a1-45fc-bbcd-dbd3a175fc1c | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | | | csid | varchar(255) | Unique identifier for a continuous period of activity for a given customer, starting at the specified timestamp. | '24790001\_2018-09-24T22:17:41.341' | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | | | csid\_start\_ts | timestamp without time zone | The start time of the customer's session. | 2019-12-23T16:00:10.072000+00:00 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | | | csid\_end\_ts | timestamp without time zone | The end time of the active session. | 2019-12-23T16:00:10.072000+00:00 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | | | agents\_involved | | deprecated: 2019-09-25 | | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | | | included\_issues | character varying(65535) | Pipe-delimited list of issues involved in this period of customer activity. | '2044970001 | 2045000001 | 2045010001' | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | is\_contained | boolean | Flag indicating whether reps were involved with any issues during this csid. | true, false | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | | | event\_count | bigint | The number of customer (only) events active during this csid. | 21 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | | | fgsrs\_event\_count | bigint | The number of FGSRS events during this csid. | 5 | | | 2019-08-30 00:00:00 | 2019-08-30 00:00:00 | no | | | | | | | | was\_enqueued | boolean | Flag indicating if enqueued events existed for this session. | true, false | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | | | rep\_msgs | bigint | Count of text messages sent by reps during this csid. | 6 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | | | messages\_sent | bigint | Number of text messages typed or quick replies clicked by the customer during this csid. | 4 | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | | | has\_customer\_utterance | boolean | Flag indicating if the csid contains customer messages. | true, false | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | | | attempted\_escalate | boolean | A boolean value indicating if the customer or flow tried (or succeeded) to reach a rep. | false, true | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | | | last\_platform | VARCHAR(191) | Flag indicating if the customer or flow attempted or succeeded in reaching a rep. | ANDROID, WEB, IOS | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | | | last\_device\_type | VARCHAR(191) | Last device type used by the customer | mobile, tablet, desktop, watch, unknown | | | 2019-06-18 00:00:00 | 2019-06-18 00:00:00 | no | | | | | | | | first\_auth\_source | character varying(65535) | First source of the authentication event for a csid. | ivr-url | | | 2019-05-15 00:00:00 | 2019-05-15 00:00:00 | no | | | | | | | | last\_auth\_source | character varying(65535) | Last source of the authentication event for a csid. | ivr-url | | | 2019-05-15 00:00:00 | 2019-05-15 00:00:00 | no | | | | | | | | distinct\_auth\_source\_path | character varying(65535) | Comma-separated list of all distinct authentication event sources for the csid. | ivr-url, facebook | | | 2019-05-15 00:00:00 | 2019-05-15 00:00:00 | no | | | | | | | | first\_auth\_external\_user\_type | character varying(65535) | The first external user type of the authentication event for a csid. | client\_CUSTOMER\_ACCOUNT\_ID | | | 2019-05-15 00:00:00 | 2019-05-15 00:00:00 | no | | | | | | | | last\_auth\_external\_user\_type | character varying(65535) | The last external user type of the authentication event for a csid. | client\_CUSTOMER\_ACCOUNT\_ID | | | 2019-05-15 00:00:00 | 2019-05-15 00:00:00 | no | | | | | | | | first\_auth\_external\_user\_id | character varying(65535) | Client-provided field for the first external user ID linked to an authentication event. | 64b0959a65a63dec32e1be04fe755be1 | | | 2019-05-15 00:00:00 | 2019-05-15 00:00:00 | no | | | | | | | | last\_auth\_external\_user\_id | character varying(65535) | Client-provided field for the last external user ID linked to an authentication event. | 64b0959a65a63dec32e1be04fe755be1 | | | 2019-05-15 00:00:00 | 2019-05-15 00:00:00 | no | | | | | | | | first\_auth\_external\_token\_id | character varying(65535) | A client provided field. The first encrypted user ID from client system associated with an authentication event. | 82EFDDADC5466501443E3E61ED640162 | | | 2019-05-15 00:00:00 | 2019-05-15 00:00:00 | no | | | | | | | | last\_auth\_external\_token\_id | character varying(65535) | A client provided field. The last encrypted user ID from client system associated with an authentication event. | 82EFDDADC5466501443E3E61ED640162 | | | 2019-05-15 00:00:00 | 2019-05-15 00:00:00 | no | | | | | | | | reps\_involved | varchar(4096) | Pipe-delimited list of reps associated with any issues during this session. | '209000 | 2020001' | | | 2018-11-06 00:00:00 | 2018-11-06 00:00:00 | no | | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-11-01 00:00:00 | 2024-05-24 00:00:00 | no | | | | | | | ### Table: csid\_containment\_1d The csid\_containment table tracks and organizes customer interactions by associating them with a unique session identifier (csid) with 24 hours of window timeframe. It consolidates data related to customer sessions, including associated issue\_ids, session durations, and indicators of containment success. Containment success measures whether an issue was resolved within a session without escalation. This table is critical for analyzing customer interaction patterns, evaluating the effectiveness of issue resolution processes, and identifying areas for improvement. **Sync Time:** 1h **Unique Condition:** csid, company\_name | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | | | :-------------------------------- | :-------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------- | :--------- | :---------- | :------------------ | :------------------ | :------------------ | :------------------ | :------------ | :----------- | :------------ | - | - | | instance\_ts | timestamp | The time window of computed elements. This window is usually 15 minutes or 1 hour depending on the generation time. Times are rounded down to the nearest interval (for a time of 12:34 and an interval of 15m, this is 12:30). As an example, for a 15 minute interval an instance\_ts of 12:30 implies events from 12:30 -> 12:45. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | 2018-01-15 00:00:00 | 2018-01-15 00:00:00 | no | | | | | | | | company\_id | bigint | DEPRECATED 2024-03-25 | 10001 | | | 2018-01-15 00:00:00 | 2018-01-15 00:00:00 | no | | | | | | | | company\_subdivision | varchar(255) | String identifier for the company subdivision associated with the conversation. | ACMEsubcorp | | | 2018-01-15 00:00:00 | 2018-01-15 00:00:00 | no | | | | | | | | company\_segments | varchar(255) | String with comma separated segments for the company enclosed by square brackets. | marketing,promotions | | | 2018-01-15 00:00:00 | 2018-01-15 00:00:00 | no | | | | | | | | customer\_id | bigint | The customer identifier on which this session is based, after merge if applicable. | 123008 | | | 2018-01-15 00:00:00 | 2018-11-07 00:00:00 | no | | | | | | | | external\_customer\_id | varchar(255) | The customer identifier as provided by the client. | 347bdddb-d3a1-45fc-bbcd-dbd3a175fc1c | | | 2018-01-15 00:00:00 | 2018-01-15 00:00:00 | no | | | | | | | | csid | varchar(255) | Unique identifier for a continuous period of activity for a given customer, starting at the specified timestamp. | '24790001\_2018-09-24T22:17:41.341' | | | 2018-01-15 00:00:00 | 2018-01-15 00:00:00 | no | | | | | | | | csid\_start\_ts | timestamp without time zone | The start time of the customer's session. | 2019-12-23T16:00:10.072000+00:00 | | | 2018-01-15 00:00:00 | 2018-01-15 00:00:00 | no | | | | | | | | csid\_end\_ts | timestamp without time zone | The end time of the active session. | 2019-12-23T16:00:10.072000+00:00 | | | 2018-01-15 00:00:00 | 2018-01-15 00:00:00 | no | | | | | | | | agents\_involved | | deprecated: 2019-09-25 | | | | 2018-01-15 00:00:00 | 2018-01-15 00:00:00 | no | | | | | | | | included\_issues | character varying(65535) | Pipe-delimited list of issues involved in this period of customer activity. | '2044970001 | 2045000001 | 2045010001' | | | 2018-01-15 00:00:00 | 2018-01-15 00:00:00 | no | | | | | | is\_contained | boolean | Flag indicating whether reps were involved with any issues during this csid. | true, false | | | 2018-01-15 00:00:00 | 2018-01-15 00:00:00 | no | | | | | | | | event\_count | bigint | The number of customer (only) events active during this csid. | 21 | | | 2018-01-15 00:00:00 | 2018-01-15 00:00:00 | no | | | | | | | | fgsrs\_event\_count | bigint | The number of FGSRS events during this csid. | 5 | | | 2019-08-30 00:00:00 | 2019-08-30 00:00:00 | no | | | | | | | | was\_enqueued | boolean | Flag indicating if enqueued events existed for this session. | true, false | | | 2018-01-15 00:00:00 | 2018-01-15 00:00:00 | no | | | | | | | | rep\_msgs | bigint | Count of text messages sent by reps during this csid. | 6 | | | 2018-01-15 00:00:00 | 2018-01-15 00:00:00 | no | | | | | | | | messages\_sent | bigint | Number of text messages typed or quick replies clicked by the customer during this csid. | 4 | | | 2018-01-15 00:00:00 | 2018-01-15 00:00:00 | no | | | | | | | | has\_customer\_utterance | boolean | Flag indicating if the csid contains customer messages. | true, false | | | 2018-01-15 00:00:00 | 2018-01-15 00:00:00 | no | | | | | | | | attempted\_escalate | boolean | A boolean value indicating if the customer or flow tried (or succeeded) to reach a rep. | false, true | | | 2018-01-15 00:00:00 | 2018-01-15 00:00:00 | no | | | | | | | | last\_platform | VARCHAR(191) | Flag indicating if the customer or flow attempted or succeeded in reaching a rep. | ANDROID, WEB, IOS | | | 2018-01-15 00:00:00 | 2018-01-15 00:00:00 | no | | | | | | | | last\_device\_type | VARCHAR(191) | Last device type used by the customer | mobile, tablet, desktop, watch, unknown | | | 2019-06-18 00:00:00 | 2019-06-18 00:00:00 | no | | | | | | | | first\_auth\_source | character varying(65535) | First source of the authentication event for a csid. | ivr-url | | | 2019-05-15 00:00:00 | 2019-05-15 00:00:00 | no | | | | | | | | last\_auth\_source | character varying(65535) | Last source of the authentication event for a csid. | ivr-url | | | 2019-05-15 00:00:00 | 2019-05-15 00:00:00 | no | | | | | | | | distinct\_auth\_source\_path | character varying(65535) | Comma-separated list of all distinct authentication event sources for the csid. | ivr-url, facebook | | | 2019-05-15 00:00:00 | 2019-05-15 00:00:00 | no | | | | | | | | first\_auth\_external\_user\_type | character varying(65535) | The first external user type of the authentication event for a csid. | client\_CUSTOMER\_ACCOUNT\_ID | | | 2019-05-15 00:00:00 | 2019-05-15 00:00:00 | no | | | | | | | | last\_auth\_external\_user\_type | character varying(65535) | The last external user type of the authentication event for a csid. | client\_CUSTOMER\_ACCOUNT\_ID | | | 2019-05-15 00:00:00 | 2019-05-15 00:00:00 | no | | | | | | | | first\_auth\_external\_user\_id | character varying(65535) | Client-provided field for the first external user ID linked to an authentication event. | 64b0959a65a63dec32e1be04fe755be1 | | | 2019-05-15 00:00:00 | 2019-05-15 00:00:00 | no | | | | | | | | last\_auth\_external\_user\_id | character varying(65535) | Client-provided field for the last external user ID linked to an authentication event. | 64b0959a65a63dec32e1be04fe755be1 | | | 2019-05-15 00:00:00 | 2019-05-15 00:00:00 | no | | | | | | | | first\_auth\_external\_token\_id | character varying(65535) | A client provided field. The first encrypted user ID from client system associated with an authentication event. | 82EFDDADC5466501443E3E61ED640162 | | | 2019-05-15 00:00:00 | 2019-05-15 00:00:00 | no | | | | | | | | last\_auth\_external\_token\_id | character varying(65535) | A client provided field. The last encrypted user ID from client system associated with an authentication event. | 82EFDDADC5466501443E3E61ED640162 | | | 2019-05-15 00:00:00 | 2019-05-15 00:00:00 | no | | | | | | | | reps\_involved | varchar(4096) | Pipe-delimited list of reps associated with any issues during this session. | '209000 | 2020001' | | | 2018-01-15 00:00:00 | 2018-01-15 00:00:00 | no | | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-11-01 00:00:00 | 2024-05-24 00:00:00 | no | | | | | | | ### Table: customer\_feedback The customer\_feedback table contains the feedback regarding how well their issue was resolved. This table contains columns such as the feedback question prompted at issue completion, the customer response and the last rep identifier which was associated with an issue\_id. **Sync Time:** 1d **Unique Condition:** issue\_id, company\_marker, last\_rep\_id, question, instance\_ts | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :------------------- | :----------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | instance\_ts | timestamp | The time window of computed elements. This window is usually 15 minutes or 1 hour depending on the generation time. Times are rounded down to the nearest interval (for a time of 12:34 and an interval of 15m, this is 12:30). As an example, for a 15 minute interval an instance\_ts of 12:30 implies events from 12:30 -> 12:45. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | conversation\_id | bigint | deprecated: 2019-09-25 | 21352352 | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | last\_agent\_id | varchar(191) | deprecated: 2019-09-25 | 123008 | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | question | character varying(65535) | Question presented to the user. | VOC Score, endSRS rating, What did the agent do well, or what could the agent have done better? (1000 character limit) | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | question\_category | character varying(65535) | The question category type. | rating, comment, levelOfEffort | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | question\_type | character varying(65535) | The type of question. | rating, scale, radio | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | answer | character varying(65535) | The customer's answer to the question. | 0, 1, 17, yes | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | ordering | integer | The sequence or order of the question. | 0, 1, 3, 5 | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | issue\_id | bigint | The ASAPP issue or conversation id. | 21352352 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | last\_rep\_id | varchar(191) | The last ASAPP rep/agent identifier found in a window of time. | 123008 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-11-01 00:00:00 | 2024-05-24 00:00:00 | no | | | | | | company\_subdivision | varchar(255) | String identifier for the company subdivision associated with the conversation. | ACMEsubcorp | | | 2021-09-10 00:00:00 | 2021-09-10 00:00:00 | no | | | | | | company\_segments | varchar(255) | String with comma separated segments for the company enclosed by square brackets. | marketing,promotions | | | 2021-09-10 00:00:00 | 2021-09-10 00:00:00 | no | | | | | | platform | varchar(255) | The platform which was used by the customer for a particular event or request (web, ios, android, applebiz, voice). | web, ios, android, applebiz, voice | | | 2021-09-10 00:00:00 | 2021-09-10 00:00:00 | no | | | | | | feedback\_type | character varying(65535) | The classification of feedback provided by the customer. | FEEDBACK\_AGENT, etc | | | 2021-09-10 00:00:00 | 2021-09-10 00:00:00 | no | | | | | | feedback\_form\_type | character varying(65535) | Indicates the type of feedback form completed by the customer. | ASAPP\_CSAT, GBM | | | 2021-09-10 00:00:00 | 2021-09-10 00:00:00 | no | | | | | ### Table: customer\_params The customer\_params table contains information which the client sends to ASAPP. The table may have multiple rows associated with one issue\_id. Clients specify the information to store using a JSON entry which may contain multiple semicolon separated (key, value) pairs. **Sync Time:** 1d **Unique Condition:** event\_id, param\_key | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :------------------- | :----------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | instance\_ts | timestamp | The time window of computed elements. This window is usually 15 minutes or 1 hour depending on the generation time. Times are rounded down to the nearest interval (for a time of 12:34 and an interval of 15m, this is 12:30). As an example, for a 15 minute interval an instance\_ts of 12:30 implies events from 12:30 -> 12:45. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | 2019-01-25 00:00:00 | 2019-01-25 00:00:00 | no | | | | | | event\_ts | timestamp | The time at which this event was fired. | 2019-11-08 14:00:06.957000+00:00 | | | 2019-01-25 00:00:00 | 2019-01-25 00:00:00 | no | | | | | | issue\_id | bigint | The ASAPP issue or conversation id. | 21352352 | | | 2019-01-25 00:00:00 | 2019-01-25 00:00:00 | no | | | | | | company\_id | bigint | DEPRECATED 2024-03-25 | 10001 | | | 2019-01-25 00:00:00 | 2019-01-25 00:00:00 | no | | | | | | company\_subdivision | varchar(255) | The subdivision of the company. | ACMEsubcorp | | | 2019-01-25 00:00:00 | 2019-01-25 00:00:00 | no | | | | | | company\_segments | varchar(255) | The segments of the company. | marketing,promotions | | | 2019-01-25 00:00:00 | 2019-01-25 00:00:00 | no | | | | | | customer\_id | bigint | The ASAPP internal customer identifier. | 123008 | | | 2019-01-25 00:00:00 | 2019-01-25 00:00:00 | no | | | | | | rep\_id | varchar(191) | deprecated: 2022-06-30 | 123008 | | | 2019-01-25 00:00:00 | 2019-01-25 00:00:00 | no | | | | | | referring\_page\_url | character varying(65535) | The URL of the page the user navigated from. | [https://www.acme.com/wireless](https://www.acme.com/wireless) | | | 2019-01-25 00:00:00 | 2019-01-25 00:00:00 | no | | | | | | event\_id | character varying(256) | A unique identifier for the event within the customer parameter payload. | | | | 2019-07-29 00:00:00 | 2019-07-29 00:00:00 | no | | | | | | platform | varchar(255) | The platform the customer is using to interact with ASAPP. | 08679ded-38b7-11ea-9c44-debfe2011fef | | | 2019-07-29 00:00:00 | 2019-07-29 00:00:00 | no | | | | | | session\_id | varchar(128) | The websocket UUID associated with the current request's session. | 347bdddb-d3a1-45fc-bbcd-dbd3a175fc1c | | | 2019-07-29 00:00:00 | 2019-07-29 00:00:00 | no | | | | | | auth\_state | boolean | Flag indicating if the user is authenticated. | true, false | | | 2019-07-29 00:00:00 | 2019-07-29 00:00:00 | no | | | | | | params | character varying(65535) | A string representation of the JSON parameters. | `{"Key1":"Value1"; "Key2":"Value2"}` | | | 2019-01-25 00:00:00 | 2019-01-25 00:00:00 | no | | | | | | param\_key | character varying(255) | A value of a specific key within the parameter JSON. | Key1 | | | 2019-01-25 00:00:00 | 2019-01-25 00:00:00 | no | | | | | | param\_value | character varying(65535) | The value corresponding with the specific key in param\_key. | Value1 | | | 2019-01-25 00:00:00 | 2019-01-25 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-11-01 00:00:00 | 2024-05-24 00:00:00 | no | | | | | | current\_page\_url | varchar(2000) | The URL of the page where the customer initiated the ASAPP chat. | [https://www.asapp.com](https://www.asapp.com) | | | 2021-09-16 00:00:00 | 2021-09-16 00:00:00 | no | | | | | ### Table: customer\_params\_hourly The customer\_params table contains information which the client sends to ASAPP. The table may have multiple rows associated with one issue\_id. Clients specify the information to store using a JSON entry which may contain multiple semicolon separated (key, value) pairs. **Sync Time:** 1h **Unique Condition:** event\_id, param\_key | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :------------------- | :----------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | instance\_ts | timestamp | The time window of computed elements. This window is usually 15 minutes or 1 hour depending on the generation time. Times are rounded down to the nearest interval (for a time of 12:34 and an interval of 15m, this is 12:30). As an example, for a 15 minute interval an instance\_ts of 12:30 implies events from 12:30 -> 12:45. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | 2019-01-25 00:00:00 | 2019-01-25 00:00:00 | no | | | | | | event\_ts | timestamp | The time at which this event was fired. | 2019-11-08 14:00:06.957000+00:00 | | | 2019-01-25 00:00:00 | 2019-01-25 00:00:00 | no | | | | | | issue\_id | bigint | The ASAPP issue or conversation id. | 21352352 | | | 2019-01-25 00:00:00 | 2019-01-25 00:00:00 | no | | | | | | company\_id | bigint | DEPRECATED 2024-03-25 | 10001 | | | 2019-01-25 00:00:00 | 2019-01-25 00:00:00 | no | | | | | | company\_subdivision | varchar(255) | The subdivision of the company. | ACMEsubcorp | | | 2019-01-25 00:00:00 | 2019-01-25 00:00:00 | no | | | | | | company\_segments | varchar(255) | The segments of the company. | marketing,promotions | | | 2019-01-25 00:00:00 | 2019-01-25 00:00:00 | no | | | | | | customer\_id | bigint | The ASAPP internal customer identifier. | 123008 | | | 2019-01-25 00:00:00 | 2019-01-25 00:00:00 | no | | | | | | rep\_id | varchar(191) | deprecated: 2022-06-30 | 123008 | | | 2019-01-25 00:00:00 | 2019-01-25 00:00:00 | no | | | | | | referring\_page\_url | character varying(65535) | The URL of the page the user navigated from. | [https://www.acme.com/wireless](https://www.acme.com/wireless) | | | 2019-01-25 00:00:00 | 2019-01-25 00:00:00 | no | | | | | | event\_id | character varying(256) | A unique identifier for the event within the customer parameter payload. | | | | 2019-07-29 00:00:00 | 2019-07-29 00:00:00 | no | | | | | | platform | varchar(255) | The platform the customer is using to interact with ASAPP. | 08679ded-38b7-11ea-9c44-debfe2011fef | | | 2019-07-29 00:00:00 | 2019-07-29 00:00:00 | no | | | | | | session\_id | varchar(128) | The websocket UUID associated with the current request's session. | 347bdddb-d3a1-45fc-bbcd-dbd3a175fc1c | | | 2019-07-29 00:00:00 | 2019-07-29 00:00:00 | no | | | | | | auth\_state | boolean | Flag indicating if the user is authenticated. | true, false | | | 2019-07-29 00:00:00 | 2019-07-29 00:00:00 | no | | | | | | params | character varying(65535) | A string representation of the JSON parameters. | `{"Key1":"Value1"; "Key2":"Value2"}` | | | 2019-01-25 00:00:00 | 2019-01-25 00:00:00 | no | | | | | | param\_key | character varying(255) | A value of a specific key within the parameter JSON. | Key1 | | | 2019-01-25 00:00:00 | 2019-01-25 00:00:00 | no | | | | | | param\_value | character varying(65535) | The value corresponding with the specific key in param\_key. | Value1 | | | 2019-01-25 00:00:00 | 2019-01-25 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-11-01 00:00:00 | 2024-05-24 00:00:00 | no | | | | | | current\_page\_url | varchar(2000) | The URL of the page where the customer initiated the ASAPP chat. | [https://www.asapp.com](https://www.asapp.com) | | | 2021-09-16 00:00:00 | 2021-09-16 00:00:00 | no | | | | | ### Table: dim\_queues The dim\_queues table creates a mapping of queue\_id to queue\_name. This is an hourly snapshot of information. **Sync Time:** 1h **Unique Condition:** queue\_key, company\_marker | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :------------ | :----------- | :----------------------------------------------------- | :------ | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | company\_id | bigint | DEPRECATED 2024-03-25 | 10001 | | | 2022-01-27 00:00:00 | 2022-01-27 00:00:00 | no | | | | | | queue\_key | bigint | Numeric primary key for dim queues | 100001 | | | 2022-01-27 00:00:00 | 2022-01-27 00:00:00 | no | | | | | | queue\_id | integer | The ASAPP queue identifier which the issue was placed. | 210001 | | | 2022-01-27 00:00:00 | 2022-01-27 00:00:00 | no | | | | | | queue\_name | varchar(255) | Name of the queue. | Voice | | | 2022-01-27 00:00:00 | 2022-01-27 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2025-01-27 00:00:00 | 2025-01-27 00:00:00 | no | | | | | ### Table: flow\_completions The purpose of this table is to list the flow success information, any negation data, and other associated metadata for all issues. This table provides insights into the success or failure of any issue. Flow Success refers to the successful completion of a predefined process or interaction flow without interruptions, errors, or escalations, as determined by specific business logic. **Sync Time:** 1h **Unique Condition:** company\_id, issue\_id, flow\_name, flow\_status\_ts, success\_event\_details | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :------------------------ | :-------------------------- | :-------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | conversation\_id | bigint | deprecated: 2019-09-25 | 21352352 | | | 2018-11-14 00:00:00 | 2019-09-12 00:00:00 | no | no | | | | | company\_id | bigint | DEPRECATED 2024-03-25 | 10001 | | | 2018-11-14 00:00:00 | 2018-11-14 00:00:00 | no | | | | | | company\_subdivision | varchar(255) | String identifier for the company subdivision associated with the conversation. | ACMEsubcorp | | | 2018-11-14 00:00:00 | 2018-11-14 00:00:00 | no | | | | | | company\_segments | varchar(255) | String with comma separated segments for the company enclosed by square brackets. | marketing,promotions | | | 2018-11-14 00:00:00 | 2018-11-14 00:00:00 | no | | | | | | platform | varchar(255) | The customer's platform. | web, ios, android, applebiz, voice | | | 2018-11-14 00:00:00 | 2018-11-14 00:00:00 | no | | | | | | customer\_id | bigint | The ASAPP internal customer identifier. | 123008 | | | 2018-11-14 00:00:00 | 2018-11-14 00:00:00 | no | | | | | | external\_user\_id | varchar(255) | Client-provided identifier for customer, Available if the customer is authenticated. | 347bdddb-d3a1-45fc-bbcd-dbd3a175fc1c | | | 2018-11-14 00:00:00 | 2018-11-14 00:00:00 | no | | | | | | customer\_session\_id | character varying(65535) | The ASAPP application session identifier for this customer. | c5d7afcc-89b9-43cc-90e2-b869bb2be883 | | | 2018-11-14 00:00:00 | 2018-11-14 00:00:00 | no | | | | | | success\_rule\_id | character varying(256) | The tag denoting whether the flow was successful within this issue. | LINK\_RESOLVED, TOOLING\_SUCCESS | | | 2018-11-14 00:00:00 | 2018-11-14 00:00:00 | no | | | | | | success\_event\_details | character varying(65535) | Any additional metadata about this success rule. | asapp-pil://acme/grande-shop, EndSRSPositiveMessage | | | 2018-11-14 00:00:00 | 2018-11-14 00:00:00 | no | | | | | | success\_event\_ts | timestamp without time zone | The time at which the flow success occurred. | 2019-12-03T01:43:17.079000+00:00 | | | 2018-11-14 00:00:00 | 2018-11-14 00:00:00 | no | | | | | | negation\_rule\_id | character varying(256) | The tag denoting the last negation event that reverted a previous success. | TOOLING\_NEGATION, NEG\_QUESTION\_NOT\_ANSWERED | | | 2018-11-14 00:00:00 | 2018-11-14 00:00:00 | no | | | | | | negation\_event\_ts | timestamp without time zone | The time at which this negation occurred. | 2019-12-03T01:49:19.875000+00:00 | | | 2018-11-14 00:00:00 | 2018-11-14 00:00:00 | no | | | | | | is\_flow\_success\_event | boolean | True if this event was not negated directly, false otherwise. | true, false | | | 2018-11-14 00:00:00 | 2018-11-14 00:00:00 | no | | | | | | is\_flow\_success\_issue | boolean | True if a success event occurred within this issue and no negation event occurred within this issue, false otherwise. | true, false | | | 2018-11-14 00:00:00 | 2018-11-14 00:00:00 | no | | | | | | issue\_id | bigint | The ASAPP issue or conversation id. | 21352352 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-11-01 00:00:00 | 2019-11-01 00:00:00 | no | | | | | | last\_relevant\_event\_ts | | Timestamp of the most recent relevant event (success or negation) detected for this issue. | 2020-01-02T19:13:27.698000+00:00 | | | 2019-12-10 00:00:00 | 2019-12-10 00:00:00 | no | | | | | ### Table: flow\_detail The purpose of the flow\_detail table is to list out the data associated with each node traversed during an issue lifespan. A usage of this table is to understand the path a particular issue traversed trhough a flow node by node. **Sync Time:** 1h **Unique Condition:** event\_ts, issue\_id, event\_type | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :------------------ | :----------------------- | :--------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | event\_ts | timestamp | The time of an given event. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | event\_type | varchar(191) | The type of event within a given flow. | MESSAGE\_DISPLAYED | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | no | | | | | conversation\_id | bigint | deprecated: 2019-09-25 | 21352352 | | | 2018-08-14 00:00:00 | 2018-08-27 00:00:00 | no | no | | | | | session\_id | varchar(128) | The ASAPP session identifier. It is a uuid generated by the chat backend. Note: a session may contain several conversations. | 347bdddb-d3a1-45fc-bbcd-dbd3a175fc1c | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | flow\_id | varchar(255) | An ASAPP identifier assigned to a particular flow executed during a customer event or request. | 347bdddb-d3a1-45fc-bbcd-dbd3a175fc1c | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | flow\_name | varchar(255) | The ASAPP text name for a given flow which was executed during a customer event or request. | FirstChatMessage, AccountNumberFlow | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | event\_name | character varying(65535) | The event name within a given flow. | FirstChatMessage, SuccessfulPaymentNode | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | no | | | | | link\_resolved\_pil | character varying(65535) | An asapp internal URI for the link. | asapp-pil://acme/bill-history | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | no | | | | | link\_resolved\_pdl | character varying(65535) | The resolved host deep link or web link. | [https://www.acme.com/BillHistory](https://www.acme.com/BillHistory) | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | no | | | | | issue\_id | bigint | The ASAPP issue or conversation id. | 21352352 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-11-01 00:00:00 | 2024-05-24 00:00:00 | no | | | | | ### Table: intents The intents table contains a list of intent codes and other information associated with the intent codes. Information in the table includes flow\_name and short\_description. **Sync Time:** 1d **Unique Condition:** code, company\_marker | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :---------------------- | :---------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | code | character varying(128) | The ASAPP internal code for a given intent. | ACCTNUM | | | 2018-07-26 00:00:00 | 2018-07-26 00:00:00 | no | no | | | | | name | character varying(256) | The user-friendly name associated with an intent. | Get account number | | | 2018-07-26 00:00:00 | 2018-07-26 00:00:00 | no | no | | | | | intent\_type | character varying(128) | The hierarchical classification of this intent. | SYSTEM, LEAF, PARENT | | | 2018-07-26 00:00:00 | 2021-11-24 00:00:00 | no | no | | | | | short\_description | character varying(1024) | A short description for the intent code. | 'Users asking to get their account number.', 'Television error codes.' | | | 2018-07-26 00:00:00 | 2019-02-12 00:00:00 | no | no | | | | | flow\_name | varchar(255) | The ASAPP flow code attached to this intent code. | AccountNumberFlow | | | 2018-12-13 00:00:00 | 2018-12-13 00:00:00 | no | no | | | | | default\_disambiguation | boolean | True if the intents are part of the first "welcome" screen of disambiguation buttons presented to a customer, false otherwise. | false, true | | | 2018-12-13 00:00:00 | 2018-12-13 00:00:00 | no | no | | | | | actions | character varying(4096) | Describes the type of action for the customer interface (e.g., "flow" for forms, "link" for URLs, or "text" for help content). An empty value indicates no specific action or automation. | flow, link, test, NULL | | | 2018-12-20 00:00:00 | 2018-12-20 00:00:00 | no | no | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-11-01 00:00:00 | 2021-04-09 00:00:00 | no | | | | | | deleted\_ts | | The date when this intent was removed. If blank or null, the intent is still active as of the export. An intent can be "undeleted" at a later date. | NULL, 2018-12-13 01:23:34 | | | 2021-11-23 00:00:00 | 2021-11-23 00:00:00 | no | no | | | | ### Table: issue\_callback\_3d The issue\_callback table relates issues from the same customer during a three day window. This table will help measure customer callback rate, the rate at which the same customer recontacts within a three day period. The issue\_callback table is applicable only to specific clients. **Sync Time:** 1h **Unique Condition:** issue\_id | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :----------------------------------------- | :-------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | instance\_ts | timestamp | The time window of computed elements. This window is usually 15 minutes or 1 hour depending on the generation time. Times are rounded down to the nearest interval (for a time of 12:34 and an interval of 15m, this is 12:30). As an example, for a 15 minute interval an instance\_ts of 12:30 implies events from 12:30 -> 12:45. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | 2019-11-14 00:00:00 | 2019-11-14 00:00:00 | no | | | | | | issue\_id | bigint | The ASAPP issue or conversation id. | 21352352 | | | 2019-11-14 00:00:00 | 2019-11-14 00:00:00 | no | | | | | | company\_id | bigint | DEPRECATED 2024-03-25 | 10001 | | | 2019-11-14 00:00:00 | 2019-11-14 00:00:00 | no | | | | | | company\_subdivision | varchar(255) | String identifier for the company subdivision associated with the conversation. | ACMEsubcorp | | | 2019-11-14 00:00:00 | 2019-11-14 00:00:00 | no | | | | | | company\_segments | varchar(255) | String with comma separated segments for the company enclosed by square brackets. | marketing,promotions | | | 2019-11-14 00:00:00 | 2019-11-14 00:00:00 | no | | | | | | customer\_id | bigint | The ASAPP internal customer identifier. | 123008 | | | 2019-11-14 00:00:00 | 2019-11-14 00:00:00 | no | | | | | | issue\_created\_ts | timestamp | Timestamp when the issue ID is created. | 2018-09-05 19:58:06 | | | 2019-11-14 00:00:00 | 2019-11-14 00:00:00 | no | | | | | | issue\_disconnect\_ts | timestamp without time zone | Timestamp when the issue ID is Disconnected. | | | | 2019-11-14 00:00:00 | 2019-11-14 00:00:00 | no | | | | | | issue\_cutoff\_ts | timestamp without time zone | The timestamp when the callback period expires for an issue. This is calculated as 3 days after the issue\_disconnect\_ts. | | | | 2019-11-14 00:00:00 | 2019-11-14 00:00:00 | no | | | | | | next\_callback\_issue\_id | bigint | The ID of the next issue created by the same customer. This must occur between issue\_disconnect\_ts and issue\_cutoff\_ts. Null if no such issue exists. | | | | 2019-11-14 00:00:00 | 2019-11-14 00:00:00 | no | | | | | | next\_callback\_issue\_created\_ts | timestamp without time zone | Time when the next\_callback\_issue was created. | | | | 2019-11-14 00:00:00 | 2019-11-14 00:00:00 | no | | | | | | time\_btwn\_next\_callback\_issue\_seconds | double precision | The duration in seconds between issue\_disconnect\_ts and next\_callback\_issue\_created\_ts | | | | 2019-11-14 00:00:00 | 2019-11-14 00:00:00 | no | | | | | | callback\_prev\_issue\_id | bigint | The ID of any previous issue created by the same customer, provided it was disconnected within 3 days of the current issue's create\_ts. Null if no such issue exists. | | | | 2019-11-14 00:00:00 | 2019-11-14 00:00:00 | no | | | | | | callback\_prev\_issue\_created\_ts | timestamp without time zone | The timestamp when the callback\_prev\_issue was created. | | | | 2019-11-14 00:00:00 | 2019-11-14 00:00:00 | no | | | | | | callback\_prev\_issue\_disconnect\_ts | timestamp without time zone | The timestamp when the callback\_prev\_issue was disconnected. | | | | 2019-11-14 00:00:00 | 2019-11-14 00:00:00 | no | | | | | | time\_btwn\_callback\_prev\_issue\_seconds | double precision | The duration in seconds between callback\_prev\_issue\_disconnect\_ts and issue\_created\_ts. | | | | 2019-11-14 00:00:00 | 2019-11-14 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-11-14 00:00:00 | 2019-11-14 00:00:00 | no | | | | | ### Table: issue\_entity\_genagent hourly snapshot of issue grain generative\_agent data including both dimensions and metrics aggregated over "all time" (two days in practice). **Sync Time:** 1h **Unique Condition:** company\_marker, issue\_id | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :---------------------------------------------------- | :----------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------------- | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2024-11-08 00:00:00 | 2024-11-08 00:00:00 | no | | | | | | issue\_id | bigint | The ASAPP issue or conversation id. | 21352352 | | | 2024-11-08 00:00:00 | 2024-11-08 00:00:00 | no | | | | | | instance\_ts | timestamp | The time window of computed elements. This window is usually 15 minutes or 1 hour depending on the generation time. Times are rounded down to the nearest interval (for a time of 12:34 and an interval of 15m, this is 12:30). As an example, for a 15 minute interval an instance\_ts of 12:30 implies events from 12:30 -> 12:45. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | 2024-11-08 00:00:00 | 2024-11-08 00:00:00 | no | | | | | | generative\_agent\_turns\_\_turn\_ct | int | Number of turns ( one cycle of interaction between Generative Agent and a user) | 1 | | | 2024-11-08 00:00:00 | 2024-11-08 00:00:00 | no | | | | | | generative\_agent\_turns\_\_turn\_duration\_ms\_sum | bigint | Total duration in milliseconds between PROCESSING\_START and PROCESSING\_END across all turns. | 2 | | | 2024-11-08 00:00:00 | 2024-11-08 00:00:00 | no | | | | | | generative\_agent\_turns\_\_utterance\_ct | int | Number of generative\_agent utterances. | 2 | | | 2024-11-08 00:00:00 | 2024-11-08 00:00:00 | no | | | | | | generative\_agent\_turns\_\_contains\_escalation | boolean | Indicates if any turn in the conversation resulted in an escalation to a human agent. | 1 | | | 2024-11-08 00:00:00 | 2024-11-08 00:00:00 | no | | | | | | generative\_agent\_tasks\_\_first\_task\_name | varchar(255) | Name of the first task initiated by the generative agent. | SomethingElse | | | 2024-11-08 00:00:00 | 2024-11-08 00:00:00 | no | | | | | | generative\_agent\_tasks\_\_last\_task\_name | varchar(255) | Name of the last task initiated by the generative agent. | SomethingElse | | | 2024-11-08 00:00:00 | 2024-11-08 00:00:00 | no | | | | | | generative\_agent\_tasks\_\_task\_ct | int | Number of tasks entered by generative\_agent. | 2 | | | 2024-11-08 00:00:00 | 2024-11-08 00:00:00 | no | | | | | | generative\_agent\_tasks\_\_configuration\_id | varchar(255) | The configuration version responsible for the actions of the generative agent. | 4ea5b399-f969-49c6-8318-e2c39a98e817 | | | 2024-11-08 00:00:00 | 2024-11-08 00:00:00 | no | | | | | | generative\_agent\_tasks\_\_used\_hila | | Boolean representing if the conversation used a HILA escalation. True doesn't guarantee that there was a HILA response in the conversation. | TRUE | | | 2024-11-08 00:00:00 | 2024-11-08 00:00:00 | no | | | | genagent\_tasks | | generative\_agent\_monitoring\_\_flagged\_for\_review | | Boolean representing if the conversation has at least one suggested review flag. | TRUE | | | 2024-11-08 00:00:00 | 2024-11-08 00:00:00 | no | | | | genagent\_monitoring | | generative\_agent\_monitoring\_\_review\_flags\_ct | | Number of review flags. | 2 | | | 2024-11-08 00:00:00 | 2024-11-08 00:00:00 | no | | | | genagent\_monitoring | | generative\_agent\_monitoring\_\_evaluation\_ct | | Number of evaluations. | 10 | | | 2024-11-08 00:00:00 | 2024-11-08 00:00:00 | no | | | | genagent\_monitoring | ### Table: issue\_entry This table shows data about how a user began an interaction with the sdk by issue **Sync Time:** 1h **Unique Condition:** company\_marker, issue\_id | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :-------------------- | :----------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | instance\_ts | timestamp | The time window of computed elements. This window is usually 15 minutes or 1 hour depending on the generation time. Times are rounded down to the nearest interval (for a time of 12:34 and an interval of 15m, this is 12:30). As an example, for a 15 minute interval an instance\_ts of 12:30 implies events from 12:30 -> 12:45. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | 2024-07-01 00:00:00 | 2024-07-01 00:00:00 | no | | | | | | issue\_created\_ts | timestamp | timestamp of the "NEW\_ISSUE" event for an issue | 2018-09-05 19:58:06 | | | 2024-07-01 00:00:00 | 2024-07-01 00:00:00 | no | | | | | | company\_id | bigint | The ASAPP identifier of the company or test data source. | 10001 | | | 2024-07-01 00:00:00 | 2024-07-01 00:00:00 | no | | | | | | company\_subdivision | varchar(255) | String identifier for the company subdivision associated with the conversation. | ACMEsubcorp | | | 2024-07-01 00:00:00 | 2024-07-01 00:00:00 | no | | | | | | company\_segments | varchar(255) | String with comma separated segments for the company enclosed by square brackets. | marketing,promotions | | | 2024-07-01 00:00:00 | 2024-07-01 00:00:00 | no | | | | | | issue\_id | bigint | The ASAPP issue or conversation id. | 21352352 | | | 2024-07-01 00:00:00 | 2024-07-01 00:00:00 | no | | | | | | entry\_type | character varying(384) | Initiation source of the first activity for the Issue ID was from a proactive invitation, reactive button click, deep-link ask-secondary-question, etc. examples: PROACTIVE,REACTIVE,ASK,DEEPLINK | | | | 2024-07-01 00:00:00 | 2024-07-01 00:00:00 | no | | | | | | treatment\_type | varchar(64) | Indicates whether proactive messaging is configured to route the customer to an automated flow or a live agent. | QUEUE\_PAUSED | | | 2024-07-01 00:00:00 | 2024-07-01 00:00:00 | no | | | | | | rule\_name | character varying(65535) | Name of the logical set of criteria met by the customer to trigger a proactive invitation or reactive button display. | | | | 2024-07-01 00:00:00 | 2024-07-01 00:00:00 | no | | | | | | is\_new\_conversation | boolean | Indicates whether the issue was created as a new conversation when the customer was not engaged in any ongoing or active issue. | | | | 2019-11-15 00:00:00 | 2019-11-15 00:00:00 | no | | | | | | is\_new\_user | boolean | Indicates if this is the first issue from the customer. | | | | 2019-11-15 00:00:00 | 2019-11-15 00:00:00 | no | | | | | | current\_page\_url | varchar(2000) | The URL of the page where the SDK was displayed. | [https://www.asapp.com](https://www.asapp.com) | | | 2024-07-01 00:00:00 | 2024-07-01 00:00:00 | no | | | | | | referring\_page\_url | character varying(65535) | The URL of the page that directed the user to the current page. | | | | 2024-07-01 00:00:00 | 2024-07-01 00:00:00 | no | | | | | | client\_uuid | character varying(36) | The UUID generated (that only ever lasts fifteen minutes or so) on each fresh sdk cache that can identify a unique human. For internal debbuging, it won't go to sync (exactly as it comes from the source without any transformation) | c3944019-24d3-4887-8794-045cd61d5a22 | | | 2024-07-01 00:00:00 | 2021-06-01 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2024-07-01 00:00:00 | 2024-07-01 00:00:00 | no | | | | | ### Table: issue\_omnichannel This table captures omnichannel tracking events related with the different platforms we have. (Initially only ABC) **Sync Time:** 1h **Unique Condition:** company\_marker, issue\_id, third\_party\_customer\_id | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :------------------------- | :----------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | instance\_ts | timestamp | The time window of computed elements. This window is usually 15 minutes or 1 hour depending on the generation time. Times are rounded down to the nearest interval (for a time of 12:34 and an interval of 15m, this is 12:30). As an example, for a 15 minute interval an instance\_ts of 12:30 implies events from 12:30 -> 12:45. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | 2020-06-02 00:00:00 | 2020-06-02 00:00:00 | no | | | | | | issue\_id | bigint | The ASAPP issue or conversation id. | 21352352 | | | 2020-06-02 00:00:00 | 2020-06-02 00:00:00 | no | | | | | | company\_id | bigint | DEPRECATED 2024-03-25 | 10001 | | | 2020-06-02 00:00:00 | 2020-06-02 00:00:00 | no | | | | | | omni\_source | character varying(191) | The source of the information. | 'ABC' | | | 2020-06-03 00:00:00 | 2020-06-03 00:00:00 | no | | | | | | opaque\_id | varchar(191) | deprecated: 2020-09-11 | 'urn:mbid:XXXXXX' | | | 2020-06-03 00:00:00 | 2020-11-09 00:00:00 | no | | | | | | external\_intent | character varying(65535) | The intention or purpose of the chat as specified by the business, such as account\_question. deprecated: 2020-09-11 | 'account\_question' | | | 2020-06-03 00:00:00 | 2020-11-09 00:00:00 | no | | | | | | external\_group | character varying(65535) | Group identifier for the message, as specified by the business, such as department name. deprecated: 2020-09-11 | 'credit\_card\_department' | | | 2020-06-03 00:00:00 | 2020-11-09 00:00:00 | no | | | | | | first\_utterance | character varying(191) | Captures the text of the first customer statement in an issue. | | | | 2020-06-03 00:00:00 | 2020-06-03 00:00:00 | no | | | | | | event\_ts | timestamp | deprecated: 2020-09-11 | 2019-11-08 14:00:06.957000+00:00 | | | 2020-06-02 00:00:00 | 2020-06-02 00:00:00 | no | | | | | | third\_party\_customer\_id | character varying(65535) | An encrypted identifier which is permanently mapped to an ASAPP customer. | 'urn:mbid:XXXXXX' | | | 2020-07-23 00:00:00 | 2020-07-23 00:00:00 | no | | | | | | external\_context\_1 | character varying(65535) | Provides traffic source or customer context from external platforms, including Apple Business Chat Group ID and Google Business Messaging Entry Point. | 'credit\_card\_department' | | | 2020-07-23 00:00:00 | 2020-07-23 00:00:00 | no | | | | | | external\_context\_2 | character varying(65535) | Provides additional traffic source or customer context from external platforms, including Apple Business Chat Intent ID and Google Business Messaging Place ID. | 'account\_question' | | | 2020-07-23 00:00:00 | 2020-07-23 00:00:00 | no | | | | | | created\_ts | timestamp | Timestamp at which the message was sent. | '2019-11-08T14:00:06.95700000:00' | | | 2020-07-23 00:00:00 | 2020-07-23 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2025-01-09 00:00:00 | 2025-01-09 00:00:00 | no | | | | | ### Table: issue\_queues The purpose for the issue\_queues table is to capture relevant data associated with an issue in a wait queue. Data captured includes the issue\_id, the enqueue time, the rep, the event type and flowname. This is captured in 15 minute windows of time. **Sync Time:** 1h **Unique Condition:** issue\_id, queue\_id, enter\_queue\_ts | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :-------------------------- | :-------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | instance\_ts | timestamp | The time window of computed elements. This window is usually 15 minutes or 1 hour depending on the generation time. Times are rounded down to the nearest interval (for a time of 12:34 and an interval of 15m, this is 12:30). As an example, for a 15 minute interval an instance\_ts of 12:30 implies events from 12:30 -> 12:45. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | agent\_id | bigint | deprecated: 2019-09-25 | 123008 | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | conversation\_id | bigint | deprecated: 2019-09-25 | 21352352 | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | company\_subdivision | varchar(255) | String identifier for the company subdivision associated with the conversation. | ACMEsubcorp | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | company\_segments | varchar(255) | String with comma separated segments for the company enclosed by square brackets. | marketing,promotions | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | enter\_queue\_ts | timestamp without time zone | Timestamp when the issue was added to the queue. | 2019-12-26T18:25:22.836000+00:00 | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | exit\_queue\_ts | timestamp | Timestamp when the issue was removed from the queue. | 2019-12-26T18:25:28.552000+00:00 | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | queue\_id | integer | ASAPP queue identifier which the issue was placed. | 20001 | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | queue\_name | varchar(255) | Queue name which the issue was placed. | Acme Residential, Acme Wireless | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | abandoned | boolean | Flag indicating whether the issue was abandoned. | true, false | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | enqueue\_time | double precision | Duration in seconds that the issue spent in the queue. | 5.716000080108643 | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | exit\_queue\_eventtype | character varying(65535) | Reason the customer exited the queue. | CUSTOMER\_TIMEDOUT, NEW\_REP | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | rep\_id | varchar(191) | The ASAPP rep/agent identifier. | 123008 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | enter\_queue\_eventtype | character varying(65535) | Reason the customer entered the queue. | TRANSFER\_REQUESTED, SRS\_HIER\_AND\_TREEWALK | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | enter\_queue\_eventflags | bigint | Event causing the issue to be enqueued. | (1=customer, 2=rep, 4=bot) | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | enter\_queue\_flow\_name | character varying(65535) | Name of the flow which the issue was in before being enqueued. | LiveChatAgentsBusyFlow | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | enter\_queue\_message\_name | character varying(65535) | Message name within the flow which the user was in before being enqueued. | someoneWillBeWithYou, shortWaitFormNode | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | exit\_queue\_eventflags | bigint | Event causing the issue to be deenqueued. | (1=customer, 2=rep, 4=bot) | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | issue\_id | bigint | The ASAPP issue or conversation id. | 21352352 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-11-01 00:00:00 | 2024-05-24 00:00:00 | no | | | | | ### Table: issue\_sentiment The issue\_sentiment table captures sentiment analysis information related to customer issues. Each row represents an issue and its associated sentiment score or classification. This table helps track customer sentiment trends, assess the emotional tone of interactions, and support decision-making for issue resolution strategies. **Sync Time:** 1d **Unique Condition:** issue\_id | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :--------------- | :----------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | instance\_ts | timestamp | The time window of computed elements. This window is usually 15 minutes or 1 hour depending on the generation time. Times are rounded down to the nearest interval (for a time of 12:34 and an interval of 15m, this is 12:30). As an example, for a 15 minute interval an instance\_ts of 12:30 implies events from 12:30 -> 12:45. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | 2018-07-26 00:00:00 | 2018-09-29 00:00:00 | no | | | | | | conversation\_id | bigint | deprecated: 2019-09-25 | 21352352 | | | 2018-07-26 00:00:00 | 2018-07-26 00:00:00 | no | | | | | | score | double precision | The sentiment score applied to this issue. | 0.5545974373817444, -1000.0 | | | 2018-07-26 00:00:00 | 2018-07-26 00:00:00 | no | | | | | | status | character varying(65535) | Reason for the sentiment score, which may be NULL | CONVERSATION\_TOO\_SHORT | | | 2018-07-26 00:00:00 | 2018-07-26 00:00:00 | no | | | | | | issue\_id | bigint | The ASAPP issue or conversation id. | 21352352 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-11-01 00:00:00 | 2024-05-24 00:00:00 | no | | | | | ### Table: issue\_session\_merge A list of the merged issues that have occurred as a result of transferring to a queue during a cold transfer and the first issue\_id associated with this new issue\_id. Only relevant for VOICE. activate-date: 2024-01-17 **Sync Time:** 1h **Unique Condition:** issue\_id, session\_id | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :------------------------ | :----------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | instance\_ts | timestamp | The time window of computed elements. This window is usually 15 minutes or 1 hour depending on the generation time. Times are rounded down to the nearest interval (for a time of 12:34 and an interval of 15m, this is 12:30). As an example, for a 15 minute interval an instance\_ts of 12:30 implies events from 12:30 -> 12:45. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | | | no | | | | | | company\_id | bigint | DEPRECATED 2024-03-25 | 10001 | | | 2020-02-05 00:00:00 | 2020-02-05 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | | | no | | | | | | issue\_id | bigint | The ASAPP issue or conversation id. | 21352352 | | | 2020-02-05 00:00:00 | 2020-02-05 00:00:00 | no | | | | | | customer\_id | bigint | The ASAPP internal customer identifier. | 123008 | | | 2020-02-05 00:00:00 | 2020-02-05 00:00:00 | no | | | | | | session\_id | varchar(128) | The ASAPP session identifier. It is a uuid generated by the chat backend. Note: a session may contain several conversations. | 'guid:2348001002-0032128785-2172846080-0001197432' | | | 2020-02-05 00:00:00 | 2020-02-05 00:00:00 | no | | | | | | issue\_created\_ts | timestamp | Timestamp this issue\_id was created. | 2018-09-05 19:58:06 | | | 2020-02-05 00:00:00 | 2020-02-05 00:00:00 | no | | | | | | first\_issue\_id | bigint | The first issue\_id for this session. | 21352352 | | | 2020-02-05 00:00:00 | 2020-02-05 00:00:00 | no | | | | | | first\_issue\_created\_ts | timestamp | Timestamp when the NEW\_ISSUE event occurred for the first issue\_id associated with this session. | 2018-09-05 19:58:06 | | | 2020-02-05 00:00:00 | 2020-02-05 00:00:00 | no | | | | | | last\_issue\_id | bigint | The last issue\_id associated with this session. | 21352352 | | | 2020-02-05 00:00:00 | 2020-02-05 00:00:00 | no | | | | | | last\_issue\_created\_ts | timestamp | Timestamp when the NEW\_ISSUE event occurred for the last issue\_id associated with this session | 2018-09-05 19:58:06 | | | 2020-02-05 00:00:00 | 2020-02-05 00:00:00 | no | | | | | ### Table: issue\_type The purpose of the issue\_type table is to capture any client specific naming of issue parameters. This captures per issue the initial "issue type name" which the client has specified. This is captured in 15 minute window increments. **Sync Time:** 1h **Unique Condition:** company\_id, customer\_id, issue\_id | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :------------------- | :-------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | instance\_ts | timestamp | The time window of computed elements. This window is usually 15 minutes or 1 hour depending on the generation time. Times are rounded down to the nearest interval (for a time of 12:34 and an interval of 15m, this is 12:30). As an example, for a 15 minute interval an instance\_ts of 12:30 implies events from 12:30 -> 12:45. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | 2019-08-12 00:00:00 | 2019-08-12 00:00:00 | no | | | | | | prechat\_survey\_ts | timestamp without time zone | Timestamp when the pre-chat survey was completed to route the issue to an expert. | 2019-08-07 19:34:18.844 | | | 2019-08-12 00:00:00 | 2019-08-12 00:00:00 | no | | | | | | type\_change\_ts | timestamp without time zone | The timestamp when the issue type was changed (e.g. escalated from question.) Null if the issue type was not changed. | 2019-08-07 19:45:57.325 | | | 2019-08-12 00:00:00 | 2019-08-12 00:00:00 | no | | | | | | issue\_id | bigint | The ASAPP issue or conversation id. | 21352352 | | | 2019-08-12 00:00:00 | 2019-08-12 00:00:00 | no | | | | | | company\_id | bigint | DEPRECATED 2024-03-25 | 10001 | | | 2019-08-12 00:00:00 | 2019-08-12 00:00:00 | no | | | | | | company\_subdivision | varchar(255) | String identifier for the company subdivision associated with the conversation. | ACMEsubcorp | | | 2019-08-12 00:00:00 | 2019-08-12 00:00:00 | no | | | | | | company\_segments | varchar(255) | String with comma separated segments for the company enclosed by square brackets. | marketing,promotions | | | 2019-08-12 00:00:00 | 2019-08-12 00:00:00 | no | | | | | | customer\_id | bigint | The ASAPP internal customer identifier. | 123008 | | | 2019-08-12 00:00:00 | 2019-08-12 00:00:00 | no | | | | | | queue\_id | integer | The unique identifier for the queue to which the issue was routed. | 20001 | | | 2019-08-12 00:00:00 | 2019-08-12 00:00:00 | no | | | | | | rep\_id | varchar(191) | The ASAPP rep/agent identifier. | 123008 | | | 2019-08-12 00:00:00 | 2019-08-12 00:00:00 | no | | | | | | issue\_type | character varying(65535) | Current type of the issue (question or escalation). | ESCALATION | | | 2019-08-12 00:00:00 | 2019-08-12 00:00:00 | no | | | | | | initial\_type | character varying(65535) | Original type of the issue when it was created. | QUESTION | | | 2019-08-12 00:00:00 | 2019-08-12 00:00:00 | no | | | | | | subsidiary\_name | character varying(65535) | Name of the company to which this issue is associated. | ACMEsubsid | | | 2019-08-12 00:00:00 | 2019-08-12 00:00:00 | no | | | | | | channel\_type | character varying(65535) | Indicates the channel (voice or chat) if the issue started as ESCALATION, or null otherwise. | CALL | | | 2019-08-12 00:00:00 | 2019-08-12 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-11-01 00:00:00 | 2024-05-24 00:00:00 | no | | | | | ### Table: knowledge\_base This table captures interactions with articles in the knowledge base. An article can be viewed, attached to a chat and marked as favorite **Sync Time:** 1h **Unique Condition:** company\_id, issue\_id, article\_id, event\_ts | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :--------------------- | :-------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :------------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | issue\_id | bigint | The ASAPP issue or conversation id. | 21352352 | | | 2019-12-20 00:00:00 | 2019-12-20 00:00:00 | no | | | | | | company\_id | bigint | DEPRECATED 2024-03-25 | 10001 | | | 2019-12-20 00:00:00 | 2019-12-20 00:00:00 | no | | | | | | article\_id | character varying(65535) | The knowledge base identifier for the article. | 5, 16580001 | | | 2019-12-20 00:00:00 | 2019-12-20 00:00:00 | no | | | | | | interaction | character varying(8) | An indicator of whether the article was viewed or attached to a chat. | 'Viewed', 'Attached' | | | 2019-12-20 00:00:00 | 2019-12-20 00:00:00 | no | | | | | | is\_favorited | boolean | Indicates whether the article is marked as a favorite. | TRUE, FALSE | | | 2019-12-20 00:00:00 | 2019-12-20 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-12-20 00:00:00 | 2019-12-20 00:00:00 | no | | | | | | event\_ts | timestamp | The time of an given event. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | 2019-12-20 00:00:00 | 2019-12-20 00:00:00 | no | | | | | | event\_type | varchar(191) | Either Interaction events requested: ('OPEN\_ARTICLE', 'PAPERCLIP\_ARTICLE') or Recommendation events requested: ('DISPLAYED','AGENT\_HOVERED', 'AGENT\_CLICKED\_EXTERNAL\_ARTICLE\_LINK', 'AGENT\_CLICKED\_THUMBS\_UP' 'AGENT\_CLICKED\_THUMBS\_DOWN', 'AGENT\_CLICKED\_EXPAND\_CARD', 'AGENT\_CLICKED\_COLLAPSE\_CARD') | CUSTOMER\_TIMEOUT, TEXT\_MESSAGE | | | 2019-12-20 00:00:00 | 2019-12-20 00:00:00 | no | | | | | | event\_name | character varying(191) | A string that determines if the action comes from an Interaction event or a Recommendation event | 'INTERACTION', 'SUGGESTION' | | | 2019-12-20 00:00:00 | 2019-12-20 00:00:00 | no | | | | | | rep\_id | varchar(191) | The ASAPP rep/agent identifier. | 123008 | | | 2020-03-30 00:00:00 | 2020-03-30 00:00:00 | no | | | | | | rep\_assigned\_ts | timestamp without time zone | timestamp of the NEW\_REP event | | | | 2020-10-15 00:00:00 | 2020-10-15 00:00:00 | no | | | | | | article\_category | character varying(191) | Category to distinguish between flows and knowledge base articles. REGULAR is for knowledge base articles. FLOWS is for flows recommendation. | 'REGULAR' | | | 2020-10-15 00:00:00 | 2020-10-15 00:00:00 | no | | | | | | discovery\_type | character varying(256) | How article was presented/discovered. (recommendation, quick\_access\_kbr, favorite, search, filebrowser) | recommendation | | | 2021-03-09 00:00:00 | 2021-03-09 00:00:00 | no | | | | | | position | integer | Position of article recommendation when multiple recommendations are presented. Default is 1 when a single recommendation is presented. | 1 | | | 2021-03-09 00:00:00 | 2021-03-09 00:00:00 | no | | | | | | span\_id | varchar(128) | Identifier for a recommendation. Can be used to tie a recommendation to an interaction such as HOVER, OPEN\_ARTICLE. | 'coo9c7b8-7a50-11eb-b13e-8ad0401b5458' | | | 2021-03-09 00:00:00 | 2021-03-09 00:00:00 | no | | | | | | article\_name | | Short description of the article. | 500 | | | 2021-03-09 00:00:00 | 2021-03-09 00:00:00 | no | | | | | | is\_paperclip\_enabled | | Flag which indicates whether the article is paper clipped (Bookmark). | TRUE | | | 2021-03-09 00:00:00 | 2021-03-09 00:00:00 | no | | | | | | external\_article\_id | | Identifier for external article id. | 4567 | | | 2021-03-09 00:00:00 | 2021-03-09 00:00:00 | no | | | | | ### Table: live\_agent\_opportunities The live\_agent\_opportunities table tracks instances where automated processes, such as chatbots or virtual assistants, escalate a conversation or issue to a live agent. It offers insights into the effectiveness of automation, the reasons behind escalations, and key metrics for improving both customer experience and agent performance. The term "Opportunity" refers to the period from when the conversation is handed over to an agent until its closure. **Sync Time:** 1h **Unique Condition:** issue\_id, customer\_id, opportunity\_ts | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :-------------------------------------- | :-------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | instance\_ts | timestamp | The time window of computed elements. This window is usually 15 minutes or 1 hour depending on the generation time. Times are rounded down to the nearest interval (for a time of 12:34 and an interval of 15m, this is 12:30). As an example, for a 15 minute interval an instance\_ts of 12:30 implies events from 12:30 -> 12:45. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | company\_id | bigint | DEPRECATED 2024-03-25 | 10001 | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | company\_subdivision | varchar(255) | String identifier for the company subdivision associated with the conversation. | ACMEsubcorp | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | company\_segments | varchar(255) | String with comma separated segments for the company enclosed by square brackets. | marketing,promotions | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | customer\_id | bigint | The ASAPP internal customer identifier. | 123008 | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | rep\_id | varchar(191) | The identifier of the rep this opportunity was assigned to or null if it was never assigned. | 123008 | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | opportunity\_ts | timestamp | Timestamp of the opportunity event. | 2020-01-06 23:13:50.617 | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | issue\_id | bigint | The ASAPP issue or conversation id. | 21352352 | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | platform | varchar(255) | The platform which was used by the customer for a particular event or request (web, ios, android, applebiz, voice). | web, ios, android, applebiz, voice | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | device\_type | varchar(255) | Last device type used by the customer. | mobile, tablet, desktop, watch, unknown | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | first\_opportunity | boolean | Indicator of whether this is the first opportunity for this issue. | true, false | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | triggered\_when\_busy | boolean | Indicator of whether the customer was asked if they wanted to wait for an agent. | true | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | triggered\_outside\_hours | boolean | Indicator of whether the customer was told they are outside of business hours. | false | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | queue\_id | integer | Identifier of the agent group this opportunity will be routed to. | 2001 | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | queue\_name | varchar(255) | Name of the queue this opportunity will be routed to. | Residential | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | intent\_code | character varying(128) | The most recent intent code used for routing this issue. | SALESFAQ, BILLINFO | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | event\_type | varchar(191) | The event\_type of this opportunity. This can be useful to determine if this is a transfer, etc. | NEW\_REP, SRS\_HIER\_AND\_TREEWALK | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | previous\_event\_type | character varying(65535) | The event\_type that occurred prior to this opportunity. This can be useful to determine if the customer was previously transferred or timed out. | SRS\_HIER\_AND\_TREEWALK | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | flow\_name | varchar(255) | The flow associated with the routing intent, if any. | ForceChatFlow | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | by\_request | boolean | Indicator of whether the customer explicitly request to speak to an agent (i.e. intent code has an AGENT as a parent). | true, false | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | by\_end\_srs | boolean | Indicator of whether this opportunity occurred because of a negative end srs response. | true, false | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | by\_api\_error | boolean | Indicator of whether this opportunity occurred because of an error in partner API. | true, false | | | 2019-10-21 00:00:00 | 2019-10-21 00:00:00 | no | | | | | | by\_design | boolean | Indicator of whether intent\_code is not null AND not by\_request AND not by\_end\_srs AND not by\_api\_error. Note this includes cases where a flow sends the customer to an agent if it has not successfully solved the problem. (ex: I am still not connected after a reset my router flow.) | true, false | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | by\_other | boolean | Catch all indicattor for all cases that are not by request, design or end\_srs. This generally happens if we are missing the intent code, either because of an API error or because of a data bug. | true, false | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | enqueued\_ts | timestamp | The time which this opportunity was sent to a queue, or null if it never was enqueued. | 2020-01-06 23:13:50.617 | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | exit\_queue\_ts | timestamp | Time at which the customer exited the queue. | 2020-01-06 23:13:50.617 | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | abandoned\_ts | TIMESTAMP | The datetime when the customer abandoned the queue. | 2020-01-06 23:13:50.617 | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | assigned\_ts | timestamp | Timestamp when the opportunity was assigned to a representative; null if it was never assigned. | 2020-01-03T18:54:45.140000+00:00 | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | escalation\_initiated\_ts | timestamp | The lesser of enqueued and assigned time, null if never escalated. | 2020-01-06 23:13:50.617 | | | 2019-06-04 00:00:00 | 2019-06-04 00:00:00 | no | | | | | | rep\_first\_response\_ts | TIMESTAMP | The time when a rep first responded to the customer. | 2020-01-06 23:13:50.617 | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | dispositioned\_ts | timestamp | The time at which the rep dispositioned this issue (Exits the screen/frees up a slot). | 2020-01-06 23:13:50.617 | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | customer\_end\_ts | timestamp without time zone | The time at which customer ended the issue, if the customer ended the issue. | 2020-01-06 23:13:50.617 | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | disposition\_event\_type | varchar(255) | Event type indicating how the conversation ended. | resolved, timedout | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | cust\_utterance\_count | bigint | Count of customer utterances from issue\_assigned\_ts to dispositioned\_ts | 4 | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | rep\_utterance\_count | bigint | Count of rep utterances from issue\_assigned\_ts to dispositioned\_ts | 5 | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | cust\_response\_ct | int | Total count of responses by customer. Max of one message following a rep message counted as a response. | 3 | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | rep\_response\_ct | int | Total count of responses by agent. Max of one message following a customer message counted as a response. | 10 | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | is\_ghost\_customer | boolean | True if the customer was assigned to a rep but never responded to the rep. | true, false | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | handle\_time\_seconds | double precision | Time in seconds spent an agent working on a particular assignment. Time between assignment and disposition event | 824.211 | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | lead\_time\_seconds | double precision | Time in seconds spent by an agent leading the conversation. Time between assignment and time of last utterance by THE CUSTOMER. If no utterance by customer, Lead time is total\_handle\_time. | 101.754 | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | wrap\_up\_time\_seconds | double precision | Time in seconds spent by an agent wrapping up the conversation. Defined as total\_handle\_time-total\_lead\_time. | 61.989 | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | accepted\_wait\_ts | timestamp without time zone | Timestamp at which the customer was sent a message confirming they had been placed into a queue. | 2019-09-11T14:15:59.312000+00:00 | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | is\_transfer | boolean | Indicator whether this opportunity is due to a transfer. | true, false | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | is\_reengagement | boolean | Indicator whether this opportunity is due to the user returning from a timeout. | true, false | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | is\_conversation\_initiation | boolean | Indicator of whether this opportunity is from a conversation initiation (i.e. not from transfer or reengagement). | true, false | | | 2019-07-01 00:00:00 | 2019-07-01 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-11-01 00:00:00 | 2024-05-24 00:00:00 | no | | | | | | from\_queue\_id | bigint | The identifier of the group from which the issue was transferred. | 30001 | | | 2019-12-18 00:00:00 | 2019-12-18 00:00:00 | no | | | | | | from\_queue\_name | character varying(191) | The name of the group from which the issue was transferred. | service, General | | | 2019-12-18 00:00:00 | 2019-12-18 00:00:00 | no | | | | | | from\_rep\_id | bigint | The identifier of the rep from which the issue was transferred. | 81001 | | | 2019-12-18 00:00:00 | 2019-12-18 00:00:00 | no | | | | | | is\_check\_in\_reengagement | boolean | Is this opportunity due to the user coming back within a 24h period after being timed-out for not answering a check-in prompt on time. | true | | | 2020-01-14 00:00:00 | 2020-01-14 00:00:00 | no | | | | | | desk\_mode\_flag | bigint | Bitmap encodes if agent handled voice-issue ASAPP desk, had engagement with ASAPP desk. bitmap: 0: null, 1: 'VOICE', 2: 'DESK', 4: 'ENGAGEMENT', 8: 'INACTIVITY' NULL for non voice issues | 0, 1, 2, 5, 7 | | | 2020-02-19 00:00:00 | 2020-02-19 00:00:00 | no | | | | | | desk\_mode\_string | varchar(191) | Decodes the desk\_mode flag. Current possible values (Null, 'VOICE', 'VOICE\_DESK', 'VOICE\_DESK\_ENGAGEMENT','VOICE\_INACTIVITY'). NULL for non voice issues. | VOICE\_DESK | | | 2020-02-19 00:00:00 | 2020-02-19 00:00:00 | no | | | | | | merged\_from\_issue\_id | bigint | The issue id before the merge | 21352352 | | | 2020-06-30 00:00:00 | 2020-06-30 00:00:00 | no | | | | | | merged\_ts | timestamp | the time the merge occurred | 2019-11-08T14:00:06.957000+00:00 | | | 2020-06-30 00:00:00 | 2020-06-30 00:00:00 | no | | | | | | exclusive\_phrase\_auto\_complete\_msgs | bigint | Count of utterances where at least one phrase autocomplete was accepted/sent and no other augmentation was used. | | | | 2021-08-02 00:00:00 | 2021-08-02 00:00:00 | no | | | | | | autopilot\_ending\_msgs\_ct | integer | Number of autopilot endings | 2 | | | 2024-04-19 00:00:00 | 2024-04-19 00:00:00 | no | | | | | ### Table: queue\_check\_ins Exports for each 15 min window of Queue Check in events **Sync Time:** 1h **Unique Condition:** company\_id, issue\_id, customer\_id, check\_in\_ts | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :---------------------------------- | :-------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | issue\_id | bigint | The ASAPP issue or conversation id. | 21352352 | | | 2020-01-02 00:00:00 | 2020-01-02 00:00:00 | no | | | | | | customer\_id | bigint | The ASAPP internal customer identifier. | 123008 | | | 2020-01-02 00:00:00 | 2020-01-02 00:00:00 | no | | | | | | company\_id | bigint | DEPRECATED 2024-03-25 | 10001 | | | 2020-01-02 00:00:00 | 2020-01-02 00:00:00 | no | | | | | | instance\_ts | timestamp | The time window of computed elements. This window is usually 15 minutes or 1 hour depending on the generation time. Times are rounded down to the nearest interval (for a time of 12:34 and an interval of 15m, this is 12:30). As an example, for a 15 minute interval an instance\_ts of 12:30 implies events from 12:30 -> 12:45. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | 2020-01-02 00:00:00 | 2020-01-02 00:00:00 | no | | | | | | check\_in\_ts | timestamp without time zone | Timestamp at which the check in message was prompted to the customer. | 2018-06-10 14:23:00 | | | 2020-01-02 00:00:00 | 2020-01-02 00:00:00 | no | | | | | | wait\_time\_threshold\_ts | timestamp without time zone | Timestamp at which the queue wait time threshold was reached. | 2018-06-10 14:22:58 | | | 2020-01-02 00:00:00 | 2020-01-02 00:00:00 | no | | | | | | check\_in\_result | character varying(9) | The result of the check in message, either the customer 'Accepted' or was 'Dequeued'. | 'Dequeued' | | | 2020-01-02 00:00:00 | 2020-01-02 00:00:00 | no | | | | | | check\_in\_result\_ts | timestamp without time zone | Timestamp at which the result of the check in message was received. | 2018-06-10 14:24:00 | | | 2020-01-02 00:00:00 | 2020-04-24 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-03-23 00:00:00 | 2019-03-23 00:00:00 | no | | | | | | wait\_time\_threshold\_ct\_distinct | bigint | Quantity of times the queue wait time threshold was reached before getting the check in message. | 2 | | | 2020-04-25 00:00:00 | 2020-04-25 00:00:00 | no | | | | | | queue\_id | integer | The ASAPP queue identifier which the issue was placed. | 20001 | | | 2020-06-11 00:00:00 | 2020-06-11 00:00:00 | no | | | | | | queue\_name | varchar(255) | The queue name which the issue was placed. | Acme Residential, Acme Wireless | | | 2020-06-11 00:00:00 | 2020-06-11 00:00:00 | no | | | | | | opportunity\_ts | timestamp | Timestamp of the opportunity event | 2023-01-02 19:58:06 | | | 2020-01-02 00:00:00 | 2020-01-02 00:00:00 | no | | | | | ### Table: quick\_reply\_buttons The quick\_reply\_button\_interaction table contains information associated with a specific quick\_reply\_button, its final intent and any aggregation counts over the day (e.g. escalated\_to\_chat, escalation\_requested). Aggregated for a 24 hour period. Only ended issues are counted. **Sync Time:** 1d **Unique Condition:** company\_id, company\_subdivision, company\_segments, final\_intent\_code, quick\_reply\_button\_text, escalated\_to\_chat, escalation\_requested, quick\_reply\_button\_index | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :----------------------------- | :----------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | instance\_ts | timestamp | The time window of computed elements. This window is usually 15 minutes or 1 hour depending on the generation time. Times are rounded down to the nearest interval (for a time of 12:34 and an interval of 15m, this is 12:30). As an example, for a 15 minute interval an instance\_ts of 12:30 implies events from 12:30 -> 12:45. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | 2019-02-12 00:00:00 | 2019-02-12 00:00:00 | no | | | | | | company\_id | bigint | DEPRECATED 2024-03-25 | 10001 | | | 2019-02-12 00:00:00 | 2019-02-12 00:00:00 | no | | | | | | company\_subdivision | varchar(255) | String identifier for the company subdivision associated with the conversation. | ACMEsubcorp | | | 2019-02-12 00:00:00 | 2019-02-12 00:00:00 | no | | | | | | company\_segments | varchar(255) | String with comma separated segments for the company enclosed by square brackets. | marketing,promotions | | | 2019-02-12 00:00:00 | 2019-02-12 00:00:00 | no | | | | | | final\_intent\_code | character varying(255) | The last intent code of the flow which the user navigated. | PAYBILL | | | 2019-02-12 00:00:00 | 2019-02-12 00:00:00 | no | | | | | | escalated\_to\_chat | bigint | 1 if an issue escalated to live chat, 0 if not. | 1 | | | 2019-02-12 00:00:00 | 2019-02-12 00:00:00 | no | | | | | | escalation\_requested | integer | 1 if customer was asked to wait for an agent or if a customer asked to speak to an agent. | 1 | | | 2019-02-12 00:00:00 | 2019-02-12 00:00:00 | no | | | | | | quick\_reply\_button\_text | character varying(65535) | The text of the quick reply button. | 'Billing' | | | 2019-02-12 00:00:00 | 2019-02-12 00:00:00 | no | | | | | | quick\_reply\_button\_index | integer | The position of the quick reply button shown. | (1,2,3) | | | 2019-02-12 00:00:00 | 2019-02-12 00:00:00 | no | | | | | | quick\_reply\_displayed\_count | bigint | The number of times this button was shown. | 42 | | | 2019-02-12 00:00:00 | 2019-02-12 00:00:00 | no | | | | | | quick\_reply\_selected\_count | bigint | The number of times this button was selected. | 42 | | | 2019-02-12 00:00:00 | 2019-02-12 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-11-01 00:00:00 | 2024-05-24 00:00:00 | no | | | | | ### Table: reps The rep table contains a listing of data regarding each rep. Expected data includes their name, the rep id, their slot configuration and the rep status. This rep data is collected daily. **Sync Time:** 1d **Unique Condition:** rep\_id | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :------------- | :-------------------------- | :---------------------------------------------------------------------------------- | :----------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | created\_ts | timestamp | The timestamp of when record gets generated. | 2019-02-19T21:31:43+00:00 | | | 2018-09-21 00:00:00 | 2018-09-21 00:00:00 | no | | | | | | agent\_id | bigint | deprecated: 2019-09-25 | 123008 | | | 2018-09-21 00:00:00 | 2018-09-21 00:00:00 | no | | | | | | crm\_agent\_id | varchar(255) | deprecated: 2019-09-25 | 347bdddb-d3a1-45fc-bbcd-dbd3a175fc1c | | | 2018-09-21 00:00:00 | 2018-09-21 00:00:00 | no | | | | | | name | varchar(255) | The rep name as imported from the CRM. | Smith, Anne | | | 2018-09-21 00:00:00 | 2018-09-21 00:00:00 | no | | | | | | max\_slot | smallint | The number of slots or concurrent conversations this rep can have at the same time. | 4 | | | 2018-09-21 00:00:00 | 2018-09-21 00:00:00 | no | | | | | | disabled\_time | timestamp without time zone | The time when this rep was removed from the ASAPP system. | 2019-02-27T12:56:34+00:00 | | | 2018-09-21 00:00:00 | 2018-09-21 00:00:00 | no | | | | | | agent\_status | | deprecated: 2019-09-25 | | | | 2018-09-21 00:00:00 | 2018-09-21 00:00:00 | no | | | | | | rep\_id | varchar(191) | The ASAPP rep/agent identifier. | 123008 | | | 2018-09-21 00:00:00 | 2018-09-21 00:00:00 | no | | | | | | crm\_rep\_id | | The rep identifer from the client system. | monica.rosa | | | 2019-09-26 00:00:00 | 2019-09-26 00:00:00 | no | | | | | | rep\_status | varchar(255) | The last known status of the rep at UTC midnight. | 80001 | | | 2019-09-26 00:00:00 | 2019-09-26 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-11-01 00:00:00 | 2024-05-24 00:00:00 | no | | | | | ### Table: rep\_activity The rep\_activity table tracks status and slot information of each agent over time, including time spent in each status and time utilized in chats. In this table, the data is captured in 15 minute increments throughout the day. instance\_ts is actually the 15-minute window in question, and is part of the primary key. It does not indicate the last time a relevant event happened as in other tables. Windows may be re-stated when information from a later window amends them, for example to account for additional utilized time. **Sync Time:** 1h **Unique Condition:** company\_id, instance\_ts, rep\_id, status\_id, in\_status\_starting\_ts | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :------------------------ | :-------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------ | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | instance\_ts | timestamp | The start of the 15-minute time window under observation. As an example, for a 15 minute interval an instance\_ts of 12:30 implies activity from 12:30 to 12:45. | 2019-11-08 14:00:00 | | | 2018-10-01 00:00:00 | 2018-10-01 00:00:00 | no | | | | | | update\_ts | timestamp without time zone | The timestamp at which the last event for this record occurred. This usually represents the status end or the end of the last conversation handled in this status. | 2018-06-10 14:24:00 | | | 2019-12-16 00:00:00 | 2019-12-16 00:00:00 | no | | | | | | export\_ts | | The end of the time window for which this record was exported. | 2018-06-10 14:30:00 | | | 2019-12-16 00:00:00 | 2019-12-16 00:00:00 | no | | | | | | agent\_id | bigint | deprecated: 2019-09-25 | 123008 | | | 2018-10-01 00:00:00 | 2018-10-01 00:00:00 | no | | | | | | company\_subdivision | varchar(255) | The company subdivision relates to the customer issue and is not relevant to reps. Intentionally left blank. | ACMEsubcorp | | | 2018-10-01 00:00:00 | 2018-10-01 00:00:00 | no | | | | | | company\_segments | varchar(255) | The company segments field relates to the customer issue and is not relevant to reps. Intentionally left blank. | marketing,promotions | | | 2018-10-01 00:00:00 | 2018-10-01 00:00:00 | no | | | | | | agent\_name | | deprecated: 2019-09-25 | | | | 2018-10-01 00:00:00 | 2018-10-01 00:00:00 | no | | | | | | status\_id | character varying(65535) | The ASAPP identifier for a given status. | OFFLINE, 1 | | | 2018-10-01 00:00:00 | 2018-10-01 00:00:00 | no | | | | | | status\_description | character varying(65535) | The human text name for a given status. | | | | 2018-10-01 00:00:00 | 2018-10-01 00:00:00 | no | | | | | | orig\_status\_description | character varying(191) | The text of the status before alteration for disconnects. | Available, Away, Coffee Break, Active | | | 2020-01-07 00:00:00 | 2020-01-07 00:00:00 | no | | | | | | in\_status\_starting\_ts | timestamp without time zone | Inside this 15m window, what time did the agent enter this status. | 2020-01-08T19:32:38.352000+00:00 | | | 2018-10-01 00:00:00 | 2018-10-01 00:00:00 | no | | | | | | linear\_ute\_time | double precision | Time in seconds the agent spent handling at least one issue in this status within this 15-minute time window. | 253.34, 0.0, 5.046 | | | 2019-03-05 00:00:00 | 2019-03-05 00:00:00 | no | | | | | | cumul\_ute\_time | double precision | The collective time in seconds the agent spent handling all issues in this status within this 15-minute time window. This time may exceed the status time due to concurrency slots. | 498.82, 0.0, 0.428 | | | 2019-03-05 00:00:00 | 2019-03-05 00:00:00 | no | | | | | | unutilized\_time | double precision | The time in seconds the agent spent not handling any issues in this status within this 15-minute time window. | 37.60, 0.0 | | | 2019-03-05 00:00:00 | 2019-03-05 00:00:00 | no | | | | | | window\_status\_time | double precision | The length of time which the agent was inside this status in seconds. | 0.107, 900.0 | | | 2018-10-01 00:00:00 | 2018-10-01 00:00:00 | no | | | | | | total\_status\_time | double precision | Time in seconds that the agents spent in this status including contiguous time spent outside of this 15-minute time window. | 5.046, 0.107 | | | 2018-10-01 00:00:00 | 2018-10-01 00:00:00 | no | | | | | | max\_slots | integer | The number of issue slots or concurrency values which the rep set for themselves for this window. | 3, 2 | | | 2018-10-01 00:00:00 | 2018-10-01 00:00:00 | no | | | | | | status\_end\_ts | timestamp without time zone | The timestamp at which this agent exited the designated state. Note that this time may be null or after the next instance\_ts, which implies that the agent did not change statuses within this 15-minute window. | 2018-06-10 14:23:00 | | | 2020-01-07 00:00:00 | 2020-01-07 00:00:00 | no | | | | | | rep\_id | varchar(191) | The ASAPP rep/agent identifier. | 123008 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | rep\_name | varchar(191) | The name of this rep. Jane Doe | John | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-11-01 00:00:00 | 2024-05-24 00:00:00 | no | | | | | | desk\_mode | varchar(191) | The mode of the desktop which the agent is logged into. Modes include CHAT or VOICE. | 'CHAT', 'VOICE' | | | 2019-12-10 00:00:00 | 2019-12-10 00:00:00 | no | | | | | | last\_dispositioned\_ts | timestamp | Timestamp at which rep gets unassigned for a given rep status started at a given time | 2018-06-10 14:24:00 | | | 2024-05-29 00:00:00 | 2024-05-29 00:00:00 | no | | | | | ### Table: rep\_assignment\_disposition This view contains information relating to rep-disposition responses. **Sync Time:** 1h **Unique Condition:** company\_id, issue\_id, rep\_id, rep\_assigned\_ts | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :--------------------------------------------- | :-------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | company\_id | bigint | DEPRECATED 2024-03-25 | 10001 | | | 2020-09-03 00:00:00 | 2020-09-03 00:00:00 | no | | | | | | issue\_id | bigint | The ASAPP issue or conversation id. | 21352352 | | | 2020-09-03 00:00:00 | 2020-09-03 00:00:00 | no | | | | | | rep\_id | varchar(191) | The ASAPP rep/agent identifier. | 123008 | | | 2020-09-03 00:00:00 | 2020-09-03 00:00:00 | no | | | | | | rep\_assigned\_ts | timestamp without time zone | The timestamp at which the issue was assigned to the rep. | | | | 2020-09-03 00:00:00 | 2020-09-03 00:00:00 | no | | | | | | disposition\_event | character varying(65535) | The event type associated with the disposition event | | | | 2020-09-03 00:00:00 | 2020-09-03 00:00:00 | no | | | | | | disposition\_notes\_txt | character varying(65535) | Disposition notes associated with the disposition event | | | | 2020-09-03 00:00:00 | 2020-09-03 00:00:00 | no | | | | | | disposition\_notes\_valid | boolean | Boolean value to indicate if the notes are different than blank or null. | | | | 2020-09-03 00:00:00 | 2020-09-03 00:00:00 | no | | | | | | crm\_offered\_ts | timestamp without time zone | Timestamp of the last CRM offered event. | | | | 2020-09-03 00:00:00 | 2020-09-03 00:00:00 | no | | | | | | crm\_outcome\_ts | timestamp without time zone | Timestamp of the last CRM outcome event. | | | | 2020-09-03 00:00:00 | 2020-09-03 00:00:00 | no | | | | | | crm\_is\_success | boolean | Boolean value to indicate if the disposition event is successfully sent to partner CRM | | | | 2020-09-03 00:00:00 | 2020-09-03 00:00:00 | no | | | | | | crm\_error\_type | character varying(65535) | This field indicates the type of an error occured in the pipeline. | | | | 2020-09-03 00:00:00 | 2020-09-03 00:00:00 | no | | | | | | crm\_error\_source | character varying(65535) | This field indicates where in the pipeline the event is failed to publish. | | | | 2020-09-03 00:00:00 | 2020-09-03 00:00:00 | no | | | | | | presented\_tags | character varying(65535) | Unique list of all summary tags presented to agent for this assignment. | | | | 2020-09-03 00:00:00 | 2020-09-03 00:00:00 | no | | | | | | selected\_tags | character varying(65535) | Unique list of all summary tags selected by agent for this assignment. | | | | 2020-09-03 00:00:00 | 2020-09-03 00:00:00 | no | | | | | | notes\_presented\_tags | character varying(65535) | Unique list of the summary tags presented to agent at the OTF NOTES state for this assignment. | | | | 2020-09-03 00:00:00 | 2020-09-03 00:00:00 | no | | | | | | notes\_selected\_tags | character varying(65535) | Unique list of the summary tags selected by agent at the OTF NOTES state for this assignment. | | | | 2020-09-03 00:00:00 | 2020-09-03 00:00:00 | no | | | | | | assignment\_end\_presented\_tags | character varying(65535) | Unique list of the summary tags presented to agent at the end of assignment state. | | | | 2020-09-03 00:00:00 | 2020-09-03 00:00:00 | no | | | | | | assignment\_end\_selected\_tags | character varying(65535) | Unique list of the summary tags selected by agent at the end of assignment state. | | | | 2020-09-03 00:00:00 | 2020-09-03 00:00:00 | no | | | | | | presented\_tags\_ct\_distinct | bigint | Distinct count of all summary tags presented to agent for this assignment. | | | | 2020-09-03 00:00:00 | 2020-09-03 00:00:00 | no | | | | | | selected\_tags\_ct\_distinct | bigint | Distinct count of all summary tags selected by agent for this assignment. | | | | 2020-09-03 00:00:00 | 2020-09-03 00:00:00 | no | | | | | | notes\_presented\_tags\_ct\_distinct | bigint | Distinct count of the summary tags presented to agent at the OTF NOTES state for this assignment. | | | | 2020-09-03 00:00:00 | 2020-09-03 00:00:00 | no | | | | | | notes\_selected\_tags\_ct\_distinct | bigint | Distinct count of the summary tags selected by agent at the OTF NOTES state for this assignment. | | | | 2020-09-03 00:00:00 | 2020-09-03 00:00:00 | no | | | | | | assignment\_end\_presented\_tags\_ct\_distinct | bigint | Distinct count of the summary tags presented to agent at the end of assignment state. | | | | 2020-09-03 00:00:00 | 2020-09-03 00:00:00 | no | | | | | | assignment\_end\_selected\_tags\_ct\_distinct | bigint | Distinct count of the summary tags selected by agent at the end of assignment state. | | | | 2020-09-03 00:00:00 | 2020-09-03 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2020-09-03 00:00:00 | 2020-09-03 00:00:00 | no | | | | | | auto\_summary\_txt | character varying(65535) | Text of the automatic generative summary of this assignment, if applicable. Note that this field will be null of no auto summary could be found or if the feature is not enabled. | | | | 2023-02-16 00:00:00 | 2023-02-16 00:00:00 | no | | | | | ### Table: rep\_attributes The rep attributes table contains various data associated with a rep such as their given role. This table may not exist or may be empty if the client chooses to use rep\_hierarchy instead. This is a daily snapshot of information. **Sync Time:** 1d **Unique Condition:** rep\_attribute\_id, rep\_id, created\_ts | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :------------------- | :---------------------- | :------------------------------------------------------- | :----------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | created\_ts | timestamp | The date this agent was created. | 2019-06-24T18:02:05+00:00 | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | agent\_id | bigint | deprecated: 2019-09-25 | 123008 | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | attribute\_name | character varying(64) | The attribute key value. | role, companygroup, jobcode | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | attribute\_value | character varying(1024) | The attribute value associated with the attribute\_name. | manager, representative, lead | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | agent\_attribute\_id | | deprecated: 2019-09-25 | | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | external\_agent\_id | varchar(255) | deprecated: 2019-09-25 | 347bdddb-d3a1-45fc-bbcd-dbd3a175fc1c | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | rep\_id | varchar(191) | The ASAPP rep/agent identifier. | 123008 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | rep\_attribute\_id | bigint | The ASAPP identifier for this attribute. | 1200001 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | external\_rep\_id | varchar(255) | Client-provided identifier for the rep. | 347bdddb-d3a1-45fc-bbcd-dbd3a175fc1c | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-11-01 00:00:00 | 2024-05-24 00:00:00 | no | | | | | ### Table: rep\_augmentation The rep\_augmentation table tracks a specific issue and rep; and calculates metrics on augmentation types and counts of usages of augmentation. This table will allow billing for the augmentation feature per each issue. **Sync Time:** 1h **Unique Condition:** issue\_id | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :-------------------------------------- | :----------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | instance\_ts | timestamp | The time window of computed elements. This window is usually 15 minutes or 1 hour depending on the generation time. Times are rounded down to the nearest interval (for a time of 12:34 and an interval of 15m, this is 12:30). As an example, for a 15 minute interval an instance\_ts of 12:30 implies events from 12:30 -> 12:45. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | 2018-11-27 00:00:00 | 2018-11-27 00:00:00 | no | | | | | | conversation\_id | bigint | deprecated: 2019-09-25 | 21352352 | | | 2018-11-27 00:00:00 | 2018-11-27 00:00:00 | no | | | | | | company\_id | bigint | DEPRECATED 2024-03-25 | 10001 | | | 2018-11-27 00:00:00 | 2018-11-27 00:00:00 | no | | | | | | company\_subdivision | varchar(255) | String identifier for the company subdivision associated with the conversation. | ACMEsubcorp | | | 2018-11-27 00:00:00 | 2018-11-27 00:00:00 | no | | | | | | company\_segments | varchar(255) | String with comma separated segments for the company enclosed by square brackets. | marketing,promotions | | | 2018-11-27 00:00:00 | 2018-11-27 00:00:00 | no | | | | | | customer\_id | bigint | The ASAPP internal customer identifier. | 123008 | | | 2018-11-27 00:00:00 | 2018-11-27 00:00:00 | no | | | | | | agent\_id | bigint | deprecated: 2019-09-25 | 123008 | | | 2018-11-27 00:00:00 | 2018-11-27 00:00:00 | no | | | | | | external\_customer\_id | varchar(255) | The customer identifier as provided by the client. | | | | 2018-11-27 00:00:00 | 2018-11-27 00:00:00 | no | | | | | | conversation\_end\_ts | timestamp | Timestamp when the conversation ended. | 2018-06-23 21:23:53 | | | 2018-11-27 00:00:00 | 2018-11-27 00:00:00 | no | | | | | | auto\_suggest\_msgs | bigint | The number of autosuggest prompts used by the rep. | 3 | | | 2018-11-27 00:00:00 | 2018-11-27 00:00:00 | no | | | | | | auto\_complete\_msgs | bigint | The number of autocompletion prompts used by the rep. | 2 | | | 2018-11-27 00:00:00 | 2018-11-27 00:00:00 | no | | | | | | did\_customer\_timeout | boolean | Boolean value indicating whether the customer timed out. | false, true | | | 2018-11-27 00:00:00 | 2018-11-27 00:00:00 | no | | | | | | is\_rep\_resolved | boolean | Boolean value indicating whether the rep marked this conversation resolved. | true, false | | | 2018-11-27 00:00:00 | 2018-11-27 00:00:00 | no | | | | | | is\_billable | boolean | Boolean value indicating whether the rep marked the conversation resolved after using autocomplete or autosuggest. | true, false | | | 2018-11-27 00:00:00 | 2018-11-27 00:00:00 | no | | | | | | custom\_auto\_suggest\_msgs | bigint | The number of custom autocompletion prompts used by the rep (is a subset of auto\_suggest\_msgs). | 2 | | | 2019-09-25 00:00:00 | 2019-09-25 00:00:00 | no | | | | | | custom\_auto\_complete\_msgs | bigint | The number of custom autosuggest prompts used by the rep (is a subset of auto\_complete\_msgs). | 2 | | | 2019-09-25 00:00:00 | 2019-09-25 00:00:00 | no | | | | | | drawer\_msgs | bigint | The number of custom drawer messages used by the rep. | 2 | | | 2019-09-25 00:00:00 | 2019-09-25 00:00:00 | no | | | | | | kb\_search\_msgs | bigint | The number of messages used from knowledge base search. | 2 | | | 2019-09-25 00:00:00 | 2019-09-25 00:00:00 | no | | | | | | kb\_recommendation\_msgs | bigint | The number of messages used from knowledge base recommendations. | 2 | | | 2019-09-25 00:00:00 | 2019-09-25 00:00:00 | no | | | | | | issue\_id | bigint | The ASAPP issue or conversation id. | 21352352 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | rep\_id | varchar(191) | Last rep\_id that worked on this issue. | 123008 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-11-01 00:00:00 | 2024-05-24 00:00:00 | no | | | | | | is\_autopilot\_timeout\_msgs | | Number of autopilot timeout messages. | 2 | | | 2020-06-11 00:00:00 | 2020-06-11 00:00:00 | no | | | | | | phrase\_auto\_complete\_presented\_msgs | integer | Count of utterances where at least one phrase autocomplete was suggested/presented. | | | | 2020-06-24 00:00:00 | 2020-06-24 00:00:00 | no | | | | | | cume\_phrase\_auto\_complete\_presented | integer | Total number of phrase autocomplete suggestions per issue. | | | | 2020-06-24 00:00:00 | 2020-06-24 00:00:00 | no | | | | | | phrase\_auto\_complete\_msgs | integer | Count of utterances where at least one phrase autocomplete was accepted/sent. | | | | 2020-06-24 00:00:00 | 2020-06-24 00:00:00 | no | | | | | | cume\_phrase\_auto\_complete | integer | Total number of phrase autocompletes per issue. | | | | 2020-06-24 00:00:00 | 2020-06-24 00:00:00 | no | | | | | | exclusive\_phrase\_auto\_complete\_msgs | integer | Count of utterances where at least one phrase autocomplete was accepted/sent and no other augmentation was used. | | | | 2020-06-24 00:00:00 | 2020-06-24 00:00:00 | no | | | | | ### Table: rep\_convos The rep\_convos table captures metrics associated with a rep and an issue. Expected metrics include "average response time", "cumulative customer response time", "disposition type" and "handle time". This data is captured in 15 minute window increments. **Sync Time:** 1h **Unique Condition:** issue\_id, rep\_id, issue\_assigned\_ts | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :-------------------------------------- | :-------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | instance\_ts | timestamp | The time window of computed elements. This window is usually 15 minutes or 1 hour depending on the generation time. Times are rounded down to the nearest interval (for a time of 12:34 and an interval of 15m, this is 12:30). As an example, for a 15 minute interval an instance\_ts of 12:30 implies events from 12:30 -> 12:45. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | 2018-09-01 00:00:00 | 2018-09-01 00:00:00 | no | | | | | | conversation\_id | bigint | deprecated: 2019-09-25 | 21352352 | | | 2018-09-01 00:00:00 | 2018-09-01 00:00:00 | no | | | | | | agent\_id | bigint | deprecated: 2019-09-25 | 123008 | | | 2018-09-01 00:00:00 | 2018-09-01 00:00:00 | no | | | | | | company\_subdivision | varchar(255) | String identifier for the company subdivision associated with the conversation. | ACMEsubcorp | | | 2018-09-01 00:00:00 | 2018-09-01 00:00:00 | no | | | | | | company\_segments | varchar(255) | String with comma separated segments for the company enclosed by square brackets. | marketing,promotions | | | 2018-09-01 00:00:00 | 2018-09-01 00:00:00 | no | | | | | | issue\_assigned\_ts | timestamp without time zone | The time when an issue was first assigned to this rep. | 2019-10-31T18:37:37.848000+00:00 | | | 2018-09-01 00:00:00 | 2018-09-01 00:00:00 | no | | | | | | agent\_first\_response\_ts | | deprecated: 2019-09-25 | | | | 2018-09-01 00:00:00 | 2018-09-01 00:00:00 | no | | | | | | dispositioned\_ts | timestamp | The time when the issue left the rep's screen. | 2019-10-31T18:46:39.869000+00:00 | | | 2018-09-01 00:00:00 | 2018-09-01 00:00:00 | no | | | | | | customer\_end\_ts | timestamp without time zone | The time at which the customer ended the issue. This may be NULL. | 2019-10-31T18:46:12.559000+00:00 | | | 2018-09-01 00:00:00 | 2018-09-01 00:00:00 | no | | | | | | disposition\_event\_type | varchar(255) | Event type indicating how the conversation ended. | rep, customer, batch (system/auto ended), batch | | | 2018-09-01 00:00:00 | 2018-09-01 00:00:00 | no | | | | | | cust\_utterance\_count | bigint | The count of customer utterances from issue\_assigned\_ts to dispositioned\_ts. | 5 | | | 2018-09-01 00:00:00 | 2018-09-01 00:00:00 | no | | | | | | rep\_utterance\_count | bigint | The count of rep utterances from issue\_assigned\_ts to dispositioned\_ts. | 5 | | | 2018-09-01 00:00:00 | 2018-09-01 00:00:00 | no | | | | | | handle\_time\_seconds | double precision | Total time in seconds that reps spent handling the issue, from assignment to disposition. | 428.9 | | | 2019-03-19 00:00:00 | 2019-03-20 00:00:00 | no | | | | | | lead\_time\_seconds | double precision | Total time in seconds the customer spent interacting during the conversation, from assignment to last utterance. | 320.05 | | | 2019-03-19 00:00:00 | 2019-03-20 00:00:00 | no | | | | | | wrap\_up\_time\_seconds | double precision | Total time in seconds spent by reps wrapping up the conversation, calculated as the difference between handle and lead time. | 3.614 | | | 2019-03-19 00:00:00 | 2019-03-20 00:00:00 | no | | | | | | rep\_response\_ct | int | The total count of responses by the rep. Max of one message following a customer message counted as a response. | 5 | | | 2019-05-17 00:00:00 | 2019-05-17 00:00:00 | no | | | | | | cust\_response\_ct | int | The total count of responses by the customer. Max of one message following a rep message counted as a response. | 12 | | | 2019-05-17 00:00:00 | 2019-05-17 00:00:00 | no | | | | | | auto\_suggest\_msgs | bigint | The number of autosuggest prompts used by the rep (inclusive of custom\_auto\_suggest\_msgs). | 5 | | | 2019-07-29 00:00:00 | 2019-07-29 00:00:00 | no | | | | | | auto\_complete\_msgs | bigint | The number of autocompletion prompts used by the rep (inclusive of custom\_auto\_complete\_msgs). | 5 | | | 2019-07-29 00:00:00 | 2019-07-29 00:00:00 | no | | | | | | custom\_auto\_suggest\_msgs | bigint | The number of custom autocompletion prompts used by the rep (is a subset of auto\_suggest\_msgs). | 2 | | | 2019-09-25 00:00:00 | 2019-09-25 00:00:00 | no | | | | | | custom\_auto\_complete\_msgs | bigint | The number of custom autosuggest prompts used by the rep (is a subset of auto\_complete\_msgs). | 2 | | | 2019-09-25 00:00:00 | 2019-09-25 00:00:00 | no | | | | | | drawer\_msgs | bigint | The number of custom drawer messages used by the rep. | 2 | | | 2019-09-25 00:00:00 | 2019-09-25 00:00:00 | no | | | | | | kb\_search\_msgs | bigint | The number of messages used by the rep from the knowledge base searches. | 2 | | | 2019-09-25 00:00:00 | 2019-09-25 00:00:00 | no | | | | | | kb\_recommendation\_msgs | bigint | The number of messages used by the rep from the knowledge base recommendations. | 2 | | | 2019-09-25 00:00:00 | 2019-09-25 00:00:00 | no | | | | | | is\_ghost\_customer | boolean | Boolean value indicating if the customer was assigned a rep but never responded. | true, false | | | 2019-05-17 00:00:00 | 2019-05-17 00:00:00 | no | | | | | | first\_response\_seconds | bigint | The total time taken by the rep to send the first message, once the message was assigned. | 26.148 | | | 2019-05-17 00:00:00 | 2019-05-17 00:00:00 | no | | | | | | cume\_rep\_response\_seconds | bigint | The total time across the assignment for the rep to send response messages. | 53.243 | | | 2019-05-17 00:00:00 | 2019-05-17 00:00:00 | no | | | | | | max\_rep\_response\_seconds | double precision | The maximum time across the assignment for the rep to send a response message. | 77.965 | | | 2019-05-17 00:00:00 | 2019-05-17 00:00:00 | no | | | | | | avg\_rep\_response\_seconds | double precision | The average time across assignment for the rep to send response messages. | 22.359 | | | 2019-05-17 00:00:00 | 2019-05-17 00:00:00 | no | | | | | | cume\_cust\_response\_seconds | bigint | The total time across the assignment for the customer to send response messages. | 332.96 | | | 2019-05-17 00:00:00 | 2019-05-17 00:00:00 | no | | | | | | issue\_id | bigint | The ASAPP issue or conversation id. | 21352352 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | rep\_id | varchar(191) | The ASAPP rep/agent identifier. | 123008 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | rep\_first\_response\_ts | datetime | The time when a rep first responded to the customer. | 2019-10-31T18:38:03.996000+00:00 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | hold\_ct | bigint | The total count that this rep was part of a hold call. This field is not applicable to chat. | 1 | | | 2019-11-19 00:00:00 | 2019-11-19 00:00:00 | no | | | | | | cume\_hold\_time\_seconds | double precision | The total duration of time the rep placed the customer on hold across the call. This field is not applicable to chat. 93.30 | | | | 2019-11-19 00:00:00 | 2019-11-19 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-11-01 00:00:00 | 2024-05-24 00:00:00 | no | | | | | | client\_mode | varchar(191) | The communication mode used by the customer for a given issue (CHAT or VOICE). | CHAT, VOICE | | | 2019-12-10 00:00:00 | 2019-12-10 00:00:00 | no | | | | | | cume\_cross\_talk\_seconds | numeric(38,5) | Total duration of time where both agent and customer were speaking. Only relevant for voice client mode. | | | | 2019-12-28 00:00:00 | 2019-12-28 00:00:00 | no | | | | | | desk\_mode\_flag | bigint | Bitmap encodes if agent handled voice-issue ASAPP desk, had engagement with ASAPP desk. bitmap: 0: null, 1: 'VOICE', 2: 'DESK', 4: 'ENGAGEMENT', 8: 'INACTIVITY' NULL for non voice issues | 0, 1, 2, 5, 7 | | | 2020-02-19 00:00:00 | 2020-02-19 00:00:00 | no | | | | | | desk\_mode\_string | varchar(191) | Decodes the desk\_mode flag. Current possible values (Null, 'VOICE', 'VOICE\_DESK', 'VOICE\_DESK\_ENGAGEMENT','VOICE\_INACTIVITY'). NULL for non voice issues. | VOICE\_DESK | | | 2020-02-19 00:00:00 | 2020-02-19 00:00:00 | no | | | | | | queue\_id | integer | The ASAPP queue identifier which the issue was placed. | 20001 | | | 2021-04-08 00:00:00 | 2021-04-08 00:00:00 | no | | | | | | autopilot\_timeout\_msgs | integer | Number of autopilot timeout messages. | 2 | | | 2021-08-02 00:00:00 | 2021-08-02 00:00:00 | no | | | | | | exclusive\_phrase\_auto\_complete\_msgs | integer | Count of utterances where at least one phrase autocomplete was accepted/sent and no other augmentation was used. | | | | 2021-08-02 00:00:00 | 2021-08-02 00:00:00 | no | | | | | | custom\_click\_to\_insert\_msgs | integer | Total count of custom click\_to\_insert messages. | | | | 2021-08-02 00:00:00 | 2021-08-02 00:00:00 | no | | | | | | ms\_auto\_suggest\_msgs | integer | Total count of multi-sentence auto-suggest messages. | | | | 2021-08-02 00:00:00 | 2021-08-02 00:00:00 | no | | | | | | ms\_auto\_complete\_msgs | integer | Total count of multi-sentence auto-complete messages. | | | | 2021-08-02 00:00:00 | 2021-08-02 00:00:00 | no | | | | | | ms\_auto\_suggest\_custom\_msgs | integer | Total count of custom multi-sentence auto-suggest messages. | | | | 2021-08-02 00:00:00 | 2021-08-02 00:00:00 | no | | | | | | ms\_auto\_complete\_custom\_msgs | integer | Total count of custom multi-sentence auto-complete messages. | | | | 2021-08-02 00:00:00 | 2021-08-02 00:00:00 | no | | | | | | autopilot\_form\_msgs | bigint | Number of autopilot form messages. | 2 | | | 2021-08-02 00:00:00 | 2021-08-02 00:00:00 | no | | | | | | click\_to\_insert\_global\_msgs | integer | Number of click to insert messages. | 2 | | | 2023-02-15 00:00:00 | 2023-02-15 00:00:00 | no | | | | | | autopilot\_greeting\_msgs | bigint | Number of autopilot greeting messages. | 2 | | | 2023-02-15 00:00:00 | 2023-02-15 00:00:00 | no | | | | | | augmented\_msgs | bigint | Number of augmented messages. | 2 | | | 2023-02-22 00:00:00 | 2023-02-22 00:00:00 | no | | | | | | autopilot\_ending\_msgs\_ct | integer | Number of autopilot endings | 2 | | | 2024-04-19 00:00:00 | 2024-04-19 00:00:00 | no | | | | | ### Table: rep\_hierarchy The rep\_hierarchy table contains the rep and their direct reports and their manager. This is a daily snapshot of rep hierarchy information. This table may be empty and if empty, then consult rep\_attributes. **Sync Time:** 1d **Unique Condition:** subordinate\_rep\_id, superior\_rep\_id | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :---------------------- | :---------------------- | :------------------------------------------------------------------------------------------------------- | :----------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | subordinate\_agent\_id | | deprecated: 2019-09-25 | | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | superior\_agent\_id | | deprecated: 2019-09-25 | | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | reporting\_relationship | character varying(1024) | Relationship between subordinate and superior reps, e.g. "superiors\_superior" for skip-level reporting. | superior, superiors\_superior | | | 2018-08-14 00:00:00 | 2018-08-14 00:00:00 | no | | | | | | subordinate\_rep\_id | bigint | ASAPP rep identifier that is the subordinate of the superior\_rep\_id. | 110001 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | superior\_rep\_id | bigint | Superior rep id that is the superior of the subordinate\_rep\_id. | 20001 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-11-01 00:00:00 | 2024-05-24 00:00:00 | no | | | | | ### Table: rep\_utilized The rep\_utilized table tracks a rep's activity and how much time they spend in each state. It shows utilization time and total minutes per state, recorded in 15-minute intervals throughout the day. The instance\_ts field represents the 15-minute window and is part of the primary key. It doesn’t show the most recent event like in other tables. The data may be updated if later information changes it, such as adding more utilization time. Utilization refers to the rep’s efficiency. **Sync Time:** 1h **Unique Condition:** instance\_ts, rep\_id, desk\_mode, max\_slots, company\_marker | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :------------------------------------------- | :----------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | instance\_ts | timestamp | The start of the 15-minute time window under observation. As an example, for a 15 minute interval an instance\_ts of 12:30 implies activity from 12:30 to 12:45. | 2019-11-08 14:00:00 | | | 2019-03-11 00:00:00 | 2019-03-11 00:00:00 | no | | | | | | update\_ts | | Timestamp at which the last event for this record occurred - usually the last status end or conversation end that was active in this window deprecated: 2020-11-09 | 2019-06-10 14:24:00 | | | 2020-01-29 00:00:00 | 2020-01-29 00:00:00 | no | | | | | | export\_ts | | The end of the time window for which this record was exported. | 2019-06-10 14:30:00 | | | 2020-01-29 00:00:00 | 2020-01-29 00:00:00 | no | | | | | | company\_id | bigint | The ASAPP identifier of the company or test data source. | 10001 | | | 2019-03-11 00:00:00 | 2019-03-11 00:00:00 | no | | | | | | company\_subdivision | varchar(255) | Relates to the customer issue, not relevant to reps. Intentionally left blank. | ACMEsubcorp | | | 2019-03-11 00:00:00 | 2019-03-11 00:00:00 | no | | | | | | company\_segments | varchar(255) | Relates to the customer issue, not relevant to reps. Intentionally left blank. | marketing,promotions | | | 2019-03-11 00:00:00 | 2019-03-11 00:00:00 | no | | | | | | rep\_id | varchar(191) | The ASAPP rep/agent identifier. | 123008 | | | 2019-03-11 00:00:00 | 2019-03-11 00:00:00 | no | | | | | | rep\_name | varchar(191) | The name of the rep. | John Doe | | | 2019-03-11 00:00:00 | 2019-03-11 00:00:00 | no | | | | | | max\_slots | integer | Maximum chat concurrency slots enabled for this rep. | 2 | | | 2019-03-11 00:00:00 | 2019-03-11 00:00:00 | no | | | | | | cum\_logged\_in\_min | bigint | Cumulative Logged In Time (min) -- Total cumulative time (linear time x max slots) the rep logged into tthe agent desktop. | 120 | | | 2019-03-11 00:00:00 | 2019-03-11 00:00:00 | no | | | | | | lin\_logged\_in\_min | bigint | Linear Logged In Time (min) -- Total linear time rep logged into agent desktop. | 60 | | | 2019-03-11 00:00:00 | 2019-03-11 00:00:00 | no | | | | | | cum\_avail\_min | bigint | Cumulative Available Time (min) -- Total cumulative time (linear time x max slots) the rep logged into agent desktop while in the "Available" state. | 90 | | | 2019-03-11 00:00:00 | 2019-03-11 00:00:00 | no | | | | | | lin\_avail\_min | bigint | Linear Available Time (min) -- Total linear time the rep logged into the agent desktop while in the "Available" state. | 45 | | | 2019-03-11 00:00:00 | 2019-03-11 00:00:00 | no | | | | | | cum\_busy\_min | bigint | Cumulative Busy Time (min) -- Total cumulative time (linear time x max slots) the rep logged into agent desktop while in a "Busy" state. | 30 | | | 2019-03-11 00:00:00 | 2019-03-11 00:00:00 | no | | | | | | lin\_busy\_min | bigint | Linear Busy Time (min) -- Total linear time rep logged into agent desktop while in a "Busy" state. | 15 | | | 2019-03-11 00:00:00 | 2019-03-11 00:00:00 | no | | | | | | cum\_prebreak\_min | bigint | Cumulative Busy Time - Pre-Break (min) -- Total cumulative time (linear time x max slots) rep logged into agent desktop while in the Pre-Break vesion of the "Busy" state. | 10 | | | 2019-03-11 00:00:00 | 2019-03-11 00:00:00 | no | | | | | | lin\_prebreak\_min | bigint | Linear Busy Time - Pre-Break (min) -- Total linear time the rep logged into Agent Desktop while in the Pre-Break vesion of Busy state | 5.6 | | | 2019-03-11 00:00:00 | 2019-03-11 00:00:00 | no | | | | | | cum\_ute\_total\_min | bigint | Cumulative Utilized Time (min) -- Total cumulative time (linear time x active slots) the rep logged into agent desktop and utilized over all states. | 27.71 | | | 2019-03-11 00:00:00 | 2019-03-11 00:00:00 | no | | | | | | lin\_ute\_total\_min | bigint | Linear Utilized Time (min) -- Total linear time rep logged into agent desktop and utilized over all states. | 5.5 | | | 2019-03-11 00:00:00 | 2019-03-11 00:00:00 | no | | | | | | cum\_ute\_avail\_min | bigint | Cumulative Utilized Time While Available (min) -- Total cumulative time (linear time x active slots) rep logged into agent desktop and utilized while in the "Available" state. | 11.5 | | | 2019-03-11 00:00:00 | 2019-03-11 00:00:00 | no | | | | | | lin\_ute\_avail\_min | bigint | Linear Utilized Time While Available (min) -- Total linear time rep logged into agent desktop and utilized while in the "Available" state. | 5.93 | | | 2019-03-11 00:00:00 | 2019-03-11 00:00:00 | no | | | | | | cum\_ute\_busy\_min | bigint | Cumulative Busy Time - While Chatting (min) -- Total cumulative time (linear time x active slots) rep logged into agent desktop while in a Busy state and handling at least one assignment. | 7.38 | | | 2019-03-11 00:00:00 | 2019-03-11 00:00:00 | no | | | | | | lin\_ute\_busy\_min | bigint | Linear Utilized Time While Busy (min) -- Total linear time rep logged into agent desktop while in a Busy state and handling at least one assignment. | 3.44 | | | 2019-03-11 00:00:00 | 2019-03-11 00:00:00 | no | | | | | | cum\_ute\_prebreak\_min | bigint | Cumulative Utilized Time While Busy Pre-Break (min) -- Cumulative time rep logged into agent desktop and utilized while in the "Pre-Break Busy" state. | 5.35 | | | 2019-03-11 00:00:00 | 2019-03-11 00:00:00 | no | | | | | | lin\_ute\_prebreak\_min | bigint | Linear Utilized Time While Busy Pre-Break (min) -- Linear time rep logged into agent desktop and utilized while in the "Pre-Break Busy" state. | 3.65 | | | 2019-03-11 00:00:00 | 2019-03-11 00:00:00 | no | | | | | | labor\_min | bigint | Total linear time rep logged into agent desktop in the available state, plus cumulative time rep was handling issues in any "Busy" state. | 18.44 | | | 2019-03-11 00:00:00 | 2019-03-11 00:00:00 | no | | | | | | busy\_clicks\_ct | bigint | Busy Clicks -- Number of times the rep moved from an active to a busy state. | 1 | | | 2019-05-10 00:00:00 | 2019-05-10 00:00:00 | no | | | | | | ute\_ratio | | Utilization ratio - cumulative utilized time divided by linear total potential labor time. | 1.71 | | | 2019-03-11 00:00:00 | 2019-03-11 00:00:00 | no | | | | | | act\_ratio | | Active utilization ratio - cumulative utilized time in the available state divided by total labor time. | 1.67 | | | 2019-03-11 00:00:00 | 2019-03-11 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-11-01 00:00:00 | 2025-01-27 00:00:00 | no | | | | | | desk\_mode | varchar(191) | The mode of the desktop that the agent is logged into - whether CHAT or VOICE. | 'CHAT', 'VOICE' | | | 2019-12-10 00:00:00 | 2019-12-10 00:00:00 | no | | | | | | lin\_utilization\_level\_over\_min | bigint | Total linear time in minutes when rep has no assignment Total linear time in minute when rep's assignments is greater than rep's max slot | 120 | | | 2020-11-09 00:00:00 | 2020-11-09 00:00:00 | no | | | | | | lin\_utilization\_level\_full\_min | bigint | Total linear time in minute when rep's assignments is equal to rep's max slot | 120 | | | 2020-11-09 00:00:00 | 2020-11-09 00:00:00 | no | | | | | | lin\_utilization\_level\_light\_min | bigint | Total linear time in minute when rep's assignments is less than rep's max slot | 120 | | | 2020-11-09 00:00:00 | 2020-11-09 00:00:00 | no | | | | | | workload\_level\_no\_min | bigint | Total time in minute when rep has no active assignment | 120 | | | 2020-11-09 00:00:00 | 2020-11-09 00:00:00 | no | | | | | | workload\_level\_over\_min | bigint | Total time in minute when rep's active assignment is greater than rep's max slot | 120 | | | 2020-11-09 00:00:00 | 2020-11-09 00:00:00 | no | | | | | | workload\_level\_full\_min | bigint | Total time in minute when rep's active assignment is equal to rep's max slot | 120 | | | 2020-11-09 00:00:00 | 2020-11-09 00:00:00 | no | | | | | | workload\_level\_light\_min | bigint | Total time in minute when rep's active assignment is less than rep's max slot | 120 | | | 2020-11-09 00:00:00 | 2020-11-09 00:00:00 | no | | | | | | flex\_protect\_min | bigint | Total time in minute when rep is flex protected | 120 | | | 2020-11-09 00:00:00 | 2020-11-09 00:00:00 | no | | | | | | cum\_weighted\_min | | | | | | 2019-03-11 00:00:00 | 2019-03-11 00:00:00 | no | | | | | | cum\_weighted\_seconds | bigint | Total effort\_workload when a rep has active assignments | 10 | | | 2019-03-11 00:00:00 | 2019-03-11 00:00:00 | no | | | | | | cum\_ute\_weighted\_avail\_unflexed\_seconds | bigint | Total time weighted in seconds when a rep is available | 160 | | | 2019-03-11 00:00:00 | 2019-03-11 00:00:00 | no | | | | | | cum\_weighted\_inactive\_seconds | bigint | Total effort\_workload when a rep has no active assignments | 10 | | | 2019-03-11 00:00:00 | 2019-03-11 00:00:00 | no | | | | | ### Table: sms\_events Exports for each 15 min window of SMS flow events **Sync Time:** 1h **Unique Condition:** company\_id, sms\_flow\_id | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :---------------------------------- | :-------------------------- | :-------------------------------------------------------------------------------------------- | :---------------------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | sms\_flow\_id | character varying(65535) | The flow identifier. | 019bf9e4-a01a-4420-b419-459659a1b50e | | | 2019-11-08 00:00:00 | 2019-11-08 00:00:00 | no | | | | | | external\_session\_id | character varying(65535) | The session identifier received from the client. | 772766038 | | | 2019-11-08 00:00:00 | 2019-11-08 00:00:00 | no | | | | | | message\_sent\_result | character varying(6) | The status of a SMS request received from the 3rd party SMS provider. | 'Sent' | | | 2019-11-08 00:00:00 | 2019-11-08 00:00:00 | no | | | | | | message\_sent\_result\_status\_code | character varying(65535) | The failure reason received from 3rd party SMS provider. | 30001 (Queue Overflow), 30004 (Message Blocked) | | | 2019-11-08 00:00:00 | 2019-11-08 00:00:00 | no | | | | | | message\_character\_count | integer | The SMS message's character count. | 29 | | | 2019-11-08 00:00:00 | 2019-11-08 00:00:00 | no | | | | | | partner\_triggered\_ts | timestamp without time zone | The date and time in which a partner sends a SMS request to ASAPP. | 2018-03-03 12:23:52 | | | 2019-11-08 00:00:00 | 2019-11-08 00:00:00 | no | | | | | | provider\_sent\_ts | timestamp without time zone | The date and time in which ASAPP sends a SMS request from 3rd party SMS provider. | 2018-03-03 12:23:52 | | | 2019-11-08 00:00:00 | 2019-11-08 00:00:00 | no | | | | | | provider\_status\_ts | timestamp without time zone | The date and time in which the 3rd party SMS provider sends back the status of a SMS request. | 2018-03-03 12:23:52 | | | 2019-11-08 00:00:00 | 2019-11-08 00:00:00 | no | | | | | | company\_subdivision | varchar(255) | String identifier for the company subdivision associated with the conversation. | ACMEsubcorp | | | 2019-11-08 00:00:00 | 2019-11-08 00:00:00 | no | | | | | | company\_segments | varchar(255) | String with comma separated segments for the company enclosed by square brackets. | marketing,promotions | | | 2019-11-08 00:00:00 | 2019-11-08 00:00:00 | no | | | | | | company\_id | bigint | The ASAPP identifier of the company or test data source. | 10001 | | | 2019-11-08 00:00:00 | 2019-11-08 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-11-08 00:00:00 | 2020-03-23 00:00:00 | no | | | | | ### Table: transfers The purpose of the transfers table is to capture information associated with an issue transfer between reps. The data is captured per 15 minute window. **Sync Time:** 1h **Unique Condition:** company\_id, issue\_id, rep\_id, timestamp\_req | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :------------------------------- | :-------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------ | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | instance\_ts | timestamp | The time window of computed elements. This window is usually 15 minutes or 1 hour depending on the generation time. Times are rounded down to the nearest interval (for a time of 12:34 and an interval of 15m, this is 12:30). As an example, for a 15 minute interval an instance\_ts of 12:30 implies events from 12:30 -> 12:45. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | 2018-08-03 00:00:00 | 2018-08-03 00:00:00 | no | | | | | | timestamp\_req | timestamp without time zone | The date and time when the transfer was requested. | 2019-06-11T13:27:09.470000+00:00 | | | 2018-08-03 00:00:00 | 2018-08-03 00:00:00 | no | | | | | | timestamp\_reply | timestamp without time zone | The date and time when the transfer request was received. | 2019-06-11T13:31:58.537000+00:00 | | | 2018-08-03 00:00:00 | 2018-08-03 00:00:00 | no | | | | | | conversation\_id | bigint | deprecated: 2019-09-25 | 21352352 | | | 2018-08-03 00:00:00 | 2018-08-03 00:00:00 | no | | | | | | agent\_id | bigint | deprecated: 2019-09-25 | 123008 | | | 2018-08-03 00:00:00 | 2018-08-03 00:00:00 | no | | | | | | company\_id | bigint | DEPRECATED 2024-03-25 | 10001 | | | 2018-08-04 00:00:00 | 2018-08-04 00:00:00 | no | | | | | | company\_subdivision | varchar(255) | String identifier for the company subdivision associated with the conversation. | ACMEsubcorp | | | 2018-10-04 00:00:00 | 2018-10-04 00:00:00 | no | | | | | | company\_segments | varchar(255) | String with comma separated segments for the company enclosed by square brackets. | marketing,promotions | | | 2018-10-04 00:00:00 | 2018-10-04 00:00:00 | no | | | | | | requested\_agent\_transfer | | deprecated: 2019-09-25 | | | | 2018-08-03 00:00:00 | 2018-08-03 00:00:00 | no | | | | | | group\_transfer\_to | character varying(65535) | The group identifier where the issue was transferred. | 20001 | | | 2018-08-03 00:00:00 | 2018-08-03 00:00:00 | no | | | | | | group\_transfer\_to\_name | character varying(191) | The group name where the issue was transferred. | acme-mobile-eng | | | 2018-08-04 00:00:00 | 2018-08-04 00:00:00 | no | | | | | | group\_transfer\_from | character varying(65535) | The group identifier which transferred the issue. | 87001 | | | 2018-08-04 00:00:00 | 2018-08-04 00:00:00 | no | | | | | | group\_transfer\_from\_name | character varying(191) | The group name which transferred the issue. acme-residential-eng | | | | 2018-08-04 00:00:00 | 2018-08-04 00:00:00 | no | | | | | | actual\_agent\_transfer | | deprecated: 2019-09-25 | | | | 2018-08-03 00:00:00 | 2018-08-03 00:00:00 | no | | | | | | accepted | boolean | A boolean flag indicating whether the transfer was accepted. | true, false | | | 2018-08-03 00:00:00 | 2018-08-03 00:00:00 | no | | | | | | is\_auto\_transfer | boolean | A boolean flag indicating whether this was an auto-transfer. | true, false | | | 2019-07-22 00:00:00 | 2019-07-22 00:00:00 | no | | | | | | exit\_transfer\_event\_type | character varying(65535) | The event type which concluded the transfer. | TRANSFER\_ACCEPTED, CONVERSATION\_END | | | 2019-07-22 00:00:00 | 2019-07-22 00:00:00 | no | | | | | | transfer\_button\_clicks | bigint | The number of times a rep requested a transfer from transfer initiation to when the transfer was received. | 1 | | | 2019-08-22 00:00:00 | 2019-08-22 00:00:00 | no | | | | | | issue\_id | bigint | The ASAPP issue or conversation id. | 21352352 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | rep\_id | varchar(191) | The ASAPP rep/agent identifier. | 123008 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | requested\_rep\_transfer | bigint | The rep which requested the transfer. | 1070001 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | actual\_rep\_transfer | bigint | The rep which received the transfer. | 250001 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-11-01 00:00:00 | 2024-05-24 00:00:00 | no | | | | | | requested\_group\_transfer\_id | bigint | The group identifier where the transfer was initially requested. | 123455 | | | 2019-12-13 00:00:00 | 2019-12-13 00:00:00 | no | | | | | | requested\_group\_transfer\_name | character varying(191) | The group name where the transfer was initially requested. | support | | | 2019-12-13 00:00:00 | 2019-12-13 00:00:00 | no | | | | | | route\_code\_to | varchar(191) | IVR routing code indicating the customer contact reason to which the issue is being transferred into | 2323 | | | 2018-08-03 00:00:00 | 2018-08-03 00:00:00 | no | | | | | | route\_code\_from | varchar(191) | IVR routing code indicating the customer contact reason from the previous assignment | 2323 | | | 2018-08-03 00:00:00 | 2018-08-03 00:00:00 | no | | | | | ### Table: utterances The purpose of the utterances table is to list out each utterance and associated data which was captured during a conversation. This table will include data associated with ongoing conversations which are unended. **Sync Time:** 1h **Unique Condition:** created\_ts, issue\_id, sender\_id | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :------------------- | :-------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | instance\_ts | timestamp | The time window of computed elements. This window is usually 15 minutes or 1 hour depending on the generation time. Times are rounded down to the nearest interval (for a time of 12:34 and an interval of 15m, this is 12:30). As an example, for a 15 minute interval an instance\_ts of 12:30 implies events from 12:30 -> 12:45. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | 2018-07-13 00:00:00 | 2018-07-13 00:00:00 | no | | | | | | created\_ts | timestamp | The date and time which the message was sent. | 2019-12-17T17:11:41.626000+00:00 | | | 2018-07-13 00:00:00 | 2018-07-13 00:00:00 | no | | | | | | conversation\_id | bigint | deprecated: 2019-09-25 | 21352352 | | | 2018-07-13 00:00:00 | 2018-07-13 00:00:00 | no | | | | | | company\_subdivision | varchar(255) | String identifier for the company subdivision associated with the conversation. | ACMEsubcorp | | | 2018-07-13 00:00:00 | 2018-07-13 00:00:00 | no | | | | | | company\_segments | varchar(255) | String with comma separated segments for the company enclosed by square brackets. | marketing,promotions | | | 2018-07-13 00:00:00 | 2018-07-13 00:00:00 | no | | | | | | sequence\_id | integer | deprecated: 2019-09-26 | | | | 2018-07-13 00:00:00 | 2018-07-13 00:00:00 | no | | | | | | sender\_id | bigint | The identifier of the person who sent the message. | | | | 2018-07-13 00:00:00 | 2018-07-13 00:00:00 | no | | | | | | sender\_type | character varying(191) | The type of sender. | customer, bot, rep, rep\_note, rep\_whisper | | | 2018-07-13 00:00:00 | 2018-07-13 00:00:00 | no | | | | | | utterance\_type | character varying(65535) | The type of utterance sent. | autosuggest, autocomplete, script, freehand | | | 2018-07-13 00:00:00 | 2018-07-13 00:00:00 | no | | | | | | sent\_to\_agent | boolean | deprecated: 2019-09-25 | | | | 2018-07-13 00:00:00 | 2018-07-13 00:00:00 | no | | | | | | utterance | character varying(65535) | Text sent from a bot or human (i.e. customer, rep, expert). | 'Upgrade current device', 'Is there anything else we can help you with?' | | | 2018-07-13 00:00:00 | 2018-07-13 00:00:00 | no | | | | | | issue\_id | bigint | The ASAPP issue or conversation id. | 21352352 | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | sent\_to\_rep | | A boolean flag indicating if an utterance was sent from a customer to a rep. | true, false | | | 2019-09-27 00:00:00 | 2019-09-27 00:00:00 | no | | | | | | utterance\_start\_ts | timestamp without time zone | This timestamp marks the time when a person began speaking in the voice platform. In chat platforms or non-voice generated messages, this timestamp will be NULL. | NULL, 2019-10-18T18:45:00+00:00 | | | 2019-12-06 00:00:00 | 2019-12-06 00:00:00 | no | | | | | | utterance\_end\_ts | timestamp without time zone | This timestamp marks the time when a person finished speaking in the voice platform. In chat platforms or non-voice generated messages, this timestamp will be NULL. | NULL, 2019-10-18T18:45:00+00:00 | | | 2019-12-06 00:00:00 | 2019-12-06 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2019-11-01 00:00:00 | 2024-05-24 00:00:00 | no | | | | | | event\_uuid | varchar(36) | A UUID uniquely identifying each utterance record | 347bdddb-d3a1-45fc-bbcd-dbd3a175fc1c | | | 2020-10-23 00:00:00 | 2020-10-23 00:00:00 | no | | | | | ### Table: voice\_intents The voice intents table includes fields that provide visibility to the customer's contact reason for the call **Sync Time:** 1h **Unique Condition:** company\_marker, issue\_id | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :------------------ | :----------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | instance\_ts | timestamp | The time window of computed elements. This window is usually 15 minutes or 1 hour depending on the generation time. Times are rounded down to the nearest interval (for a time of 12:34 and an interval of 15m, this is 12:30). As an example, for a 15 minute interval an instance\_ts of 12:30 implies events from 12:30 -> 12:45. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | 2021-08-10 00:00:00 | 2021-08-10 00:00:00 | no | | | | | | issue\_id | bigint | The ASAPP issue or conversation id. | 21352352 | | | 2021-08-10 00:00:00 | 2021-08-10 00:00:00 | no | | | | | | company\_id | bigint | DEPRECATED 2024-03-25 | 10001 | | | 2021-08-10 00:00:00 | 2021-08-10 00:00:00 | no | | | | | | voice\_intent\_code | varchar(255) | Voice intent code with the highest score associated to the issue | PAYBILL | | | 2021-08-10 00:00:00 | 2021-08-10 00:00:00 | no | | | | | | voice\_intent\_name | varchar(255) | Voice intent name with the highest score associated to the issue | Payment history | | | 2021-08-10 00:00:00 | 2021-08-10 00:00:00 | no | | | | | | company\_name | varchar(255) | Name of the company associated with the data. | acme | | | 2025-01-27 00:00:00 | 2025-01-27 00:00:00 | no | | | | | Last Updated: 2025-03-04 23:55:50 UTC # File Exporter Source: https://docs.asapp.com/reporting/file-exporter Learn how to use File Exporter to retrieve data from Standalone ASAPP Services. Use ASAPP's File Exporter service to securely retrieve AI Services data via API. The service provides a specific link to access the requested data based on the file parameters of the request that include the feed, version, format, date, and time interval of interest. The File Exporter service is meant to be used as a batch mechanism for exporting data to your data warehouse, either on a scheduled basis (e.g. nightly, weekly) or for ad hoc analyses. Data that populates feeds for the File Exporter service updates once daily at 2:00AM UTC. Data feeds are not available by default. Reach out to your ASAPP account contact to ensure data feeds are enabled for your implementation. ## Before You Begin To use ASAPP's APIs, all apps must be registered through the AI Services Developer Portal. Once registered, each app will be provided unique API keys for ongoing use. Get your API credentials and learn how to set up AI Service APIs by visiting our [Developer Quick Start Guide](/getting-started/developers). ## Endpoints The File Exporter service uses six parameters to specify a target file: * `feed`: The name of the data feed of interest * `version`: The version number of the feed * `format`: The file format * `date`: The date of interest * `interval`: The time interval of interest * `fileName`: The data file name Each parameter is retrieved from a dedicated endpoint. Once all parameters are retrieved, the target file is retrieved using the endpoint (`/fileexporter/v1/static/getfeedfile`), which takes these parameters in the request and returns a URL. * `POST` `/fileexporter/v1/static/listfeeds` Use this endpoint to retrieve an array of feed names available for your implementation. * `POST` `/fileexporter/v1/static/listfeedversions` Use this endpoint to retrieve an array of versions available for a given data feed. * `POST` `/fileexporter/v1/static/listfeedformats` Use this endpoint to retrieve an array of available file formats for a given feed and version. * `POST` `/fileexporter/v1/static/listfeeddates` Use this endpoint to retrieve an array of available dates for a given feed/version/format. * `POST` `/fileexporter/v1/static/listfeedintervals` Use this endpoint to retrieve an array of available intervals for a given feed/version/format/date. * `POST` `/fileexporter/v1/static/listfeedfiles` Use this endpoint to retrieve an array of file names for a given feed/version/format/date/interval. * `POST` `/fileexporter/v1/static/getfeedfile` Use this endpoint to retrieve a single file URL for the data specified using parameters returned from the above endpoints. Values for `file` will differ based on the requested `date` and `interval` parameters. Always call this endpoint prior to calling `/getfeedfile`. In the `getfeedfile` request, all parameters are required except `interval` ### Endpoint List 1. `POST /fileexporter/v1/static/listfeeds` Retrieve an array of feed names available for your implementation. 2. `POST /fileexporter/v1/static/listfeedversions` Retrieve an array of versions available for a given data feed. 3. `POST /fileexporter/v1/static/listfeedformats` Retrieve an array of available file formats for a given feed and version. 4. `POST /fileexporter/v1/static/listfeeddates` Retrieve an array of available dates for a given feed/version/format. 5. `POST /fileexporter/v1/static/listfeedintervals` Retrieve an array of available intervals for a given feed/version/format/date. 6. `POST /fileexporter/v1/static/listfeedfiles` Retrieve an array of file names for a given feed/version/format/date/interval. Values for `file` will differ based on the requested `date` and `interval` parameters. Always call this endpoint prior to calling `/getfeedfile`. 7. `POST /fileexporter/v1/static/getfeedfile` Retrieve a single file URL for the data specified using parameters returned from the above endpoints. In the `getfeedfile` request, all parameters are required except `interval` ## Making Routine Requests Only two requests are needed for exporting data on an ongoing basis for different timeframes. To export a file each time, make these two calls: 1. Call `/listfeedfiles` using the same `feed`, `version`, `format` parameters, and alter the `date` and `interval` parameters as necessary (`interval` is optional) to specify the time period of the data file you wish to retrieve. In response, you will receive the name(s) of the `file` needed for making the next request. 2. Call `/getfeedfile` with the same parameters as above and the `file` name parameter returned from `/listfeedfiles`. In response, you will receive the access `url`. 3. Call `/listfeedfiles` using the same `feed`, `version`, `format` parameters, and alter the `date` and `interval` parameters as necessary (`interval` is optional) to specify the time period of the data file you wish to retrieve. In response, you will receive the name(s) of the `file` needed for making the next request. 4. Call `/getfeedfile` with the same parameters as above and the `file` name parameter returned from `/listfeedfiles`. In response, you will receive the access `url`. Your final request to `/getfeedfile` for the file `url` would look like this: ```json { "feed": "feed_test", "version": "version=1", "format": "format=jsonl", "date": "dt=2022-06-27", "fileName": "file1.jsonl" } ``` ## Data Feeds File Exporter makes the following data feeds available: 1. **Conversation State**: `staging_conversation_state` Combines ASAPP conversation identifiers with metadata including summaries, augmentation counts, intent, crafting times, and important timestamps. 2. **Utterance State**: `staging_utterance_state` Combines ASAPP utterance identifiers with metadata including sender type, augmentations, crafting times, and important timestamps. **NOTE:** Does not include utterance text. 3. **Utterances**: `utterances` Combines ASAPP conversation and utterance identifiers with utterance text and timestamps. Identifiers can be used to join utterance text with metadata from utterance state feed. 4. **Free-Text Summaries**: `autosummary_free_text` Retrieves data from free-text summaries generated by AutoSummary. This feed has one record per free-text summary produced and can have multiple summaries per conversation . 5. **Feedback**: `autosummary_feedback` Retrieves the text of the feedback submitted by the agent. Developers can join this feed to the AutoSummary free-text feed using the summary ID. 6. **Structured Data**: `autosummary_structured_data` Retrieves structured data to extract information and insights from conversations in the form of yes/no answers (up to 20) from summaries generated by AutoSummary. [Click here to view the full schema](/reporting/fileexporter-feeds) for each feed table. Feed table names that include the prefix `staging_` are not referencing a lower environment; table names have no connection to environments. # File Exporter Feed Schema Source: https://docs.asapp.com/reporting/fileexporter-feeds The tables below provide detailed information regarding the schema for exported data files that we can make available to you via the File Exporter API. ### Table: autosummary\_feedback The autosummary feedback table stores summary text submitted by the agent after they have reviewed and edited it. This export will be sent daily and contains the hour for time zone conversion later. **Sync Time:** 1d **Unique Condition:** company\_marker, conversation\_id, summary\_id | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :------------------------- | :----------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------- | :--------- | :---- | :--------- | :------------ | :----- | :-- | :------------ | :----------- | :------------ | | instance\_ts | timestamp | The time window of computed elements. This window is usually 15 minutes or 1 hour depending on the generation time. Times are rounded down to the nearest interval (for a time of 12:34 and an interval of 15m, this is 12:30). As an example, for a 15 minute interval an instance\_ts of 12:30 implies events from 12:30 -> 12:45. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | | | no | | | common | | | conversation\_id | string | Unique identifier generated by the ASAPP application for the issue or conversation. | ABC21352352 | | | | | no | | | common | | | external\_conversation\_id | VARCHAR(255) | Client-provided issue identifier. | vjs654 | | | | | no | | | common | | | agent\_id | varchar(255) | The agent identifier in the conversation provided by the customer. | cba321 | | | | | no | | | common | | | summary\_id | VARCHAR(36) | Unique identifier for AutoSummary feedback and free-text summary events | 57ffe572-e9dc-4546-963b-29d90b0d92a9 | | | | | no | | | AutoSummary | | | autosummary\_feedback\_ts | timestamp | The timestamp of the autosummary\_feedback\_summary event. | 2023-05-01 14:00:09 | | | | | no | | | AutoSummary | | | autosummary\_feedback | string | Text submitted with agent edits, summarizing the conversation from the autosummary freetext API call. | Customer chatted in to check whether the app worked | | | | | no | | | AutoSummary | | | company\_marker | varchar(255) | Identifier of the customer-company. | agnostic | | | | | no | | | common | | | dt | varchar(255) | Date string when summary feedback was submitted. | 2019-11-08 | | | | | no | | | common | | | hr | varchar(255) | Hour string when summary feedback was submitted. | 18 | | | | | no | | | common | | ### Table: autosummary\_free\_text The autosummary free text table stores the raw output of ASAPP's API. It is the unedited summary initially shown to the agent to be reviewed. This export will be sent daily and contains the hour for time zone conversion later. **Sync Time:** 1d **Unique Condition:** company\_marker, conversation\_id, summary\_id | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :--------------------------------- | :----------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------- | :--------- | :---- | :--------- | :------------ | :----- | :-- | :------------ | :----------- | :------------ | | instance\_ts | timestamp | The time window of computed elements. This window is usually 15 minutes or 1 hour depending on the generation time. Times are rounded down to the nearest interval (for a time of 12:34 and an interval of 15m, this is 12:30). As an example, for a 15 minute interval an instance\_ts of 12:30 implies events from 12:30 -> 12:45. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | | | no | | | common | | | conversation\_id | string | Unique identifier generated by the ASAPP application for the issue or conversation. | ABC21352352 | | | | | no | | | common | | | external\_conversation\_id | VARCHAR(255) | Client-provided issue identifier. | vjs654 | | | | | no | | | common | | | agent\_id | varchar(255) | The agent identifier in the conversation provided by the customer. | cba321 | | | | | no | | | common | | | summary\_id | VARCHAR(36) | Unique identifier for AutoSummary feedback and free-text summary events | 57ffe572-e9dc-4546-963b-29d90b0d92a9 | | | | | no | | | AutoSummary | | | autosummary\_free\_text\_ts | timestamp | The timestamp of the autosummary\_free\_text\_summary event. | 2023-05-01 14:00:09 | | | | | no | | | AutoSummary | | | autosummary\_free\_text | string | Unedited text summarizing the conversation at the time of the autosummary free text API call. | Customer chatted in to check whether the app worked | | | | | no | | | AutoSummary | | | is\_autosummary\_feedback\_used | integer | An indicator that the AutoSummary had a feedback summary. | 1 | | | | | no | | | AutoSummary | | | is\_autosummary\_feedback\_edited | integer | An indicator that the AutoSummary had a feedback summary that was edited. | 0 | | | | | no | | | AutoSummary | | | autosummary\_free\_text\_length | integer | Length of the FreeText AutoSummaries. Will only have a value when there is both freetext and feedback summaries. | 54 | | | | | no | | | AutoSummary | | | autosummary\_feedback\_length | integer | Length of the Feedback AutoSummaries. Will only have a value when there is both freetext and feedback summaries. | 54 | | | | | no | | | AutoSummary | | | autosummary\_levenshtein\_distance | integer | Levenshtein edit distances between the AutoSummaries FreeText and Feedback. Will only have a value when there is both freetext and feedback summaries. | 0 | | | | | no | | | AutoSummary | | | autosummary\_sentences\_removed | string | autosummary\_sentences\_removed contain the sentenses that are generated in freetext summary and got edited or removed feedback summary. | Customer called to pay their bill | | | | | no | | | AutoSummary | | | autosummary\_sentences\_added | string | autosummary\_sentences\_added contain the sentenses that are added as part of feedback summary in compared to freetext summary. | Customer called to pay the bill | | | | | no | | | AutoSummary | | | company\_marker | varchar(255) | Identifier of the customer-company. | agnostic | | | | | no | | | common | | | dt | varchar(255) | Date string when summary feedback was submitted. | 2019-11-08 | | | | | no | | | common | | | hr | varchar(255) | Hour string when summary feedback was submitted. | 18 | | | | | no | | | common | | ### Table: autosummary\_structured\_data The autosummary structured data table stores the raw output of ASAPP's API. These structured data outputs consist of LLM generated answers to yes/no questions along with extracted entities based on configuration settings. These outputs can be aggregated and packaged into business insights. This export will be sent daily and contains the hour for time zone conversion later. **Sync Time:** 1d **Unique Condition:** company\_marker, conversation\_id, structured\_data\_id, structured\_data\_field\_id | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :-------------------------------- | :----------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------- | :--------- | :---- | :--------- | :------------ | :----- | :-- | :------------ | :----------- | :------------ | | instance\_ts | timestamp | The time window of computed elements. This window is usually 15 minutes or 1 hour depending on the generation time. Times are rounded down to the nearest interval (for a time of 12:34 and an interval of 15m, this is 12:30). As an example, for a 15 minute interval an instance\_ts of 12:30 implies events from 12:30 -> 12:45. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | | | no | | | common | | | conversation\_id | string | Unique identifier generated by the ASAPP application for the issue or conversation. | ABC21352352 | | | | | no | | | common | | | external\_conversation\_id | VARCHAR(255) | Client-provided issue identifier. | vjs654 | | | | | no | | | common | | | agent\_id | varchar(255) | The agent identifier in the conversation provided by the customer. | cba321 | | | | | no | | | common | | | structured\_data\_id | varchar(36) | Unique identifier for AutoSummary structured data event | 57ffe572-e9dc-4546-963b-29d90b0d92a9 | | | | | no | | | common | | | structured\_data\_ts | timestamp | The timestamp of the autosummary\_structured\_data event. | 2023-05-01 14:00:09 | | | | | no | | | common | | | structured\_data\_field\_id | varchar(255) | The structured data id. | q\_issue\_escalated | | | | | no | | | common | | | structured\_data\_field\_name | varchar(255) | The structured data name. | Issue escalated | | | | | no | | | common | | | structured\_data\_field\_value | varchar(255) | The structured data value. | No | | | | | no | | | common | | | structured\_data\_field\_category | varchar(255) | The structured data category. | Outcome | | | | | no | | | common | | | company\_marker | varchar(255) | Identifier of the customer-company. | agnostic | | | | | no | | | common | | | dt | varchar(255) | Date string when summary structured data was generated. | 2019-11-08 | | | | | no | | | common | | | hr | varchar(255) | Hour string when summary structured data was generated. | 18 | | | | | no | | | common | | ### Table: contact\_entity\_generative\_agent hourly snapshot of contact grain generative\_agent data including both dimensions and metrics aggregated over "all time" (two days in practice). **Sync Time:** 1h **Unique Condition:** company\_marker, conversation\_id, contact\_id | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :-------------------------------------------------- | :----------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------- | :--------- | :---- | :------------------ | :------------------ | :----- | :-- | :------------ | :----------- | :------------ | | company\_marker | string | The ASAPP identifier of the company or test data source. | acme | | | 2025-01-06 00:00:00 | 2025-01-06 00:00:00 | no | | | | | | conversation\_id | string | Unique identifier generated by the ASAPP application for the issue or conversation. | ABC21352352 | | | 2025-01-06 00:00:00 | 2025-01-06 00:00:00 | no | | | | | | contact\_id | string | | | | | 2025-01-06 00:00:00 | 2025-01-06 00:00:00 | no | | | | | | instance\_ts | timestamp | The time window of computed elements. This window is usually 15 minutes or 1 hour depending on the generation time. Times are rounded down to the nearest interval (for a time of 12:34 and an interval of 15m, this is 12:30). As an example, for a 15 minute interval an instance\_ts of 12:30 implies events from 12:30 -> 12:45. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | 2025-01-06 00:00:00 | 2025-01-06 00:00:00 | no | | | | | | generative\_agent\_turns\_\_turn\_ct | int | Number of turns. | 1 | | | 2025-01-06 00:00:00 | 2025-01-06 00:00:00 | no | | | | | | generative\_agent\_turns\_\_turn\_duration\_ms\_sum | bigint | Total number of milliseconds between PROCESSING\_START and PROCESSING\_END across all turns. | 2 | | | 2025-01-06 00:00:00 | 2025-01-06 00:00:00 | no | | | | | | generative\_agent\_turns\_\_utterance\_ct | int | Number of generative\_agent utterances. | 2 | | | 2025-01-06 00:00:00 | 2025-01-06 00:00:00 | no | | | | | | generative\_agent\_turns\_\_contains\_escalation | boolean | Boolean indicating the presence of a turn in the conversation that ended with an indication to escalate to a human agent. | 1 | | | 2025-01-06 00:00:00 | 2025-01-06 00:00:00 | no | | | | | | generative\_agent\_turns\_\_is\_contained | boolean | Boolean indicating whether or not the conversation was contained (NOT generative\_agent\_turns\_\_contains\_escalation). | 1 | | | 2025-01-06 00:00:00 | 2025-01-06 00:00:00 | no | | | | | | generative\_agent\_tasks\_\_first\_task\_name | varchar(255) | Name of the first task entered by generative\_agent. | SomethingElse | | | 2025-01-06 00:00:00 | 2025-01-06 00:00:00 | no | | | | | | generative\_agent\_tasks\_\_last\_task\_name | varchar(255) | Name of the last task entered by generative\_agent. | SomethingElse | | | 2025-01-06 00:00:00 | 2025-01-06 00:00:00 | no | | | | | | generative\_agent\_tasks\_\_task\_ct | int | Number of tasks entered by generative\_agent. | 2 | | | 2025-01-06 00:00:00 | 2025-01-06 00:00:00 | no | | | | | | generative\_agent\_tasks\_\_configuration\_id | varchar(255) | The configuration version that produced generative\_agent actions. | 4ea5b399-f969-49c6-8318-e2c39a98e817 | | | 2025-01-06 00:00:00 | 2025-01-06 00:00:00 | no | | | | | ### Table: staging\_conversation\_state This issue-grain table provides a consolidated view of metrics produced across multiple ASAPP services for a given issue. The table is populated daily and includes hour-level data for time zone conversion. **Sync Time:** 1d **Unique Condition:** company\_marker, conversation\_id, dt, hr | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :------------------------------------------------- | :----------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------- | :--------- | :---- | :--------- | :------------ | :----- | :-- | :------------ | :------------- | :------------ | | conversation\_id | timestamp | Unique identifier generated by the ASAPP application for the issue or conversation. | ABC21352352 | | | | | no | | | Conversation | | | instance\_ts | timestamp | The time window of computed elements. This window is usually 15 minutes or 1 hour depending on the generation time. Times are rounded down to the nearest interval (for a time of 12:34 and an interval of 15m, this is 12:30). As an example, for a 15 minute interval an instance\_ts of 12:30 implies events from 12:30 -> 12:45. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | | | no | | | Conversation | | | first\_event\_ts | timestamp | Timestamp of the first event associated with the conversation\_id. | 2018-06-23 21:28:23 | | | | | no | | | Conversation | | | conversation\_start\_ts | timestamp | Timestamp indicating the start of the conversation as provided by the customer; this will be null if is not provided or conversation started on a previous day. Alternative timestamps include the customer\_first\_utterance\_ts and agent\_first\_response\_ts timestamps or the first\_event\_ts (earliest time for ASAPP involvement). | 2019-11-08 14:00:07 | | | | | no | | | Conversation | | | external\_conversation\_id | VARCHAR(255) | The conversation id provided by the customer. | 750068130001 | | | | | no | | | Conversation | | | conversation\_customer\_effective\_ts | timestamp | The timestamp of the last change to the customer\_id provided by the customer. | 2019-11-08 14:00:07 | | | | | no | | | Conversation | | | customer\_id | varchar(255) | The customer identifier provided by the customer. | abc123 | | | | | no | | | Conversation | | | conversation\_agent\_effective\_ts | timestamp | The timestamp of the last change to the agent\_id provided by the customer. | 2019-11-08 14:00:07 | | | | | no | | | Conversation | | | last\_agent\_id | varchar(191) | The last agent identifier in the conversation provided by the customer. | abc123 | | | | | no | | | Conversation | | | all\_agent\_ids | | A list of all the agent identifiers within the conversation provided by the customer. | \[abc123,abc456] | | | | | no | | | Conversation | | | customer\_utterance\_ct | | Count of all customer messages. | 5 | | | | | no | | | Conversation | | | agent\_utterance\_ct | | Count of all agent messages. | 16 | | | | | no | | | Conversation | | | customer\_first\_utterance\_ts | timestamp | Timestamp of the first customer utterance. | 2019-11-08 14:00:07 | | | | | no | | | Conversation | | | agent\_first\_utterance\_ts | | Timestamp of the first agent utterance. | 2019-11-08 14:00:07 | | | | | no | | | Conversation | | | customer\_last\_utterance\_ts | timestamp | Timestamp of the last customer utterance. | 2019-11-08 14:00:07 | | | | | no | | | Conversation | | | agent\_last\_utterance\_ts | | Timestamp of the last agent utterance. | 2019-11-08 14:00:07 | | | | | no | | | Conversation | | | autosuggest\_utterance\_ct | | Count of utterances where AutoSuggest was used. | 6 | | | | | no | | | AutoCompose | | | autocomplete\_utterance\_ct | | Count of utterances where AutoComplete was used. | 2 | | | | | no | | | AutoCompose | | | phrase\_autocomplete\_utterance\_ct | | Count of utterances where Phrase AutoComplete was used. | 0 | | | | | no | | | AutoCompose | | | custom\_drawer\_utterance\_ct | | Count of utterances where Custom Drawer was used. | 1 | | | | | no | | | AutoCompose | | | custom\_insert\_utterance\_ct | | Count of utterances where Custom Insert was used. | 0 | | | | | no | | | AutoCompose | | | global\_insert\_utterance\_ct | | Count of utterances where Global Insert was used. | 1 | | | | | no | | | AutoCompose | | | fluency\_apply\_utterance\_ct | | Count of utterances where Fluency Apply was used. | 0 | | | | | no | | | AutoCompose | | | fluency\_undo\_utterance\_ct | | Count of utterances where Fluency Undo was used. | 0 | | | | | no | | | AutoCompose | | | autosummary\_structured\_summary\_tags\_event\_ts | timestamp | The timestamp of the last autosummary\_structured\_summary\_tags event. | 2019-11-08 14:00:07 | | | | | no | | | AutoSummary | | | autosummary\_tags | string | Comma-separated list of tags or codes indicating key topics of this conversation. | `{"server":"some-server","server_version":"unknown"}` | | | | | no | | | AutoSummary | | | autosummary\_free\_text\_summary\_event\_ts | timestamp | The timestamp of the last autosummary\_free\_text\_summary event. | 2019-11-08 14:00:07 | | | | | no | | | AutoSummary | | | autosummary\_text | string | Text summarizing the conversation. | Unresponsive Customer. | | | | | no | | | AutoSummary | | | is\_autosummary\_structured\_summary\_tags\_used | | An indicator that the conversation had AutoSummary structured summary tags. When aggregating from conversation by day to conversation use MAX(). | 1 | | | | | no | | | AutoSummary | | | is\_autosummary\_free\_text\_summary\_used | | An indicator that the conversations had AutoSummary free text summary. When aggregating from conversation by day to conversation use MAX(). | 1 | | | | | no | | | AutoSummary | | | is\_autosummary\_feedback\_used | int | An indicator that the conversation had AutoSummary feedback summary. When aggregating from conversation by day to conversation use MAX(). | 1 | | | | | no | | | AutoSummary | | | is\_autosummary\_used | | An indicator that the conversation that had any response (tag, free text, feedback) in Autosummary. When aggregating from conversation by day to conversation use MAX(). | 1 | | | | | no | | | AutoSummary | | | is\_autosummary\_feedback\_edited | int | An indicator that the conversation had at least one AutoSummary that received Feedback with an edited summary. When aggregating from conversation by day to conversation use MAX(). | 1 | | | | | no | | | Conversation | | | autosummary\_feedback\_ct | bigint | Count of AutoSummaries that received Feedback for the conversation. | 4 | | | | | no | | | Conversation | | | autosummary\_feedback\_edited\_ct | bigint | Count of AutoSummaries that received edited Feedback for the conversation. | 3 | | | | | no | | | Conversation | | | autosummary\_free\_text\_length\_sum | bigint | Sum of the length of all the FreeText AutoSummaries for the conversation. | 80 | | | | | no | | | Conversation | | | autosummary\_feedback\_length\_sum | bigint | Sum of the length of all the Feedback AutoSummaries for the conversation. | 120 | | | | | no | | | Conversation | | | autosummary\_levenshtein\_distance\_sum | bigint | Sum of the Levenshtein edit distances between the AutoSummaries FreeText and Feedback. | 40 | | | | | no | | | Conversation | | | first\_intent\_effective\_ts | timestamp | The timestamp of the last first\_intent event. | 2019-11-08 14:00:07 | | | | | no | | | JourneyInsight | | | first\_intent\_message\_id | string | The id of the message that was sent with the first intent. | 01GA9V1F2B7Q4Y8REMRZ2SXVRT | | | | | no | | | JourneyInsight | | | first\_intent\_intent\_code | string | The intent code associated with the rule that was sent as the first intent within the conversation. | INCOMPLETE | | | | | no | | | JourneyInsight | | | first\_intent\_intent\_name | string | The intent name correspondent to the intent\_code that was sent as the first intent within the conversation. | INCOMPLETE | | | | | no | | | JourneyInsight | | | first\_intent\_is\_known\_good | boolean | Indicates if the classification for the first\_intent data comes from a known good. | FALSE | | | | | no | | | JourneyInsight | | | conversation\_metadata\_effective\_ts | timestamp | The timestamp of the last conversation metadata | 2019-11-08 14:00:07 | | | | | no | | | Metadata | | | conversation\_metadata\_lob\_id | string | Line of business ID from Conversation Metadata | 1038 | | | | | no | | | Metadata | | | conversation\_metadata\_lob\_name | string | Line of business descriptive name from Conversation Metadata | manufacturing | | | | | no | | | Metadata | | | conversation\_metadata\_agent\_group\_id | string | Agent group ID from Conversation Metadata | group59 | | | | | no | | | Metadata | | | conversation\_metadata\_agent\_group\_name | string | Agent group descriptive name from Conversation Metadata | groupXYZ | | | | | no | | | Metadata | | | conversation\_metadata\_agent\_routing\_code | string | Agent routing attribute from Conversation Metadata | route-13988 | | | | | no | | | Metadata | | | conversation\_metadata\_campaign | string | Campaign from Conversation Metadata | campaign-A | | | | | no | | | Metadata | | | conversation\_metadata\_device\_type | string | Client device type from Conversation Metadata | TABLET | | | | | no | | | Metadata | | | conversation\_metadata\_platform | string | Client platform type from Conversation Metadata | IOS | | | | | no | | | Metadata | | | conversation\_metadata\_company\_segment | \[]string | Company segment from Conversation Metadata | \["Sales","Marketing"] | | | | | no | | | Metadata | | | conversation\_metadata\_company\_subdivision | string | Company subdivision from Conversation Metadata | operating | | | | | no | | | Metadata | | | conversation\_metadata\_business\_rule | string | Business rule from Conversation Metadata | Apply customer's discount | | | | | no | | | Metadata | | | conversation\_metadata\_entry\_type | string | Type of entry from Conversation Metadata, e.g., proactive vs reactive | reactive | | | | | no | | | Metadata | | | conversation\_metadata\_operating\_system | string | Operating system from Conversation Metadata | OPERATING\_SYSTEM\_MAC\_OS | | | | | no | | | Metadata | | | conversation\_metadata\_browser\_type | string | Browser type from Conversation Metadata | Safari | | | | | no | | | Metadata | | | conversation\_metadata\_browser\_version | string | Browser version from Conversation Metadata | 14.1.2 | | | | | no | | | Metadata | | | contact\_journey\_contact\_id | string | (NULLIFIED) Conversation Contact ID | | | | | | no | | | Contact | | | contact\_journey\_last\_conversation\_inactive\_ts | timestamp | Last time the conversation went inactive (may be limited to voice conversations) | 2023-06-11 18:45:29 | | | | | no | | | Contact | | | contact\_journey\_first\_contact\_utterance\_ts | timestamp | First utterance in the contact | 2023-06-11 18:32:21 | | | | | no | | | Contact | | | contact\_journey\_last\_contact\_utterance\_ts | timestamp | Last utterance in the contact | 2023-06-11 18:40:29 | | | | | no | | | Contact | | | contact\_journey\_contact\_start\_ts | timestamp | First event in the contact | 2023-06-11 18:30:29 | | | | | no | | | Contact | | | contact\_journey\_contact\_end\_ts | timestamp | Last event in the contact | 2023-06-11 18:58:29 | | | | | no | | | Contact | | | aug\_metrics\_effective\_ts | timestamp | Timestamp of the last augmentation metrics event | "2023-08-09T19:21:34.224620050Z" | | | | | no | | | AutoCompose | | | augmented\_utterances\_ct | | Count of all utterances that used any augmentation feature (excluding fluency) | 100 | | | | | no | | | AutoCompose | | | multiple\_augmentation\_features\_used\_ct | | Count utterances where multiple augmentation features (excluding fluency) were used | 100 | | | | | no | | | AutoCompose | | | autosuggest\_ct | | Count of utterances where only AutoSuggest augmentation is used (excluding fluency) | 100 | | | | | no | | | AutoCompose | | | autocomplete\_ct | | Count of utterances where only AutoComplete augmentation is used (excluding fluency) | 100 | | | | | no | | | AutoCompose | | | phrase\_autocomplete\_ct | | Count of utterances where only Phrase AutoComplete augmentation is used (excluding fluency) | 100 | | | | | no | | | AutoCompose | | | custom\_drawer\_ct | | Count of utterances where only Custom Drawer augmentation is used (excluding fluency) | 100 | | | | | no | | | AutoCompose | | | custom\_insert\_ct | | Count of utterances where only Custom Insert augmentation is used (excluding fluency) | 100 | | | | | no | | | AutoCompose | | | global\_insert\_ct | | Count of utterances where only Global Insert augmentation is used (excluding fluency) | 100 | | | | | no | | | AutoCompose | | | unknown\_augmentation\_ct | | Count of utterances where only an unidentified augmentation was used (excluding fluency) | 100 | | | | | no | | | AutoCompose | | | fluency\_apply\_ct | | Count of utterances where Fluency Apply augmentation is used | 100 | | | | | no | | | AutoCompose | | | fluency\_undo\_ct | | Count of utterances where Fluency Undo augmentation is used | 100 | | | | | no | | | AutoCompose | | | message\_edits\_ct | bigint | Total accumulated sum of the number of characters entered or deleted by the user and not by augmentation, after the most recent augmentation that replaces all text in the composer (AUTOSUGGEST, AUTOCOMPLETE, CUSTOM\_DRAWER). If the agent selected a suggestion and sends without any changes, this number is 0. | 100 | | | | | no | | | AutoCompose | | | time\_to\_action\_seconds | float | Total accumulated sum of the number of seconds between the agent sending their previous message and their first action for composing this message. | 100 | | | | | no | | | AutoCompose | | | crafting\_time\_seconds | float | Total accumulated sum of the number of seconds between the agent's first action and last action for composing this message. | 100 | | | | | no | | | AutoCompose | | | dwell\_time\_seconds | float | Total accumulated sum of the number of seconds between the agent's last action for composing this message and the message being sent | 100 | | | | | no | | | AutoCompose | | | phrase\_autocomplete\_presented\_ct | bigint | Total accumulated sum of the number of phrase autocomplete suggestions presented to the agent. Resets when augmentation\_type resets | 100 | | | | | no | | | AutoCompose | | | phrase\_autocomplete\_selected\_ct | bigint | Total accumulated sum of the number of phrase autocomplete suggestions selected by the agent. Resets when augmentation\_type resets. | 100 | | | | | no | | | AutoCompose | | | single\_intent\_effective\_ts | timestamp | The timestamp of the last single intent event. | 2019-11-08 14:00:07 | | | | | no | | | | | | single\_intent\_intent\_code | string | Intent code | CHECK\_COVERAGE | | | | | no | | | | | | single\_intent\_intent\_name | string | Intent name | Check Coverage | | | | | no | | | | | | single\_intent\_messages\_considered\_ct | bigint | How many utterances were consided to calculate a single intent code. | 2 | | | | | no | | | | | | company\_marker | string | Identifier of the customer-company. | agnostic | | | | | no | | | Conversation | | | dt | string | Date string representing the date during which the conversation state happened. | 2019-11-08 | | | | | no | | | Conversation | | | hr | string | Hour string representing the hour during which the conversation state happened. | 18 | | | | | no | | | Conversation | | ### Table: staging\_utterance\_state This utterance-grain table contains insights for individual conversation messages. Each record in this dataset represents an individual utterance, or message, within a conversation. The table is populated daily and includes hour-level data for time zone conversion purposes. **Sync Time:** 1d **Unique Condition:** company\_marker, conversation\_id, message\_id | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :------------------------------------------- | :----------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------- | :--------- | :---- | :--------- | :------------ | :----- | :-- | :------------ | :----------- | :------------ | | conversation\_id | string | Unique identifier generated by the ASAPP application for the issue or conversation. | ABC21352352 | | | | | no | | | Conversation | | | message\_id | string | This is the ULID id of a given message. | 01GASGE3WAG84BGARCS238Z0FG | | | | | no | | | Conversation | | | instance\_ts | timestamp | The time window of computed elements. This window is usually 15 minutes or 1 hour depending on the generation time. Times are rounded down to the nearest interval (for a time of 12:34 and an interval of 15m, this is 12:30). As an example, for a 15 minute interval an instance\_ts of 12:30 implies events from 12:30 -> 12:45. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | | | no | | | Conversation | | | chat\_message\_event\_ts | timestamp | The timestamp of the last chat\_message event. | 2018-06-23 21:28:23 | | | | | no | | | Conversation | | | external\_conversation\_id | VARCHAR(255) | The issue or conversation id from the customer/client perspective. | ffe8a632-545f-4c2e-a0ae-c296e6ad4a22 | | | | | no | | | Conversation | | | sender\_type | string | The type of sender. | SENDER\_CUSTOMER | | | | | no | | | Conversation | | | sender\_id | string | Unique identifier of the sender user. | ffe8a632-545f-4c2e-a0ae-c296e6ad4a25 | | | | | no | | | Conversation | | | private\_message\_ct | bigint | Number of private messages, a private message is only when it was between agents/admins not the customer. | 1 | | | | | no | | | Conversation | | | tags | string | Key-value map of additional properties. | {} | | | | | no | | | Conversation | | | utterance\_augmentations\_effective\_ts | timestamp | The timestamp of the last utterance\_augmentations event. | 2018-06-23 21:28:23 | | | | | no | | | AutoCompose | | | augmentation\_type\_list | string | DEPRECATED Type of augmentation used. If multiple augmentations were used, a comma-separated list of types. | AUTOSUGGEST,AUTOCOMPLETE | | | | | no | | | AutoCompose | | | num\_edits\_ct | bigint | Number of edits made to an augmented message. | 2 | | | | | no | | | AutoCompose | | | selected\_suggestion\_text | string | DEPRECATED The text inserted into the composer by the last augmentation that replaced all text (AUTOSUGGEST, | Hi. How may I help you? | | | | | no | | | AutoCompose | | | time\_to\_action\_seconds | float | Number of seconds between the agent sending their previous message and their first action for composing | 3.286 | | | | | no | | | AutoCompose | | | crafting\_time\_seconds | float | Number of seconds between the agent's first action and last action for composing this message. | 0.0 | | | | | no | | | AutoCompose | | | dwell\_time\_seconds | float | Number of seconds between the agent's last action for composing this message and the message being sent. | 0.844 | | | | | no | | | AutoCompose | | | phrase\_autocomplete\_presented\_ct | bigint | Number of phrase autocomplete suggestions presented to the agent. | 1 | | | | | no | | | AutoCompose | | | phrase\_autocomplete\_selected\_ct | bigint | Number of phrase autocomplete suggestions selected by the agent. | 0 | | | | | no | | | AutoCompose | | | utterance\_message\_metrics\_effective\_ts | timestamp | The timestamp of the last utterance\_message\_metrics event. | 2018-06-23 21:28:23 | | | | | no | | | Conversation | | | utterance\_length | int | Length of utterance message. | 13 | | | | | no | | | Conversation | | | agent\_metadata\_effective\_ts | timestamp | The timestamp of the last agent\_metadata event. | 2018-06-23 21:28:23 | | | | | no | | | Conversation | | | agent\_metadata\_external\_agent\_id | string | The external rep/agent identifier. | abc123 | | | | | no | | | Conversation | | | agent\_metadata\_event\_ts | timestamp | The timestamp of when this event happened (system driven). | 2018-06-23 21:28:23 | | | | | no | | | Conversation | | | agent\_metadata\_start\_ts | timestamp | The timestamp of when the agent started. | 2018-06-23 21:28:23 | | | | | no | | | Conversation | | | agent\_metadata\_lob\_id | string | Line of business id. | lobId\_7 | | | | | no | | | Conversation | | | agent\_metadata\_lob\_name | string | Line of business descriptive name. | lobName\_7 | | | | | no | | | Conversation | | | agent\_metadata\_group\_id | string | Group id. | groupId\_7 | | | | | no | | | Conversation | | | agent\_metadata\_group\_name | string | Group descriptive name. | groupName\_7 | | | | | no | | | Conversation | | | agent\_metadata\_location | string | Agent's supervisor Id. | supervisorId\_7 | | | | | no | | | Conversation | | | agent\_metadata\_languages | string | Agent's languages. | `[{"value":"en-us"}]` | | | | | no | | | Conversation | | | agent\_metadata\_concurrency | int | Number of issues that the agent can take at a time. | 3 | | | | | no | | | Conversation | | | agent\_metadata\_category\_label | string | An agent category label that indicates the types of workflows these agents have access to or problems they solve. | categoryLabel\_7 | | | | | no | | | Conversation | | | agent\_metadata\_account\_access\_level | string | Agent levels mapping to the level of access they have to make changes to customer accounts. | accountAccessLevel\_7 | | | | | no | | | Conversation | | | agent\_metadata\_ranking | int | Agent's rank. | 2 | | | | | no | | | Conversation | | | agent\_metadata\_vendor | string | Agent's vendor. | vendor\_7 | | | | | no | | | Conversation | | | agent\_metadata\_job\_title | string | Agent's job title. | jobTitle\_7 | | | | | no | | | Conversation | | | agent\_metadata\_job\_role | string | Agent's role. | jobRole\_7 | | | | | no | | | Conversation | | | agent\_metadata\_work\_shift | string | The hours or shift name they work. | workShift\_7 | | | | | no | | | Conversation | | | agent\_metadata\_attributes\_attr\_01\_name | string | Name of the arbitrary attribute (not indexed or used internally, used as pass through). | name | | | | | no | | | Conversation | | | agent\_metadata\_attributes\_attr\_01\_value | string | Value of the arbitrary attribute (not indexed or used internally, used as pass through). | attr1\_name | | | | | no | | | Conversation | | | agent\_metadata\_attributes\_attr\_02\_name | string | Name of the arbitrary attribute (not indexed or used internally, used as pass through). | name | | | | | no | | | Conversation | | | agent\_metadata\_attributes\_attr\_02\_value | string | Value of the arbitrary attribute (not indexed or used internally, used as pass through). | attr2\_name | | | | | no | | | Conversation | | | agent\_metadata\_attributes\_attr\_03\_name | string | Name of the arbitrary attribute (not indexed or used internally, used as pass through). | name | | | | | no | | | Conversation | | | agent\_metadata\_attributes\_attr\_03\_value | string | Value of the arbitrary attribute (not indexed or used internally, used as pass through). | attr3\_name | | | | | no | | | Conversation | | | agent\_metadata\_attributes\_attr\_04\_name | string | Name of the arbitrary attribute (not indexed or used internally, used as pass through). | name | | | | | no | | | Conversation | | | agent\_metadata\_attributes\_attr\_04\_value | string | Value of the arbitrary attribute (not indexed or used internally, used as pass through). | attr4\_name | | | | | no | | | Conversation | | | agent\_metadata\_attributes\_attr\_05\_name | string | Name of the arbitrary attribute (not indexed or used internally, used as pass through). | name | | | | | no | | | Conversation | | | agent\_metadata\_attributes\_attr\_05\_value | string | Value of the arbitrary attribute (not indexed or used internally, used as pass through). | attr5\_name | | | | | no | | | Conversation | | | agent\_metadata\_attributes\_attr\_06\_name | string | Name of the arbitrary attribute (not indexed or used internally, used as pass through). | name | | | | | no | | | Conversation | | | agent\_metadata\_attributes\_attr\_06\_value | string | Value of the arbitrary attribute (not indexed or used internally, used as pass through). | attr6\_name | | | | | no | | | Conversation | | | agent\_metadata\_attributes\_attr\_07\_name | string | Name of the arbitrary attribute (not indexed or used internally, used as pass through). | name | | | | | no | | | Conversation | | | agent\_metadata\_attributes\_attr\_07\_value | string | Value of the arbitrary attribute (not indexed or used internally, used as pass through). | attr7\_name | | | | | no | | | Conversation | | | agent\_metadata\_attributes\_attr\_08\_name | string | Name of the arbitrary attribute (not indexed or used internally, used as pass through). | name | | | | | no | | | Conversation | | | agent\_metadata\_attributes\_attr\_08\_value | string | Value of the arbitrary attribute (not indexed or used internally, used as pass through). | attr8\_name | | | | | no | | | Conversation | | | agent\_metadata\_attributes\_attr\_09\_name | string | Name of the arbitrary attribute (not indexed or used internally, used as pass through). | name | | | | | no | | | Conversation | | | agent\_metadata\_attributes\_attr\_09\_value | string | Value of the arbitrary attribute (not indexed or used internally, used as pass through). | attr9\_name | | | | | no | | | Conversation | | | agent\_metadata\_attributes\_attr\_10\_name | string | Name of the arbitrary attribute (not indexed or used internally, used as pass through). | name | | | | | no | | | Conversation | | | agent\_metadata\_attributes\_attr\_10\_value | string | Value of the arbitrary attribute (not indexed or used internally, used as pass through). | attr10\_name | | | | | no | | | Conversation | | | augmented\_utterances\_ct | int | Count of all utterances that used any augmentation feature (excluding fluency) | 1 | | | | | no | | | AutoCompose | | | multiple\_augmentation\_features\_used\_ct | int | Count utterances where multiple augmentation features (excluding fluency) were used. | 1 | | | | | no | | | AutoCompose | | | autosuggest\_ct | int | Count of utterances where only AutoSuggest augmentation is used (excluding fluency) | 1 | | | | | no | | | AutoCompose | | | autocomplete\_ct | int | Count of utterances where only AutoComplete augmentation is used (excluding fluency) | 1 | | | | | no | | | AutoCompose | | | phrase\_autocomplete\_ct | int | Count of utterances where only Phrase AutoComplete augmentation is used (excluding fluency) | 1 | | | | | no | | | AutoCompose | | | custom\_drawer\_ct | int | Count of utterances where only Custom Drawer augmentation is used (excluding fluency) | 1 | | | | | no | | | AutoCompose | | | custom\_insert\_ct | int | Count of utterances where only Custom Insert augmentation is used (excluding fluency) | 1 | | | | | no | | | AutoCompose | | | global\_insert\_ct | int | Count of utterances where only Global Insert augmentation is used (excluding fluency) | 1 | | | | | no | | | AutoCompose | | | unknown\_augmentation\_ct | int | Count of utterances where only an unidentified augmentation was used (excluding fluency) | 1 | | | | | no | | | AutoCompose | | | fluency\_apply\_ct | int | Count of utterances where Fluency Apply augmentation is used | 1 | | | | | no | | | AutoCompose | | | fluency\_undo\_ct | int | Count of utterances where Fluency Undo augmentation is used | 1 | | | | | no | | | AutoCompose | | | company\_marker | string | Identifier of the customer-company. | agnostic | | | | | no | | | Conversation | | | dt | string | Date string representing the date during which the utterance state happened. | 2018-06-23 | | | | | no | | | Conversation | | | hr | string | Hour string representing the hour during which the utterance state happened. | 21 | | | | | no | | | Conversation | | ### Table: utterances This S3 captures raw utterances, enabling customers to map message IDs and metadata to specific utterances. Each record in this feed represents an individual message within a conversation, providing utterance-level insights. The feed remains minimal and secure, including a comprehensive mapping of message IDs to their corresponding utterances, information not available in the utterance state file. For security purposes, this feed will only be accessible externally, retaining a maximum of 32 days of data before purging. The feed will be exported daily, with time-stamped data for time zone conversion. **Sync Time:** 1d **Unique Condition:** company\_marker, conversation\_id, message\_id | Column | Type | Description | Example | Aggregates | Notes | Date Added | Date Modified | Ignore | PII | release state | Specific Use | Feature Group | | :------------------------- | :----------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------- | :--------- | :---- | :--------- | :------------ | :----- | :-- | :------------ | :----------- | :------------ | | conversation\_id | string | Unique identifier generated by the ASAPP application for the issue or conversation. | ABC21352352 | | | | | no | | | Conversation | | | message\_id | | This is the ULID id of a given message. | 01GASGE3WAG84BGARCS238Z0FG | | | | | no | | | Conversation | | | instance\_ts | timestamp | The time window of computed elements. This window is usually 15 minutes or 1 hour depending on the generation time. Times are rounded down to the nearest interval (for a time of 12:34 and an interval of 15m, this is 12:30). As an example, for a 15 minute interval an instance\_ts of 12:30 implies events from 12:30 -> 12:45. All times are in UTC. | 2019-11-08 14:00:06.957000+00:00 | | | | | no | | | Conversation | | | chat\_message\_event\_ts | | The timestamp of the last chat\_message event. | 2018-06-23 21:28:23 | | | | | no | | | Conversation | | | external\_conversation\_id | VARCHAR(255) | The issue or conversation id from the customer/client perspective. | ffe8a632-545f-4c2e-a0ae-c296e6ad4a22 | | | | | no | | | Conversation | | | utterance | | Text of the utterance message. | Hello, I need to talk to an agent | | | | | no | | | Conversation | | | company\_marker | string | Identifier of the customer-company. | agnostic | | | | | no | | | Conversation | | | dt | string | Date string representing the date during which the utterance state happened. | 2018-06-23 | | | | | no | | | Conversation | | | hr | string | Hour string representing the hour during which the utterance state happened. | 21 | | | | | no | | | Conversation | | Last Updated: 2025-01-16 06:37:08 UTC # Metadata Ingestion API Source: https://docs.asapp.com/reporting/metadata-ingestion Learn how to send metadata via Metadata Ingestion API. Customers with AI Services implementations use ASAPP's Metadata Ingestion API to send key attributes about conversations, customers, and agents. Metadata can be joined with AI Service output data to sort and filter reports and analyses using attributes important to your business. Metadata Ingestion API is not accessible by default. Reach out to your ASAPP account contact to ensure it is enabled for your implementation. ## Before You Begin ASAPP provides an AI Services [Developer Portal](/getting-started/developers). Within the portal, developers can: * Access relevant API documentation (e.g., OpenAPI reference schemas) * Access API keys for authorization * Manage user accounts and apps In order to use ASAPP's APIs, all apps must be registered through the portal. Once registered, each app will be provided unique API keys for ongoing use. Visit the [Get Started](/getting-started/developers) page on the Developer Portal for instructions on creating a developer account, managing teams and apps, and setup for using AI Service APIs. ## Endpoints The Metadata Ingestion endpoints are used to send information about agents, conversations, and customers. Metadata can be sent for a single entity (e.g., one agent) or for multiple entities at once (e.g., several hundred agents) in a batch format. ### Agent The OpenAPI specification for each agent endpoint shows the types of metadata that are accepted. Examples include information about lines of business, groups, locations, supervisors, languages spoken, vendor, job role, and email. The endpoints also accept custom-defined `attributes` in key-value pairs if no existing field in the schema suits the type of metadata you wish to upload. * [`POST /metadata-ingestion/v1/single-agent-metadata`](/apis/metadata/add-an-agent-metadata) * Use this endpoint to add metadata for a single agent. * [`POST /metadata-ingestion/v1/many-agent-metadata`](/apis/metadata/add-multiple-agent-metadata) * Use this endpoint to add metadata for a batch of agents all at once. ### Conversation The OpenAPI specification for each conversation endpoint shows the types of metadata that are accepted. Examples include unique identifiers, lines of business, group and subdivision identifiers, routing codes, associated campaigns and business rules, browser and device information. The endpoints also accept custom-defined `attributes` in key-value pairs if no existing field in the schema suits the type of metadata you wish to upload. * [`POST /metadata-ingestion/v1/single-convo-metadata`](/apis/metadata/add-a-conversation-metadata) * Use this endpoint to add metadata for a single conversation. * [`POST /metadata-ingestion/v1/many-convo-metadata`](/apis/metadata/add-multiple-conversation-metadata) * Use this endpoint to add metadata for a batch of conversations all at once. ### Customer The OpenAPI specification for each customer endpoint shows the types of metadata that are accepted. Examples include unique identifiers, statuses, contact details, and location information. The endpoints also accept custom-defined `attributes` in key-value pairs if no existing field in the schema suits the type of metadata you wish to upload. * [`POST /metadata-ingestion/v1/single-customer-metadata`](/apis/metadata/add-a-customer-metadata) * Use this endpoint to add metadata for a single customer. * [`POST /metadata-ingestion/v1/many-customer-metadata`](/apis/metadata/add-multiple-customer-metadata) * Use this endpoint to add metadata for a batch of customers all at once. # Building a Real-Time Event API Source: https://docs.asapp.com/reporting/real-time-event-api Learn how to implement ASAPP's real-time event API to receive activity, journey, and queue state updates. ASAPP provides real-time access to events, enabling customers to power internal use cases. Typical use cases that benefit from real-time ASAPP events include: * Tracking the end-user journey through ASAPP * Supporting workforce management needs * Integrating with customer-maintained CRM systems ASAPP's real-time events provide raw data. Complex processing, such as aggregation or deduplication, is handled by batch analytics and reporting. ASAPP presently supports three real-time event feeds: 1. **Activity**: Agent status change events, for tracking schedule adherence 2. **Journey**: Events denoting milestones in a conversation, for tracking the customer journey 3. **Queue State**: Updates on queues for tracking size and estimated wait times In order to utilize these available real-time events, a customer will need to configure an API endpoint service under the customer's control. The balance of this document provides information about the high-level tasks a customer will need to accomplish in order to receive real-time events from ASAPP, as well as further information on the events available from ASAPP. ## Architecture Discussion Upon a customer's request, ASAPP can provide several types of real-time event data. Note that ASAPP can separately enhance standard real-time events to accommodate specific customer requirements. Such enhancements would usually be specified and implemented as part of ASAPP's regular product development process. Data-ERTAPI-Arch The diagram above provides a high-level view of how a customer-maintained service that receives real-time ASAPP events might be designed; a service that runs on ASAPP-controlled infrastructure will push real-time event data to one or more HTTP endpoints maintained by the customer. For each individual event, the ASAPP service makes one POST request to the endpoint. Event data will be transmitted using mTLS-based authentication (See the separate document [Securing Endpoints with Mutual TLS](/reporting/secure-data-retrieval#certificate-configuration) for details). ### Customer Requirements * The customer must implement a POST API endpoint to handle the event messages. * The customer and ASAPP must develop the mTLS authentication integration to secure the API endpoint * All ASAPP real-time "raw" events will post to the same endpoint; the customer is expected to filter the received events to their needs based on name and event type. * Each ASAPP real-time "processed" reporting feed can be configured to post to one arbitrary endpoint, at the customer's specified preference (i.e., each feed can post to a separate URI, or each can post to the same URI, or any combination required by the customer's use case.) It should be noted that real-time events do not implement the de-duplication and grouping of ASAPP's batch reporting feeds; rather these real-time events provide building blocks for the customer to aggregate and build on. When making use of ASAPP's real-time events, the customer will be responsible for grouping, de-duplication, and aggregation of related events as required by the customer's particular use case. The events include metadata fields to facilitate such tasks. ### Endpoint Sizing The endpoint configured by the customer should provisioned with sufficient scale to receive events at the rate generated by the customer's ASAPP implementation. As a rule of thumb, customers can expect: * A voice call will generate on the order of 100 events per issue * A text chat will generate on the order of 10 events per issue So, for example, if the customer's application services 1000 issues per minute, that customer should expect their endpoint to receive 10,000 -- 100,000 messages per minute, or on the order of 1,000 messages per second. ### Endpoint Configuration ASAPP can configure its service with the following parameters: * **url:** The destination URL of the customer API endpoint that is set up to handle POST http requests. * **timeout\_ms:** The number of milliseconds to wait for a HTTP 200 "OK" response before timing out. * **retries:** The number of times to retry to send a message after a failed delivery. * **(optional)event\_list:** List of `event_types` to send. If `event_type` is empty it will default to send all events for this feed. List the necessary `event_type` to reduce unnecessary traffic. If the number of retries is exceeded and the customer's API is unable to handle any particular message, that message will be dropped. Real-time information lost in this way will typically be available in historical reporting feeds. ## Real-time Overview ASAPP's standard real-time events include data representing human interactions and general issue lifecycle information from the ASAPP feeds named `com.asapp.event.activity`, `com.asapp.event.journey`, and `com.asapp.event.queue`. In the future, when additional event sources are added, the event source will be reflected in the name of the stream. ## Payload Schema Each of ASAPP's feeds will deliver a single event's data in a payload comprised of a two-level JSON object. The delivered payload includes: 1. Routing metadata at the top level common to all events. *A small set of fields that should always be present for all events, used for routing, filtering, and deduplication.* 2. Metadata common to all events. *These fields should usually be present for all events to provide meta-information on the event. Some fields may be omitted if they do not apply to the specific feed.* 3. Data specific to the event feed. *Some fields may be omitted but the same total set can be expected for each event of the same origin* 4. Details specific to the event type. Null fields will be omitted -- the customer's API is expected to interpret missing keys as null. **Versioning** Minor-versions upgrades to the events are expected to be backwards-compatible; major-version updates typically include an interface-breaking change that may require the customer to update their API in order to take advantage of new features. ## Activity Feed The agent activity feed provides a series of events for agent login and status changes. ASAPP processes the event data minimally before pushing it into the `activity` feed to: * Convert internal flags to meaningful human-readable strings * Filter the feed to include only data fields of potential interest to the customer ASAPP's `activity` feed does not implement complex event processing (e.g., aggregation based on time windows, groups of events, de-duplication, or system state tracking). Any required aggregation or deduplication should be executed by the customer after receiving `activity` events. ### Sample Event JSON ```json { "api_version": "v1.3.0", "name": "com.asapp.event.activity", "meta_data": { "create_time": "2022-06-21T20:10:24.411Z", "event_time": "2022-06-21T20:10:24.411Z", "session_id": "string", "issue_id": "string", "company_subdivision": "string", "company_id": "string", "company_segments": [ "string" ], "client_id": "string", "client_type": "SMS" }, "data": { "rep_id": "string", "desk_mode": "UNKNOWN", "rep_name": "string", "agent_given_name": "string", "agent_family_name": "string", "agent_display_name": "string", "external_rep_id": "string", "max_slots": 0, "queue_ids": [ "string" ], "queue_names": [ "string" ] }, "event_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "event_type": "UNKNOWN", "details": { "status_updated_ts": "2022-06-21T20:10:24.411Z", "status_description": "string", "routing_status_updated_ts": "2022-06-21T20:10:24.411Z", "routing_status": "UNKNOWN", "assignment_load_updated_ts": "2022-06-21T20:10:24.411Z", "assigned_customer_ct": 0, "previous_routing_status_updated_ts": "2022-06-21T20:10:24.411Z", "previous_routing_status": "UNKNOWN", "previous_routing_status_duration_sec": 0, "previous_routing_status_start_ts": "2022-06-21T20:10:24.411Z", "utilization_5_min_updated_ts": "2022-06-21T20:10:24.411Z", "utilization_5_min_window_start_ts": "2022-06-21T20:10:24.411Z", "utilization_5_min_window_end_ts": "2022-06-21T20:10:24.411Z", "utilization_5_min_any_status": { "linear_sec": 0, "linear_utilized_sec": 0, "cumulative_sec": 0, "cumulative_utilized_sec": 0 }, "utilization_5_min_active": { "linear_sec": 0, "linear_utilized_sec": 0, "cumulative_sec": 0, "cumulative_utilized_sec": 0 }, "utilization_5_min_away": { "linear_sec": 0, "linear_utilized_sec": 0, "cumulative_sec": 0, "cumulative_utilized_sec": 0 }, "utilization_5_min_offline": { "linear_sec": 0, "linear_utilized_sec": 0, "cumulative_sec": 0, "cumulative_utilized_sec": 0 }, "utilization_5_min_wrapping_up": { "linear_sec": 0, "linear_utilized_sec": 0, "cumulative_sec": 0, "cumulative_utilized_sec": 0 } } } ``` ### Field Explanations | Field | Description | | :---------------------- | :------------------------------------------------------------------------------------------------------------------- | | api\_version | Major and minor version of the API, compatible with the base major version | | name | Source of this event stream - use for filtering / routing | | event\_type | Event type within the stream - use for filtering / routing | | event\_id | Unique ID of an event, used to identify identical duplicate events | | meta\_data.create\_time | UTC creation time of this message | | meta\_data.event\_time | UTC time the event happened within the system - usually some ms before create time | | meta\_data.session\_id | Customer-side identifier to link events together based on customer session. May be null for system-generated events. | | meta\_data.client\_id | May include client type, device, and version, if present in the event headers | | data.rep\_id | Internal ASAPP identifier of an agent | | details | These fields vary based on the individual event type - only fields relevant to the event type will be present | Adding the `event_list` filter in the configuration allows the receiver of the real-time feed to indicate for which event types they want to receive an Activity message. This message will still contain all the fields that have been populated, as the events are being accumulated in the Activity message for that same `rep_id`. For example: If the `event_list` contains only `agent_activity_status_updated`, the Activity messages will still contain all the fields (`status_description`, `routing_status`, `previous_routing_status`, `assigned_customer_ct`, `utilization_5_min_active`, etc), but will only be sent whenever the agent status was updated. ### Event Types * `agent_activity_identity_updated` * `agent_activity_status_updated` * `agent_activity_capacity_updated` * `agent_activity_assignment_load_updated` * `agent_activity_routing_status_updated` * `agent_activity_previous_routing_status` * `agent_activity_queue_membership` * `agent_activity_utilization_5_min` ## Journey Feed The customer journey feed tracks important events in the customer's interaction with ASAPP. ASAPP processes the event data before pushing it into the `journey` feed to: * Collect conversation and session events into a single feed of the customer journey * Add metadata properties to the events to assist with contextualizing the events This feature is available only for ASAPP Messaging. ASAPP's `journey` feed does not implement aggregation. Any aggregation or deduplication required by the customer's use case will need to be executed by the customer after receiving `journey` events. ### Sample Event JSON ```json { "api_version": "string", "name": "com.asapp.event.journey", "meta_data": { "create_time": "2024-08-06T13:57:43.053Z", "event_time": "2024-08-06T13:57:43.053Z", "session_id": "string", "issue_id": "string", "company_subdivision": "string", "company_id": "string", "company_segments": [ "string" ], "client_id": "string", "client_type": "UNKNOWN" }, "data": { "customer_id": "string", "opportunity_origin": "UNKNOWN", "opportunity_id": "string", "queue_id": "string", "session_id": "string", "session_type": "string", "user_id": "string", "user_type": "string", "session_update_ts": "2024-08-06T13:57:43.053Z", "agent_id": "string", "agent_name": "string", "agent_given_name": "string", "agent_family_name": "string", "agent_display_name": "string", "queue_name": "string", "external_agent_id": "string" }, "event_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "event_type": "ISSUE_CREATED", "details": { "issue_start_ts": "2024-08-06T13:57:43.053Z", "intent_code": "string", "business_intent_code": "string", "flow_node_type": "string", "flow_node_name": "string", "intent_code_path": "string", "business_intent_code_path": "string", "flow_name_path": "string", "business_flow_name_path": "string", "issue_ended_ts": "2024-08-06T13:57:43.053Z", "survey_responses": [ { "question": "string", "question_category": "string", "question_type": "string", "answer": "string", "ordering": 0 } ], "survey_submit_ts": "2024-08-06T13:57:43.053Z", "last_flow_action_called_ts": "2024-08-06T13:57:43.053Z", "last_flow_action_called_node_name": "string", "last_flow_action_called_action_id": "string", "last_flow_action_called_version": "string", "last_flow_action_called_inputs": { "additionalProp1": { "value": "string", "value_type": "VALUE_TYPE_UNKNOWN" }, "additionalProp2": { "value": "string", "value_type": "VALUE_TYPE_UNKNOWN" }, "additionalProp3": { "value": "string", "value_type": "VALUE_TYPE_UNKNOWN" } }, "detected_ts": "2024-08-06T13:57:43.053Z", "escalated_ts": "2024-08-06T13:57:43.053Z", "queued_ts": "2024-08-06T13:57:43.053Z", "assigned_ts": "2024-08-06T13:57:43.053Z", "abandoned_ts": "2024-08-06T13:57:43.053Z", "queued_ms": 0, "opportunity_ended_ts": "2024-08-06T13:57:43.053Z", "ended_type": "string", "assigment_ended_ts": "2024-08-06T13:57:43.053Z", "handle_ms": 0, "is_ghost_customer": true, "last_agent_utterance_ts": "2024-08-06T13:57:43.053Z", "agent_utterance_ct": 0, "agent_first_response_ms": 0, "timeout_ts": "2024-08-06T13:57:43.053Z", "last_customer_utterance_ts": "2024-08-06T13:57:43.053Z", "customer_utterance_ct": 0, "is_resolved": true, "customer_ended_ts": "2024-08-06T13:57:43.053Z", "customer_params_field_01": "string", "customer_params_field_02": "string", "customer_params_field_03": "string", "customer_params_field_04": "string", "customer_params_field_05": "string", "customer_params_field_06": "string", "customer_params_field_07": "string", "customer_params_field_08": "string", "customer_params_field_09": "string", "customer_params_field_10": "string", "customer_params_key_name_01": "string", "customer_params_key_name_02": "string", "customer_params_key_name_03": "string", "customer_params_key_name_04": "string", "customer_params_key_name_05": "string", "customer_params_key_name_06": "string", "customer_params_key_name_07": "string", "customer_params_key_name_08": "string", "customer_params_key_name_09": "string", "customer_params_key_name_10": "string", "uploaded_files_list": [ { "file_upload_event_id": "string", "file_upload_ts": "2024-10-03T12:30:55.123Z", "file_name": "string", "file_mime_type": "UNKNOWN", "file_size_mb": 0, "file_image_width": 0, "file_image_height": 0 } ] } } ``` ### Field Explanations | Field | Description | | :------------------------------ | :----------------------------------------------------------------------------------------------------- | | api\_version | Major and minor version of the API, compatible with the base major version | | name | Source of this event stream - use for filtering / routing | | event\_type | Event type within the stream - use for filtering / routing | | event\_id | Unique ID of an event, used to identify identical duplicate events | | meta\_data.create\_time | UTC creation time of this message | | meta\_data.event\_time | UTC time the event happened within the system - usually some ms before create time | | meta\_data.session\_id | Customer-side identifier to link events together based on customer session | | meta\_data.issue\_id | ASAPP internal tracking of a conversation - used to tie events together in the ASAPP system | | meta\_data.company\_subdivision | Filtering metadata | | meta\_data.company\_segments | Filtering metadata | | meta\_data.client\_id | May include client type, device, and version | | data.customer\_id | Internal ASAPP identifier of the customer | | data.rep\_id | Internal ASAPP identifier of an agent. Will be null if no rep is assigned | | data.group\_id | Internal ASAPP identifier of a company group or queue. Will be null if not routed to a group of agents | | details | The details of the event. All details are omitted when empty | ### Event Types * `ISSUE_CREATED` * `ISSUE_ENDED` * `INTENT_CHANGE` * `FIRST_INTENT_UPDATED` * `INTENT_PATH_UPDATED` * `NODE_VISITED` * `LINK_RESOLVED` * `FLOW_SUCCESS` * `FLOW_SUCCESS_NEGATED` * `END_SRS_RESPONSE` * `SURVEY_SUBMITTED` * `CONVERSATION_ENDED` * `CUSTOMER_ENDED` * `ISSUE_SESSION_UPDATED` * `DETECTED` * `OPPORTUNITY_ENDED` * `OPPORTUNITY_ESCALATED` * `QUEUED` * `QUEUE_ABANDONED` * `TIMED_OUT` * `TEXT_MESSAGE` * `FIRST_OPPORTUNITY` * `QUEUED_DURATION` * `CUSTOMER_RESPONSE_BY_OPPORTUNITY` * `ISSUE_OPPORTUNITY_QUEUE_INFO_UPDATED` * `ASSIGNED` * `ASSIGNMENT_ENDED` * `AGENT_RESPONSE_BY_OPPORTUNITY` * `SUPERVISOR_UTTERANCE_BY_OPPORTUNITY` * `AGENT_FIRST_RESPONDED` * `ISSUE_ASSIGNMENT_AGENT_INFO_UPDATED` * `LAST_FLOW_ACTION_CALLED` * `JOURNEY_CUSTOMER_PARAMETERS` * `FILE_UPLOAD_DETECTED` Adding the `event_list` filter in the configuration allows the receiver of the real-time feed to indicate for which event types they want to receive a Journey message. This message will still contain all the fields that have been populated, as the events are being accumulated in the Journey message for that same `issue_id`. Example: if the `event_list` contains only `SURVEY_SUBMITTED` the Journey messages will still contain all the fields (`issue_start_ts`, `assigned_ts`, `survey_responses`, etc), but will only be sent whenever the survey submitted event happens. ## Queue State Feed The queue state feed provides a set of events describing the state of a queue over the course of time. ASAPP processes the event data before pushing it into the `queue` feed to: * Collect queue volume, queue time and queue hours events into a single feed of the queue state * Add metadata properties to the events to assist with contextualizing the events ASAPP's `queue` feed does not implement aggregation. Any aggregation or deduplication required by the customer's use case will need to be executed by the customer after receiving `queue` events. ### Sample Event JSON ```json { "api_version": "v1.3.0", "name": "com.asapp.event.queue", "meta_data": { "create_time": "2022-06-21T20:02:54.418Z", "event_time": "2022-06-21T20:02:54.418Z", "session_id": "string", "issue_id": "string", "company_subdivision": "string", "company_id": "string", "company_segments": [ "string" ], "client_id": "string", "client_type": "SMS" }, "data": { "queue_id": "string", "queue_name": "string", "business_hours_time_zone_offset_minutes": 0, "business_hours_time_zone_name": "string", "business_hours_start_minutes": [ 0 ], "business_hours_end_minutes": [ 0 ], "holiday_closed_dates": [ "2022-06-21T20:02:54.418Z" ], "queue_capping_enabled": true, "queue_capping_estimated_wait_time_seconds": "Unknown Type: float", "queue_capping_size": 0, "queue_capping_fallback_size": 0 }, "event_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "event_type": "UNKNOWN", "details": { "last_queue_size": 0, "last_queue_size_ts": "2022-06-21T20:02:54.418Z", "last_queue_size_update_type": "UNKNOWN", "estimated_wait_time_updated_ts": "2022-06-21T20:02:54.418Z", "estimated_wait_time_seconds": "Unknown Type: float", "estimated_wait_time_is_available": true } } ``` ### Field Explanations | Field | Description | | :-------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------- | | api\_version | Major and minor version of the API, compatible with the base major version | | name | Source of this event stream - use for filtering / routing | | meta\_data.create\_time | UTC creation time of this message | | meta\_data.event\_time | UTC time the event happened within the system - usually some ms before create time | | meta\_data.session\_id | Customer-side identifier to link events together based on customer session. May be null for system-generated events. | | meta\_data.issue\_id | ASAPP internal tracking of a conversation - used to tie events together in the ASAPP system | | meta\_data.company\_subdivision | Filtering metadata | | meta\_data.company\_id | The short name used to uniquely identify the company associated with this event. This will be constant for any feed integration. | | meta\_data.company\_segments | Filtering metadata | | meta\_data.client\_id | May include client type, device, and version | | meta\_data.client\_type | The lower-cardinality, more general classification of the client used for the customer interaction | | data.queue\_id | Internal ASAPP ID for this queue | | data.queue\_name | The name of the queue | | data.business\_hours\_time\_zone\_offset\_minutes | The number of minutes offset from UTC for calculating or displaying business hours | | data.business\_hours\_time\_zone\_name | A time zone name used for display or lookup | | data.business\_hours\_start\_minutes | A list of offsets (in minutes from Sunday at 0:00) that correspond to the time the queue transitions from closed to open | | data.business\_hours\_end\_minutes | Same as business\_hours\_start\_minutes but for the transition from open to closed | | data.holiday\_closed\_dates | A list of dates currently configured as holidays | | data.queue\_capping\_enabled | Indicates if any queue capping is applied when enqueueing issues | | data.queue\_capping\_estimated\_wait\_time\_seconds | If the estimated wait time exceeds this threshold (in seconds), the queue will be capped. Zero is no threshold. | | data.queue\_capping\_size | If the queue size is greater than or equal to this threshold, the queue will be capped. Zero is no threshold. This applies independent of estimated wait time. | | data.queue\_capping\_fallback\_size | If there is no estimated wait time and the queue size is greater than or equal to this threshold, the queue will be capped. Zero is no threshold. | | event\_id | Unique ID of an event, used to identify identical duplicate events | | event\_type | Event type within the stream - use for filtering / routing | | details.last\_queue\_size | The latest size of the queue | | details.last\_queue\_size\_ts | Time when the latest queue size update happened | | details.last\_queue\_size\_update\_type | The reason for the latest queue size change | | details.estimated\_wait\_time\_updated\_ts | Time when the estimate was last updated | | details.estimated\_wait\_time\_seconds | The number of seconds a user at the end of the queue can expect to wait | | details.estimated\_wait\_time\_is\_available | Indicates if there is enough data to provide an estimate | ### Event Types * `queue_info_updated` * `queue_size_updated` * `queue_estimated_wait_time_updated` * `business_hours_settings_updated` * `holiday_settings_updated` * `queue_capping_settings_updated` * `queue_mitigation_updated` * `queue_availability_updated` # Retrieving Data for ASAPP Messaging Source: https://docs.asapp.com/reporting/retrieve-messaging-data Learn how to retrieve data from ASAPP Messaging ASAPP provides secure access to your messaging application data through SFTP (Secure File Transfer Protocol). The data exported will need to be [deduplicated](#removing-duplicate-data) before importing into your system. If you're retrieving data from ASAPP's AI Services, use [File Exporter](/reporting/file-exporter) instead. ## Download Data via SFTP To download data from ASAPP via SFTP, you need to: You need to generate a SSH key pair and share the public key with ASAPP. If you don't have one already, you can generate one using the ssh-keygen command. ```bash ssh-keygen -b 4096 ``` This will walk you creating a key pair. Share your `.pub` file with your ASAPP team. To connect to the SFTP server, you will need to use the following information: * Host: `prod-data-sftp.asapp.com` * Port: `22` * Username: `sftp{company name}` If you are unsure what your company name is, please reach out to your ASAPP account team. You should not use a password for SSH directly as you will be using the SSH key pair to authenticate. If you have a passphrase on your SSH key, you will need to enter it when prompted. Once connected, you can download or upload files. The folder structure and file names have a naming standard indicating the feed type and time of export, and other relevant information: `/FEED_NAME/version=VERSION_NUMBER/format=FORMAT_NAME/dt=DATE/hr=HOUR/mi=MINUTE/DATAFILE(S)` | Path Element | Description | | :-------------- | :------------------------------------------------------------------------------------------------------------------------------------------------ | | **FEED\_NAME** | The name of the table, extract, feed, etc. | | **version** | The version of the feed at hand. Changes whenever the schema, meaning of a column, etc., changes in a way that could break existing integrations. | | **format** | The format of the exported data. Almost always, this will be JSON Lines.\* | | **dt** | The YYYY-MM-DD formatted date corresponding to the exported data. | | **hr** | The hour of the day the data was exported. | | **mi** | The minute of the hour the data was exported. | | **DATAFILE(s)** | The filename or filenames of the exported feed partition. | It is possible to have duplicate entries within a given data feed for a given day. You need to [remove duplicates](#removing-duplicate-data) before importing it. File names that correspond to an exported feed partition will have names in the following form: `\{FEED_NAME\}\{FORMAT\}\{SPLIT_NUMBER\}.\{COMPRESSION\}.\{ENCRYPTION\}` | File name element | Description | | :---------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **FEED\_NAME** | The feed name from which this partition is exported. | | **FORMAT** | .jsonl | | **SPLIT\_NUMBER** | (optional) In the event that a particular partition's export needs to be split across multiple physical files in order to accommodate file size constraints, each split file will be suffixed with a dot followed by a two-digit incrementing sequence. If the whole partition can fit in a single file, no SPLIT\_NUMBER will be present in the file name. | | **COMPRESSION** | (optional) .gz will be appended to the file name if the file is gzip compressed. | | **ENCRYPTION** | (optional) In the atypical case where a file written to the SFTP store is doubly encrypted, the filename will have a .enc extension. | ### Verifying the Data Export is Complete New Export files are continuously being generated depending on the feed and the export schedule. You can check the `_SUCCESS` file to verify that the export is complete. Upon completing the generating for a particular partition, ASAPP will create an EMPTY file named `_SUCCESS` to the same path as the export file or files. This `_SUCCESS` file acts as a flag indicating that the generation for the associated partition is complete. A `_SUCCESS` file will be written even if there is no available data selected for export for the partition at hand. Until the `_SUCCESS` file is created, ASAPP's export is in progress and you should not import the associated data file. You should check for this file before downloading any data partition. ### General Data Formatting Notes All ASAPP exports are formatted as follows: * Files are in [JSON Lines format](http://jsonlines.org/). * ASAPP export files are UTF-8 encoded. * Control characters are escaped. * Files are formatted with Unix-style line endings. ## Removing Duplicate Data ASAPP continuously generates data, which means newer files may contain updated versions of previously exported records. To ensure you're working with the most up-to-date information, you need to remove duplicate data by keeping only the latest version of each record and discarding older duplicates. To remove duplicates from the feeds, download the latest instance of a feed, and use the **Unique Conditions** as the "primary key" for that feed. Each table's unique conditions are listed in the relevant [feed schema](/reporting/asapp-messaging-feeds). ### Example In order to remove duplicates from the table [`convos_metrics`](/reporting/asapp-messaging-feeds#table-convos-metrics), use this query: ```sql SELECT * FROM (SELECT *, ROW_NUMBER() OVER (partition by {{ primary_key }} order by {{ logical_timestamp}} DESC, {{ insertion_timestamp }} DESC) as row_idx FROM convos_metrics ) WHERE row_idx = 1 ``` We partition by the `primary_key` for that table and get the latest data using order by `logical_timestamp`DESC in the subquery. Then we only select where `row_idx` = 1 to only pull the latest information we have for each `issue_id`. ### Schema Adjustments We will occasionally extend the schema of an existing feed to add new columns. Your system should be able to handle these changes gracefully. We will communicate any changes to the schema via your ASAPP account team. You can also enable automated schema evolution detection and identify any changes using `export_docs.yaml`, which is generated each day and sent via the S3 feed. By incorporating this into the workflows, you can maintain a proactive stance, ensuring uninterrupted service and a smooth transition in the event of schema adjustments. ## Export Schema We publish a [schema for each feed](/reporting/asapp-messaging-feeds). These schemas include the unique conditions for each table that you can use to remove duplicates from your data. If you are retrieving data from Standalone Services, you need to use [File Exporter](/reporting/file-exporter). # Secure Data Retrieval Source: https://docs.asapp.com/reporting/secure-data-retrieval Learn how to set up secure communication between ASAPP and your real-time event API. # Secure Data Retrieval Communication between ASAPP and a customer's real-time event API endpoint is secured using TLS, specifically Mutual-TLS (mTLS). This document provides details on the expected configuration of the mTLS-secured connection between ASAPP and the customer application. ## Overview Mutual TLS requires that both server and client authenticate using digital certificates. The mTLS-secured integration with ASAPP relies on public certificate authorities (CAs). In this scenario, clients and servers host certificates issued by trusted public CAs (like Digicert, Symantec, etc.). ## Certificate Configuration To further secure the connection, ASAPP requires the following additional configurations: 1. ASAPP's client certificate will contain a unique identifier in the "Subject" field. Customers can use this identifier to confirm that the presented certificate is from a legitimate ASAPP service. This identifier will be based on client identification conventions mutually agreed upon by ASAPP and the customer (e.g., UUIDs, namespaces). 2. Both server and client certificates will have validities of less than 3 years, in accordance with industry best practices. 3. Server certificates must have the "Extended Key Usage" field support "TLS Web Server Authentication" only. Client certificates must have the "Extended Key Usage" field support "TLS Web Client Authentication" only. 4. Minimum key sizes for client/server certificates should be: * 3072-bit for RSA * 256-bit for AES ## TLS/HTTPS Settings REST endpoints must only support TLSv1.3 when setting up HTTPS connections. Older versions support weak ciphers that can be broken if a sufficient number of packets are captured. ### Supported Ciphers Ensure that only the following ciphers (or equivalent) are supported by each endpoint: * TLS\_ECDHE\_ECDSA\_WITH\_AES\_256\_GCM\_SHA384 * TLS\_ECDHE\_RSA\_WITH\_AES\_128\_GCM\_SHA256 * TLS\_ECDHE\_RSA\_WITH\_AES\_256\_GCM\_SHA384 * TLS\_ECDHE\_ECDSA\_WITH\_CHACHA20\_POLY1305\_SHA256 * TLS\_ECDHE\_ECDSA\_WITH\_CHACHA20\_POLY1305 * TLS\_ECDHE\_RSA\_WITH\_CHACHA20\_POLY1305\_SHA256 * TLS\_ECDHE\_RSA\_WITH\_CHACHA20\_POLY1305 ### Session Limits TLS settings should limit each session to a short period. TLS libraries like OpenSSL set this to 300 seconds by default, which is sufficiently secure. A short session limits the usage of per-session AES keys, preventing potential brute-force analysis by attackers who capture session packets. Qualys provides a free tool called SSLTest ([https://www.ssllabs.com/ssltest/](https://www.ssllabs.com/ssltest/)) to check for common issues in server TLS configuration. We recommend using this tool to test your public TLS endpoints before deploying to production. # Transmitting Data via S3 Source: https://docs.asapp.com/reporting/send-s3 S3 is the supported mechanism for ongoing data transmissions, though can also be used for one-time transfers where needed. ASAPP customers can transmit the following types of data to S3: * Call center data attributes * Conversation transcripts from messaging or voice interactions * Recorded call audio files * Sales records with attribution metadata ## Getting Started ### Your Target S3 Buckets ASAPP will provide you with a set of S3 buckets to which you may securely upload your data files, as well as a dedicated set of credentials authorized to write to those buckets. See the next section for more on those credentials. For clarity, ASAPP name buckets use the following convention: `s3://asapp-\{env\}-\{company_name\}-imports-\{aws-region\}`

Key

Description

env

Environment (prod, pre\_prod, test)

company\_name

The company name: acme, duff, stark\_industries, etc.

Note: company name should not have spaces within.

aws-region

us-east-1

Note: this is the current region supported for your ASAPP instance.

So, for example, an S3 bucket set up to receive pre-production data from ACME would be named: `s3://asapp-pre_prod-acme-imports-us-east-1` #### S3 Target for Historical Transcripts ASAPP has a distinct target location for sending historical transcripts for AI Services and will provide an exclusive access folder to which transcripts should be uploaded. The S3 bucket location follows this naming convention: `asapp-customers-sftp-\{env\}-\{aws-region\}` Values for `env` and `aws-region` are set in the same way as above. As an example, an S3 bucket to receive transcripts for use in production is named: `asapp-customers-sftp-prod-us-east-1` See the [Historical Transcript File Structure](/reporting/send-s3#historical-transcript-file-structure "Historical Transcript File Structure") section more information on how to format transcript files for transmission. ### Encryption ASAPP ensures that the data you write to your dedicated S3 buckets is encrypted in transit using TLS/SSL and encrypted at rest using AES256. ### Your Dedicated Export AWS Credentials ASAPP will provide you with a set of AWS credentials that allow you to securely upload data to your designated S3 buckets. (Since you need write access in order to upload data to S3, you'll need to use a different set of credentials than the read-only credentials you might already have.) In order for ASAPP to securely send credentials to you, you must provide ASAPP with a public GPG key that we can use to encrypt a file containing those credentials. GitHub provides one of many good available  tutorials on GPG key generation here: [https://help.github.com/en/articles/generating-a-new-gpg-key](https://help.github.com/en/articles/generating-a-new-gpg-key) . It's safe to send your public GPG key to ASAPP using any available channel. Please do NOT provide ASAPP with your private key. Once you've provided ASAPP with your public GPG key, we'll forward to you an expiring https link pointing to an S3-hosted file containing credentials that have permissions to write to your dedicated S3 target buckets. ASAPP's standard practice is to have these links expire after 24 hours. The file itself will be encrypted using your public GPG key. Once you decrypt the provided file using your private GPG key, your credentials will be contained within a tab delimited file with the following structure: `id     secret      bucket     sub-folder (if any)` ## Data File Formatting and Preparation **General Requirements:** * Files should be UTF-8 encoded. * Control characters should be escaped. * You may provide files as CSV or JSONL format, but we strongly recommend JSONL where possible. (CSV files are just too fragile.) * If you send a CSV file, ASAPP recommends that you include a header. Otherwise, your CSV must provide columns in the exact order listed below. * When providing a CSV file, you must provide an explicit null value (as the unquoted string: `NULL` ) for missing or empty values. ### Call Center Data File Structure The table below shows the required fields to include in your uploaded call center data.

FIELD NAME

REQUIRED?

FORMAT

EXAMPLE

NOTES

customer\_id

Yes

String

347bdddb-d3a1-45fc-bbcd-dbd3a175fc1c

External User ID. This is a hashed version of the client ID.

conversation\_id

No

String

21352352

If filled in, should map to ASAPP's system.  May be empty, if the customer has not had a conversation with ASAPP.

call\_start

Yes

Timestamp

2020-01-03T20:02:13Z

ISO 8601 formatted UTC timestamp.  Time/date call is received by the system.

call\_end

Yes

Timestamp

2020-01-03T20:02:13Z

ISO 8601 formatted UTC timestamp.  Time/date call ends.

Note: duration of call should be Call End - Call Start.

call\_assigned\_to\_agent

No

Timestamp

2020-01-03T20:02:13Z

ISO 8601 formatted UTC timestamp. The date/time the call was answered by the agent.

customer\_type

No

String

Wireless Premier

Customer account classification by client.

survey\_offered

No

Bool

true/false

Whether a survey was offered or not.

survey\_taken

No

Bool

true/false

When a survey was offered, whether it was completed or not.

survey\_answer

No

String

Survey answer

toll\_free\_number

No

String

888-929-1467

Client phone number (toll free number) used to call in that allows for tracking different numbers, particularly ones referred directly by SRS.

If websource or click to call, the web campaign is passed instead of TFN.

ivr\_intent

No

String

Power Outage

Phone pathing logic for routing to the appropriate agent group or providing self-service resolution. Could be multiple values.

ivr\_resolved

No

Bool

true/false

Caller triggered a self-service response from the IVR and then disconnected.

ivr\_abandoned

No

Bool

true/false

Caller disconnected without receiving a self-service response from IVR nor being placed in live agent queue.

agent\_queue\_assigned

No

String

Wireless Sales

Agent group/agent skill group (aka queue name)

time\_in\_queue

No

Integer

600

Seconds caller waits in queue to be assigned to an agent.

queue\_abandoned

No

Bool

true/false

Caller disconnected after being assigned to a live agent queue but before being assigned to an agent.

call\_handle\_time

No

Integer

650

Call duration in seconds from call assignment event to call disconnect event.

call\_wrap\_time

No

Integer

30

Duration in seconds from call disconnect event to end of agent wrap event.

transfer

No

String

Sales Group

Agent queue name if call was transferred. NA or Null value for calls not transferred.

disposition\_category

No

String

Change plan

Categorical outcome selection from agent. Alternatively, could be category like 'Resolved', 'Unresolved', 'Transferred', 'Referred'.

disposition\_notes

No

String

Notes from agent regarding the disposition of the call.

transaction\_completed

No

String

Upgrade Completed, Payment Processed

Name of transaction type completed by call agent on behalf of customer. Could contain multiple delimited values. May not be available for all agents.

caller\_account\_value

No

Decimal

129.45

Current account value of customer.

### Historical Transcript File Structure ASAPP accepts uploads for historical conversation transcripts for both voice calls and chats. The fields described below must be the columns in your uploaded .CSV table. Each row in the uploaded .CSV table should correspond to one sent message. | FIELD NAME | REQUIRED? | FORMAT | EXAMPLE | NOTES | | :--------------------------- | :-------- | :-------- | :------------------------------- | :------------------------------------------------ | | **conversation\_externalId** | Yes | String | 3245556677 | Unique identifier for the conversation | | **sender\_externalId** | Yes | String | 6433421 | Unique identifier for the sender of the message | | **sender\_role** | Yes | String | agent | Supported values are 'agent', 'customer' or 'bot' | | **text** | Yes | String | Happy to help, one moment please | Message from sender | | **timestamp** | Yes | Timestamp | 2022-03-16T18:42:24.488424Z | ISO 8601 formatted UTC timestamp | Proper transcript formatting and sampling ensures data is usable for model training. Please ensure transcripts conform to the following: **Formatting** * Each utterance is clearly demarcated and sent by one identified sender * Utterances are in chronological order and complete, from beginning to very end of the conversation * Where possible, transcripts include the full content of the conversation rather than an abbreviated version. For example, in a digital messaging conversation:

Full

Abbreviated

Agent: Choose an option from the list below

Agent: (A) 1-way ticket (B) 2-way ticket (C) None of the above

Customer: (A) 1-way ticket

Agent: Choose an option from the list below

Customer: (A)

**Sampling** * Transcripts are from a wide range of dates to avoid seasonality effects; random sampling over a 12-month period is recommended * Transcripts mimic the production conversations on which models will be used - same types of participants, same channel (voice, messaging), same business unit * There are no duplicate transcripts
**Transmitting Transcripts to S3** Historical transcripts are sent to a distinct S3 target separate from other data imports. Please refer to the [S3 Target for Historical Transcripts](/reporting/send-s3#your-target-s3-buckets "Your Target S3 Buckets") section for details. ### Sales Methods & Attribution Data File Structure The table below shows the required fields to be included in your uploaded sales methods and attribution data. | FIELD NAME | REQUIRED? | FORMAT | EXAMPLE | NOTES | | :-------------------------------- | :-------- | :-------- | :------------------------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **transaction\_id** | Yes | String | 1d71dce2-a50c-11ea-bb37-0242ac130002  | An identifier which is unique within the customer system to track this transaction. | | **transaction\_time** | Yes | Timestamp | 2007-04-05T14:30:05.123Z | ISO 8601 formatted UTC timestamp. Details potential duplicates and also attribute to the right period of time | | **transaction\_value\_one\_time** | No | Float | 65.25 | Single value of initial purchase. | | **transaction\_value\_recurring** | No | Float | 7.95 | Recurring value of subscription purchase. | | **customer\_category** | No | String | US | Custom category value per client. | | **customer\_subcategory** | No | String | wireless | Custom subcategory value per client. | | **external\_customer\_id** | No | String | 34762720001 | External User ID. This is hashed version of the client ID. In order to attribute to ASAPP metadata, one of these will be required (Customer ID or Conversation ID) | | **issue\_id** | No | String | 1E10412200CC60EEABBF32 | IF filled in, should map to ASAPP's system. May be empty, if the customer has not had a conversation with ASAPP. In order to attribute to ASAPP metadata, one of these will be required (Customer ID or Conversation ID) | | **external\_session\_id** | Yes | String | 1a09ff6d-3d07-45dc-8fa9-4936bfc4e3e5 | External session id so we can track a customer | | **product\_category** | No | String | Wireless Internet | Category of product purchased. | | **product\_subcategory** | No | String | Broadband | Subcategory of product purchased. | | **product\_name** | No | String | Broadband Gold Package | The name of the product. | | **product\_id** | No | String | WI-BBGP | The identifier of the product. | | **product\_quantity** | Yes | Integer | 1 | A number indicating the quantity of the product purchased. | | **product\_value\_one\_time** | No | Float | 60.00 | Value of the product for one time purchase. | | **product\_value\_recurring** | No | Float | 55.00 | Value of the product for recurring purchase. | ## Uploading Data to S3 At a high level, uploading your data is a three step process: 1. Build and format your files for upload, as detailed above. 2. Construct a "target path" for those files following the convention in the section "Constructing your Target Path" below. 3. Signal the completion of your upload by writing an empty \_SUCCESS file to your "target path", as described in the section "Signaling that your upload is complete" below. ### Constructing your target path ASAPP's automation will use the S3 filename of your upload when deciding how to process your data file, where the filename is formatted as follows: `s3://BUCKET_NAME/FEED_NAME/version=VERSION_NUMBER/format=FORMAT_NAME/dt=DATE/hr=HOUR/mi=MINUTE/DATAFILE_NAME(S)` The following table details the convention that ASAPP follows when handling uploads: ### Signaling that Your Upload Is Complete Upon completing a data upload, you must upload an EMPTY file named \_SUCCESS to the same path as your uploaded file, as a flag that indicates your data upload is complete. Until this file is uploaded, ASAPP will assume that the upload is in progress and will not import the associated data file. As an example, let's say you're uploading one day of call center data in a set of files. ### Incremental and Snapshot Modes You may provide data to ASAPP as either Incremental or Snapshot data. The value you provide us in the `format` field discussed above, tells ASAPP whether to treat the data you provide as Incremental or Snapshot data. When importing data using **Incremental** mode, ASAPP will **append** the given data to the existing data imported for that `FEED_NAME`. When you specify **Incremental** mode, you are telling ASAPP that for a given date, the data which was uploaded is for that day only.  If you use the value `dt=2018-09-02` in your constricted filename, you are indicating that the data contained in that file includes records from `2018-09-02 00:00:00 UTC` → `2018-09-02 23:59:59 UTC`. When importing data using **Snapshot** mode, ASAPP will **replace** any existing data for the indicated `FEED_NAME` with the contents of the uploaded file. When you specify **Snapshot** mode, ASAPP treats the uploaded data as a complete record from "the time history started" until that particular day end.  A date of `2018-09-02` means the data includes, effectively, all things from `1970-01-01 00:00:00 UTC` → `2018-09-02 23:59:59 UTC`. ### Other Upload Notes and Tips 1. Make sure the structure for the imported file (whether columnar or json formatted) matches the current import standards (see below for details) 2. Data imports are scheduled daily, 4 hours after UTC midnight (for the previous day's data) 3. In the event that you upload historical data (i.e., from older dates than are currently in the system), please inform your ASAPP team so a complete re-import can be scheduled. 4. Snapshot data must go into a format=snapshot\_\{type} folder. 5. Providing a Snapshot allows you to provide all historical data at once.  In effect, this reloads the entire table rather than appending data as in the non-snapshot case. ### Upload Example The example below assumes a shell terminal with python 2.7+ installed. ```json # install aws cli (assumes python) pip install awscli # configure your S3 credentials if not already done aws configure # push the files for 2019-01-20 for the call_center_issues import # for a company named `umbrella-corp` to your local drive in production aws s3 cp /location/of/your/file.csv s3://asapp-prod-umbrella-corp-imports-us-east-1/call_center_issues/version=1/format=csv/dt=2019-01-20/ aws s3 cp _SUCCESS s3://asapp-prod-umbrella-corp-imports-us-east-1/call_center_issues/version=1/format=csv/dt=2019-01-20/ # you should see some files now in the s3 location aws s3 ls s3://asapp-prod-umbrella-corp-imports-us-east-1/call_center_issues/version=1/format=csv/dt=2019-01-20/ file.csv _SUCCESS ``` # Transmitting Data to SFTP Source: https://docs.asapp.com/reporting/send-sftp SFTP is the supported mechanism for **one-time data transmissions**, typically used for sending training data files during the implementation phase prior to initial launch. ASAPP customers can transmit the following types of training data via SFTP: * Conversation transcripts from messaging or voice interactions * Recorded call audio files * Free-text agent notes associated with messaging or voice interactions ## Getting Started ASAPP will require you to provide the following information to set up the SFTP site. * An SSH public key.  This should use RSA encryption with a key length of 4096 bits. ASAPP will provide you a username to associate with the key. This will be of the form: `sftp` where the company marker will be selected by ASAPP.  For example a username could be: `sftptestcompany` In your network, open port 22 outbound to sftp.us-east-1.asapp.com. ## Data File Formatting and Preparation **General Requirements:** * Files should be UTF-8 encoded. * Control characters should be escaped. * You may provide files as CSV or JSONL format, but we strongly recommend JSONL where possible. (CSV files are just too fragile.) * If you send a CSV file, ASAPP recommends that you include a header. Otherwise, your CSV must provide columns in the exact order listed below. * When providing a CSV file, you must provide an explicit null value (as the unquoted string: `NULL` ) for missing or empty values. ### Call Center Data File Structure The table below shows the required fields to include in your uploaded call center data.

FIELD NAME

REQUIRED?

FORMAT

EXAMPLE

NOTES

customer\_id

Yes

String

347bdddb-d3a1-45fc-bbcd-dbd3a175fc1c

External User ID. This is a hashed version of the client ID.

conversation\_id

No

String

21352352

If filled in, should map to ASAPP's system.  May be empty, if the customer has not had a conversation with ASAPP.

call\_start

Yes

Timestamp

2020-01-03T20:02:13Z

ISO 8601 formatted UTC timestamp.  Time/date call is received by the system.

call\_end

Yes

Timestamp

2020-01-03T20:02:13Z

ISO 8601 formatted UTC timestamp.  Time/date call ends.

Note: duration of call should be Call End - Call Start.

call\_assigned\_to\_agent

No

Timestamp

2020-01-03T20:02:13Z

ISO 8601 formatted UTC timestamp. The date/time the call was answered by the agent.

customer\_type

No

String

Wireless Premier

Customer account classification by client.

survey\_offered

No

Bool

true/false

Whether a survey was offered or not.

survey\_taken

No

Bool

true/false

When a survey was offered, whether it was completed or not.

survey\_answer

No

String

Survey answer

toll\_free\_number

No

String

888-929-1467

Client phone number (toll free number) used to call in that allows for tracking different numbers, particularly ones referred directly by SRS.

If websource or click to call, the web campaign is passed instead of TFN.

ivr\_intent

No

String

Power Outage

Phone pathing logic for routing to the appropriate agent group or providing self-service resolution. Could be multiple values.

ivr\_resolved

No

Bool

true/false

Caller triggered a self-service response from the IVR and then disconnected.

ivr\_abandoned

No

Bool

true/false

Caller disconnected without receiving a self-service response from IVR nor being placed in live agent queue.

agent\_queue\_assigned

No

String

Wireless Sales

Agent group/agent skill group (aka queue name)

time\_in\_queue

No

Integer

600

Seconds caller waits in queue to be assigned to an agent.

queue\_abandoned

No

Bool

true/false

Caller disconnected after being assigned to a live agent queue but before being assigned to an agent.

call\_handle\_time

No

Integer

650

Call duration in seconds from call assignment event to call disconnect event.

call\_wrap\_time

No

Integer

30

Duration in seconds from call disconnect event to end of agent wrap event.

transfer

No

String

Sales Group

Agent queue name if call was transferred. NA or Null value for calls not transferred.

disposition\_category

No

String

Change plan

Categorical outcome selection from agent. Alternatively, could be category like 'Resolved', 'Unresolved', 'Transferred', 'Referred'.

disposition\_notes

No

String

Notes from agent regarding the disposition of the call.

transaction\_completed

No

String

Upgrade Completed, Payment Processed

Name of transaction type completed by call agent on behalf of customer. Could contain multiple delimited values. May not be available for all agents.

caller\_account\_value

No

Decimal

129.45

Current account value of customer.

### Historical Transcript File Structure ASAPP accepts uploads for historical conversation transcripts for both voice calls and chats. The fields described below must be the columns in your uploaded .CSV table. Each row in the uploaded .CSV table should correspond to one sent message. | FIELD NAME | REQUIRED? | FORMAT | EXAMPLE | NOTES | | :--------------------------- | :-------- | :-------- | :------------------------------- | :------------------------------------------------ | | **conversation\_externalId** | Yes | String | 3245556677 | Unique identifier for the conversation | | **sender\_externalId** | Yes | String | 6433421 | Unique identifier for the sender of the message | | **sender\_role** | Yes | String | agent | Supported values are 'agent', 'customer' or 'bot' | | **text** | Yes | String | Happy to help, one moment please | Message from sender | | **timestamp** | Yes | Timestamp | 2022-03-16T18:42:24.488424Z | ISO 8601 formatted UTC timestamp | Proper transcript formatting and sampling ensures data is usable for model training. Please ensure transcripts conform to the following: **Formatting** * Each utterance is clearly demarcated and sent by one identified sender * Utterances are in chronological order and complete, from beginning to very end of the conversation * Where possible, transcripts include the full content of the conversation rather than an abbreviated version. For example, in a digital messaging conversation:

Full

Abbreviated

Agent: Choose an option from the list below

Agent: (A) 1-way ticket (B) 2-way ticket (C) None of the above

Customer: (A) 1-way ticket

Agent: Choose an option from the list below

Customer: (A)

**Sampling** * Transcripts are from a wide range of dates to avoid seasonality effects; random sampling over a 12-month period is recommended * Transcripts mimic the production conversations on which models will be used - same types of participants, same channel (voice, messaging), same business unit * There are no duplicate transcripts
### Sales Methods & Attribution Data File Structure The table below shows the required fields to be included in your uploaded sales methods and attribution data. | FIELD NAME | REQUIRED? | FORMAT | EXAMPLE | NOTES | | :-------------------------------- | :-------- | :-------- | :------------------------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **transaction\_id** | Yes | String | 1d71dce2-a50c-11ea-bb37-0242ac130002  | An identifier which is unique within the customer system to track this transaction. | | **transaction\_time** | Yes | Timestamp | 2007-04-05T14:30:05.123Z | ISO 8601 formatted UTC timestamp. Details potential duplicates and also attribute to the right period of time | | **transaction\_value\_one\_time** | No | Float | 65.25 | Single value of initial purchase. | | **transaction\_value\_recurring** | No | Float | 7.95 | Recurring value of subscription purchase. | | **customer\_category** | No | String | US | Custom category value per client. | | **customer\_subcategory** | No | String | wireless | Custom subcategory value per client. | | **external\_customer\_id** | No | String | 34762720001 | External User ID. This is hashed version of the client ID. In order to attribute to ASAPP metadata, one of these will be required (Customer ID or Conversation ID) | | **issue\_id** | No | String | 1E10412200CC60EEABBF32 | IF filled in, should map to ASAPP's system. May be empty, if the customer has not had a conversation with ASAPP. In order to attribute to ASAPP metadata, one of these will be required (Customer ID or Conversation ID) | | **external\_session\_id** | Yes | String | 1a09ff6d-3d07-45dc-8fa9-4936bfc4e3e5 | External session id so we can track a customer | | **product\_category** | No | String | Wireless Internet | Category of product purchased. | | **product\_subcategory** | No | String | Broadband | Subcategory of product purchased. | | **product\_name** | No | String | Broadband Gold Package | The name of the product. | | **product\_id** | No | String | WI-BBGP | The identifier of the product. | | **product\_quantity** | Yes | Integer | 1 | A number indicating the quantity of the product purchased. | | **product\_value\_one\_time** | No | Float | 60.00 | Value of the product for one time purchase. | | **product\_value\_recurring** | No | Float | 55.00 | Value of the product for recurring purchase. | ## Generate SSH Public Key Pair and Upload Files You can generate the key and upload files via Windows, Mac, or Linux. ### Windows Users If you are using Windows, follow the steps below: #### 1. Generate an SSH Key Pair There are multiple tools that you can use to generate an SSH Key Pair. For example: by using puTTYgen (available from [PuTTY](https://www.putty.org/) ) as shown below. Choose RSA and 4096 bits, then click **generate** and move the mouse pointer randomly.  When the key is generated, enter `sftp` followed by your company marker as the key comment. #### 2. Provide the Public Key to ASAPP Save the public and private key.  Only send the public file for your key pair to ASAPP.  This is not a secret and can be emailed. #### 3. Upload Files Use an SFTP utility such as Cyberduck (available from [Cyberduck](https://cyberduck.io/) ) to upload files to ASAPP.  Click **Open Connection**, add sftp.us-east-1.asapp.com as the Server,  and add `sftpcompanymarker` as the Username.  Choose the private key you generated in step 2 as the SSH Private Key and click **connect**.  The following screenshots show how to do this using Cyberduck. A pop-up window appears. Click to allow the unknown fingerprint.  You will then see the `in` and `out` directories. Double click the `in` directory and click **Upload** to choose files to send to ASAPP. ### Mac/Linux Users If you are using a Mac or Linux, follow the steps below: #### 1. Generate an SSH Key Pair If you are using a Mac or Linux, you can generate a key pair from the terminal as follows. If you already have an `id_rsa` file in the `.ssh` directory that you use with other applications, you should specify a different filename for the key so you do not overwrite it.  You can either do that with the `-f` option or type in a `filename` when prompted. `ssh-keygen -t rsa -b 4096 -C sftp; -f filename` For Example: `ssh-keygen -t rsa -b 4096 -C sftptestcompany -f keyforasapp` Where the filename will be the name of two files generated - `filename` (the private key you must keep to yourself) and `filename.pub` (the public key which ASAPP needs) If you do not have an `id_rsa` file in the `.ssh` directory, you can go with the default filename of  `id_rsa` and do not need to use the `-f` option. `ssh-keygen -t rsa -b 4096 -C sftp` #### 2. Provide the Public Key to ASAPP Send the `.pub` file for your key pair to ASAPP.  This is not a secret and can be emailed. #### 3. Upload Files You can upload files using the terminal or you can use [Cyberduck](https://cyberduck.io/). This section describes how to upload files using the terminal. To login to the ASAPP server, type one of the following: If you used the default id\_rsa key name: `sftp sftp@sftp.us-east-1.asapp.com` If you specified a different filename for the key: `sftp -oIdentityFile=filename` `sftp sftp@sftp.us-east-1.asapp.com` For Example: `sftp -oIdentityFile=keyforasapp` `sftptestcompany@sftp.us-east-1.asapp.com` You will see the command line prompt change to `sftp>` If the `sftp` command fails, adding the `-v` parameter will provide logging information to help to diagnose the problem. Use terminal commands such as `ls, cd, mkdir` on the remote server. * `ls:` list files * `cd:` change directory * `mkdir`: make a new directory `ls` will show two directories: `in` (for sending files to ASAPP) and `out` (for receiving files from ASAPP). To create a transcripts directory on the remote machine to send transcripts to ASAPP, type: ```json cd in mkdir transcripts cd transcripts ``` To navigate on the local machine, prefix terminal commands with l * `lcd`: change the local directory * `lls`: list local files * `lpwd`: to see the local working directory Use `get` (retrieve) and `put` (upload) to transfer files. `get` will fetch files from the remote server to the current directory on the local machine. For example: `get output.csv` will transfer a file named output.csv from the remote server. `put` will transfer files to the remote server from the current directory on the local machine. Navigate to local directory with transcripts and type: `put transcripts.csv` will transfer a file named transcripts.csv to the remote server. or `put *` will transfer all files in the local directory. or `put -r ` works recursively and will transfer all files in the local directory, all sub directories, and all files within them to the remote machine.  For example: `put -r sftptest` will transfer the sftptest directory and everything within it and below it from the local machine to the remote machine. To end the SFTP session, type `quit` or `exit`. # Transmitting Data to ASAPP Source: https://docs.asapp.com/reporting/transmitting-data-to-asapp Learn how to transmit data to ASAPP for Applications and AI Services. Customers can securely upload data for ASAPP's consumption for Applications and AI Services using three distinct mechanisms. Read more on how to transmit data by clicking on the link that best matches your use case. * [**Upload to S3**](/reporting/send-s3 "Transmitting Data to S3") S3 is the supported mechanism for ongoing data transmissions, though can also be used for one-time transfers where needed. ASAPP customers can transmit the following types of data to S3: * Call center data attributes * Conversation transcripts from messaging or voice interactions * Recorded call audio files * Sales records with attribution metadata * **[Upload to SFTP](/reporting/send-sftp "Transmitting Data to SFTP")** SFTP is the supported mechanism for **one-time data transmissions**, typically used for sending training data files during the implementation phase prior to initial launch. ASAPP customers can transmit the following types of training data via SFTP: * Conversation transcripts from messaging or voice interactions * Recorded call audio files * Free-text agent notes associated with messaging or voice interactions Reach out to your ASAPP account contact to coordinate sending data via SFTP. # Security Source: https://docs.asapp.com/security Security is a critical aspect of any platform, and ASAPP takes it seriously, being SOC2 and PCI compliant. We have implemented several security measures to ensure that your data is protected and secure. ## Trust portal ASAPP's [Trust Portal](https://trust.asapp.com) provides a centralized location for accessing security documentation and compliance information. Through the Trust Portal, you can: * Download security documentation including SOC2 reports * Access compliance certifications * Stay up to date with ASAPP's latest security updates ## Next steps Learn how Data Redaction removes sensitive data from your conversations. Use External IP Blocking to block IP addresses from accessing your data. Learn how to securely handle Customer Information. Find the latest security updates and security documentation on ASAPP's Trust Portal. # Data Redaction Source: https://docs.asapp.com/security/data-redaction Learn how Data Redaction removes sensitive data from your conversations. Live conversations are completely uninhibited and as such, customers may mistakenly communicate sensitive information (e.g. credit card number, SSN, etc.) in a manner that increases risk. In order to mitigate this risk, ASAPP performs redaction logic that can be customized for your business's needs. You also have the ability to add your own [custom redaction rules](#custom-regex-redaction-rules) using regular expressions. Reach out to your ASAPP account team to learn more. ## Custom Regex Redaction Rules In AI-Console, you can view existing custom, regex based redaction rules and add new ones for your organization. Adding rules match specific patterns by using regular expressions. These new rules can be deployed to testing environments and to production. Custom redaction rules live in the Core Resources section of AI-Console. * Custom redaction rules are displayed as an ordered list of rules with names. * Each individual rule will display the underlying regex. To add a custom rule: 1. Click **Add new** 2. Create a unique Regex Name 3. Add the regex for the particular rule 4. Test your regex rule to ensure it works as expected 5. Add the regex to sandbox Once a rule has been added to the sandbox environment, test it in your lower environment to ensure it's behaving as expected. # External IP Blocking Source: https://docs.asapp.com/security/external-ip-blocking Use External IP Blocking to block IP addresses from accessing your data. ASAPP has tools in place to monitor and automatically block activity based on malicious behavior and bad reputation sources (IPs). This blocking inhibits traffic from IPs that could damage, disable, overburden, disrupt or impair any ASAPP servers or APIs. By default, ASAPP does not block IPs of end users who exhibit abusive behaviors towards agents. IP blocking is trivial to evade and often causes unintended collateral damage to normal users since IP address are dynamic. It can happen that a previously blocked IP address become the IP address for a valid user, preventing the valid user from using ASAPP and your product. While we do not recommend IP blocking, you are still able to block users by IP address to help address urgent protection needs. ## Blocking IP Addresses on AI Console AI-Console provides the ability for administrators with the correct permissions to block external IP addresses that may present a threat to your organization. To block an IP Address in AI Console: 1. Manually enter (or copy) an individual IP address in the Denylist 2. Click Save and Deploy to save the changes to production You are able to access IP Addresses in Conversation Manager, giving you insight into the IP address associated with potentially malicious users. IP Addresses can be unblocked by clicking the trash icon on the blocked IP's row, and then saving and deploying the updated list. Blocked users receive an error message and the Chat bubble will not appear at the end of their screen. From the API perspective,  *shouldDisplayWebChat* will return a **503 Forbidden** error ## Additional Contextual Information Dynamic's ISP IP rotates quite often. This means that the 1-1 relationship between a public IP and an individual/device/client is merely temporary and the assignment will continually change in the future as described below. **ISP Assignation within the Time** IP(1) --- UserA IP(2) --- UserB IP(3) --- UserC ....................... IP(1) --- UserC IP(2) --- UserB IP(3) --- UserA If ASAPP prevents UserA from reaching our platform by blocking IP(1), there is a risk that ISPs assign IP(1) to UserB or UserC at some point in the future. There are also many scenarios where legitimate users share a single IP with abusive users, such as public WiFi networks: * Company named networks * College or corporate campuses that route many users from a single outbound IP * Personal and corporate VPN devices that aggregate many uses to a single IP Blocking those IP's will prevent many other legitimate users from access to the ASAPP platform. # Warning about CustomerInfo and Sensitive Data Source: https://docs.asapp.com/security/warning-about-customerinfo-and-sensitive-data Learn how to securely handle Customer Information. Do not send sensitive data via `CustomerInfo`, `custom_params`, or `customer_params`. ASAPP implements strict controls to ensure the confidentiality and security of ALL data  we handle on behalf of our customers. For **sensitive data**, ASAPP employs an even more stringent level of control. ("Sensitive data" includes such categories as Personal Health Information, Personally Identifiable Information, and financial/PCI data.) In general, ASAPP recommends that customers ONLY send sensitive data in specified fields, and where ASAPP expects to receive such data. ASAPP treats all customer data securely. By default, however, ASAPP may not apply the strictest levels of controls that we maintain for **sensitive data** for content submitted via `CustomerInfo`, `custom_params`, or `customer_params`. ## What is CustomerInfo? Certain calls available via ASAPP APIs and SDKs provide a parameter that supports the inclusion of arbitrary data with the call. We'll refer to such fields as **"CustomerInfo"** here, even though in different ASAPP interfaces they may be variously called "custom\_params", "customer\_params", and "CustomerInfo". CustomerInfo is typically a JSON object containing a set of key:value pairs that can be used in multiple ways by ASAPP and ASAPP customers. For example, as context input for use in the ASAPP Web SDK: ```javascript "CustomerInfo": { "Inflight": true, "TierLevel": "Gold" } ``` ## Do not send sensitive data as cleartext via CustomerInfo ASAPP strongly recommends that our customers do NOT send sensitive data using CustomerInfo. If customer requirements dictate that sensitive data must be sent via CustomerInfo, CUSTOMERS MUST ENCRYPT SENSITIVE DATA BEFORE SENDING. The customer should encrypt any sensitive data before sending via CustomerInfo, using a private encryption mechanism (i.e. a mechanism not known to ASAPP). This practice will ensure that ASAPP never has access to the customer's sensitive data, so that data will remain securely protected while in transit through ASAPP systems. Additionally, ASAPP strongly recommends that our customers use strong encryption. Specifically, we insist that customers use one of the following configurations: * **Symmetric Encryption Model:** use AES-GCM-256 (authenticated encryption) with a random [salt](https://en.wikipedia.org/wiki/Salt_\(cryptography\)) to provide data integrity, confidentiality and enhanced security. Each combination of salt+associated data should be unique. * **Asymmetric Encryption Model:** use a key size of 2048, and use RSA as an algorithm. ASAPP recommends setting a key expiration date of less than two years. ASAPP and the customer should both have mechanisms in place to update the key being used. Private keys which are rotated should be retained temporarily for the purposes of accessing previously encrypted data. In extraordinary circumstances, ASAPP can make exceptions to these requirements. Please contact your ASAPP account team to discuss options if you have a compelling business need to have ASAPP implement an exception. # Support Overview Source: https://docs.asapp.com/support You can reach out to [ASAPP support](https://support.asapp.com) for help with your ASAPP account and implementation. # Reporting Issues to ASAPP Source: https://docs.asapp.com/support/reporting-issues-to-asapp ## Incident Management ### Overview The goals of incident management at ASAPP are: * To minimize the negative impact of service incidents on our customers.  * To restore our customers' ASAPP implementation to normal operation as quickly as possible. * To take the necessary steps in order to prevent similar incidents in the future. * To successfully integrate with our customers' standard incident management policies. ### Severity Level Classification | Severity Level | Description | Report To | | :------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------- | | 1 | ASAPP is unusable or inoperable; a major function is unavailable with no acceptable bypass/workaround; a security or confidentiality breach occurred. | Service Desk interface via support.asapp.com | | 2 | A major function is unavailable but an acceptable bypass/workaround is available. | Service Desk interface via support.asapp.com | | 3 | A minor function is disabled by a defect; a function is not working correctly; the defect is not time-critical and has minimal user impact. | Service Desk interface via support.asapp.com | | 4 | The issue is not critical to the day-to-day operations of any single user; and there is an acceptable alternative solution. | Service Desk interface via support.asapp.com | ### Standard Response and Resolution Times This table displays ASAPP's standard response and resolution times based on issue severity as outlined in the Service Level Agreement. | Severity Level | Initial Response Time | Issue Resolution Time | | :------------- | :-------------------- | :-------------------- | | 1 | 15 minutes | 2 hours | | 2 | 15 minutes | 4 hours | | 3 | 24 hours | 15 business days | | 4 | 1 business day | 30 business days | ### Severity Level 1 Incidents **Examples:** * Customer chat is inaccessible. * \>5% of agents are unable to access Agent Desk. * \>5% of agents are experiencing chat latency (>5 seconds to send or receive a chat message) **Overview:** * Severity Level 1 Incidents can require a significant amount of ASAPP resources beyond normal operating procedures, and outside of normal operating hours. * Escalating via Service Desk initiates an escalation policy that is more effective than reaching out directly to any individual ASAPP contact. * You will receive an acknowledgment from ASAPP within 15 minutes. ### Severity Level 2 & 3 Incidents **Severity Level 2 Examples:** * Conversation list screen within the Admin dashboard is blanking out for supervisors, but Agents are still able to maintain chats. * User Management screen within Admin is unavailable. **Severity Level 3 Examples:** * Historical Reporting data has not been refreshed in 90+ minutes. * A limited number of chats appear to be routing incorrectly. * A single agent is unable to access Agent Desk. ### Issue Ticketing and Prioritization * ASAPP maintains all client reported issues in its own ticketing system. * ASAPP triages and slates issues for sprints based on severity level and number of users impacted. * ASAPP's engineering teams work in 2 week sprints, meaning that reported issues are typically resolved within 1-2 sprints. * ASAPP will consider Severity Level 1 and 2 issues for a hotfix (i.e. breaking the ASAPP sprint and release process, and being released directly to PreProd / Prod). ### Issue Reporting Process * **For Severity 1 Issues:** In the event of a Severity 1 failure of a business function in the ASAPP environment, report issues via the Service Desk interface at [support.asapp.com](http://support.asapp.com) by filling out all required fields. By selecting the Severity value as **Critical**, you will automatically mobilize ASAPP's on-call team, who will assess the incident and start working on a solution if applicable. * **For Severity 2-4 Issues:** In the event of any non-critical issues with a business function in the ASAPP environment, report issues via the Service Desk interface at [support.asapp.com](http://support.asapp.com) by filling out all required fields. ASAPP will escalate the reported issue to the relevant members of the ASAPP team, and you will receive updates via the ticket comments. The ASAPP team will follow the workflow outlined below for each Service Desk ticket. Each box corresponds to the Service Desk ticket status. ### Issue Reporting Template When you report issues to ASAPP, please provide the following information whenever possible. * **Issue ID**: provide the Issue ID if the bug took place during a specific conversation. * **Hashed, encrypted customer ID:** (see below) * **Severity\*:** provide the severity level based on the 4 point severity scale. * **Subject\*:** provide a brief, accurate summary of the observed behavior. * **Date Observed\*:** provide the date you observed the issue. (please note: the observed date may differ from the date the issue is being reported) * **Description\*:** provide a detailed description of the observed issue, including number of impacted users, the specific users experiencing the issue, impacted sites, and the timestamp when the issue began. * **Steps to Reproduce\*:** provide detailed list of steps taken at the time you observed the issue. * **ASAPP Portal\*:** indicate environment if the bug is not in production. * **Device/Operating System\*:** provide the device / OS being utilized at the time you observed the issue. * **Browser\*:** provide the browser being utilized at the time you observed the issue. * **Attachments**: include any screenshots or videos that may help clearly illustrate the issue. * **\*** Indicates a required field. ASAPP deliberately does not log unencrypted customer account numbers or any kind of personally identifiable information. ### Locate the Issue ID **In Desk:** During the conversation, click on the **Notes** icon at the top of the center panel. The issue ID is next to the date. The issue ID is also in the Left Hand Panel and End Chat modal window. **In Admin:** Go to Conversation Manager. Issue IDs are in the first column for both live and ended conversations. # Service Desk Information Source: https://docs.asapp.com/support/service-desk-information **What is the ASAPP Service Desk?** Service Desk is the tool ASAPP uses for the ingestion and tracking of all issues and modifications in our customers' demo and production environments. All issue reports and configuration requests between ASAPP and our customers are handled via the tool. **How can I access the Service Desk?** The Service Desk can be accessed at [support.asapp.com](http://support.asapp.com). Service Desk access is provisioned by your ASAPP account team after the initial Service Desk training is completed. All subsequent access requests and/or modifications should be handled via email with your ASAPP account team. **When do I create a ticket?** A Service Desk ticket should be created any time an issue is identified with an ASAPP product (this includes Admin, Desk, Chat SDK, and AI Services) in either the demo or production environment. Additionally, a ticket should be created in cases where an existing configuration needs to be updated. **How do I create a ticket?** A Service Desk ticket can be created by navigating to support.asapp.com, logging in, clicking **Submit a Request** in the top right corner of the screen, and filling out and submitting the ticket form. **What happens after I've created a ticket?** Once the ticket form is submitted, ASAPP will receive an automatic notification. The ASAPP Technical Services team will acknowledge and review the ticket, triage internally, and request additional information if needed. All correspondence, including requests for additional information, explanations of existing functionality, and updates on fix timelines will take place in the ticket comments. **Should I use Service Desk to ask questions?** In general, reaching out to your ASAPP account contact(s) directly is the best way to answer a question or begin a discussion. Your ASAPP account contacts can help you determine whether observed behavior is expected or an unexpected issue. If an issue is confirmed unexpected or a configuration available, create a ticket in Service Desk to begin addressing it. **What if I have an urgent production problem?** ASAPP calls urgent production issues **Severity 1** and defines them as follows: "ASAPP is unusable or inoperable; a major function is unavailable with no acceptable bypass/workaround; a security or confidentiality breach occurred" An issue that meets this criteria should be reported as a ticket in Service Desk with the Priority level **Urgent**. See [Severity Level Classification](/support/reporting-issues-to-asapp#severity-level-classification "Severity Level Classification") for descriptions, illustrative examples and associated reporting processes. # Troubleshooting Guide Source: https://docs.asapp.com/support/troubleshooting-guide This document outlines some preliminary checks to determine the health and status of the connection between the customer or agent's browser and an ASAPP backend host prior to escalating to the ASAPP Support Team. You must have access to Chrome Developer Tools in order to use this guide. ## Troubleshooting from a Web Browser ### Using Chrome Developer Tools Please take a moment to familiarize yourself with Chrome Developer Tools, if you are not already. ASAPP will base the troubleshooting efforts for front-end Web SDK use around the Chrome Web Browser. [https://developers.google.com/web/tools/chrome-devtools/open](https://developers.google.com/web/tools/chrome-devtools/open) ASAPP will also inspect network traffic as the Web SDK makes API calls to the ASAPP backend. Please also review the documentation on Chrome Developer Tools regarding networking. [https://developers.google.com/web/tools/chrome-devtools/network](https://developers.google.com/web/tools/chrome-devtools/network) ### API Call HTTP Return Status Codes In general, you can check connectivity and environment status by looking at the HTTP return codes from the API calls the ASAPP Web SDK makes to the ASAPP backend. You can accomplish this by limiting calls to ASAPP traffic in the Network tab. This will narrow the results to traffic that is using the string "ASAPP" somewhere in the call. First and foremost, look for traffic that does not return successful 200 HTTP status codes. If there are 400 and 500 level errors, there may be potential network connectivity or configuration issues between the user and ASAPP backend. Please review HTTP status codes at: [https://www.restapitutorial.com/httpstatuscodes.html](https://www.restapitutorial.com/httpstatuscodes). To view HTTP return codes: 1. Open **Dev Tools** and navigate to the **Network** tab. 2. Reload the page or navigate to a page with ASAPP chat enabled. 3. Filter network traffic to **ASAPP**. 4. Look at the "Status" for each call. Failed calls are highlighted in red. 5. For non-200 status codes, denote what the call is by the "Request URL" and the return status. You can find other helpful information in context in the "Request Payload". ### Environment Targeting To determine the ASAPP environment targeted by the front-end, you can look at the network traffic and note what hostname is referenced. For instance, ...something-demo01.test.asapp.com is the demo environment for that implementation. You will see this on every call to the ASAPP backend and it may be helpful to filter the network traffic to "ASAPP". 1. Open **Dev Tools** and navigate to the **Network** tab. 2. Reload the page or navigate to a page with ASAPP chat enabled. 3. Filter network traffic to **ASAPP**. 4. Look at the "Request URL" for the network call. 5. Parse the hostname from `https://something-demo01.test.asapp.com/api/noauth/ShouldDisplayWebChat?ASAPP-ClientType=web-sdk&amp;ASAPP-ClientVersion=4.0.1-uat\`: something-demo01.test.asapp.com ### WebSocket Status In addition to looking at the API calls, it is important to look at the WebSocket connections in use. You should also be able to inspect the frames within the WebSocket to ensure messages are received properly. [https://developers.google.com/web/tools/chrome-devtools/network/reference#frames](https://developers.google.com/web/tools/chrome-devtools/network/reference#frames) ## Troubleshooting Customer Chat ### Should Display Web Chat If chat does not display on the desired web page, the first place to check is ASAPP's call for `ShouldDisplayWebChat` via the **Chrome Developer Tool Network** tab. A successful API call response should contain a `DisplayCustomerSupport` field with a value of `true`. If this value is `false` for a page that should display chat, please reach out to the ASAPP Support Team. Superusers can access the Triggers section of ASAPP Admin. This will enable them to determine if the URL visited is set to display chat. To troubleshoot: 1. Open **Dev Tools** and navigate to the **Network** tab. 2. Reload the page or navigate to a page with ASAPP chat enabled. 3. Filter network traffic to **ASAPP**. 4. Look at the "Request Payload" for `ShouldDisplayWebChat` and look for a `true` response for `DisplayCustomerSupport`. ### Web SDK Context Input To view the context provided to the SDK, you can look at the request payload of most SDK API calls. Context input may vary but typical items include: * Subdivisions * Segments * Customer info parameters * External session IDs Review the ASAPP SDK Web Context Provider page To view the context: 1. Open **Dev Tools** and navigate to the **Network** tab. 2. Reload page or navigate to a page with ASAPP chat enabled. 3. Filter network traffic to **ASAPP**. 4. Look at the "Request Payload" for `GetOfferedMessageUnauthed` and open the tree as follows: **Params -> Params -> Context** -> All Customer Context (including Auth Token) **Params -> Params -> AuthenticationParams** -> Customer ID ### Customer Authentication Input For authenticated customer chat sessions, you can see the Auth key within the context parameters used throughout the API calls to ASAPP. The values passed into the Auth context will depend on the integration. Review the ASAPP SDK Web Context Provider page for the complete use of this key ## Troubleshooting Agent Chat from Agent Desk ### Connection Status Banners There are 3 connection statuses: * Disconnected (Red) * Reconnecting (Yellow) * Connected (Green) You will see a banner on the bottom of the ASAPP Agent Desk with the correlating colors: Red, Yellow, Green. The red and green banners only appear briefly while the connection state changes. However, the yellow banner will remain until a connection is reestablished. The connection state relies on 2 main inputs: * 204 API calls * WebSocket echo timeouts After a timeout grace period of 5 seconds for either of these timeouts, a red or yellow banner will appear. **Yellow Reconnecting Banner** ### 204 API call The ASAPP Agent Desk makes API calls to the backend periodically to ensure status and connectivity reporting is functional. Verify the HTTP status and response timing of these calls to look for indicators of an issue. These calls display as the number 204 in the Chrome Developer Tools Network tab. To view these calls: 1. Open **Dev Tools** and navigate to the **Network** tab. 2. Reload page or navigate to a page with ASAPP chat enabled. 3. Filter network traffic to **ASAPP**. 4. Look at the "204" calls over time to determine good health. ### WebSocket When a customer chat loads onto the ASAPP Agent Desk, this creates a WebSocket. During the life of that conversation, ASAPP sends continual echoes (requests and responses) to determine WebSocket health and status. ASAPP sends the echoes every 16-18 seconds and has a 6 second timeout by default. If these requests and responses intermittently time out, there is likely a network issue between the Agent Desktop and the ASAPP Desk application. You can also view messages being sent through WebSocket, as the agent to customer conversation happens: 1. Open **Dev Tools** and navigate to the **Network** tab. 2. Reload page or navigate to a page with ASAPP chat enabled. 3. Click **WS** next to the Filter text box to filter network traffic to WebSocket. 4. Look at the Messages tab in WebSocket. If you see one of these pairs of echoes missing, it is most likely because Agent Desk did not receive the echo from the ASAPP backend due to packet loss. If the 'Attempting to reconnect..' message shows, Agent Desk attempts to reconnect with the ASAPP backend to establish a new WebSocket. The messages display in red text starting with 'request?ASAPP-ClientType' in the Network tab of Chrome Developer Tools. If you loose network connectivity and then re-establish it, there will be multiple WebSocket entries visible when you click on **WS**. ## Troubleshooting Agent Desk/Admin Access Issues ### Using Employee List in ASAPP Admin If a user has issues logging in to ASAPP, you can view their details within ASAPP Admin after their first successful login. Check the Enabled status, Roles, and Groups for the user to determine if there are any user level issues. ASAPP will reject the user's login attempt if their account is disabled. To find an employee: 1. Login to ASAPP Admin. 2. Navigate to Employee List. 3. Use the filter to find the desired account. 4. Check account attributes for: Enabled, Roles, and Groups. ### Employee Roles Mismatch During the user's SSO login process, ASAPP receives a list of user roles via the Single-Sign-On SAML assertion. If the user roles in the Employee List is incorrect: 1. Check with your Identity & Access Management team to verify that the user has been added to the correct set of AD Security Groups. 2. Once you have verified the user's AD Security Groups, please ask the user to log out and log back in using the IDP-initiated SSO URL. 3. If you still see a mismatch between the user's AD Security Groups and the ASAPP Employee List, then please reach out to the ASAPP Support Team. ### Errors During User Login The SSO flow is a series of browser redirects in the following order: 1. Your SSO engine IDP-initiated URL -- typically hosted within your domain. This is the URL that users must use to login. 2. Your system's authentication system -- typically hosted within your domain. If the user is already authenticated, then it will immediately redirect the user back to your SSO engine URL. Otherwise, the user will be presented with the login page and prompted to enter their credentials. 3. ASAPP's SSO engine -- hosted on the auth-\{customerName}.asapp.com domain. 4. ASAPP's Agent/Admin app -- hosted on the \{customerName}.asapp.com domain. There are several potential errors that may happen during login. In all of these cases, it is beneficial to find out: 1. The SSO login URL being used by the user to login. 2. The error page URL and error message displayed. #### Incorrect SSO Login URL Confirm the user logins to the correct SSO URL. Due to browser redirects, users may accidentally bookmark an incorrect URL (e.g., ASAPP's SSO engine URL, instead of your SSO engine IDP-initiated URL). #### Invalid Role Values in the SSO SAML Assertion If the user sees a "Failed to authenticate user" error message and the URL is an ASAPP URL (...asapp.com), then please confirm that correct role values are being sent in the SAML assertion. This error message typically indicates that the user role value is not recognizable within ASAPP. #### Other Login Errors For any other errors, please check the error page URL. If the error page URL is an ASAPP URL (ends in asapp.com), please reach out to the ASAPP Support Team for help. If the URL is your SSO URL or your system's authentication system, please contact your internal support team. # Welcome to ASAPP Source: https://docs.asapp.com/welcome Revolutionizing Contact Centers with AI Welcome to the ASAPP documentation! This is the place to find information on how to use ASAPP as a platform or as integration. ## Getting Started If you're new to ASAPP, start here to learn the essentials and make your first API call. }>Learn more how to get started with ASAPP! }>Get started using ASAPP's APIs and building an integration! ## Explore products } href="/generativeagent"> Empower your contact center with AI-driven agents capable of handling complex interactions across voice and chat channels. } href="/autosummary"> Generate actionable insights from customer conversations. } href="/autotranscribe"> Industry-leading audio transcription technology that ensures accurate, real-time conversion of speech to text. } href="/messaging-platform"> A comprehensive contact center solution that seamlessly integrates chat, and digital channels for unified customer engagement. }> Improve agent productivity and response times through AI generated messages. [Contact our sales team](https://www.asapp.com/get-started) for a personalized demo.