Skip to Content

Jitterbit Sales Agent

Overview

The Jitterbit Sales Agent (Sales Agent) is an AI agent provided through Jitterbit Marketplace that is intended to enable your organization's internal Sales team. It does the following:

  • Connects to NetSuite and Salesforce to fetch real-time sales orders, pricing, and customer data using Jitterbit Integration Studio.
  • Integrates with Azure OpenAI to power an intelligent Sales Agent chatbot accessed via a custom API created with Jitterbit API Manager.

This document explains the agent's setup and operation. It first covers prerequisites, next gives example prompts to show what the agent can do, and then provides steps to install, configure, and operate the agent.

Prerequisites

To use the Sales Agent, the following components are required or assumed in the design of the agent.

Harmony components

You must have a Jitterbit Harmony license with access to the following components:

Azure resources

You must have a Microsoft Azure subscription with permissions to create and manage the following resources:

  • Azure Storage with a Blob container to store customer details.
  • Azure AI Search with a search service that can be configured with an index and indexer.
  • Azure OpenAI with a deployed gpt-4o or gpt-4.1 model.

Tip

To select pricing tiers based on your specific requirements and anticipated usage, see Azure AI Search pricing tiers and Azure OpenAI pricing.

Supported endpoints

The following endpoints are incorporated into the agent's design, but other systems can be accommodated by modifying the project's endpoint configurations and workflows:

  • NetSuite: The source of customer order forms.
  • Salesforce: The source of your customer accounts and product pricing.
  • Slack: The chat interface for interacting with the agent.

If you want to use a different application as the chat interface, a separate workflow and instructions for a generic API setup are included in this AI agent.

Example prompts

Here are example prompts the Sales Agent can handle with access to the appropriate data:

Customer Lookup Questions

  • "Show me all customers in California."
  • "Which customers are based in Sydney?"

Order Form / Licensing Details Questions

  • "What products has Acme Corp purchased?"
  • "How many 'Product X' is ByteTech GmbH licensed for?"
  • "Can you give me the order details for AcmeCloud Ltd?"
  • "What is the subscription duration for Zento Systems?"

Product Pricing or Plan Inquiry

  • "What's the price of 'Product X' in USD?"
  • "How much does the Professional subscription cost?"
  • "Which subscription plan allows 10 environments?"
  • "Can you calculate the cost for 15 'Product X' and 4 'Product Y'?"

Account Owner Queries

  • "Who manages Acme Corp?"
  • "Which customers are owned by jsmith@abc.com?"
  • "Show customers handled by David Brown in Texas."
  • "List accounts managed by Grace in the UK."

Installation, configuration, and operation

Follow these steps to install, configure, and operate this AI agent:

  1. Download customizations and install the Integration Studio project.
  2. Review project workflows.
  3. Create Microsoft Azure resources.
  4. Prepare Jitterbit Cloud Datastore (Beta).
  5. Configure project variables.
  6. Test connections.
  7. Deploy the project.
  8. Create the Jitterbit custom API.
  9. Create the Slack app, test the Slack connection, and re-deploy the project.
  10. Trigger the project workflows.

Download customizations and install the project

Follow these steps to download customization files and install the Integration Studio project for the AI agent:

  1. Log in to the Harmony portal at https://login.jitterbit.com and open Marketplace.

  2. Locate the AI agent named Jitterbit Sales Agent. To locate the agent, you can use the search bar or, in the Filters pane under Type, select AI Agent to limit the display to the available AI agents.

  3. Click the AI agent's Documentation link to open its documentation in a separate tab. Keep the tab open to refer back to after starting the project.

  4. Click Start Project to open a two-step configuration dialog to download customizations and import the AI agent as an Integration Studio project.

    Note

    If you have not yet purchased the AI agent, Get this agent will be displayed instead. Click it to open an informational dialog, then click Submit to have a representative contact you about purchasing the AI agent.

  5. In configuration step 1, Download Customizations, the following files are provided to facilitate setup of the index and indexer in Azure AI Search and to create the Slack app. Select the files and click Download Files:

    • Azure AI Search index and indexer JSON definition files

      • Azure_AI_Search_Datasource_Definition.json
      • Azure_AI_Search_Index_Definition.json
      • Azure_AI_Search_Indexer_Definition.json
    • Slack app manifest file

      • slack_app_manifest.json

    Tip

    The configuration dialog includes a warning not to import the template before applying endpoint customizations. That warning does not apply to this AI agent and can be ignored. Follow the recommended order of steps in this documentation.

    Click Next.

  6. In configuration step 2, Create a New Project, select an environment where the Integration Studio project will be created, then click Create Project.

  7. A progress dialog will be displayed. Once it indicates the project is created, use the dialog link Go to Integration Studio or open the project directly from the Integration Studio Projects page.

