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:
- Jitterbit Integration Studio
- The Decision (Beta) tool
- Jitterbit API Manager
- Jitterbit Sales Agent purchased as a license add-on
- Jitterbit Cloud Datastore (Beta) (optional)
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
orgpt-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:
- Download customizations and install the Integration Studio project.
- Review project workflows.
- Create Microsoft Azure resources.
- Prepare Jitterbit Cloud Datastore (Beta).
- Configure project variables.
- Test connections.
- Deploy the project.
- Create the Jitterbit custom API.
- Create the Slack app, test the Slack connection, and re-deploy the project.
- 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:
-
Log in to the Harmony portal at https://login.jitterbit.com and open Marketplace.
-
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.
-
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.
-
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.
-
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.
-
-
In configuration step 2, Create a New Project, select an environment where the Integration Studio project will be created, then click Create Project.
-
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.
-
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.
-
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. -
Main - AI Agent Tools Logic
After receiving user authorization from either the
Main Entry - Slack API Request Handler
orGeneric 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:-
Customer_Order_Function: This tool addresses user queries about customer order forms by invoking the
Main - Get Customer Order Form Details
operation within theTool-Customer Order Details
workflow. -
Pricing_Function: This tool addresses user queries about product pricing by invoking the
Main - Pricing Sheet
operation within theTool-Pricing Sheets
workflow. -
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 theTool - Customer Lookup
workflow.
-
-
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 theMain - Get Customer Order Form Details
operation. -
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 theMain - Pricing Sheet
operation. -
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 theMain - Customer Lookup
operation. -
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
orPartner
. 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 theMain - Get Owner List
operation. -
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.
-
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.
-
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:
- In the Azure portal, browse to Storage accounts and open the specific storage account.
- From the resource menu under Data storage, select Containers and open the specific container.
- From the resource menu under Settings, select Shared access tokens.
-
Use the Permissions menu to verify that the shared access signature (SAS) URL for this container has a minimum of Read and Write permissions:
-
Click Generate SAS token and URL.
- Copy the Blob SAS URL displayed at the bottom.
- 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:
- In the Azure portal, browse to Storage accounts and open the specific storage account.
- From the resource menu under Security + networking, select Access keys.
-
Click Show keys to reveal the access key to use during configuration of Azure AI Search.
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:
- URL: To obtain the value to use for
azure_ai_search_url
, refer to the Azure documentation Get service information. - API key: To obtain the value to use for
azure_ai_search_api_key
refer to the Azure documentation Configure role-based access.
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:
- In the Azure AI Foundry portal, open the specific OpenAI resource.
-
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: -
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}}
.
Azure AI Search
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:
- Slack bot API request handler: Required if using the Slack notification included in the design of this AI agent.
- Generic API request handler: Optional. Use for handling API requests from any application.
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.
{
"username": "abc@abc.com",
"sessionId": "123608",
"prompt": "Order Forms details for xyz"
}
{
"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 theSlack 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 theGeneric 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.