Skip to content
XICBOT

Settings

Deutsch
Documentation · Assistant and knowledge

Test dialog and acceptance

Check answers in the test dialog before embedding, and record an acceptance with check questions: fields, limits, verdicts, messages and API.

In plain language

Before an assistant goes onto your website, you can check it. There are two places for this. In the test dialog you ask questions yourself. You see the answer and its citations before a visitor sees them. In acceptance you add check questions with a model answer. They run as a batch against the published version. The verdict is computed and asks no model.

Last updated

All documentation topics

Before an assistant goes onto your website, you can check it in two places. In the Test dialog you ask questions yourself and see the answer, the citations and the final state before a visitor gets to see them. In Acceptance you add check questions with a model answer and run them as a batch against the published version; the verdict is computed and asks no model.

Test dialog

You find the test dialog in the menu under Work › Test dialog (app.xicbot.de/probe). In an assistant's setup path, the Test step between Connect knowledge and Embed leads straight here and preselects that assistant. Every test dialog is a conversation of its own in the Test channel. The answer is produced the same way as in the widget, including the stored fallback answer.

Starting

If you have several assistants, choose one in the Assistant field; with only one, its name appears after Testing. An address with ?a= and an assistant's ID preselects that assistant; an unknown ID falls back to the first assistant without a message. Start test dialog creates the conversation and shows Loading … meanwhile. If the assistant has a greeting, it appears as the first line.

The conversation keeps the version that was published when it started. If you publish a new version afterwards, you only see its effect after New test dialog. Without a published version the service refuses the start with 422 no_version, and the test dialog shows There is no published version of this assistant. Publish a version and start again. A newly created assistant, however, already has its first version published.

Sending a message

FieldRequiredLimits and behaviour
Assistantyes, once more than one assistant existsOnly shown from two assistants on. Preselected via ?a=, otherwise the first one.
Your messageyes1 to 4000 characters. If a lower maximum length is set for your account, that one applies; a longer message is refused with 413 input_too_long. Empty input or spaces only are not sent.

Your question is stored in the conversation right away, before the answer starts. While the assistant is writing, the button shows Answering …; the lines are labelled You and Assistant. Up to three citations appear below an answer, further ones behind + n more. While an answer is running, the conversation accepts no second message (409 reply_in_progress); a running answer holds it for 180 seconds at most. If the service refuses a message for this reason, the test dialog shows An answer to this question is already running. If the message is longer than your account’s maximum length, it shows The message is too long: at most … characters. In place of the dots, your account’s limit appears as a number.

Cancel stops the answer on the service as well, so it does not keep running unnoticed. The text written so far stays visible; no citations arrive after a cancellation, and the status line shows cancelled. When no answer is under way, two options sit next to Send: Open this conversation in the list opens it under Conversations, New test dialog starts an empty conversation. The old one is kept and can be found in the list with the Channel filter set to Test.

After the first answer the page shows If the assistant answers well, the next step is embedding it on your website. with the link Embed the widget. How that works is described in Embed the widget.

The test dialog shows the text, citations and final state of an answer. Tool cards, follow-up questions, the contact offer and a handover do not appear here; in the widget, follow-up questions and the offer to talk to a person appear as buttons below the answer. You confirm a proposed tool call under Open this conversation in the list. If the service corrects an answer after writing it, for example because a statement without a source gives way to a placeholder (“[nicht belegt]” in a German answer, otherwise “[not backed]”) or a mandatory notice is replaced by the promised one, the test dialog takes over the corrected wording, as it is stored and as the widget shows it. If the model fails in the middle of an answer, the test dialog shows only the stored fallback answer, not the cut-off beginning.

Final state of an answer

If an answer does not end normally, its final state appears below the conversation. An answer that ends normally shows nothing extra.

StateShown asMeaning
abortedcancelledThe answer was stopped before it finished, for example via Cancel; in the conversation list it also shows cancelled.
fallbackfallback answerNo generated answer came about; the fallback answer stored for the assistant is shown instead.
blockedquota used upThe monthly quota is used up; the fallback answer is shown.
blocked after conversation_limitconversation message limit reachedThe conversation has reached its maximum number of messages. Instead of the fallback answer, a note about this limit appears, and the conversation is handed over to a person.
blocked after tenant_missingtenant not foundNo existing account is assigned to your sign-in; the fallback answer is shown.