Review project workflows

In the open Integration Studio project, review the workflows along with the descriptions below to understand what they do. The descriptions below note where you could replace the system by modifying the project's endpoint configurations and workflows.

  1. Utility-Upload Customer Order Forms to Azure

    This workflow automates order form processing by extracting details from NetSuite, uploading documents to Azure Blob Storage, and indexing them in the Azure AI Search index.

    This workflow must be run first to load all active customer data, making customer details available to the AI agent. Running the workflow is described in Trigger the project workflows later on this page.

    If your organization's customer order form data is in a system other than NetSuite, you must modify the workflow's operations to replace NetSuite-specific components with those for your endpoint.

  2. Main Entry - Slack API Request Handler

    This workflow manages incoming Slack bot requests and verifies user authorization. It is triggered via a Jitterbit custom API each time your Sales team interacts with the Slack bot chat UI (that is, sends a Slack message to it). Configuration of the Jitterbit custom API is described in Create the Jitterbit custom API later on this page.

    If you aren't using Slack, this workflow can be ignored and won't be triggered. To use a different chat UI for your Sales team to interact with, use the Generic API Request Handler workflow, also triggered via a Jitterbit custom API.

  3. Main - AI Agent Tools Logic

    After receiving user authorization from either the Main Entry - Slack API Request Handler or Generic API Request Handler workflows, this workflow manages function-calling requests to the large language model (LLM), making decisions on which tool to run based on the LLM's response. There are three main tool calls:

    1. Customer_Order_Function: This tool addresses user queries about customer order forms by invoking the Main - Get Customer Order Form Details operation within the Tool-Customer Order Details workflow.

    2. Pricing_Function: This tool addresses user queries about product pricing by invoking the Main - Pricing Sheet operation within the Tool-Pricing Sheets workflow.

    3. Customer_Lookup_By_Location_Function: This tool addresses user queries to get customers by location or account owner by invoking the Main - Customer Lookup operation within the Tool - Customer Lookup workflow.

  4. Tool-Customer Order Details

    This workflow retrieves customer order details from NetSuite.

    To use a different endpoint than NetSuite, create a new operation to retrieve order forms from the system and assign the results to the extractedContent global variable. Then trigger the new operation from the Main - Get Customer Order Form Details operation.

  5. Tool-Pricing Sheets

    This workflow retrieves product pricing from Salesforce.

    In the configuration of the Salesforce Query activity, the following query retrieves product pricing information by agent. If your Salesforce organization doesn't use these objects and fields, or if product pricing information is stored in different objects/fields, this workflow will not function properly. In that case, the agent will not be able to answer pricing questions. Customize the query in this workflow to align with your Salesforce organization's data model:

    SELECT Product2.Description,
           Product2.Family,
           Product2.ProductCode,
           CurrencyIsoCode,
           Name,
           UnitPrice,
           Pricebook2.Name,
           Id
    FROM   PricebookEntry
    WHERE  IsDeleted = false
           AND IsArchived = false
           AND IsActive = true
           AND Pricebook2.IsActive = true
           AND Pricebook2.IsDeleted = false
           AND Pricebook2.IsArchived = false
           AND Product2.IsActive = true
           AND Product2.IsDeleted = false
           AND Product2.IsArchived = false
           AND CurrencyIsoCode = '{{ currencycode }}'
    ORDER BY Name
    

    To use a different endpoint than Salesforce, create a new operation to retrieve product pricing from the system and assign the results to the pricing_sheet global variable. Then trigger the new operation from the Main - Pricing Sheet operation.

  6. Tool - Customer Lookup

    This workflow retrieves customers from Salesforce.

    In the configuration of the Salesforce Query activity, the following query retrieves customer account information. If your Salesforce organization uses different fields or objects for customer details, customize this query in this workflow accordingly:

    SELECT Id,
           BillingCity,
           BillingCountry,
           BillingState,
           Name
    FROM   Account
    WHERE  Type = 'Customer'
    

    To use a different endpoint than Salesforce, create a new operation to retrieve customers from the system and assign the results to the extractedContent global variable. Then trigger the new operation from the Main - Customer Lookup operation.

  7. Utility - Get All Account Owners

    This workflow retrieves account owners from Salesforce.

    In the configuration of the Salesforce Query activity, the following query retrieves account owners (name and email) for all accounts of type Customer or Partner. If your Salesforce organization uses different account types or custom fields to classify accounts, customize this query in this workflow accordingly:

    SELECT OwnerId,
           Owner.Email,
           Owner.Name
    FROM   Account
    WHERE  Type IN ('Customer', 'Partner')
    

    To use a different endpoint than Salesforce, create a new operation to retrieve account owners from the system and assign the results to the Account_Owner_List variable. Then trigger the new operation from the Main - Get Owner List operation.

  8. Utility-User Authorization And Session

    This workflow manages the user authorization and session. It uses Jitterbit Cloud Datastore (Beta) to maintain a list of authorized users and their active sessions.

    To configure this workflow with an alternative data store or authorization mechanism for managing user access and sessions, modify the workflow's operations accordingly.

  9. Utility - Bot Chat History Storage

    This workflow manages the storage of bot chat history, which is essential for providing memory context to LLMs. It leverages Jitterbit Cloud Datastore (Beta) for this purpose.

    To integrate with other data storage solutions for storing and retrieving chat history, modify the workflow's operations accordingly.

  10. Generic API Request Handler

    This workflow processes HTTP API requests from any application. To integrate with your applications, create a custom Jitterbit API that triggers the Generic API request Handler operation. This API's URL can then be used by any application to send and receive requests.

    Configuration of the custom Jitterbit API is described in Create the Jitterbit custom API later on this page.

