> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nekt.com/llms.txt
> Use this file to discover all available pages before exploring further.

# AskSuite as a data source

> Bring data from AskSuite to Nekt.

AskSuite is a conversational AI platform designed for the hospitality industry. It provides AI-powered chatbots and automation tools that help hotels manage guest inquiries, generate leads, and streamline communication across multiple channels including web chat, WhatsApp, and social media.

<img width="200" src="https://mintcdn.com/nekt/X24NZmF5_76QAuvh/assets/logo/logo-asksuite.jpg?fit=max&auto=format&n=X24NZmF5_76QAuvh&q=85&s=94dee742cdd4dba61e9d009b59eb3ee2" data-path="assets/logo/logo-asksuite.jpg" />

## Configuring AskSuite as a Source

In the [Sources](https://app.nekt.ai/sources) tab, click on the "Add source" button located on the top right of your screen. Then, select the AskSuite option from the list of connectors.

Click **Next** and you'll be prompted to add your access.

### 1. Add account access

You'll need your AskSuite Integration User Token for this connection. This token authenticates your requests to the AskSuite API.

#### Obtaining Your Integration User Token

<Steps>
  <Step title="Access AskSuite">
    Log in to your AskSuite account at [control.asksuite.com](https://control.asksuite.com).
  </Step>

  <Step title="Navigate to Integrations">
    Go to **Menu** > **Integrações** (Integrations).
  </Step>

  <Step title="Generate or Copy Your Token">
    Locate or generate your Integration User Token. This token is used to authenticate API requests.

    <Warning>Store your token securely. Treat it like a password and do not share it publicly.</Warning>
  </Step>
</Steps>

#### Configuration Fields

The following configurations are available:

* **Integration User Token**: The token to authenticate against the AskSuite API service. You can find your token at Menu > Integrações in AskSuite.
* **Company IDs**: The company IDs to filter conversation leads. You can specify multiple company IDs to extract data from multiple properties.
* **Start Date**: The earliest date from which records will be synced. This is used for incremental sync of conversation leads.

<Note>
  Company IDs allow you to filter conversations by specific properties or hotels in your AskSuite account. This is useful when managing multiple properties.
</Note>

Once you're done, click **Next**.

### 2. Select streams

Choose which data streams you want to sync. AskSuite provides access to conversation data, tasks, tags, and messaging templates.

> Tip: The stream can be found more easily by typing its name.

Select the streams and click **Next**.

### 3. Configure data streams

Customize how you want your data to appear in your catalog. Select a name for each table (which will contain the fetched data) and the type of sync.

* **Table name**: we suggest a name, but feel free to customize it. You have the option to add a **prefix** and make this process faster!

* **Sync Type**: you can choose between INCREMENTAL and FULL\_TABLE.
  * Incremental: every time the extraction happens, we'll get only the new data - which is good if, for example, you want to keep every record ever fetched.
  * Full table: every time the extraction happens, we'll get the current state of the data - which is good if, for example, you don't want to have deleted data in your catalog.

Once you are done configuring, click **Next**.

### 4. Configure data source

Describe your data source for easy identification within your organization, not exceeding 140 characters.

To define your [Trigger](https://docs.nekt.com/runs/scheduling-and-triggers), consider how often you want data to be extracted from this source. This decision usually depends on how frequently you need the new table data updated (every day, once a week, or only at specific times).

Optionally, you can determine when to execute a [full sync](https://docs.nekt.com/get-started/core-concepts/types-of-sync#additional-full-sync). This will complement the incremental data extractions, ensuring that your data is completely synchronized with your source every once in a while.

Once you are ready, click **Next** to finalize the setup.

### 5. Check your new source

You can view your new source on the [Sources](https://app.nekt.ai/sources) page. If needed, manually trigger the source extraction by clicking on the arrow button. Once executed, your data will appear in your Catalog.

<Warning>For you to be able to see it on your [Catalog](https://app.nekt.ai/catalog), you need at least one successful source run.</Warning>

# Streams and Fields

Below you'll find all available data streams from AskSuite and their corresponding fields:

<AccordionGroup>
  <Accordion title="Conversations">
    Stream containing conversation leads from your AskSuite chatbot interactions. This stream supports **incremental sync** based on the `updatedAt` field.

    | Field                          | Type    | Description                                        |
    | :----------------------------- | :------ | :------------------------------------------------- |
    | `id`                           | Integer | Unique identifier for the conversation record      |
    | `conversationId`               | String  | Unique identifier for the conversation             |
    | `groupId`                      | String  | Group identifier                                   |
    | `companyId`                    | String  | Company identifier                                 |
    | `companyName`                  | String  | Company name                                       |
    | `name`                         | String  | Customer name                                      |
    | `email`                        | String  | Customer email                                     |
    | `phone`                        | String  | Customer phone                                     |
    | `city`                         | String  | City                                               |
    | `state`                        | String  | State or region                                    |
    | `country`                      | String  | Country                                            |
    | `language`                     | String  | Language code (e.g., pt-br)                        |
    | `custom`                       | String  | Custom field                                       |
    | `platform`                     | String  | Platform where conversation originated             |
    | `source`                       | String  | Source of the conversation (e.g., chat\_web)       |
    | `humanRequest`                 | Boolean | Whether human assistance was requested             |
    | `attendant`                    | String  | Attendant name                                     |
    | `attendantEmail`               | String  | Attendant email                                    |
    | `linkToLiveChat`               | String  | Link to live chat                                  |
    | `page`                         | String  | Page URL where conversation started                |
    | `arrivalDate`                  | String  | Arrival date                                       |
    | `departureDate`                | String  | Departure date                                     |
    | `adults`                       | Integer | Number of adults                                   |
    | `children`                     | Integer | Number of children                                 |
    | `requestPrice`                 | Boolean | Whether price was requested                        |
    | `linkQuotationOpened`          | Boolean | Whether quotation link was opened                  |
    | `hasReservation`               | Boolean | Whether conversation has reservation               |
    | `groupQuote`                   | Boolean | Whether it's a group quote                         |
    | `eventQuote`                   | Boolean | Whether it's an event quote                        |
    | `totalReservation`             | Number  | Total reservation value                            |
    | `lastReservationDate`          | Integer | Last reservation date as timestamp                 |
    | `lastReservationDateFormatted` | String  | Last reservation date formatted                    |
    | `lastReservationCurrency`      | String  | Last reservation currency                          |
    | `lastReservationValue`         | Number  | Last reservation value                             |
    | `lastReservationCode`          | String  | Last reservation code                              |
    | `lastReservationSalesman`      | String  | Last reservation salesman                          |
    | `minTotalValuePriceQuote`      | Number  | Minimum total value price quote                    |
    | `maxTotalValuePriceQuote`      | Number  | Maximum total value price quote                    |
    | `currencyPriceQuote`           | String  | Currency for price quote                           |
    | `tags`                         | Array   | List of tag names                                  |
    | `tagsString`                   | String  | Tags as string                                     |
    | `events`                       | Array   | List of event IDs                                  |
    | `utmSource`                    | String  | UTM source parameter                               |
    | `utmMedium`                    | String  | UTM medium parameter                               |
    | `utmCampaign`                  | String  | UTM campaign parameter                             |
    | `dateFormatted`                | String  | Formatted date and time                            |
    | `lastMessageReceivedAt`        | Integer | Timestamp of last message received in milliseconds |
    | `finished`                     | Boolean | Whether conversation is finished                   |
    | `unavailable`                  | Boolean | Whether unavailable                                |
    | `updatedAt`                    | Integer | Last update timestamp in milliseconds              |
    | `createdAt`                    | Integer | Creation timestamp in milliseconds                 |
  </Accordion>

  <Accordion title="Conversation Tasks">
    Stream containing tasks associated with conversations, such as follow-ups and reminders.

    | Field                                      | Type    | Description                                       |
    | :----------------------------------------- | :------ | :------------------------------------------------ |
    | `id`                                       | Integer | Unique identifier for the conversation task       |
    | `conversationId`                           | String  | Identifier of the conversation                    |
    | `companyId`                                | String  | Company identifier                                |
    | `parentCompanyId`                          | String  | Parent company identifier                         |
    | `genericRuleEngineId`                      | Integer | Generic rule engine identifier                    |
    | `conversationTaskMessage`                  | Object  | Conversation task message with template details   |
    | `conversationTaskMessage.templateId`       | String  | Template ID                                       |
    | `conversationTaskMessage.templateCategory` | String  | Template category                                 |
    | `conversationTaskMessage.companyId`        | String  | Company ID                                        |
    | `conversationTaskMessage.status`           | String  | Message status                                    |
    | `conversationTaskMessage.params`           | Array   | Array of parameters                               |
    | `conversationTaskMessage.text`             | String  | Message text                                      |
    | `conversationTaskMessage.image`            | String  | Message image                                     |
    | `conversationTaskMessage.sentAt`           | Integer | Sent timestamp                                    |
    | `conversationTaskMessage.deliveredAt`      | Integer | Delivered timestamp                               |
    | `conversationTaskMessage.answeredAt`       | Integer | Answered timestamp                                |
    | `conversationTaskMessage.failedAt`         | Integer | Failed timestamp                                  |
    | `conversationTaskMessage.buttons`          | Array   | Message buttons                                   |
    | `conversationTaskMessage.quickReplies`     | Array   | Quick replies                                     |
    | `message`                                  | Object  | Message object with template ID and status        |
    | `message.text`                             | String  | Message text                                      |
    | `message.image`                            | String  | Message image                                     |
    | `message.params`                           | Array   | Message parameters                                |
    | `message.buttons`                          | Array   | Message buttons                                   |
    | `message.quickReplies`                     | Array   | Quick replies                                     |
    | `message.sentAt`                           | Integer | Sent timestamp                                    |
    | `message.failedAt`                         | Integer | Failed timestamp                                  |
    | `message.status`                           | String  | Message status                                    |
    | `message.companyId`                        | String  | Company ID                                        |
    | `message.answeredAt`                       | Integer | Answered timestamp                                |
    | `message.templateId`                       | String  | Template ID                                       |
    | `message.deliveredAt`                      | Integer | Delivered timestamp                               |
    | `message.templateCategory`                 | String  | Template category                                 |
    | `title`                                    | String  | Task title                                        |
    | `description`                              | String  | Task description                                  |
    | `status`                                   | String  | Task status (e.g., TODO, DONE, EXPIRED, CANCELED) |
    | `userCreatorId`                            | Integer | ID of the user who created the task               |
    | `userAssign`                               | Integer | ID of the user assigned to the task               |
    | `externalData`                             | Object  | External data with lead and user information      |
    | `externalData.lead.name`                   | String  | Lead name                                         |
    | `externalData.lead.email`                  | String  | Lead email                                        |
    | `externalData.lead.phone`                  | String  | Lead phone                                        |
    | `externalData.user.id`                     | Integer | User ID                                           |
    | `createdAt`                                | Integer | Creation timestamp in milliseconds                |
    | `updatedAt`                                | Integer | Last update timestamp in milliseconds             |
    | `expirationDate`                           | Integer | Expiration date as timestamp in milliseconds      |
  </Accordion>

  <Accordion title="Tags">
    Stream containing all tags used to categorize and organize conversations.

    | Field                             | Type    | Description                                      |
    | :-------------------------------- | :------ | :----------------------------------------------- |
    | `tagId`                           | Integer | Unique identifier for the tag                    |
    | `name`                            | String  | Tag name                                         |
    | `color`                           | String  | Tag color in hex format                          |
    | `type`                            | String  | Tag type (e.g., custom)                          |
    | `status`                          | String  | Tag status (e.g., active)                        |
    | `active`                          | Boolean | Whether the tag is active                        |
    | `standard`                        | Boolean | Whether the tag is standard                      |
    | `visibleToClients`                | Boolean | Whether the tag is visible to clients            |
    | `companyId`                       | String  | Company identifier                               |
    | `companiesIds`                    | Array   | List of company IDs associated with the tag      |
    | `disabledCompaniesIds`            | Array   | List of disabled company IDs                     |
    | `translations`                    | Object  | Translations for the tag                         |
    | `translations.en.TAG`             | String  | Tag translation in English                       |
    | `translations.en.INFO`            | String  | Info translation in English                      |
    | `translations.en.NOTIFICATION`    | String  | Notification translation in English              |
    | `translations.es.TAG`             | String  | Tag translation in Spanish                       |
    | `translations.es.INFO`            | String  | Info translation in Spanish                      |
    | `translations.es.NOTIFICATION`    | String  | Notification translation in Spanish              |
    | `translations.pt_br.TAG`          | String  | Tag translation in Brazilian Portuguese          |
    | `translations.pt_br.INFO`         | String  | Info translation in Brazilian Portuguese         |
    | `translations.pt_br.NOTIFICATION` | String  | Notification translation in Brazilian Portuguese |
    | `triggeredBy`                     | String  | What triggered the tag                           |
    | `createdAt`                       | Integer | Creation timestamp in milliseconds               |
  </Accordion>

  <Accordion title="Transmission List">
    Stream containing broadcast/transmission lists for WhatsApp campaigns and bulk messaging.

    | Field                        | Type    | Description                                              |
    | :--------------------------- | :------ | :------------------------------------------------------- |
    | `transmissionListId`         | String  | Unique identifier for the transmission list              |
    | `name`                       | String  | Name of the transmission list                            |
    | `templateId`                 | String  | Template identifier used for this transmission           |
    | `companyId`                  | String  | Company identifier                                       |
    | `status`                     | String  | Status of the transmission (e.g., SENT)                  |
    | `messages`                   | Array   | List of messages in the transmission                     |
    | `messages.phone`             | String  | Recipient phone number                                   |
    | `messages.params`            | Array   | Array of parameters                                      |
    | `messages.channelRulesCheck` | Boolean | Channel rules check status                               |
    | `failedMessages`             | String  | Failed messages, if any                                  |
    | `stopBot`                    | Boolean | Whether to stop the bot                                  |
    | `tags`                       | String  | Tags associated with the transmission as key-value pairs |
    | `trackData`                  | String  | Tracking data                                            |
    | `actions`                    | String  | Actions associated with the transmission                 |
    | `createdAt`                  | Integer | Creation timestamp in milliseconds                       |
    | `isCampaign`                 | Boolean | Whether this is a campaign                               |
    | `expirationDate`             | Integer | Expiration date as timestamp in milliseconds             |
    | `userCreatorId`              | Integer | ID of the user who created the transmission              |
  </Accordion>

  <Accordion title="WhatsApp Message Templates">
    Stream containing WhatsApp message templates used for automated and campaign messaging.

    | Field                        | Type    | Description                                    |
    | :--------------------------- | :------ | :--------------------------------------------- |
    | `idMessageTemplate`          | Integer | Unique identifier for the message template     |
    | `title`                      | String  | Template title                                 |
    | `content`                    | String  | Template content                               |
    | `companyId`                  | String  | Company identifier                             |
    | `language`                   | String  | Template language code                         |
    | `category`                   | String  | Template category (e.g., ACCOUNT\_UPDATE)      |
    | `templateType`               | String  | Template type (e.g., CAMPAIGN)                 |
    | `status`                     | String  | Template status (e.g., active)                 |
    | `platformStatus`             | String  | Platform status (e.g., APPROVED)               |
    | `platform`                   | String  | Platform name (e.g., GUPSHUP)                  |
    | `platformId`                 | String  | Platform identifier                            |
    | `platformContent`            | String  | Platform-specific content                      |
    | `reason`                     | String  | Reason for template status                     |
    | `buttons`                    | Array   | List of buttons in the template                |
    | `buttons.id`                 | String  | Button ID                                      |
    | `buttons.label`              | String  | Button label                                   |
    | `buttons.type`               | String  | Button type                                    |
    | `buttons.defaultValue`       | String  | Default value                                  |
    | `quickReplies`               | Array   | List of quick replies                          |
    | `parameters`                 | Array   | List of template parameters                    |
    | `parameters.id`              | String  | Parameter ID                                   |
    | `parameters.name`            | String  | Parameter name                                 |
    | `parameters.type`            | String  | Parameter type                                 |
    | `parameters.visible`         | Boolean | Whether parameter is visible                   |
    | `parameters.contentReplace`  | String  | Content to replace                             |
    | `parameters.dataSourceField` | String  | Data source field                              |
    | `image`                      | String  | Template image URL or data                     |
    | `userCreatorId`              | Integer | ID of the user who created the template        |
    | `createdAt`                  | Integer | Creation timestamp in milliseconds             |
    | `lastCategoryUpdateAt`       | Integer | Last category update timestamp in milliseconds |
    | `categoryUpdates`            | Integer | Number of category updates                     |
  </Accordion>
</AccordionGroup>

# Data Model

The following diagram illustrates the relationships between the core data streams in AskSuite. The arrows indicate the join keys that link the different entities.

```mermaid theme={null}
erDiagram
    Conversations ||--o{ ConversationTasks : "conversationId"
    Conversations ||--o{ Tags : "tagsIds"
    TransmissionList ||--o| WhatsAppMessageTemplates : "templateId"
    Conversations {
        int id PK
        string conversationId
        string companyId
        int updatedAt
        string name
        string email
        string phone
    }
    ConversationTasks {
        int id PK
        string conversationId FK
        string companyId
        string status
        int expirationDate
    }
    Tags {
        int tagId PK
        string companyId
        string name
        string color
    }
    TransmissionList {
        string transmissionListId PK
        string templateId FK
        string companyId
        string status
    }
    WhatsAppMessageTemplates {
        int idMessageTemplate PK
        string title
        string content
        string language
    }
```

## Implementation Notes

### Data Sync Considerations

* **Incremental Sync**: The `Conversations` stream supports incremental sync using the `updatedAt` field. Other streams (Tags, Conversation Tasks, Transmission List, WhatsApp Message Templates) are extracted as full table syncs.

* **Timestamps**: All timestamps in AskSuite data are stored as milliseconds since epoch. You may need to convert these to standard datetime formats for analysis.

* **Company Filtering**: The `company_ids` configuration allows you to filter data by specific properties. Make sure to include all relevant company IDs to capture complete data.

### Multi-Property Support

If you manage multiple hotels or properties in AskSuite, you can specify multiple Company IDs in the configuration. This will extract conversation data from all specified properties in a single sync.

## Skills for agents

<Snippet file="agent-skills-intro.mdx" />

<Card title="Download AskSuite skills file" icon="wand-magic-sparkles" href="/sources/asksuite.md">
  AskSuite connector documentation as plain markdown, for use in AI agent contexts.
</Card>
