Skip to content
Guides

The material your answers come from

Knowledge holds the policies, explanations and business information Tephlo can retrieve for an answer. Keep this material current alongside your catalog, configured business facts and any enabled integrations.

Uploading sources

Open Content → Knowledge in the console and upload a file, or paste text directly for something short like a returns policy or a price list caveat.

Upload: .pdf .docx .xlsx .csv .txt .md — choose a file or drag it onto the panel · up to 5 MB per file · or paste raw text

Each source moves through PENDING and PROCESSING while it is parsed, split into passages and indexed, then becomes READY. Processing readiness is separate from approval and serving eligibility. The page polls while processing is in flight.

When a source fails, the reason is stated plainly rather than hidden:

No readable text foundA scanned or image-only document has no text layer to extract. Re-export it as a text PDF, or paste the content in.
Unsupported document typeThe file is not one of the formats above.
Processing service unavailableThe indexing service could not be reached. Nothing was half-indexed — re-upload to try again.
Processing did not complete after several attemptsThe platform retried the upload and gave up. A source never stays on PROCESSING indefinitely: once the retries are spent it is marked FAILED with this reason — at the latest within about an hour — and re-uploading starts a fresh revision.

Re-uploading a source does not leave the old version half-live. A new revision is indexed alongside the current one and switched over in a single step, so a customer never gets an answer stitched from two versions of the same document. Until the switch, the current version keeps answering -- and if the new upload fails, it goes on answering while the failure is shown.

The filename decides whether an upload replaces anything. A document is identified by its name, so uploading a revised price list under the name it already has makes a new version of that document and the older prices stop being used. Giving it a new name instead -- prices-february beside prices-january -- adds a second document, and the first one is not retired: both stay live and both prices stay on file. Where two live documents describe the same article differently -- a price, a stock figure, whether it is available at all, a currency, a category -- the assistant stops stating the disputed detail and offers to confirm with your team, rather than choosing between two of your own documents. A price the two agree on is still given; it is the disagreement that is withheld, not the whole article. The upload report on the document says which articles are affected, which detail differs and what the other document says, so the fix is to re-upload under the existing name or delete whichever document is out of date. Better still, the upload check catches it first: when most of a file’s articles are already in one live document, it says so and offers to replace that document with this file, so the newer version simply takes over.

Review and publication

Select the source purpose offered by the uploader: business information, a product catalog or automatic classification. Inspect the detected purpose and product count before approval. Use Approve this content with a reason to bind your review to the exact source revision and content. Quarantine material that should stop being used.

The page distinguishes Not approved, Approved, Changed since approval and Quarantined. Re-uploading can invalidate an earlier approval, so review the new content. A verification stamp for freshness is a separate check from content approval.

Where the platform publication boundary is enabled, current approval and validity determine whether a processed source can serve. Check the current source state and workspace availability instead of assuming that upload or indexing publishes it. Content Home helps find outstanding review work across your content.

How an answer is found

A customer’s question is not matched against your documents by keyword alone. Four things happen, and each exists to fix a specific way the naive version fails:

  1. The question is made standalone. A short follow-up like “and the 2kg?” means nothing on its own, so it is rewritten using the conversation so far before anything is searched. Only short follow-ups pay this cost, and if the rewrite fails the search falls back rather than stalling.
  2. Three searches run and are fused. Semantic similarity finds passages that mean the same thing, full-text search finds the ones that use the same words, and exact matching finds identifiers — an SKU, an order reference, a model number — that semantic search is famously bad at. The three ranked lists are combined into one.
  3. The shortlist is re-ranked. On a large knowledge base a wider pool is pulled and reordered by true relevance before the top passages are handed to the answer. If the re-ranker is unavailable, the fused order is used — a degraded ranking, never a failed answer.
  4. The answer is bound to what came back. Citations can only point at sources that were actually retrieved for that reply. A citation to a source the search never returned is not a formatting slip — it is the beginning of a fabricated answer, and it is refused.