Create Microsoft Azure resources

Create the following Microsoft Azure resources and retain the following information for configuring the AI agent. To create and manage these resources, you must have a Microsoft Azure subscription with the appropriate permissions.

Azure Blob container

You must create an Azure Blob container to store customer details. Data from the Blob container will be indexed in Azure AI Search using an index and indexer.

You'll need the container's SAS URL for use in determining the values of the Azure Blob Storage project variables. To generate the SAS URL:

  1. In the Azure portal, browse to Storage accounts and open the specific storage account.
  2. From the resource menu under Data storage, select Containers and open the specific container.
  3. From the resource menu under Settings, select Shared access tokens.
  4. Use the Permissions menu to verify that the shared access signature (SAS) URL for this container has a minimum of Read and Write permissions:

    SAS URL permissions

  5. Click Generate SAS token and URL.

  6. Copy the Blob SAS URL displayed at the bottom.
  7. Determine the values of the Azure Blob Storage project variables from the SAS URL. The SAS URL is in the format of {{ azure_blob_base_url }}/{{ Azure_Customer_Details_Container }}?{{ azure_customer_detail_blob_sig }}.

If using the JSON definition files included in the AI agent's customization files to generate the index and indexer, you'll also need the Azure Blob Storage account key. To view account access keys:

  1. In the Azure portal, browse to Storage accounts and open the specific storage account.
  2. From the resource menu under Security + networking, select Access keys.
  3. Click Show keys to reveal the access key to use during configuration of Azure AI Search.

    Storage account keys

Azure AI Search service

You must create an Azure AI Search service and configure its index and indexer to process the data from the Blob container.

You'll need the Azure AI Search service's URL and API key to determine the values of the Azure AI Search project variables:

You can use the JSON definition files included in the AI agent's customization files to generate the index and indexer, or you can create them yourself.

If using the provided definition files, you must replace the following placeholders with your own configuration values:

Azure_AI_Search_Indexer_Definition.json

Placeholder Description
{{Your Azure AI Search Service Name}} The name of the Azure AI search service.

Azure_AI_Search_Datasource_Definition.json

Placeholder Description
{{Your Azure AI Search Service Name}} The name of the Azure AI search service.
{{Your Azure Blob Account Name}} The name of the Azure Blob account.
{{Your Azure Blob Account Key}} The access key for the Azure Blob Storage account, obtained as described in Azure Blob container above.
{{your_azure_blob_container_name}} The name of the Azure Blob container.

Azure OpenAI resource

You must create an Azure OpenAI resource and deploy a gpt-4o or gpt-4.1 model via the Azure AI Foundry portal.

You'll need the deployment name, Azure OpenAI endpoint URL, and API key to determine the values of the Azure OpenAI project variables. To find these values:

  1. In the Azure AI Foundry portal, open the specific OpenAI resource.
  2. The values to use for the endpoint URL (azure_openai_base_url) and API key (azure_openai_api_key) are displayed on the landing page for the resource:

    AI Foundry key and URL

  3. In the navigation menu under Shared resources, select Deployments. The deployment name (Azure_OpenAI_Deployment_Name) is displayed.

