# Belangrijke classen

In de `getResponse`-methode heb je toegang tot twee interessante parameters:

* `sentence`: instance van de `Sentence`-klasse
* `context`: instance van de `Context`-klasse

Deze parameters kunnen nuttige informatie bevatten om een antwoord te formuleren.

Verder zijn er nog interessante klassen, zoals `ResponseMessage`, `ResponseData`, `Quickreply` en `Entity`. In deze sectie zullen de parameters en methodes van deze klassen overlopen.

## **Sentence**

De `Sentence`-klasse is een voorstelling van de input van de gebruiker. Je kan zelf **geen** instance van de klasse aanmaken. Het heeft de volgende eigenschappen en methodes:

### **Eigenschappen**

| Naam        | Type        | Beschrijving                                                                 |
| ----------- | ----------- | ---------------------------------------------------------------------------- |
| session     | `str`       | de sessie-identifier                                                         |
| metadata    | `dict`      | vrije variabelen die meegegeven kunnen worden in de input                    |
| label       | `str`       | de intentie van de zin                                                       |
| sentence    | `str`       | de originele zin die gebruiker gegeven heeft, alles lowercase                |
| tokens      | `list(str)` | lijst van tokens (woorden) in de zin                                         |
| user\_input | `str`       | de originele zin die de gebruiker ingegeven heeft (volledig originele input) |

### **Methodes**

#### **getEntities()**

* Parameters: geen
* Return type: `list(Entity)`

Geeft een lijst van alle entiteiten in de zin terug. Geeft een lege lijst terug wanneer er geen entiteiten zijn.

#### **getEntityLabels()**

* Parameters: geen
* Return type: `list(str)`

Geeft een lijst van alle namen van entiteiten in de zin terug. Geeft een lege lijst terug wanneer er geen entiteiten zijn.

#### **getEntityValues()**

* Parameters: geen
* Return type: `list(str)`

Geeft een lijst van alle waarden van de entiteiten in de zin terug. Geeft een lege lijst terug wanneer er geen entiteiten zijn.

#### **getEntitiesWithLabel(label)**

* Parameters:
  * `label` (`str`): de naam van de entiteiten die je wil opvragen
* Return type: `list(Entity)`

Geeft een lijst van alle entiteiten met een specifieke naam in de zin terug. Geeft een lege lijst terug wanneer er geen entiteiten met deze naam zijn.

#### **getEntitiesWithLabelAndValue(label, value)**

* Parameters:
  * `label` (`str`): de naam van de entiteiten die je wil opvragen
  * `value` (`str`): de waarde van entiteiten die je wil opvragen
* Return type: `list(Entity)`

Geeft een lijst van alle entiteiten met een specifieke naam en een specifieke waarde in de zin terug. Geeft een lege lijst terug wanneer er geen entiteiten met deze naam en deze waarde zijn.

#### **getEntitiesAndPositionsWithLabel(label)**

* Parameters:
  * `label` (`str`): de naam van de entiteiten die je wil opvragen
* Return type: `dict`

Geeft een `dictionary` terug met als keys een `str` die de positie van de entiteit aanduidt en als values een lijst van entiteiten (`Entity`) met een specifieke naam die op die positie staan in de zin. Geeft een lege `dictionary` terug als er geen entiteiten met deze naam zijn. De `str` die de positie aanduidt, heeft het volgende formaat: `startIndex - eindIndex`. Bijvoorbeeld:

Welk weer is het ***vandaag*** in ***Antwerpen***?

```python
{
    "5 - 5": [(datum, vandaag)],
    "7 - 7": [(stad, antwerpen)]
}
```

## **Context**

De `Context`-klasse is een voorstelling van de huidige context van de conversatie. Je kan zelf **geen** instance van de klasse aanmaken. Het heeft de volgende eigenschappen en methodes:

### **Eigenschappen**

| Naam                   | Type   | Beschrijving                                                |
| ---------------------- | ------ | ----------------------------------------------------------- |
| label                  | `str`  | de intentie in de context (= de intentie van de vorige zin) |
| contextVariables       | `dict` | vrije variabele in de context                               |
| environment\_variables | `dict` | de environment variabelen van de chatbot                    |

### **Methodes**

#### **getEntities()**

* Parameters: geen
* Return type: `list(Entity)`

Geeft een lijst van alle entiteiten in de context terug. Geeft een lege lijst terug wanneer er geen entiteiten zijn.

#### **getEntityLabels()**

