Skip to content

Connect Richpanel to AI Agents: Sync Support and Customer Data

Learn how to connect Richpanel to AI agents using Truto's /tools endpoint. Fetch tools, bind them natively to LLM frameworks, and automate e-commerce support.

Uday Gajavalli Uday Gajavalli · · 9 min read
Connect Richpanel to AI Agents: Sync Support and Customer Data

You want to connect Richpanel to an AI agent so your system can autonomously handle e-commerce support queries, look up order statuses, and update conversational threads. If your team uses ChatGPT, check out our guide on connecting Richpanel to ChatGPT, or if you rely on Anthropic's ecosystem, read our guide on connecting Richpanel to Claude. For developers building custom autonomous workflows, you need a programmatic way to fetch these tools and bind them directly to your agent framework.

The industry is moving past basic chatbots that just search a knowledge base. Modern e-commerce support requires agentic AI - autonomous systems capable of executing multi-step workflows across your SaaS stack. But giving a Large Language Model (LLM) read and write access to your Richpanel instance is an engineering headache. You either spend weeks building, hosting, and maintaining a custom connector, or you use an infrastructure layer that handles the boilerplate for you.

This guide breaks down exactly how to fetch AI-ready tools for Richpanel, bind them natively to an LLM using frameworks like LangChain, LangGraph, or the Vercel AI SDK, and execute complex support workflows. We will use the architectural approach described in our guide to Architecting AI Agents: LangGraph, LangChain, and the SaaS Integration Bottleneck.

The Engineering Reality of the Richpanel API

Giving an LLM access to external data sounds simple during a prototype phase. You write a Node.js function that makes a fetch request and wrap it in an @tool decorator. In production, this approach collapses entirely. If you decide to build a custom integration for Richpanel, you own the entire API lifecycle.

Richpanel is specifically designed for e-commerce, meaning its API is tightly coupled with order management concepts, complex conversational payloads, and external catalog data. This introduces several specific integration challenges that break standard CRUD assumptions.

The Conversation-Order Relational Disconnect

E-commerce support is rarely just about solving a software bug; it is almost always tied to a physical transaction. In Richpanel, you cannot just fetch a conversation and instantly see the real-time shipping status in a flat JSON response. Richpanel links conversations to orders via an appclient_id and an order_id.

When an AI agent needs to answer "Where is my order?", it must first fetch the conversation, extract the conversation ID, query the linked order endpoint to obtain the appclient_id, and then finally query the order endpoint to retrieve fulfillment details. If you expose raw, unformatted API endpoints to an LLM, the model will frequently fail to understand this required relational join, hallucinating order details instead of making the required sequential calls.

Heavily Nested Write Payloads

Updating a conversation in Richpanel is not a simple string update. The API requires a heavily nested ticket object. If your agent wants to reply to a customer, it must construct a payload containing a status, a comment object (which strictly requires a sender_type enum and a body), tags, and a customer_profile.

LLMs are notoriously bad at adhering to deeply nested JSON schemas unless explicitly guided. If the LLM misses the sender_type or formats the customer_profile incorrectly, the API rejects the request. You must define strict, exhaustive JSON schemas for your tools to force the LLM into the correct shape.

Rate Limits and 429 Exhaustion

When an autonomous agent decides to summarize 50 recent conversations to determine customer sentiment, it will quickly exhaust API quotas.

It is critical to understand how Truto handles this: Truto does not retry, throttle, or apply exponential backoff on rate limit errors. When the upstream Richpanel API returns an HTTP 429 Too Many Requests error, Truto passes that error directly back to the caller. However, Truto normalizes the upstream rate limit information into standardized HTTP headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset) following the IETF specification.

The caller - your AI agent's execution loop - is entirely responsible for reading these headers and implementing its own pause, retry, or backoff logic. Do not assume the integration layer will absorb rate limits for an aggressive LLM.

Fetching Richpanel Tools for Your AI Agent

Truto abstracts the underlying API complexity by representing every integration as a comprehensive JSON object - conceptually similar to a Swagger file, but built specifically for integration behaviors.

Integrations utilize Resources, which map directly to endpoints on Richpanel's API, enabling us to map the API into a standardized REST-based CRUD structure. Every Resource has Methods defined on them (List, Get, Create, Update, Delete). These Methods serve as Proxy APIs where Truto handles pagination, authentication, and query parameter processing.

To expose these to an LLM, Truto provides a description and a strict schema for all Methods defined on the Richpanel integration. By calling the GET /integrated-account/<id>/tools endpoint, you receive all these Proxy APIs pre-formatted as tools that LLM frameworks natively understand.