Prepare Jitterbit Cloud Datastore (Beta)

Create two key storages in Jitterbit Cloud Datastore (Beta), Bot_Authorized_Users and askjb_sales_q_and_a, whose fields have the names and types listed in the tables below.

As you add custom fields, use the tables below to determine whether each should be toggled to Required in the Cloud Datastore (Beta) user interface. The AlternativeKey and Value fields are default fields that cannot be removed or toggled.

After adding custom fields, add a key storage register for each user that will be authorized to use the AI agent bot. You must manually define the values marked in the tables below. You can leave blank the values of fields whose values are auto-populated or not used.

Bot_Authorized_Users

This key storage contains the list of authorized users and their sessions. You must manually enter the email addresses of users who are authorized to access the AI agent bot.

Name Type Required Value definition Description
Key Text Yes Enter manually The email address of the user authorized to interact with the AI agent via the Slack bot. This value is entered manually.
AlternativeKey Text No Auto-populated The session for the user will be auto-generated during execution. No manual entry is required.
Value Text No Enter manually The email address of the user authorized to interact with the AI agent via the Slack bot. This value is entered manually. Although it is not marked as a required field by default, providing a value is required for the AI agent to function.

askjb_sales_q_and_a

This key storage retains a bot's chat history to provide memory context for the LLM. It is used by the integration to store question and answer history. All data is entered automatically during the interaction run.

Name Type Required Value definition Description
Key Text Yes Auto-populated Specifies the unique identifier assigned to a message by the system.
AlternativeKey Text No Auto-populated Specifies the unique identifier assigned to a chat session by the system.
Value Text No Not used Not used.
slackChannel Text Yes Auto-populated The Slack channel ID from which the message is sent.
User Text Yes Auto-populated The Slack username of the user who sends the message.
FirstName Text No Auto-populated First name of the user who sends the message.
LastName Text No Auto-populated Last name of the user who sends the message.
Email Text Yes Auto-populated Email address of the user who sends the message.
MessageTimestampText Text Yes Auto-populated The timestamp text of the message.
UserQuestion Big Text Yes Auto-populated The question or message submitted by the user to the AI agent.
AIAnswer Big Text Yes Auto-populated The response generated by the AI agent to the user's question.
ai_reformulate_question Big Text No Auto-populated The user's question after being reformulated or rephrased by the AI to improve understanding.

Configure project variables

In the Integration Studio project installed earlier via Marketplace, you must set values for the following project variables.

This can be done using the project's actions menu to select Project Variables to open a drawer along the bottom of the page where you can review and set the values.

Salesforce

Variable name Description
SF_Login_URL Server Host in the Salesforce connection
SF_Password Password in the Salesforce connection
SF_Security_Token Security token in the Salesforce connection
SF_User_Name Username in the Salesforce connection

NetSuite

Variable name Description
NetSuite_Account Account in the NetSuite connection
NetSuite_Consumer_Key Consumer key in the NetSuite connection
NetSuite_Consumer_Secret Consumer secret in the NetSuite connection
NetSuite_Base_URL NetSuite base URL, such as https://{{NetSuite_Account}}.suitetalk.api.netsuite.com.
NetSuite_Token_Key Token key in the NetSuite connection
NetSuite_Token_Secret Token secret in the NetSuite connection

Azure Blob Storage

Variable name Description
Azure_Customer_Details_Container The name of the Azure Blob container to store customer information from order forms.
azure_customer_detail_blob_sig SAS URL signature for Azure_Customer_Details_Container.
azure_blob_base_url Azure container service base URL for Azure_Customer_Details_Container.

Tip

These values can be derived from the SAS URL, which is in the format of {{azure_blob_base_url}}/{{Azure_Customer_Details_Container}}?{{azure_customer_detail_blob_sig}}.

Variable name Description
customer_search_index_name The name of the Azure index that stores customer information from order forms.
Azure_SalesOrders_Customer_Indexer The name of the Azure indexer that indexes data from Azure_Customer_Details_Container to customer_search_index_name index.
azure_ai_search_url Azure AI search service base URL.
azure_ai_search_api_key API key for Azure AI Search service.

Azure OpenAI

