diff --git a/channels/jaicp/src/main/kotlin/com/justai/jaicf/channel/jaicp/reactions/TelephonyReactions.kt b/channels/jaicp/src/main/kotlin/com/justai/jaicf/channel/jaicp/reactions/TelephonyReactions.kt index e6365de5..9bc434a8 100755 --- a/channels/jaicp/src/main/kotlin/com/justai/jaicf/channel/jaicp/reactions/TelephonyReactions.kt +++ b/channels/jaicp/src/main/kotlin/com/justai/jaicf/channel/jaicp/reactions/TelephonyReactions.kt @@ -229,9 +229,9 @@ class TelephonyReactions(private val bargeInDefaultProps: BargeInProperties) : J * } * } * ``` - * @param properties map of properties names with its assigned values. + * @param properties map of properties names with its assigned values (String/Collection/Map). * */ - fun setAsrProperties(properties: Map) { + fun setAsrProperties(properties: Map) { asrConfig = setAsrPropertiesHandler.handle( properties, mergeAsrConfigs(asrConfig, (executionContext.request as TelephonyBotRequest).asrConfig) diff --git a/channels/jaicp/src/main/kotlin/com/justai/jaicf/channel/jaicp/reactions/handlers/SetAsrPropertiesHandler.kt b/channels/jaicp/src/main/kotlin/com/justai/jaicf/channel/jaicp/reactions/handlers/SetAsrPropertiesHandler.kt index b5f73ecf..12159d08 100644 --- a/channels/jaicp/src/main/kotlin/com/justai/jaicf/channel/jaicp/reactions/handlers/SetAsrPropertiesHandler.kt +++ b/channels/jaicp/src/main/kotlin/com/justai/jaicf/channel/jaicp/reactions/handlers/SetAsrPropertiesHandler.kt @@ -1,6 +1,7 @@ package com.justai.jaicf.channel.jaicp.reactions.handlers import com.justai.jaicf.channel.jaicp.dto.config.* +import kotlinx.serialization.json.JsonArray import kotlinx.serialization.json.JsonObject import kotlinx.serialization.json.JsonPrimitive @@ -8,8 +9,15 @@ class SetAsrPropertiesHandler( private val listOfActualHandlers: List ) { - fun handle(properties: Map, asrConfig: AsrConfig): AsrConfig { - val propertiesJson = JsonObject(properties.toMutableMap().mapValues { entry -> JsonPrimitive(entry.value) }) + fun handle(properties: Map, asrConfig: AsrConfig): AsrConfig { + val propertiesJson = JsonObject(properties.mapValues { entry -> + when (val value = entry.value) { + is Collection<*> -> JsonArray(value.map { JsonPrimitive(it.toString()) }) + is String -> JsonPrimitive(value) + is Map<*,*> -> JsonObject(value.mapKeys { it.key.toString() }.mapValues { JsonPrimitive(it.value.toString()) }) + else -> throw IllegalArgumentException("Unsupported property type: ${value::class.simpleName}") + } + }) return listOfActualHandlers.first { it.canHandle(checkNotNull(asrConfig.type)) } .handle(asrConfig, propertiesJson) } diff --git a/channels/jaicp/src/test/kotlin/com/justai/jaicf/channel/jaicp/config/ProviderConfigTest.kt b/channels/jaicp/src/test/kotlin/com/justai/jaicf/channel/jaicp/config/ProviderConfigTest.kt index 93c919e3..198a3fc6 100644 --- a/channels/jaicp/src/test/kotlin/com/justai/jaicf/channel/jaicp/config/ProviderConfigTest.kt +++ b/channels/jaicp/src/test/kotlin/com/justai/jaicf/channel/jaicp/config/ProviderConfigTest.kt @@ -38,4 +38,18 @@ internal class ProviderConfigTest : JaicpBaseTest() { val response = channel.process(requestFromResources) assertEquals(responseFromResources, response.jaicp) } + + @Test + fun `003 config asr properties`() { + val scenario = echoWithAction { + reactions.telephony?.setAsrProperties(mapOf( + "hints.eou_timeout" to "4s", + "insight_models" to listOf("call_features"), + "time" to mapOf(("now" to "21:00")) + )) + } + val channel = JaicpTestChannel(scenario, TelephonyChannel) + val response = channel.process(requestFromResources) + assertEquals(responseFromResources, response.jaicp) + } } \ No newline at end of file diff --git a/channels/jaicp/src/test/resources/config/003/req.json b/channels/jaicp/src/test/resources/config/003/req.json new file mode 100644 index 00000000..4fd6cefe --- /dev/null +++ b/channels/jaicp/src/test/resources/config/003/req.json @@ -0,0 +1,44 @@ +{ + "data": { + "livechatStatus": { + "enabled": false + } + }, + "version": 1, + "botId": "jaicf_project", + "channelType": "resterisk", + "channelBotId": "jaicf_project", + "channelUserId": "chatapi-jaicf_project-puga", + "questionId": "aaa99bea-aae1-41d2-aede-76e4f13b0ccc", + "query": "/start", + "timestamp": 1583767519.497000000, + "rawRequest": { + "token": "GNVXJdeo:718e36f7005fbba3e2a9696784b83dc3bd0f3d9a", + "clientId": "test", + "questionId": "aaa99bea-aae1-41d2-aede-76e4f13b0ccc", + "query": "/start", + "timestamp": "2020-03-09T15:25:19.497", + "userId": "puga", + "asrTtsProviderData": { + "asr": { + "type": "sber", + "internal": true, + "sber": { + "model": "callcenter", + "language": "ru-RU" + } + }, + "tts": { + "type": "aimyvoice", + "internal": true, + "aimyvoice": { + "voice": "Татьяна" + } + } + } + }, + "userFrom": { + "id": "test", + "firstName": "test" + } +} \ No newline at end of file diff --git a/channels/jaicp/src/test/resources/config/003/resp.json b/channels/jaicp/src/test/resources/config/003/resp.json new file mode 100644 index 00000000..1b703d19 --- /dev/null +++ b/channels/jaicp/src/test/resources/config/003/resp.json @@ -0,0 +1,59 @@ +{ + "data": { + "replies": [], + "answer": "", + "dialer": {}, + "asrConfig": { + "type": "sber", + "sber": { + "language": "ru-RU", + "model": "callcenter", + "asrProperties": { + "hints.eou_timeout": "4s", + "insight_models": ["call_features"], + "time":{"now":"21:00"} + } + }, + "asrProperties": { + "hints.eou_timeout": "4s", + "insight_models": ["call_features"], + "time":{"now":"21:00"} + } + } + }, + "botId": "jaicf_project", + "accountId": "jaicf_project", + "channelType": "resterisk", + "channelBotId": "jaicf_project", + "channelUserId": "chatapi-jaicf_project-puga", + "questionId": "aaa99bea-aae1-41d2-aede-76e4f13b0ccc", + "query": "/start", + "timestamp": 0, + "currentState": "/fallback", + "processingTime": 0, + "requestData": { + "token": "GNVXJdeo:718e36f7005fbba3e2a9696784b83dc3bd0f3d9a", + "clientId": "test", + "questionId": "aaa99bea-aae1-41d2-aede-76e4f13b0ccc", + "query": "/start", + "timestamp": "2020-03-09T15:25:19.497", + "userId": "puga", + "asrTtsProviderData": { + "asr": { + "type": "sber", + "internal": true, + "sber": { + "model": "callcenter", + "language": "ru-RU" + } + }, + "tts": { + "type": "aimyvoice", + "internal": true, + "aimyvoice": { + "voice": "Татьяна" + } + } + } + } +} \ No newline at end of file