1 | TNA Rest Gateway
Provides a secure access to the Terranoha platform services for any outside service.
4 | TNA Intent Service
Reflects to all incoming verbal requests in order to translate user text into structured intents that can be advanced to digital business requests understandable by most servers.
6 | NLP / NLU
The heart of the natural language kitchen. Translates free text phrases into name/value structures and vice versa.
2 | TNA Bot Service
Aligned with requirements of an external messaging (chat) service in order to run a conversation within in fully automated way.
3 | TNA Smart Access Gateway
Routes a request/response communication traffic in accordance with settled transit rules.
5 | TNA Core Service
Includes all kind of business logic processors that are needed to fulfil incoming requests.
7 | TNA Market Connect Service
Brings an ability to receive and accommodate external data feeds along with the data unification process.
1 | TNA Core Service
Contextual security check based on the security context delivered from Access Security level and based on the access rights table.
The Terranoha platform is built on a subset of microservices. Among them we have:
- Smart Gateway to authenticate users
- Bot Service to coordinate the bot workflow
- Intent Service to clarify user’s intents
- NLU Service to process natural language
Each received request and performed action is audited and recorded.
We are compliant with WhatsApp, Microsoft Teams, Slack, Telegram, Webex.
Audit report can be downloaded on demand from Emmie (Terranoha bot) or via REST API, according to the user granting permissions.
Here below a few examples of some audit records
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”
}