An empty result is an honest “I don’t know”, not an invitation to improvise. If nothing relevant comes back, the question is treated as unanswerable and the assistant uses the safest useful next step that is currently available. It does not automatically spend a person’s time on every gap or outage. A retrieval outageis recorded as a different reason from a genuine gap in your material, so analytics do not blame your knowledge base for an infrastructure problem.

Test your knowledge base

The bottom of Content → Knowledge has a question box that runs the same retrieval search the assistant runs. Type a question the way a customer would ask it and Search shows the five passages that came back, each with its document, the text that matched and a score. When the result says it was ranked by words only, the semantic half of the search was unavailable at that moment and the order is lexical.

A question you want to keep can be saved as a check. Expect this source on a result saves the question with that document as what the search must return; Expect a phrase saves it with words the returned passage must contain, matched without regard to case. Add up to five paraphrases — other ways a customer might word the same question — and each one is searched too. A check passes only when every wording finds what it expects.

Run all checks runs every active check and shows how many were found, the mode the search ran in and, for each check, the passages that came back with the rank at which the expected one appeared. Rank 1 means it was the first passage. A check found only at rank 4 or 5 is fragile: a longer question or a busier knowledge base can push it out of the top five. Pause a check to keep it without running it; delete it when the question no longer applies. The twenty most recent runs are kept.

A green run proves retrieval, not the answer. A hit means the assistant could cite that passage for that question. It does not mean the reply it writes will be right: the passage may be out of date, another current source may disagree with it, or the assistant may phrase it badly. Check the reply too, and read what a reply was built from in the transcript.

Validity, staleness and conflicts

A price list from 2023 is worse than no price list. Every source can carry a validity window and a human verification stamp, and the assistant treats them as a trust contract rather than as metadata.

Verified · currentSomeone marked it verified, its start date has passed, and its end date is still in the future. This is the only state that counts as trusted freshness.
ExpiredThe end date has passed. An end date of exactly now is already expired — the bar does not round in your favour.
Not yet validThe start date is in the future. Next season’s prices, not this season’s.
UnverifiedIt has a window, but nobody has confirmed the content is right.
No validity windowNo dates set. This is the correct state for timeless material — how your warranty works, what your service includes — and it is not a defect.
An expired catalog is an empty catalog, not a cautious one. Expiry is checked when rows are fetched, so an end date that has passed removes the products from every answer at once. The assistant does not fall back to the old prices and describe them as out of date — it has nothing to describe, and will say the catalog is empty. It cannot tell that apart from a workspace that never uploaded anything, so nothing warns you. Re-uploading the sheet or clearing the end date restores it immediately. For a catalog you keep current by re-uploading, leaving the end date empty is usually right.

Three rules follow from that, and they are the reason to bother setting dates at all:

  • Trusted freshness is demanded only when the question needs it. An undated policy page answers “what is your returns window?” perfectly well. A question about what is true today — a current price, this week’s availability — requires a source that is verified and current.
  • A stale source loses to a usable one. Where both exist, the current source wins.
  • Two current sources that disagree both reach the answer. Nothing in code can break that tie honestly, so the disagreement is surfaced instead of one side being silently dropped. Quietly picking a winner between two live, contradictory prices is deciding a customer’s money on their behalf.

What makes a good knowledge base

The failure mode is not usually a missing document. It is a document that a human could interpret and a retrieval system cannot.

