Protocols & Automation

GraphQL

GraphQL lets a caller ask for exactly the fields it needs. For an assistant that is genuinely useful, and it is also the reason scope discipline matters more here.

Protocols & AutomationRead-scopedPermission-awareAudited lookupsArabic & English

GraphQL lets a caller ask for exactly the fields it needs. For an assistant that is genuinely useful, and it is also the reason scope discipline matters more here.

What GraphQL holds, and why that matters here

GraphQL exposes a single flexible interface where the caller specifies precisely what it wants. That efficiency is real — an assistant can retrieve exactly the fields needed for an answer rather than pulling a whole object.

The same flexibility means the interface itself imposes fewer boundaries than a REST endpoint does. Where REST exposes named resources, GraphQL exposes a graph, and the discipline about what may be traversed has to come from configuration rather than from the interface shape.

  • Schema — the shape of what is available.
  • Queries — the specific retrievals defined for the assistant.
  • Field-level selection — retrieving only what an answer needs.
  • Authentication — credentials you issue and control.
  • Permissions — what a given identity may traverse.

Questions this connection lets Elbi answer

What is this record?

Specific fields retrieved rather than a whole object.

What is related to it?

Connected records, where the schema exposes the relationship.

What is the current state?

Live status from the system.

Which of these match?

A filtered set described for a business reader.

What changed?

Fields that differ from what was expected.

Record this

Where a mutation is deliberately enabled and scoped.

How the connection works in practice

  1. You decide what is readableBefore anything is connected, you define the scope: which records, which fields, which operations. The assistant is given a narrow, named view of GraphQL rather than general access, and that view is agreed in writing during deployment.
  2. A question arrives in natural languageA customer or an employee asks something ordinary — "where is my order", "am I covered for this", "what did I spend last month". No syntax, no menu, no reference number required if the person is already identified.
  3. The assistant works out what is being askedThe question is matched to an intent and the details it needs. If something essential is missing, it asks for that one thing rather than presenting a form.
  4. It reads only what it is allowed to readThe lookup runs inside the permission scope you defined, and inside the permissions of the person asking. Someone who cannot see a record in GraphQL cannot see it through Elbi either — the assistant does not become a way around your own access rules.
  5. The answer is written back in plain languageA record is not an answer. The result is turned into a sentence in the language the question was asked in, with the parts that matter surfaced and the internal codes left out.
  6. Anything it cannot do goes to a personReads are safe to automate. Anything that changes money, entitlement or a legal position can be routed to a human for confirmation — you decide which side of that line each action sits.

Scope, control and what stays yours

Direction of accessRead by default. Any write-back — creating a ticket, updating a record, logging a lead — is enabled deliberately, per action, and can be held behind human confirmation.
Who can see whatThe assistant answers within the permissions of the person asking. Identity is established through your own sign-in, not invented by the assistant.
CredentialsThe connection uses credentials you issue and can revoke, scoped to the narrow view agreed at deployment. Revoking access is something you do on your side, without our involvement.
Where data goesRetrieved records are used to answer the question in front of the assistant and are not retained afterwards beyond your configured conversation retention.
AuditEvery lookup can be recorded — what was asked, what was retrieved, which agent, which conversation — so the connection is reviewable rather than opaque.
If it is unavailableIf the system behind the interface cannot be reached, the assistant says so plainly and offers a person. It does not retry silently, invent a value, or present a cached figure as though it were current.

What this replaces

The efficiency benefit is genuine: retrieving three fields instead of an entire object makes answers faster and reduces how much data moves at all, which is a small privacy benefit as well as a performance one.

The scope discipline is the important half. Because a graph interface can traverse relationships, a permissive configuration can reach further than anyone intended — from a customer to their orders to their payment records — without that ever being an explicit decision.

The right approach is named, parameterised queries defined during deployment rather than allowing the assistant to compose them. That keeps the connection as narrow and reviewable as a named REST operation while retaining the field-level efficiency.

How different sectors use it

Modern application estates

Where GraphQL is the primary interface.

Composite services

Systems aggregating several sources behind one graph.

Mobile-first products

Where the interface was designed for selective retrieval.

Any GraphQL system

Efficient retrieval with explicitly bounded traversal.

Getting the value out of it

A connection is only as useful as the questions it is pointed at. The pattern that works is to start from the contact you already receive rather than from what the system can technically expose. Pull a month of chat transcripts and call notes, count the questions, and connect for the top five. That is almost always where the volume is, and it is usually duller than anyone expects — status, eligibility, balance, hours, documents.