curl --request GET \
  --url 'https://api.truto.one/integrated-account/{integrated_account_id}/tools?methods[0]=read&methods[1]=write' \
  --header 'Authorization: Bearer YOUR_TRUTO_API_KEY'

The methods query parameter allows you to filter exactly what the agent is allowed to do. If you only want an agent to analyze support metrics but never reply to customers, you simply request methods [0]=read.

Hero Tools for Richpanel AI Agents

Out of the complete Richpanel tool inventory, there are specific, high-leverage operations that are essential for building capable e-commerce support agents. Here are the hero tools you should prioritize.

list_all_richpanel_orders

This is the critical bridge between a support ticket and a purchase. This tool requires a conversation_id and returns the orderId and appClientId if an order is linked. Agents use this to determine exactly which transaction a customer is talking about before attempting to check shipping statuses.

"Look at conversation ID 88492. Find the linked order ID so I can look up the fulfillment status."

get_single_richpanel_order_by_id

Once the agent has the appclient_id and id, this tool pulls the ground truth. It returns the order status, amount, payment status, items purchased, fulfillment details, and billing address. This prevents the agent from making assumptions about what the customer bought.

"Fetch the details for order ID 10943 under appclient ID 2. Did the fulfillment status change to shipped yet?"

get_single_richpanel_customer_by_id

Agents need context about who they are talking to. This tool allows the agent to fetch a customer profile using their email address or phone number. It helps the agent verify VIP status, view lifetime value, or confirm identity before issuing refunds.

"Pull the customer record for sarah.jenkins@example.com. How long have they been a registered customer?"

get_single_richpanel_conversation_by_id

This tool retrieves the entire context of a specific conversation. It returns the subject, assignee, priority, status, and most importantly, the nested array of comments including the internal notes that human agents left behind.

"Retrieve the full thread for conversation 5510. Read the internal notes left by the previous agent to understand why the refund was delayed."

create_a_richpanel_conversation

Agents acting on proactive triggers (like a failed delivery webhook) need to initiate contact. This tool creates a new ticket, requiring a complex nested payload including the channel type, initial message body, tags, and priority.

"Create a new high-priority conversation for customer ID 993. Set the subject to 'Delivery Exception' and draft an initial message apologizing for the delay."

update_a_richpanel_conversation_by_id

This is the primary action tool for autonomous support. It allows the agent to change the ticket status (e.g., to 'resolved'), assign tags, and append new messages to the thread. The strict schema ensures the LLM provides the required sender_type and visibility flags.

"Update conversation 88492. Add a public comment saying 'Your replacement item has shipped,' and change the ticket status to waiting on customer."

To view the complete inventory of available tools, query schemas, and payload structures, visit the Richpanel integration page.

Workflows in Action

Exposing individual tools is only half the battle. The real value emerges when an LLM framework orchestrates these tools sequentially to solve complex support scenarios.

Scenario 1: The "Where is my order?" Auto-Responder

E-commerce support teams spend hours answering basic order tracking questions. An AI agent can handle this end-to-end.

"A customer just opened conversation ID 4402 asking where her recent order is. Find the linked order, check the shipping status, and reply to the ticket with the update."

  1. The agent calls list_all_richpanel_orders passing conversation_id: 4402.
  2. The API returns orderId: 9912 and appClientId: 3.
  3. The agent calls get_single_richpanel_order_by_id using those IDs.
  4. The agent reads the fulfillment details from the response, noting the tracking number and 'shipped' status.
  5. The agent calls update_a_richpanel_conversation_by_id, setting status: pending, and drafts a public comment containing the tracking link.

Scenario 2: Escalating Priority for High-Value Orders

You want your agent to triage incoming tickets based on financial impact rather than just chronological order.

"Review the new conversation ID 6011. If the associated order value is over $500, tag the conversation with 'VIP-Escalation' and assign it to the Priority queue."

  1. The agent calls list_all_richpanel_orders for the conversation.
  2. The agent calls get_single_richpanel_order_by_id to retrieve the order payload.
  3. The agent analyzes the amount field. It sees the value is $850.
  4. The agent calls create_a_richpanel_conversation_tag to append the 'VIP-Escalation' tag.
  5. The agent calls update_a_richpanel_conversation_by_id to update the assignee_id to the ID of the escalation team.

Building Multi-Step Workflows