Write answers, not brochures“Delivery in Ouagadougou is 2–3 working days; outside the city, 5–7” is retrievable. “We pride ourselves on fast, reliable delivery” answers nothing and will be quoted back at a customer asking how long they must wait.
One fact in one placeThe same price in four documents is four documents to update, and the day one is missed the assistant has two current sources that disagree — which it will show the customer rather than guess between.
Put the question in the textPassages are matched against how customers phrase things. A heading that reads “Returns and exchanges” retrieves better than one that reads “Policy 4.2”.
Date anything that changesPrices, promotions, opening hours, shipping times. Leave genuinely timeless material undated — a validity window on something that never expires just creates an expiry you have to remember. One exception matters more than the rest: do not put an end date on a product catalog unless you mean it. When a catalog’s end date passes, the whole catalog stops being visible — every price and every specification, not only its stock.
Write down what you do not do“We do not ship outside the country” is a real answer. Without it the assistant has no grounded reply and must explain the gap or offer an available next step.
Keep identifiers exactOrder references, SKUs and model numbers are matched exactly, and are repeated verbatim in replies even when the conversation is happening in another language.
Let the escalation queue tell you what is missingEscalations with the reason no supporting knowledge are a list of the documents you have not written yet. See analytics.

The product catalog

A catalog is a dedicated structured section of Knowledge, separate from articles and guidance. Prose retrieval cannot reliably answer “the cheapest one under 50,000 that is in stock” or supply an item to a cart. A validated product row can. Add products in Business → Catalog, or import a supported spreadsheet through Knowledge.

Header names vary between businesses, so common alternatives are recognised automatically: SKU, Product ID or Item ID; Product name, Name or Title; Final price, Sale price or Price; Stock quantity, Qty or Availability. The customer-facing price is preferred over the list price where a sheet carries both.

Aliases. An optional Aliases column (Also known as, Other names and Autres noms are recognised too, and any other heading can be mapped to it) holds the words your customers actually say for a product that its catalog name does not carry: a colour (“purple” for a phone the sheet calls Violet), a nickname, the word in another language. Separate several with commas. The assistant matches these words as strictly as it matches the product name — the column widens what it recognises without loosening exact matches, so a product named precisely is still answered, not offered alternatives. The words are for finding the product, not describing it: the product details the assistant presents to a customer never include the Aliases column. Aliases can also be edited product by product in Business → Catalog, without re-uploading a sheet.

Catalog answers are exact rather than paraphrased. The assistant filters and sorts by price, stock, category and brand against the real rows, so a price it quotes is a price you uploaded.

Catalog stock is a snapshot, and the assistant says so. It reflects your last catalog update, not a live inventory system — there is no live stock lookup anywhere in the platform. A reply claiming to check current, real-time or live stock is treated as a fabricated capability and replaced. Keep the sheet current, and treat stock in a chat as indicative.

A stock figure carries its own age. Nothing here counts items down as they sell, so a number is true as of the upload that carried it. Within a week of that upload the assistant states it plainly. After a week it is told how old the catalog is, and after a month it is additionally told not to present availability as certain, so an old figure reaches a customer with its age attached rather than as a promise. The assistant writes its own sentence, so the wording varies; what is guaranteed is that the age travels with the figure. The figure itself is never withheld — it is your fact, and a business is entitled to state it. Re-uploading the sheet resets the age.

A blank stock column is not a yes. If a row records no availability at all — no stock number and no status word, which is simply what most uploaded sheets look like — the assistant will not say whether it is in stock, and neither will anything the platform writes on its own. A product notification for such a row says the item is now listed and that its availability is not recorded. You will still be told it arrived; you will not be told it is on the shelf.

Only products belonging to the active, fully-indexed version of a catalog are visible to a customer. A half-imported spreadsheet cannot leak into an answer.

A row with the required SKU and commercial fields can also support a saved cart and a workspace-reviewed potential-order request. This still does not place an order, take payment, reserve stock or start delivery. See catalog and saved carts for the complete workflow and its boundaries.

Customer memory

With customer memory on, durable facts about a customer — their preferences, context they have already given you — are carried into future conversations, so they are not asked the same thing every time they write.

This is deliberately separate from the short-lived working memory that runs inside a single conversation. The quantity someone wants today is scratch for today; their preferred language or their usual delivery area is a fact about a person. Sensitive fields — card numbers, PINs, one-time codes — are refused outright and cannot be stored by either mechanism, whatever a configuration asks for. See working memory for the in-conversation half, and consent and retention for the controls.