Every answer the assistant phrases with the model is a model call and counts against your plan's quota, in the test dialog too. If a question matches an active question and answer pair, that pair's answer goes out word for word without a model call, and nothing is booked; see Knowledge. Once the quota is used up, the fallback answer comes and nothing is booked. Details are in Plans and quotas. Test dialogs and the conversations of acceptance runs belong to the Test channel and follow their own Test conversations retention period; if nothing is set there, the general period for conversations applies. See Retention and deletion.

Permissions and throttling

ActionMinimum roleThrottle per person
Start test dialogEdit30 per minute
SendEdit20 per minute

With the Read role, the choice under Assistant, Start test dialog, the Your message field and Send are disabled. At the top of the test dialog, even while no assistant has been created yet, the note With the Read role this area is view-only. Changes need at least the Edit role. appears. The service itself refuses start and send for this role with 403 role_too_low; if such a refusal arrives when sending, the test dialog shows the same message. Exceeding the throttle returns 429 and the message Too many attempts. Please wait a moment. Roles are explained in Team and roles.

Acceptance

You find acceptance under Records › Acceptance (app.xicbot.de/abnahme). Every check question is asked once, the way a visitor would ask it, against the assistant's published version. The app recommends a run before going live and after every change. When the page opens, the first assistant is selected; if you have several, switch in the Assistant field.

Adding a check question

Fill in the fields and choose Add check question; while saving, the button reads Saving …. Afterwards Question, Model answer, Must contain and Must not contain are empty again, while Minimum coverage and Runs along keep their values. A new check question goes to the end of the list.

FieldRequiredValues and limitsDefault
Questionyes3 to 500 characters. This is how it is put to the assistant.none
Model answeryes3 to 4000 characters. Not required word for word; what is measured is the share of its meaningful words that appear in the answer.none
Must containnoOne term per line, at most 10 terms of at most 80 characters each. Every term has to appear in the answer.empty
Must not containnoLike Must contain; none of the terms may appear in the answer.empty
Minimum coveragenoNumber from 0 to 1, in the form in steps of 0.05. 0 switches coverage off; then only the terms count.0.3 in the form, 0.5 via the API
Runs alongnoOnly ticked check questions run along. A switched-off one stays in the list and does not run.ticked

Below the term fields it says One term per line, at most 10. Case and umlaut spelling do not matter. Spaces at the edges and empty lines are dropped. The service stores duplicate terms only once if they match character for character: “Price” and “price” both stay, even though the comparison with the answer ignores case. It checks the limit of 10 terms before removing duplicates: 11 lines are refused even if two of them are the same.

How the verdict is reached

A check question counts as passed when three conditions are met at the same time. If one of them is missed, it has failed.

  • Every term from Must contain appears in the answer. Whatever is missing is listed in the result under Missing.
  • No term from Must not contain appears. Any that does is listed under Forbidden but said.
  • The coverage reaches the Minimum coverage. This condition is dropped when Minimum coverage is 0 and when the model answer contains no meaningful word.

Terms are searched for as a string of characters, not as a whole word: ship also matches "shipping". The comparison is in lower case, with umlauts and accents folded (ä as ae, ß as ss, é as e) and with runs of spaces collapsed, so a term broken across lines still matches.

Coverage is the share of the model answer's meaningful words that also appear in the answer. A word is a sequence of letters, digits and hyphens with 3 to 64 characters; filler words such as "der", "die" or "und" are dropped, and each word counts once. A hyphenated compound counts as its parts and as the joined whole. The value is rounded to three decimal places and shown as a percentage.

not measurable means that no answer could be evaluated, for example because the quota was used up, the fallback answer was given or the answer stayed empty. Such a line has not failed. The reason is shown next to it, and the rate leaves it out.

Starting an acceptance run

  1. Step 1

    Start the run

    Start acceptance run queues a run; the service answers right away with 202 and the work happens in the background. The button is disabled while a run is open, without a published version, without a ticked check question and with the Read role. If a run for the assistant is already queued or in progress and is less than an hour old, you get that one back instead of a second run. While it starts, the button shows Loading ….

  2. Step 2

    Ask the questions

    The run takes the ticked check questions, at most 50, ordered by position and then by creation time, together with the version published when it begins. For each check question it creates a conversation of its own in the Test channel and asks the question along the same path a visitor question takes in the widget, with search and tools; tools count as Visitor (public chat) there. The answer language follows the language the service detects in the question. If detection fails, the check question's language applies, which can only be set via the API, and without it the version's language.

  3. Step 3

    Follow the run

    During the run the page shows The run is queued. This page refreshes itself while it runs. It checks every 3 seconds as long as the window is visible. The counters grow after each check question; the list of check questions reloads once after the end.

  4. Step 4

    Review

    Under Last run you see Questions, Passed, Failed, Not measurable, Rate and Duration, plus status, time and a reason where there is one. The time is when the run was queued. Duration shows Not measured while the run is queued or running, and stays that way if the run was stopped. Below follow the Results for each check question. In the list every check question shows its latest verdict and, under Last, when it was reached. Before the first run the page says No run yet.

