- Specifications
- Recognition
- Input Parameters
- Business Logic
- Output Handling
- Testing and Publishing
Specifications
Base SettingsAI agents offer an innovative way to handle customer inquiries efficiently and automate standard processes.Thanks to flexible configuration, agents can be precisely tailored to individual requirements. The setup is done in a few, clearly structured steps, which are described under the tabs detailed above.
1. Set Specifications
Here the foundation for the AI agent is laid. This includes:- Name: The agent’s name should reflect its area of responsibility, e.g., “Prepayment-Agent”.
- Description: A brief description helps to grasp the purpose of the agent at a glance.
- Topic: The topic results from the existing skill tags. For example, a Prepayment-Agent could be assigned the skill tag “Payment Transactions”. This assignment ensures clear organizational allocation and simplifies, for instance, access via the template catalog.
- Channels: Determine through which communication channels the AI-Agent should act – email, chat, mail, phone, etc. An agent can easily be assigned to multiple channels.
2. Choose Avatar
The avatar gives the AI agent a visual identity and emphasizes its individual character. Various options are available:- Style: Should the avatar look more professional, friendly, or neutral?
- Color accents: Additionally, colors can be selected that, for example, match the brand identity.
- Recognition value: A uniform avatar across all channels strengthens the visual appearance of the AI agent.
3. Configure Intelligence
Here it is determined how the AI agent solves tasks:- Smart argumentation logic: Rules in natural language without programming – ideal for standard processes.
- Rule-based logic: Code-based workflows for more complex procedures.
4. Adjust Personality
The personality of the AI agent defines how it communicates – not only content-wise but also in tone. The communication style can be finely adjusted using intuitive sliders:- Informal to formal: Should the AI agent appear casual or businesslike?
- Speaking style: From concise responses to detailed explanations.
- Concise to comprehensive: Determines the level of detail in feedback.
**All specifications – name, topic, intelligence, personality, and channels – can be flexibly adjusted at any time. This keeps the AI Agent dynamic and always adapted to current requirements.
Recognition
Methods and ConfigurationThe Recognition section defines when an AI agent is assigned to a ticket. This can occur based on keywords, ticket data, or AI analysis.
Authentication
If this option is enabled, requests from unauthenticated customers are ignored by the AI agent. This setting is particularly suitable for processes that involve sensitive data or require customer verification.Recognition Methods
Various methods are available for delegating AI agents:AI Detection
AI Detection
AI-based detection is based on machine learning. Guidelines help the AI agent identify patterns in customer requests. A clear and precise guideline improves the detection accuracy of the AI agent. ExampleGuideline for the AI agent for customer concerns about “SEPA revocation”:

Condition Detection
Condition Detection
The AI agent is assigned based on ticket, customer, and/or contract attributes. Conditions can be linked as desired. ExampleLinking of conditions for customer concerns for marketing purposes:

AI and Condition Detection
AI and Condition Detection
AI agents are allocated when both methods apply. ExampleHere, the AI agent is assigned when the AI training data applies, AND no reference is made to termination or relocation in the customer’s message:

AI or Condition Detection
AI or Condition Detection
AI agents are assigned based on one of the two methods. ExampleHere, the AI agent is assigned if the AI training data applies, OR no reference is made to termination or relocation in the customer’s message. This designation would probably apply to many cases:

