Business situation
ABC Limited, a distributor, runs its orders on an in-house ERP. Its customer service team answers the same question many times a day: where is my order? Staff want to ask their AI. Some of ABC Limited’s business customers would rather ask their own AI than phone or log into a portal.
Why existing tools alone are insufficient
No off-the-shelf AI integration exists for a system ABC Limited built itself. Building a bespoke integration for each AI tool means handing each one ERP credentials. Opening the ERP to customers’ AI directly would require building an access control layer from scratch, so that each customer sees only their own orders.
Systems involved
- The private ERP — orders, order lines, customers and shipments.
- KroyDB — customer entities, mapped to ERP customer accounts.
- Customer Channels — one per business customer.
Kroy architecture
A developer at ABC Limited builds a private Kroy Connector for the ERP. It declares its resources (orders, shipments, customers), its actions (erp.order.read, erp.shipment.read, and erp.order.update, which is kept for internal systems), its events (erp.order.shipped) and its permissions. Kroy holds the ERP credentials. The Check Order Status Skill uses only the read actions and leaves out pricing fields. It is enabled for customer service, and offered in each customer’s Channel, where the projection is filtered to that customer’s orders.
Workflow
- The developer installs the private Connector in ABC Limited’s Kroy organisation and creates the Check Order Status Skill.
- A customer service adviser asks Copilot: “Where is order 4471 for XYZ Limited?” Copilot discovers the Skill through Kroy and requests
erp.order.read. Kroy authorises it; the ERP returns the order and its shipment. - The adviser asks Copilot: “Discount the remaining lines on that order.” Kroy refuses:
erp.order.updateis not in the Skill. - XYZ Limited’s buyer, a guest in the XYZ Customer Channel, asks their own ChatGPT: “Which of our orders haven’t shipped yet?” Kroy returns only XYZ Limited’s open orders.
- The buyer’s ChatGPT asks for orders placed by another customer. Kroy refuses: the Channel’s projection contains only XYZ Limited’s orders.
- When an order ships, the ERP emits
erp.order.shipped. The buyer’s subscription in the Channel is notified.
Agent permissions
Staff AI acts under each adviser’s delegation within the Skill. A customer’s AI acts under the guest’s delegation, bounded by that customer’s Channel. No agent receives ERP credentials or pricing fields.
Human permissions
Customer service advisers can check any customer’s orders. Each customer’s guests can see only their own organisation’s orders. The developer and IT manage the Connector.
State changes
- The private Connector and Skill are installed and versioned in Kroy.
- Customer entities are linked to ERP customer accounts.
- Shipment events are recorded against the order and delivered to subscribers.
Audit outcome
Kroy records every Skill invocation — staff and customer — with the person, the agent, the Channel and the decision, including the refused update and the refused cross-customer request.
External sharing
Each customer’s Channel is external sharing, scoped to one customer. ABC Limited can revoke a guest, or a whole customer’s Channel, at any time.
Security considerations
- ERP credentials stay in Kroy; no AI and no customer ever holds them.
- Customer boundaries are enforced by the projection, not by the AI.
- The Connector exposes only the actions the developer declares.
Setup requirements
- A developer to build the private Connector against the ERP’s API or database.
- Customer entities in KroyDB mapped to ERP accounts.
- The Check Order Status Skill enabled for staff and offered in customer Channels.
- Customer guests invited to their Channels.