To execute the workflows described above, your application must handle the orchestration loop. Using a framework like LangChain alongside the truto-langchainjs-toolset, you can dynamically inject Richpanel capabilities into your agent.

First, initialize the Truto tool manager with your integrated account ID.

import { ChatOpenAI } from "@langchain/openai";
import { AgentExecutor, createOpenAIToolsAgent } from "langchain/agents";
import { ChatPromptTemplate } from "@langchain/core/prompts";
import { TrutoToolManager } from "truto-langchainjs-toolset";
 
// Initialize the tool manager for the specific Richpanel account
const toolManager = new TrutoToolManager({
    trutoApiKey: process.env.TRUTO_API_KEY,
    integratedAccountId: "richpanel_acc_99283jdw"
});
 
// Fetch the tools definitions dynamically from Truto
const tools = await toolManager.getTools();
 
// Initialize your LLM
const llm = new ChatOpenAI({
    modelName: "gpt-4-turbo",
    temperature: 0,
});

Next, bind the fetched tools to your LLM and create the agent execution loop. This is where you must account for the reality of API integrations, specifically regarding rate limits.

const prompt = ChatPromptTemplate.fromMessages([
    ["system", "You are an elite e-commerce support agent. You have access to Richpanel tools to look up orders and update conversations. Always verify order details before making a claim to a customer."],
    ["placeholder", "{chat_history}"],
    ["human", "{input}"],
    ["placeholder", "{agent_scratchpad}"],
]);
 
const agent = await createOpenAIToolsAgent({
    llm,
    tools,
    prompt,
});
 
const agentExecutor = new AgentExecutor({
    agent,
    tools,
    maxIterations: 10,
});
 
// Execute the workflow
try {
    const result = await agentExecutor.invoke({
        input: "Customer in conversation 8812 is asking for a refund. What was the payment status of their linked order?"
    });
    console.log(result.output);
} catch (error) {
    // The caller must handle HTTP 429 Rate Limits.
    // Truto normalizes these into standardized headers.
    if (error.response && error.response.status === 429) {
        const resetTime = error.response.headers['ratelimit-reset'];
        console.error(`Rate limit exceeded. Must back off until: ${resetTime}`);
        // Implement your queue/retry logic here based on the reset timestamp
    } else {
        console.error("Agent execution failed:", error);
    }
}

In this architecture, Truto handles the OAuth token lifecycle, applies the correct base URLs, processes the complex JSON schemas for the LLM to understand, and maps the proprietary error codes into standardized HTTP formats. Your application focuses strictly on prompt engineering, agent orchestration, and handling necessary backoff logic when the LLM gets too aggressive with the Richpanel API.

Automate E-Commerce Support Faster

Connecting Richpanel to AI agents transforms your support organization from a reactive cost center into an autonomous operation. However, spending engineering cycles building and maintaining a custom connector defeats the purpose of buying off-the-shelf AI tools.

By utilizing Truto's proxy architecture and the /tools endpoint, you provide your agents with real-time read and write access to Richpanel's most complex relational data models. You bypass the need to write massive JSON schemas by hand, handle pagination cursors, or deal with token refreshes.

FAQ

Does Truto automatically retry failed API calls if Richpanel hits a rate limit?
No. Truto does not retry, throttle, or apply exponential backoff on rate limit errors. If the Richpanel API returns an HTTP 429 Too Many Requests, Truto passes that error to the caller. Truto normalizes the upstream headers into standard IETF formats (ratelimit-limit, ratelimit-remaining, ratelimit-reset), and your agent must implement its own backoff logic.
How does an AI agent know which order is associated with a Richpanel conversation?
Richpanel requires a relational lookup. The agent must first use the `list_all_richpanel_orders` tool with the conversation ID to retrieve the `orderId` and `appClientId`. It then uses those IDs with the `get_single_richpanel_order_by_id` tool to fetch the actual order details.
Can I restrict my AI agent to only read data from Richpanel and not send messages?
Yes. When calling Truto's /tools endpoint, you can filter the returned tools using the methods query parameter (e.g., `?methods[0]=read`). This ensures the LLM framework only registers read-only operations, physically preventing it from altering tickets.
Which LLM frameworks work with Truto's tool endpoint?
Truto's tools endpoint is framework-agnostic. The provided schemas map seamlessly into frameworks like LangChain, LangGraph, CrewAI, AutoGen, and the Vercel AI SDK. Truto also maintains a dedicated SDK (truto-langchainjs-toolset) to automate the binding process for LangChain.js.

More from our Blog