Vendix SFA
Product · AI Chatbot

A chatbot that actually does the work.

Most "AI for sales" is a search box wearing a chat mask. Vendix is different - it has 41 actions wired into the same workflows the rest of the platform uses, so when a rep says "approve Sunil's credit limit", the chat actually approves it. Every action is audited, role-scoped, and validated the same way it would be from the web portal.

41
Tools wired
10
Role scopes
19
Injection guards
app.vendixai.com · /aichat
Show me overdue invoices for the Negombo route, oldest first.
Vendix AI
tool Vendix get_aging_report · route=NEG-04
tool Vendix get_outlets · route=NEG-04 → 18 outlets

3 outlets > 60 days overdue:

  • Sunil's Grocery · Rs. 84,200 · 87 days
  • Negombo Pharma · Rs. 41,500 · 73 days
  • City Mart · Rs. 18,900 · 64 days

Want me to send a collection reminder?

2 tool calls · 1,294 tokens · $0.0058 audit-logged
Real actions, not just chat

Every command runs the same workflow as the web portal.

When the chatbot approves a credit request, it follows the exact same approval workflow your team uses in the web portal. Validation runs. The audit trail captures it. Approval emails go out. There is no "AI shortcut" - and no way for the chat to do something the user couldn't already do themselves.

  • 33 read tools - outlets, products, routes, pricing, stock, aging, sales targets, visits, payments, returns, approvals…
  • 8 write tools - start day, end day, create sales return, approve credit, record payment, approve/reject invoice, record visit.
  • RAG over tenant data - products, prices, knowledge base, conversation history. Never hallucinates a SKU.
Vendix tool trace
user ▸ approve sunil's grocery credit request, the new limit is 150k
# intent classifier: credit_approval.approve
tool Vendix ▸ search_outlets("sunil's grocery") → OUT-NEG-04417
tool Vendix ▸ get_credit_approval_requests(outletId=OUT-NEG-04417, status=Pending)
tool Vendix ▸ approve_credit_request(id=CAR-2026-00382, newLimit=150000) → Approved
# 3 tool calls · 2,103 tokens · $0.0094 · 1.7s · audit: AUDIT-2026-04-29-009382

Same question · "show me sales this week"

TenantAdmin Rs. 14.2 M · all regions, all reps
RSM (Western) Rs. 4.8 M · Western Province only
SalesRep #042 Rs. 287 K · own routes only
Distributor Rs. 2.1 M · own distributor scope

Scoping is enforced at the query layer - not in the prompt.

Role-aware scoping

The same prompt, ten different answers.

Vendix has ten tenant user roles, from TenantAdmin to DeliveryPerson. Each one sees only what they're allowed to see - and crucially, that filter runs inside the tool implementation, not in the system prompt. A jailbreak that tricks the model can't widen the data scope, because the model never had access to begin with.

  • SalesRep sees only their assigned routes & outlets.
  • RSM/ASM see their region or area only - hierarchy walked via ManagerId ladder.
  • Distributor users see only their own distributor's outlets, products, and stock.
  • Write tools enforce role gates server-side (e.g., only managers can approve_credit_request).
Token-level audit

Every AI call leaves a trail.

AI is invisible by default - Vendix makes it loud. Every chat invocation is recorded with input tokens, output tokens, estimated cost, latency, and the exact tools it called. Finance can see what the chatbot is costing per role; security can prove which user took which action; product teams can spot prompts that misuse the tools.

  • Per-tenant token + cost tracking via IChatbotAuditService.
  • Function-call traces stored as JSON on each ChatMessage.
  • Rate-limited at 10 messages/min & 200/day per user - runaway scripts can't bankrupt you.
Chatbot usage · last 7 days tenant:demo-pharma

Messages

2,847

Tokens

3.4 M

Cost

$28.41

Top tools

get_aging_report
412
get_outlets
328
create_sales_return
181
approve_credit_request
94
Engineered for production

The boring stuff is already done.

Prompt-injection guard

19 known attack patterns blocked at the input sanitizer before the prompt reaches the AI model. System prompt has secondary guardrails.

Per-tenant rate limit

10 messages/min and 200/day per user, configurable per tenant. Sliding window - abuse is throttled, not blocked outright.

RAG vector store

Per-tenant embeddings of products, outlets, knowledge base. Auto-reindex on writes via TenantDbContext interception.

Multi-language

English, Sinhala, Tamil - model handles mixed-language prompts naturally. UI strings localised via .resx resources.

Surfaces everywhere

Same chatbot in Blazor portal (Markdig markdown rendering), Android native (Compose + Room cache), and 7 mobile API endpoints.

Conversation history

Stored in TenantDb - ChatConversations + ChatMessages tables. Archive, search, replay. Synced to Android via Room.

Want to see your data answer back?

A 30-minute demo with one of our solutions engineers - using a sandbox tenant pre-loaded with your products, outlets, and price lists. Bring real questions.