The Rate is the number of passed lines divided by passed plus failed lines; lines that are not measurable are left out. If no line was measured there is no rate, and the page shows Not measured. When lines are not measurable, it says A line that could not be measured has not failed. The reason is shown next to it and the rate leaves it out. The app only shows the latest run; the API returns the 30 newest.

Reading the results

ItemMeaning
Question and verdictThe question as asked in the run and passed, failed or not measurable.
AnswerThe assistant's answer, if one came.
CoverageShare as a percentage without decimals; Not measured if no coverage was calculated.
DurationSeconds with one decimal place.
MissingTerms from Must contain that did not appear.
Forbidden but saidTerms from Must not contain that did appear.
ReasonFor not measurable, the cause; see the table of reasons.
Open conversationOpens the test conversation of this check question in the list, with citations and tool calls. Missing once the retention period has removed the conversation; the result stays readable.

States, verdicts and reasons

Run statusShown asMeaning
pendingqueuedThe run is waiting to begin.
runningrunningThe check questions are being asked.
donefinishedThe run has ended.
failedstoppedThe run was stopped; the reason is shown next to it.
VerdictShown asMeaning
passpassedAll three conditions met.
failfailedAt least one condition missed.
errornot measurableNo answer that could be evaluated; left out of the rate.
ReasonShown asWhen
no_replyno answer was storedNo answer was stored for the question.
empty_replythe answer was emptyThe answer contained no text.
reply_in_progressan answer was already runningThe test conversation was still busy.
fallbackfallback answer instead of an answerThe fallback answer came instead of a generated one.
blockedquota used upThe monthly quota ran out during the run; the fallback answer came instead of an answer.
input_too_longthe question is too longThe question is longer than your account's maximum length.
rejectedrejectedThe service refused the question for another reason.
assistant_unknownassistant not foundStops the whole run: the assistant no longer exists.
no_versionno published versionStops the whole run: no published version.
no_checkno check questionStops the whole run: no ticked check question left.
tenant_unknownaccount not foundStops the whole run: the account no longer exists.
job_failedthe run did not finish – you can start a new oneStops the whole run: its background job failed for good or expired after 7 days. The rows measured so far remain, and Start acceptance run is available again. If operations retry the job, the run continues, provided no newer run is open for the assistant.

An identifier without a display text, such as tenant_unknown, is shown by the app as it is rather than being hidden.

Changing and deleting check questions

In the list every check question shows Question, Model answer, its latest verdict with Last, the terms under Must contain and Must not contain and the Minimum coverage as a percentage. The Runs along tick box is saved on its own right away. Text and terms cannot be edited in the app: delete the check question and add it again, or change it via the API.

Delete removes the check question at once and without asking. Earlier results stay readable with their question and model answer but lose their link to the check question. If the assistant is deleted, its check questions and runs go with it.

Roles and throttling

Every role may view. Adding, changing, deleting and Start acceptance run require at least Edit. With the Read role you see check questions, the run and the verdicts, but the form, the tick boxes and Start acceptance run are disabled, Delete is missing, and the top of the page says With the Read role this area is view-only. Changes need at least the Edit role. Adding, changing and starting are throttled to 30 requests per minute and person. The counter is the same one used for adding and changing assistants, their versions and tools. Deleting has no throttle of its own. More under Team and roles.

API

All paths start with /api/v1/ and require a sign-in with a confirmed email address; see API basics, Authentication and Limits. The test dialog uses POST /api/v1/conversations with assistant_id and then POST /api/v1/conversations/{id}/send with text; both are described in Conversations and management. Acceptance uses the endpoints below. If the assistant {id} is unknown, each of them answers 404 not_found.

GET /api/v1/assistants/{id}/checks

Returns the check questions in checks, ordered by position and creation, plus the limits limit (50) and terms_limit (10) and last_run with the latest run or null.

Authentication
any role

POST /api/v1/assistants/{id}/checks