The second thing that decides success is scope discipline. It is tempting to connect broadly and let the assistant work out what is relevant. It works far better to expose a small, well-named set of operations and expand once you have seen a month of real questions against them. A narrow connection is easier to reason about, easier to audit, and far easier to explain to whoever signs off on it.

The third is knowing what not to automate. Reads are safe. Anything that moves money, changes an entitlement or creates a commitment should either stay with a person or pass through one. The assistant is at its best when it removes the lookup and leaves the judgement.

What connecting it actually involves

  1. Agree the questions firstNot the fields, the questions. A month of real transcripts, counted, gives a ranked list of what people actually ask. That list decides the scope; the scope decides the connection. Starting from what GraphQL can technically expose produces a broad connection answering questions nobody asked.
  2. Define the readable viewYour team decides which records and fields the assistant may see, and which it must never see. This is written down, signed off, and is the document you will hand to whoever audits the deployment later.
  3. Issue scoped credentialsYou create the credentials, on your side, scoped to that view. They are yours: you can rotate or revoke them without involving us, and doing so takes effect immediately.
  4. Map your instanceCustom fields, renamed objects, local terminology and the particular way your organisation uses the system are mapped during deployment. Nobody has a stock configuration and the work assumes you do not either.
  5. Rehearse the unhappy pathsMissing record, ambiguous match, system unavailable, customer asking about someone else's account. These are tested deliberately before launch, because they are what determines whether people trust the assistant, and they are what most pilots skip.
  6. Launch narrow, widen on evidenceGo live on the top few questions, watch a month of real traffic, then widen. Every deployment that widened first and measured later has produced the same result: an assistant nobody trusts and a project that quietly stops.

Governing a connection you will have to defend

A connected assistant is a data-processing decision before it is a technology one. Under the Saudi Personal Data Protection Law, the questions that matter are the ordinary ones: what personal data is being processed, on what lawful basis, for how long it is kept, who can see it, and what happens when someone asks for it to be deleted. A lookup against GraphQL touches most of those at once.

The practical answer is scope and evidence. Scope means the assistant reads a narrow, named view rather than holding broad access, so the question "what could it see?" has a short and checkable answer. Evidence means every lookup can be recorded — the question, the retrieval, the agent, the conversation — so a review after the fact is reading a log rather than reconstructing a story.

The part most organisations underestimate is consent. If a customer is going to have their record read during a conversation, that has to be something they agreed to, in language they understood, in the language they speak. Retrofitting consent after launch is far more painful than designing the flow around it, and it is the single most common reason a pilot stalls at legal review rather than at the technical stage.

What organisations typically see

0
of contact is status, eligibility or balance — the questions a connected system answers directly
0
coverage for lookups that previously waited for office hours
0
faster first response when the answer is retrieved rather than requested
0
internal tickets raised for questions the assistant can answer itself

How this is done elsewhere, and where it goes wrong

The mainstream pattern across the industry is now well established: a conversational layer in front of systems of record, retrieving rather than remembering, escalating rather than improvising. Where deployments fail, they fail in recognisable ways.

The most common failure is connecting everything at once. A broad connection is harder to reason about, harder to permission correctly, and produces an assistant that occasionally surfaces something it should not — which is the single fastest way to lose internal trust and have the project shut down. Narrow beginnings survive; broad ones get switched off.

The second is treating the assistant as a reporting tool. Systems of record are optimised for transactions, not analysis, and an assistant asked to compute across large volumes will be slow and occasionally wrong. Point it at facts about a specific record and it is excellent; point it at "summarise our quarter" and it is the wrong instrument.

The third is forgetting the unhappy path. Systems go down, records are missing, a customer asks about an order that does not exist. What the assistant does in those moments defines how it is perceived far more than what it does when everything works — which is why saying "I could not reach that system" is a feature, not an admission.

Common questions

It should not, and by default it does not. Named parameterised queries defined at deployment keep the connection reviewable.

It is the thing to configure carefully. A permissive graph connection can reach further than intended without that being an explicit decision.

Where you deliberately enable specific ones, optionally behind confirmation.

No. The connection runs between your assistant and your system, using credentials you issue and control. What the assistant may read is the narrow scope you defined, and you can revoke it at any time without going through us.

Most deployments are. Custom fields, renamed objects and bespoke workflows are normal, and the connection is mapped to your instance during deployment rather than assuming a stock configuration.

It can, where you enable it. The default is read-only because that is the safe starting point. Write actions are turned on individually and can require a person to confirm before they commit.

Connect it to your own systems

A working assistant against your own records, in both languages.