1 | TNA Rest Gateway
Proporciona un acceso seguro a los servicios de la plataforma Terranoha para cualquier servicio externo.
4 | TNA Intent Service
Refleja todas las solicitudes verbales entrantes para traducir el texto del usuario en intenciones estructuradas que pueden ser transformadas en solicitudes comerciales digitales comprensibles por la mayoría de los servidores.
6 | NLP / NLU
El corazón de la cocina del lenguaje natural. Traduce frases en texto libre en estructuras de nombre/valor y viceversa.
2 | TNA Bot Service
Alineado con los requisitos de un servicio de mensajería externa (chat) para realizar una conversación de manera completamente automatizada.
3 | TNA Smart Access Gateway
Dirige el tráfico de comunicación de solicitudes/respuestas de acuerdo con las reglas de tránsito establecidas.
5 | TNA Core Service
Incluye todo tipo de procesadores de lógica de negocio necesarios para cumplir con las solicitudes entrantes.
7 | TNA Market Connect Service
Brinda la capacidad de recibir y acomodar flujos de datos externos junto con el proceso de unificación de datos.
1 | TNA Core Service
Verificación de seguridad contextual basada en el contexto de seguridad proporcionado por el nivel de Seguridad de Acceso y en la tabla de derechos de acceso.
La plataforma Terranoha se basa en un subconjunto de microservicios. Entre ellos, tenemos:
- Smart Gateway para autenticar usuarios
- Bot Service para coordinar el workflow del bot
- Intent Service para clarificar las intenciones del usuario
- NLU Service para procesar el lenguaje natural
Cada solicitud recibida y acción realizada es auditada y registrada.
Estamos en cumplimiento con WhatsApp, Microsoft Teams, Slack, Telegram, Webex.
El informe de auditoría se puede descargar a demanda desde Emmie (el bot de Terranoha) o a través de REST API, según los permisos otorgados por el usuario.
Aquí a continuación algunos ejemplos de registros de auditoría
User starts a conversation:
{
«ctoken»: «42d30d29-79ce-42b6-aef0-74988a054a7e»,
«channel»: «MSTEAMS»,
«client»: «ACME»
}
In this request, user is identified by the ctoken field, which is the id of the user messaging system account. This ctoken is link to a user account.
User receives a link to securely authenticate:
{
«ctoken»: «42d30d29-79ce-42b6-aef0-74988a054a7e»,
«channel»: «MSTEAMS»,
«client»: «ACME»,
«callback»: «https:\/\/service.terranoha.net\/tna\/service\/auth-status»,
«ttl»: 1621260188716
}
The Stream-id is linked to a time stamp and some other metadata fields. Emmie bot creates the report, joins the dependencies needed to have a full view on the audit trail details and provides a readable format.
User requests a quote to bot-service:
{
«data»: {
«message»: «mkt eurusd 100k»,
«id»: «620633749000»,
«channel»: «MSTEAMS»,
«stream-id»: «a:1LAcxPeLEaF5yWwQUhM2_T8UMHMqYm-sjOxbg8WMG0AXV3bfgcPlFoej3qC2j0MO6IYC4LdSlDWtG9Yp2qWQ8bFP6t0TJp3DJjn_WcHbQAd0r3MUMU-D94rnhemsA7LLo»
},
«action»: «message.crack»,
«auth»: {
«channel»: «MSTEAMS»,
«ctoken»: «42d30d29-79ce-42b6-aef0-74988a054a7e»,
«client»: «ACME»
}
}
Message is interpreted by intent-assistant:
{
«data»: {
«context»: {
«ccy1»: «EUR»,
«ccy2»: «USD»,
«qty»: «100000.0»
},
«id»: «620633749000»,
«language»: «en»,
«intermediate»: «false»,
«stream-id»: «a:1LAcxPeLEaF5yWwQUhM2_T8UMHMqYm-sjOxbg8WMG0AXV3bfgcPlFoej3qC2j0MO6IYC4LdSlDWtG9Yp2qWQ8bFP6t0TJp3DJjn_WcHbQAd0r3MUMU-D94rnhemsA7LLo»,
«context-type»: «forex»,
«intent»: «request»,
«scope»: «quote»
},
«action»: «message.crack.result»
}
User makes an order request to bot-service:
{
«data»: {
«message»: «buy 1m eurusd 1W 360t»,
«id»: «620633749013»,
«channel»: «MSTEAMS»,
«stream-id»: «a:1LAcxPeLEaF5yWwQUhM2_T8UMHMqYm-sjOxbg8WMG0AXV3bfgcPlFoej3qC2j0MO6IYC4LdSlDWtG9Yp2qWQ8bFP6t0TJp3DJjn_WcHbQAd0r3MUMU-D94rnhemsA7LLo»
},
«action»: «message.crack»,
«auth»: {
«channel»: «MSTEAMS»,
«ctoken»: «42d30d29-79ce-42b6-aef0-74988a054a7e»,
«client»: «ACME»
}
}
Message is interpreted by intent-assistant:
{
«data»: {
«context»: {
«side»: «buy»,
«ccy1»: «EUR»,
«ccy2»: «USD»,
«qty»: «1000000.0»,
«counterparty»: «360t»,
«set-type»: «1W»
},
«id»: «620633749013»,
«language»: «en»,
«intermediate»: «false»,
«stream-id»: «a:1LAcxPeLEaF5yWwQUhM2_T8UMHMqYm-sjOxbg8WMG0AXV3bfgcPlFoej3qC2j0MO6IYC4LdSlDWtG9Yp2qWQ8bFP6t0TJp3DJjn_WcHbQAd0r3MUMU-D94rnhemsA7LLo»,
«context-type»: «forex»,
«intent»: «request»,
«scope»: «order»
},
«action»: «message.crack.result»
}
User confirms the order request:
{
«data»: {
«message»: «c»,
«id»: «620633749014»,
«channel»: «MSTEAMS»,
«stream-id»: «a:1LAcxPeLEaF5yWwQUhM2_T8UMHMqYm-sjOxbg8WMG0AXV3bfgcPlFoej3qC2j0MO6IYC4LdSlDWtG9Yp2qWQ8bFP6t0TJp3DJjn_WcHbQAd0r3MUMU-D94rnhemsA7LLo»
},
«action»: «message.crack»,
«auth»: {
«channel»: «MSTEAMS»,
«ctoken»: «42d30d29-79ce-42b6-aef0-74988a054a7e»,
«client»: «ACME»
}
}
Message is interpreted by intent assistant:
{
«data»: {
«context»: {
«side»: «buy»,
«ccy1»: «EUR»,
«ccy2»: «USD»,
«qty»: «1000000.0»,
«counterparty»: «360t»,
«set-type»: «1W»
},
«id»: «620633749014»,
«language»: «en»,
«intermediate»: «false»,
«stream-id»: «a:1LAcxPeLEaF5yWwQUhM2_T8UMHMqYm-sjOxbg8WMG0AXV3bfgcPlFoej3qC2j0MO6IYC4LdSlDWtG9Yp2qWQ8bFP6t0TJp3DJjn_WcHbQAd0r3MUMU-D94rnhemsA7LLo»,
«context-type»: «forex»,
«intent»: «request.confirm»,
«scope»: «order»
},
«action»: «message.crack.result»
}
360t accepts the order:
{
«data»: {
«symbol»: «EUR/USD»,
«id»: «620633742668»,
«type»: «market»,
«status»: «accept»,
«price-near»: 0.0,
«price-far»: 0.0,
«qty-min»: 0.0,
«qty-near-last»: 0.0,
«qty-far-last»: 0.0,
«qty-near-residual»: 1000000.0,
«qty-far-residual»: 0.0,
«price-spot»: 0.0,
«settl-date-near»: «2021-05-13»,
«fwd-points-near»: 0.0,
«fwd-points-far»: 0.0,
«price-near-last»: 0.0,
«price-far-last»: 0.0,
«price-near-average»: 0.0,
«price-far-average»: 0.0,
«time-in-force»: «ioc»,
«counterparty-order-id»: «308500007»,
«counterparty-exec-id»: «nm6lro»,
«status-last»: «accept»,
«qty-near»: 1000000.0,
«qty-far»: 0.0,
«cause-id»: «620633742668»,
«side»: «buy»,
«counterparty»: «360t»
},
«action»: «order.fx.request.result»
}
Order is filled:
{
«data»: {
«symbol»: «EUR/USD»,
«id»: «620633742668»,
«type»: «market»,
«status»: «fill»,
«price-near»: 0.0,
«price-far»: 0.0,
«qty-min»: 0.0,
«qty-near-last»: 1000000.0,
«qty-far-last»: 0.0,
«qty-near-residual»: 0.0,
«qty-far-residual»: 0.0,
«price-spot»: 0.0,
«settl-date-near»: «2021-05-13»,
«fwd-points-near»: 0.0,
«fwd-points-far»: 0.0,
«price-near-last»: 1.21469,
«price-far-last»: 0.0,
«price-near-average»: 1.21469,
«price-far-average»: 0.0,
«time-in-force»: «ioc»,
«counterparty-order-id»: «308500007»,
«counterparty-exec-id»: «903448414.2»,
«status-last»: «fill»,
«qty-near»: 1000000.0,
«qty-far»: 0.0,
«cause-id»: «620633742668»,
«side»: «buy»,
«counterparty»: «360t»
},
«action»: «order.fx.request.result»
}{
«data»: {
«id»: «620633742668»
},
«action»: «request.completion.ack»
}