* Parameters: geen
* Return type: `list(str)`

Geeft een lijst van alle namen van entiteiten in de context terug. Geeft een lege lijst terug wanneer er geen entiteiten zijn.

#### **getEntityValues()**

* Parameters: geen
* Return type: `list(str)`

Geeft een lijst van alle waarden van de entiteiten in de context terug. Geeft een lege lijst terug wanneer er geen entiteiten zijn.

#### **getEntitiesWithLabel(label)**

* Parameters:
  * `label` (`str`): de naam van de entiteiten die je wil opvragen
* Return type: `list(Entity)`

Geeft een lijst van alle entiteiten met een specifieke naam in de context terug. Geeft een lege lijst terug wanneer er geen entiteiten met deze naam zijn.

#### **getEntitiesWithLabelAndValue(label, value)**

* Parameters:
  * `label` (`str`): de naam van de entiteiten die je wil opvragen
  * `value` (`str`): de waarde van entiteiten die je wil opvragen
* Return type: `list(Entity)`

Geeft een lijst van alle entiteiten met een specifieke naam en een specifieke waarde in de context terug. Geeft een lege lijst terug wanneer er geen entiteiten met deze naam en deze waarde zijn.

#### add\_entity(label, value=None)

* &#x20;Parameters:
  * `label` (`str`): de naam van de entiteit die je wil toevoegen
  * `value` (`str`): optioneel, de waarde van de entiteit die je wil toevoegen
* Return type: `None`

Voegt het label en eventueel de waarde toe aan de context.

#### add\_intent(label)

* Parameters:
  * `label` (`str`): de naam van de intentie die je wil toevoegen
* Return type: `None`

Voegt de intentie toe aan de context.

#### remove\_entity(label, value=None)

* Parameters:
  * `label` (`str`): de naam van de entiteit die je wil verwijderen
  * `value` (`str`): optioneel, de waarde van de entiteit die je wil verwijderen
* Return type: `None`

Verwijdert alle entiteiten met het gegeven label uit de context. Als er ook een waarde gegeven is, worden enkel de entiteiten verwijderd waar zowel het label als de waarde overeenkomen.

#### remove\_intent(label)

* Parameters:
  * `label` (`str`):  de naam van de intentie die je wil verwijderen
* Return type: `None`

Verwijdert de intentie met het gegeven label uit de context.

## **Entity**

De `Entity`-klasse stelt een entiteit voor. Je kan zelf **geen** instance van de klasse aanmaken.

### **Eigenschappen**

| Naam  | Type  | Beschrijving              |
| ----- | ----- | ------------------------- |
| label | `str` | De naam van de entiteit   |
| value | `str` | De waarde van de entiteit |

### **ResponseType**

`ResponseType`is een `enum` met de volgende mogelijk waarden:

| Naam  | Beschrijving                  |
| ----- | ----------------------------- |
| text  | Een tekstballon               |
| url   | Een knop met een externe link |
| image | Een afbeelding                |

### **ResponseData**

De `ResponseData`-klasse stelt een individueel element in een bericht voor, bijvoorbeeld een tekstballon of een afbeelding. Het is de bedoeling dat je hiervan één of meerdere instances aanmaakt en deze aan de `ResponseMessage` meegeeft.

#### **Parameters om object te initialiseren**

| Naam    | Type           | Vereist | Beschrijving                                                      |
| ------- | -------------- | ------- | ----------------------------------------------------------------- |
| message | `str`          | Nee     | Het bericht in de antwoorddata                                    |
| type    | `ResponseType` | Nee     | Het type van de antwoorddata                                      |
| url     | `str`          | Nee     | De url in de antwoorddata (bij een url-type)                      |
| image   | `str`          | Nee     | De url van een afbeelding in de antwoorddata (bij een image-type) |

#### **Opmerkingen**

* Standaard zijn parameters niet vereist, toch zijn er enkele restricties:
  * Wanneer je een type tekst geeft, is een `message` vereist
  * Wanneer je een type image geeft, is een `image` url vereist
  * Wanneer je type url geeft, is een `url` vereist

#### **Voorbeelden**

```python
responseData = ResponseData(
                    message="Hallo! Waar kan ik je mee helpen?",
                    type=ResponseType.text
                )
```

```python
responseData = ResponseData(
                    message="Klik hier voor meer info!",
                    type=ResponseType.url,
                    url="https://www.jouwwebsite.be/meerinfo"
                )
```

