tock / ai.tock.bot.engine.nlp / NlpListener

# NlpListener

`interface NlpListener` (source)

Used to customize behaviour of NLP parsing - and also to monitor NLP requests - on bot side. Has to be registered using ai.tock.bot.engine.BotRepository.registerNlpListener.

### Functions

#### error | Called when nlp request is throwing an error. `open fun error(query: NlpQuery, dialog: Dialog, throwable: Throwable?): Unit`
#### evaluateEntities | Allows custom entity evaluation - default returns empty list. `open fun evaluateEntities(userTimeline: UserTimeline, dialog: Dialog, event: Event, nlpResult: NlpResult): List<EntityValue>`
#### findIntent | This method is automatically called by the bot after a NLP request in order to select an intent. Overrides it if you need more control on intent choice. `open fun findIntent(userTimeline: UserTimeline, dialog: Dialog, event: Event, nlpResult: NlpResult): IntentAware?`
#### handleKeyword | Used to handle "secret" keywords. `open fun handleKeyword(sentence: String): Intent?`
#### mergeEntityValues | Allows to override NlpEntityMergeContext before trying to merge the entity context. `open fun mergeEntityValues(dialogState: DialogState, action: Action, entityToMerge: NlpEntityMergeContext): NlpEntityMergeContext`
#### sortEntitiesToMerge | Defines custom sort new entity values. This is useful when you want to evaluate an entity role only after an other entity role has been evaluated (entity dependence use case). Default does nothing. `open fun sortEntitiesToMerge(entities: List<NlpEntityMergeContext>): List<NlpEntityMergeContext>`
#### success | Called when nlp request is successful. `open fun success(query: NlpQuery, result: NlpResult): Unit`

### Inheritors

#### BuiltInKeywordListener | Built-in listener to start BotDefinition.keywordStory. `object BuiltInKeywordListener : NlpListener`