Variable name Description
Max_Output_Tokens The maximum number of tokens the LLM can generate in a response. GPT-4.1 supports up to 32768 tokens, while GPT-4o supports up to 16384.
Azure_OpenAI_Deployment_Name The name of deployment for LLM in Azure OpenAI.
azure_openai_base_url Azure OpenAI service base URL.
azure_openai_api_key API key for Azure OpenAI service.

Slack

Variable name Description
salesorder_slack_bot_token The Slack bot token that is obtained after creating the Slack app, used for the Bot user OAuth access token in the Slack connection.

Note

The Slack app is created in a later step. For now, you can leave this variable blank.

Common

Variable name Description
Authorized_User_Admin Contact name/email shown in the response sent to the user when an error occurs.
Customer_LastOrder_DefaultDate The default date (mm/dd/yyyy) from which orders are pulled from NetSuite during the first run or a historical run when incrementalRun is set to false. For example: 06/01/2004.
Default_Last_Sync_Date Default last sync date to be used if cache value is not available.
incrementalRun When true, only incremental (new or updated) orders are pulled from NetSuite. When false or blank, a complete order history is retrieved from the default date.
Only_Unexpired_Orders When true, only the orders with nextbilldate greater than today's date will be pulled from NetSuite.

Test connections

Test the endpoint configurations to verify connectivity using the defined project variable values.

This can be done from the design component palette's Project endpoints and connectors tab by hovering on each endpoint and clicking Test.

Deploy the project

Deploy the Integration Studio project. This can be done using the project's actions menu to select Deploy.

Create the Jitterbit custom API

Create a custom API using API Manager for one of the following:

Create the Slack bot API request handler

This custom Jitterbit API will trigger the Slack Bot API Request Handler operation. Configure and publish the custom API with the following settings:

  • API Service: Slack Bot API Request Handler
  • Path: /
  • Project: Select the Integration Studio project created from the Jitterbit Sales Agent in Marketplace
  • Operation to Trigger: Slack Bot API Request Handler
  • Method: POST
  • Response Type: System Variable

Retain the service URL of the published API for use in creating the Slack app. The service URL can be found in the API details drawer on the Services tab by hovering on the service's Actions column and clicking Copy API service URL.

Generic API request handler

This custom Jitterbit API will trigger the Generic API request Handler operation. It is not required. Create this API if you are using other applications to process HTTP API requests. Configure and publish the custom API with the following settings:

  • Service name: Generic API request Handler
  • Project: Select the Integration Studio project created from the Jitterbit Sales Agent in Marketplace
  • Operation: Generic API request Handler
  • Method: POST
  • Response type: System Variable

Tip

You can also add a security profile for authentication.

Request body
{
    "username": "abc@abc.com",
    "sessionId": "123608",
    "prompt": "Order Forms details for xyz"
}
Response
{
   "message": "Based on order forms, here are the complete order details: ...",
   "status_code": 200
}

Create the Slack app, test the connection, and re-deploy the project

To create the Sales Agent chat interface in Slack, create a Slack app using the Slack app manifest file provided with this AI agent's customization files. Or, create it from scratch.

If using the provided Slack app manifest file (slack_app_manifest.json), you must replace the following placeholders with your own configuration values:

Placeholder Description
{{Replace with Slack bot name}} The name you want your Slack bot to have, as displayed to users. There are two places in the manifest where you must replace this value.
{{Replace with Jitterbit API URL}} The service URL of the Jitterbit custom API you created in Create the Slack bot API request handler.

After installing the Slack app, obtain its bot token.

Re-open the project variables configuration and enter the bot token for the salesorder_slack_bot_token project variable value.

Once the bot token is set, test the Slack connection and re-deploy the project.

Trigger the project workflows

For the initial data loader, run the operation in the first workflow, Utility-Upload Customer Order Forms to Azure. This can be done using the operation's Run option shown by hovering on the operation. You will need to run the operation again in the future if your data is updated.

Tip

You may want to put this operation on a schedule to get updated data on a regular basis. This can be done from the operation's actions menu in Settings > Schedules.

The two other main workflows are triggered by the Jitterbit custom APIs:

  • Main Entry - Slack API Request Handler: This workflow is triggered from Slack via the Slack Bot API Request Handler custom API. Sending a direct message to the Slack app will initiate the custom API trigger.

  • Generic API Request Handler: This workflow is triggered from another application via the Generic API request Handler custom API. Sending a request to the configured API will initiate the custom API trigger.

All other workflows are triggered by other operations and are downstream of those listed above. They are not intended to be run by themselves.

Troubleshooting

Review API logs and operation logs for detailed troubleshooting information.

For additional assistance, contact Jitterbit support.