Manual Detection only
Manual Detection only
AI agents are exclusively assigned manually by an operator.
Input Parameters
Purpose and ConfigurationRule-based AI agents use defined input parameters to extract information from customer requests or other data sources and process it. These parameters control what data is captured, analyzed, and used for processing.
Parameter Management
1. Input Parameters and Their SourcesInput parameters can be obtained from different sources:- Ticket Data: Information from the original ticket
- Customer Data: Basic data of the customer
- Contract Data: Information about the customer’s contract
- Extraction by AI: Automatic AI analysis of the customer request to identify relevant information.
- Manual Definition: A fixed value defined by a user.
| Field | Description |
|---|---|
| Source Key Reference | Technical key for identification in the data object (e.g. channel) |
| Variable Name in Business Logic | Internal identifier for further processing in logic and actions |
| Label for User | Display name in the UI (if visible) |
| Format | Data type: e.g., String, Boolean, Number, Date |
| Internal Description | Explanation of function or use (only internally visible) |
| Required | Does this parameter need to be set? Selection: Yes / No |
| User Visibility | UI display control: Visible, Hidden, Read-Only |
- Visible: The parameter is visible to the editor.
- Hidden: The parameter is processed in the background but not displayed.
- Read-Only: The value is visible but cannot be changed.
- Yes: The parameter must be definitely specified so that processing can be done by or with the help of the AI agent.
- No: The parameter is optional and can be left empty.
Example Bank Data
To be able to handle customer concerns about bank data adjustments, the bank data agent needs a combination of certain information and checks. It obtains the relevant information via the input parameters, while the checks are defined in the business logic.Therefore, the following input parameters are configured for this AI agent:-
contractId*(Source: Contract Data)*→ The customer’s contract number to assign the change to the correct contract. -
newIBAN*(Source: Extraction from the customer request by AI)*→ The new bank connection that the customer wants to deposit. -
oldIBAN*(Source: Contract Data)*→ The previously stored IBAN to compare with the new one. -
accountHolder*(Source: Extraction from the customer request by AI)*→ The name of the account holder to check the identity. If no name is mentioned, the value remains empty. -
date*(Source: Extraction from the customer request by AI)*→ If specified, the date when the new bank connection should be valid.
Summary
The predefined configuration of input parameters allows rule-based AI agents to efficiently process customer concerns. In combination with business logic, the data is structured, checked, and automatically processed, resulting in precise processing with minimal manual effort.Business Logic
Functionality and ExampleThe Business Logic defines how an AI agent processes input parameters and makes decisions based on them. It ensures that customer requests are structured, checked, processed, and executed correctly.
Functionality
After capturing the relevant input parameters, the business logic takes over the processing. This includes:- Checks for completeness and plausibility
- Validation of data based on predefined rules
- Determination of additional values, if required
- Triggering of actions based on the results of the checks
Technical Implementation
The business logic can be implemented in:- PHP (8.2)
- Python (3.11)
- JavaScript (Node 20)
- Input parameters are taken from the context and converted into a standardized format.
- Mandatory fields are checked, missing values are replaced by defaults if necessary.
-
Type conversions (e.g.,
bool,int,float) ensure consistent processing.
- The business logic validates the inputs using defined rules (e.g., format checks, plausibility checks).
- If necessary, external API calls or database queries are made to supplement additional information.
- Calculations and decision processes are based on the parameters (e.g., branches in case of deviating inputs).
-
The business logic controls the further process by:
- Making automatic changes in the system
- Calling external APIs (e.g., for data storage)
- Generating queries or confirmations
- The output is standardized as an answer object, which can contain confirmation, error messages, or interaction options depending on the context.
Example: Business Logic for Processing an IBAN Change
An AI agent processes requests to change a bank connection. The business logic ensures that the change is carried out correctly and that all relevant checks are made.1. Validate inputsFirstly, the inputs are standardized and checked:- Remove spaces in the IBAN
- If no account holder is given, it is added from the contract data
Copy
Ask AI
$this->input->newIBAN = str_replace(' ', '', $this->input->newIBAN);
$this->input->oldIBAN = $this->input->oldIBAN ?? '';
$this->input->oldIBAN = str_replace(' ', '', $this->input->oldIBAN);
// If no account holder is given, take it from contract data
if (!($this->input->accountHolder ?? null)) {
$this->input->accountHolder = sprintf(
'%s %s',
$this->contractData->firstname,
$this->contractData->lastname
);
}
- IBAN validation: Format and check digit verification
- Contract exists: The modification must be assigned to a valid contract
Copy
Ask AI
// Retrieve contract
$this->contractData = ApiEnneo::getContract($this->input->contractId);
if (!$this->contractData) {
throw new Exception('Contract not found.');
}
// Format and check digit validation of the IBAN
if (!$this->validateIbanFormatting($this->input->newIBAN) || !$this->validateIbanChecksum($this->input->newIBAN)) {
$this->interaction->infos[] = new IntentInfo(
type: 'warning',
message: 'IBAN not in correct format or checksum invalid',
);
$this->interaction->options[] = new IntentOption(
type: self::ACTION_IBAN_INVALID,
name: 'Ask customer for correct IBAN',
recommended: true,
);
throw new ChangeBankDataException();
}
- If errors are detected → Client receives an inquiry or opportunity for correction
Copy
Ask AI
if ($this->input->_action === self::ACTION_ENTER_INTO_SYSTEM) {
$this->saveBankData();
foreach ($this->form->fields as $field) {
$field->readonly = true;
}
} else {
$this->interaction->options[] = new IntentOption(
type: self::ACTION_ENTER_INTO_SYSTEM,
name: 'Store bank data in the system',
recommended: true,
);
}
- Info: Which messages or warnings should be displayed to the agent?
- Form: Which input fields, such as text fields or dropdown menus, should be displayed?
- Data: What values do the input fields have?
- Options: Which buttons should the user be shown?
Note: The Enneo SDK requires environment variables specifying the Enneo API URL and a session token for authorization. If a source code executor is used, these environment variables will be inserted at runtime and do not need to be set manually. If the SDK is integrated into a separate web service,
ENNEO_API_URL must be set to https://instance-name.enneo.ai and ENNEO_SESSION_TOKEN must be set to a service worker token.Copy
Ask AI
<?php
use EnneoSDK\Interaction;
require(getenv()['SDK']);
$interaction = new Interaction(data: $in);
$interaction->infos[] = new IntentInfo(
type: 'warning',
message: 'Contract was canceled before the start of supply and therefore cannot be terminated.'
);
$interaction->options[] = new IntentOption(
type: 'termination_already_processed',
name: 'Inform customers',
recommended: true
);
Copy
Ask AI
{
"data": {
"date": "2023-12-08",
"type": "regular",
"dryRun": "true",
"_action": "null",
"contractId": 756852,
"dateReceived": "2023-12-08",
"proofIncluded": false
},
"form": {
"fields": [
{
"id": "contractId",
"type": "integer",
"label": "Contract number",
"fields": null,
"hidden": true,
"options": null,
"readonly": false,
"valueRef": "data.contractId",
"validation": null,
"placeholder": null,
"defaultValue": null
},{
"id": "date",
"type": "date",
"label": "Termination date",
"fields": null,
"hidden": false,
"options": null,
"readonly": false,
"valueRef": "data.date",
"validation": null,
"placeholder": null,
"defaultValue": null
},{
"id": "type",
"type": "select",
"label": "Type of termination",
"fields": null,
"hidden": false,
"options": [
{
"id": "regular",
"label": "Regular",
"value": "regular"
},
{
"id": "priceAdjustment",
"label": "Price adjustment",
"value": "priceAdjustment"
},
{
"id": "relocation",
"label": "Relocation",
"value": "relocation"
},
{
"id": "death",
"label": "Death",
"value": "death"
},
{
"id": "custom",
"label": "Others",
"value": "custom"
}
],
"readonly": false,
"valueRef": "data.type",
"validation": null,
"placeholder": null,
"defaultValue": null
},
{
"id": "_action",
"type": "text",
"label": "_action",
"fields": null,
"hidden": true,
"options": null,
"readonly": false,
"valueRef": "data._action",
"validation": null,
"placeholder": null,
"defaultValue": null
},
{
"id": "proofIncluded",
"type": "checkbox",
"label": "Proof included",
"fields": null,
"hidden": false,
"options": null,
"readonly": false,
"valueRef": "data.proofIncluded",
"validation": null,
"placeholder": null,
"defaultValue": null
},
{
"id": "dryRun",
"type": "checkbox",
"label": "(actually perform write access)",
"fields": null,
"hidden": true,
"options": null,
"readonly": false,
"valueRef": "data.dryRun",
"validation": null,
"placeholder": null,
"defaultValue": null
},
{
"id": "dateReceived",
"type": "date",
"label": "Date of termination receipt",
"fields": null,
"hidden": true,
"options": null,
"readonly": false,
"valueRef": "data.dateReceived",
"validation": null,
"placeholder": null,
"defaultValue": null
},
{
"id": "sourceCode-0",
"type": "dict",
"label": "Source code executor response",
"fields": null,
"hidden": false,
"options": null,
"readonly": false,
"valueRef": "data.sourceCode-0",
"validation": null,
"placeholder": null,
"defaultValue": null
}
]
},
"infos": [
{
"code": null,
"type": "warning",
"message": "Contract was canceled before the start of supply and therefore cannot be terminated.",
"extraInfo": null
}
],
"options": [
{
"icon": "check",
"name": "Inform customers",
"type": "termination_already_processed",
"order": 1,
"handler": "",
"recommended": true
}
]
}
Summary
The business logic defines how an AI agent processes input parameters and makes decisions based on them. It ensures that customer requests are checked, validated, and processed accordingly in a structured manner. Automated rules and procedures efficiently control and execute transparent processes, minimizing manual interventions.Output Handling
Functionality and exampleThe output handling determines how the AI agent reacts to the results of the business logic. It specifies whether and how information is returned to the user or system.
Basic Functionality
The output handling is based on predefined rules that build on the results of the business logic. It controls, among other things:- Text templates: Automatic messages to the user, e.g., confirmations or queries.
- Interactions: Provision of buttons or forms for further processing.
- API calls: Forwarding results to other systems.
- Automatic ticket actions: Entries into the system or completion of tasks.
- AI response suggestion: The AI generates a response to the customer based on the context.
- Use text template: A defined message is sent directly.
- Interaction: The user receives options for further processing.
- Close the ticket without answering: The issue is automatically completed.
- Send text template and close ticket: A confirmation is sent, and the ticket is completed.
Example: Output Handling in Bank Data Agent
The business logic of the bank data agent makes decisions based on input parameters. The output handling builds on this and controls the reaction. 1. IBAN is already in the systemIf the new IBAN is already stored (iban_already_in_system), a text template is automatically sent to the customer:Copy
Ask AI
thank you for submitting the bank details.
The bank connection with the last digits ...{{last4digits newIBAN}} is already stored in our system and will be used by us
{{#if payoutOnly}}for future credits{{else}}for monthly installments, invoices, and any credits{{/if}}.
- Action: Use text template
-
Condition:
_action = iban_already_in_system - Automatic execution: Yes → Message is fully automated.
iban_invalid), an alternative action is executed. The customer receives a query to provide a correct IBAN.Copy
Ask AI
The indicated IBAN {{newIBAN}} is not valid.
Please check the IBAN for potential typing errors and send us the correct bank details, so that we can record them. Thank you for your cooperation.
- Action: Use interaction or text template
-
Condition:
_action = iban_invalid - Automatic Execution: No → The user decides the further procedure.
enter_into_system), a confirmation is sent to the customer:Copy
Ask AI
Thank you very much for your message.
We have recorded in our system the bank details with the end digits...{{last4digits newIBAN}} and will be used by us
{{#if payoutOnly}}for future credits{{else}}for monthly installments, invoices, and possible credits{{/if}}.
- Action: Use Text Template
-
Condition:
_action = enter_into_system - Automatic Execution: Yes → Message is sent directly.
Summary
Output handling connects business logic with communication. It ensures that decisions are automatically converted into actions - be it through direct confirmations, queries or subsequent processes. This ensures customer requests are dealt with efficiently, transparently and without manual intervention.Testing and Publishing
FunctionalityTest cases simulate real scenarios to ensure that the AI agent operates correctly. Each test case is based on a ticket ID and represents the entire processing process.
Regular tests ensure that the AI agent operates stably and reliably, even with changed requirements or system updates.
Test Procedure
- A real ticket ID is selected and added.
- The AI agent processes the ticket based on the defined logic.
- The result is displayed as successful or failed.
Result Interpretation
- Successful: The test confirms that the AI agent responds as intended. The AI agent can now be published.
- Failed: In this case, the existing settings need to be reviewed. Instructions, detections, input parameters, business logic, and/or output handling should be examined for possible inconsistencies. After adjusting, the test should be performed again.