1 | TNA Rest Gateway
Fournit un accès sécurisé aux services de la plateforme Terranoha pour tout service externe.
4 | TNA Intent Service
Répond à toutes les requêtes verbales entrantes pour traduire le texte de l'utilisateur en intentions structurées, pouvant être transformées en requêtes numériques compréhensibles par la plupart des serveurs.
6 | NLP / NLU
Le cœur de la cuisine du langage naturel. Traduit des phrases en texte libre en structures nom/valeur et vice versa.
2 | TNA Bot Service
Aligné avec les exigences d'un service de messagerie externe (chat) pour mener une conversation de manière entièrement automatisée.
3 | TNA Smart Access Gateway
Dirige le trafic de communication des requêtes/réponses conformément aux règles de transit établies.
5 | TNA Core Service
Inclut tous les types de processeurs de logique métier nécessaires pour répondre aux requêtes entrantes.
7 | TNA Market Connect Service
Offre la capacité de recevoir et d'intégrer des flux de données externes tout en unifiant les données.
1 | TNA Core Service
Vérification de sécurité contextuelle basée sur le contexte de sécurité fourni par le niveau de sécurité d'accès et sur la table des droits d'accès.
La plateforme Terranoha est construite sur un ensemble de microservices. Parmi eux, nous avons :
- Smart Gateway pour authentifier les utilisateurs
- Bot Service pour coordonner le workflow du bot
- Intent Service pour clarifier les intentions de l’utilisateur
- NLU Service pour traiter le langage naturel
Chaque requête reçue et chaque action effectuée sont auditées et enregistrées. Nous sommes conformes à WhatsApp, Microsoft Teams, Slack, Telegram, Webex.
Le rapport d’audit peut être téléchargé sur demande à partir d’Emmie (le bot de Terranoha) ou via l’API REST, en fonction des autorisations accordées par l’utilisateur.
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 »
}