Adds a check question. question (3 to 500 characters) and expected (3 to 4000) are required. Optional: must_contain and must_not_contain (lists of at most 10 entries, each at most 80 characters), min_overlap (0 to 1, default 0.5), language (de, en or null), position (0 to 9999, appended at the end if omitted) and is_active (default true). The answer is 201 with check; with 50 existing check questions it is 422 limit_reached with limit. Send min_overlap and is_active explicitly if you reuse the response: without them it shows 0 and false there, while 0.5 and true are stored, as a fresh read shows.

Authentication
at least Edit
Rate limit
30 per minute and person, shared with assistants and tools

PUT /api/v1/assistants/{id}/checks/{check}

Changes a check question. The same fields and limits apply as when adding, but none is required; {"is_active": false} on its own therefore only flips the tick box. The answer is 200 with check; an unknown check question returns 404 not_found.

Authentication
at least Edit
Rate limit
30 per minute and person, shared with assistants and tools

DELETE /api/v1/assistants/{id}/checks/{check}

Deletes the check question and answers with {"deleted": true}. Results of earlier runs remain; their check_id becomes null.

Authentication
at least Edit
Rate limit
no throttle of its own

POST /api/v1/assistants/{id}/checks/run

Queues a run and answers 202 with run. If a run is already queued or in progress and less than an hour old, that one is returned. Refusals are 422 with no_version (no published version), no_check (no ticked check question) or quota_exhausted (monthly quota used up). Chat via the API reports a used-up quota with 429; here it is 422, because it is not a brake that opens again shortly but a limit until the month changes. These three checks come before an open run is returned.

Authentication
at least Edit
Rate limit
30 per minute and person, shared with assistants and tools

GET /api/v1/assistants/{id}/check-runs

The 30 newest runs in runs, newest first.

Authentication
any role

GET /api/v1/assistants/{id}/check-runs/{run}

One run in run with all its result lines in results, in the order they were produced. An unknown run returns 404 not_found.

Authentication
any role

A check question in check and checks carries id, question, expected, must_contain, must_not_contain, min_overlap, language, position and is_active, plus last_result (pass, fail, error, or null before the first run) and last_run_at. Only a run sets the last two, even for a result that is not measurable; they cannot be written via the API.

Run fieldContent
idID of the run
statuspending, running, done or failed
version_idthe version checked
checksnumber of check questions in the run; at the end the sum of the three counters
passed, failed, erroredpassed, failed, not measurable
raterate from 0 to 1 to three decimal places, null if nothing was measured
started_at, finished_at, created_attimestamps in ISO 8601
duration_msduration in milliseconds
reasonreason for a stop, at most 80 characters
Result fieldContent
idID of the result line
check_idthe check question; null once it has been deleted
question, expectedquestion and model answer as at the time of the run
answerthe answer or null
resultpass, fail or error
missing, forbiddenrequired terms that were missing and forbidden terms that were found
overlapcoverage from 0 to 1 or null
reasonreason for error, at most 80 characters
conversation_idthe test conversation; null once the retention period has removed it
duration_msduration in milliseconds

Frequent questions

Why does the test dialog not show my latest change?

A test dialog stays with the version that was published when it started. Publish the change and begin a new conversation with New test dialog.

Do the test dialog and acceptance use up quota?

As a rule, yes. Every answer the model phrases in the test dialog is a model call, and in acceptance the same applies to every check question of a run. Both count against your plan's quota. Answers from an active question and answer pair are the exception: they come word for word without a model call, and nothing is booked.

Why did a check question fail although the answer is correct?

Look at Missing and Coverage in the result. If the answer says the same thing in other words, coverage can fall below the Minimum coverage. Lower the value or set it to 0, and put the decisive terms under Must contain.

What does not measurable mean?

No answer could be evaluated, for example because the quota was used up or the fallback answer came. The line has not failed and is left out of the rate; the reason is shown next to it.

Can I edit a check question later?

In the app you can only toggle Runs along. For other changes, delete the check question and add it again, or use PUT /api/v1/assistants/{id}/checks/{check}.

Does a tool really do something in the test dialog?

Read-only tools with the approval without asking run right away. Other calls usually stay proposed until someone with at least the Edit role confirms them in the conversation list; a confirmed call takes effect as in the widget.

Something still unclear?

Tell us which page and which step you mean. We reply personally.

Enquiry in three steps

  1. 1. Topic
  2. 2. Your case
  3. 3. Contact

What is this about?

One click is enough, everything else is optional.

Tell us briefly about your case

Everything in this step is optional. It helps us reply with something concrete straight away instead of asking back.

Enquiries per month, roughly (optional)
When should it start? (optional)
How can we reach you?

Name and email address are enough. We reply personally.

We use your details to handle your enquiry. More on this in the privacy policy.