```python
responseData = ResponseData(
                    type=ResponseType.image,
                    image="https://www.jouwwebsite.be/image.png"
                 )
```

## **Quickreply**

De `Quickreply`-klasse is een voorstelling van een knop waar de gebruiker om kan klikken om snel een voorgedefinieerd bericht naar de chatbot te sturen. Je kan dit zelf aanmaken en meegeven aan de `ResponseMessage`.

### **Parameters om object te initialiseren**

| Naam   | Type  | Vereist | Beschrijving                                                         |
| ------ | ----- | ------- | -------------------------------------------------------------------- |
| text   | `str` | Ja      | De tekst op de knop                                                  |
| action | `str` | Nee     | De actie achter knop (= de tekst die naar de chatbot gestuurd wordt) |

### **Voorbeelden**

```python
quickreplies = [
    Quickreply(text="Ja!"),
    Quickreply(text="Nee...")
]
```

## **ResponseMessage**

De `ResponseMessage`-klasse is een voorstelling van een volledig bericht dat teruggeven wordt aan de gebruiker en acties die eraan verbonden zijn. Het is de bedoeling dat je hiervan een instance aanmaakt en teruggeeft in de `getResponse`-methode.

### **Parameters om object te initialiseren**

| Naam              | Type                 | Vereist | Beschrijving                                                                                                                                                   |
| ----------------- | -------------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| data              | `list(ResponseData)` | Ja      | Een lijst van `ResponseData`-objecten                                                                                                                          |
| contextVariables  | `dict`               | Nee     | Een dictionary met vrije variabelen die in de context opgeslagen worden                                                                                        |
| responsePriority  | `str`                | Nee     | Een string die de prioriteit van het volgende antwoord aangeeft: `"children-first"` (default), `"children-only"`, `"response-score"`                           |
| ifNoResponseFound | `str`                | Nee     | Het bericht dat aan de gebruiker gegeven wordt als er hierna geen antwoord gevonden wordt                                                                      |
| toBookmark        | `str`                | Nee     | De bookmark waarnaar er gesprongen wordt na het geven van dit antwoord                                                                                         |
| tags              | `dict`               | Nee     | <p>Een dictionary die de toe te voegen en te verwijderen tags definieert als lijsten.</p><p>Bvb: <code>{'add': \['foo', 'bar'], 'remove': \['old']}</code></p> |
| stateChange       | `str`                | Nee     | De toestand waarin de chatbot valt na het geven van dit antwoord                                                                                               |
| metadata          | `dict`               | Nee     | Een dictionary met vrije variabelen die teruggegeven worden aan de gebruiker                                                                                   |

### **Opmerkingen**

* Indien je geen `contextVariables` meegeeft, dan blijven de vorige `contextVariables` behouden
* Indien waarde van `toBookmark` geen bookmark is, zal het systeem crashen

### **Voorbeelden**

```python
responseMessage = ResponseMessage(
                          data=[
                            ResponseData(
                                message="Hallo daar!",
                                type=ResponseType.text
                            ),
                            ResponseData(
                                message="Mijn naam is Oswald.",
                                type=ResponseType.text
                            ),
                            ResponseData(
                                message="Hoe kan ik je helpen?",
                                type=ResponseType.text
                            )
                        ],
                        quickreplies=[
                            Quickreply(
                                text="Wachtwoord vergeten",
                                action="Ik ben mijn wachtwoord vergeten."
                            ),
                            Quickreply(
                                text="Gebruikersnaam vergeten",
                                action="Ik ben mijn gebruikersnaam vergeten."
                            )
                        ]
                    )
```

```python
responseMessage = ResponseMessage(
                        data=[
                            ResponseData(
                                message="Bekijk deze afbeelding:",
                                type=ResponseType.text
                            ),
                            ResponseData(
                                image="https://www.jouwwebsite.be/afbeelding.png",
                                type=ResponseType.image
                            ),
                            ResponseData(
                                message="Welke score zou je hieraan geven (1-3)?",
                                type=ResponseType.text
                            )
                        ],
                        quickreplies=[
                            Quickreply(
                                text="1"
                            ),
                            Quickreply(
                                text="2"
                            ),
                            Quickreply(
                                text="3"
                            )
                        ],
                        responsePriotity="children-only",
                        ifNoResponseFound="Dat is geen geldige score!"
                    )
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://oswaldai.gitbook.io/docs/advanced-code-responses/belangrijke-classen.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
