{"id":638,"date":"2021-02-26T16:51:36","date_gmt":"2021-02-26T16:51:36","guid":{"rendered":"https:\/\/docs.tellya.ai\/?page_id=638"},"modified":"2021-03-01T10:53:55","modified_gmt":"2021-03-01T10:53:55","slug":"fulfillment-journey","status":"publish","type":"page","link":"https:\/\/docs.tellya.ai\/index.php\/fulfillment-journey\/","title":{"rendered":"Fulfillment Journey"},"content":{"rendered":"\n<p>Quando il Front End deve necessariamente invocare direttamente il motore di  NLU senza la possibilit\u00e0 di intermediari, Tellya deve posizionarsi posteriormente rispetto a tale motore e ci\u00f2 \u00e8 possibili attraverso la creazione di una <a href=\"https:\/\/docs.tellya.ai\/index.php\/knowledge-base\/design-overview\/#configurazione-di-una-fulfillment-journey\" data-type=\"URL\" data-id=\"https:\/\/docs.tellya.ai\/index.php\/knowledge-base\/design-overview\/#configurazione-di-una-fulfillment-journey\">Fulfillment Journey<\/a>.<\/p>\n\n\n\n<p>A seconda del motore di NLU utilizzato \u00e8 necessario configurare i dettagli e i parametri della comunicazione tra il motore e la piattaforma Tellya, al fine di rispettare il formato atteso.<\/p>\n\n\n\n<h2>Google Dialogflow ES<\/h2>\n\n\n\n<p>Se si utilizza Google Dialogflow ES come motore di NLU \u00e8 necessario accedere alla&nbsp;<a rel=\"noreferrer noopener\" href=\"https:\/\/dialogflow.cloud.google.com\/\" target=\"_blank\">console<\/a>&nbsp;e configurare nella sezione \u201cFulfillment\u201d le informazioni relative al Webhook.<\/p>\n\n\n\n<p>In primo luogo \u00e8 necessario specificare l&#8217;URL del servizio (Tellya) da invocare:<\/p>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--noicon is-style-info\">https:\/\/prod.tellya.ai\/chat\/api\/v2\/fulfillment<\/p>\n\n\n\n<p>\u00c8 inoltre necessario aggiungere un <em>header<\/em> specificando l&#8217;API key della journey da invocare:<\/p>\n\n\n\n<ul><li>Key name: apiKey<\/li><li>Key value: [apiKeyValue] (es. 31edzz99fe833644bfe0e2190d52268z)<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/docs.tellya.ai\/wp-content\/uploads\/2021\/02\/fulfillment-journey-config-1024x360.jpg\" alt=\"\" class=\"wp-image-639\" width=\"666\" height=\"233\" srcset=\"https:\/\/docs.tellya.ai\/wp-content\/uploads\/2021\/02\/fulfillment-journey-config-1024x360.jpg 1024w, https:\/\/docs.tellya.ai\/wp-content\/uploads\/2021\/02\/fulfillment-journey-config-300x106.jpg 300w, https:\/\/docs.tellya.ai\/wp-content\/uploads\/2021\/02\/fulfillment-journey-config-768x270.jpg 768w, https:\/\/docs.tellya.ai\/wp-content\/uploads\/2021\/02\/fulfillment-journey-config-50x18.jpg 50w, https:\/\/docs.tellya.ai\/wp-content\/uploads\/2021\/02\/fulfillment-journey-config-60x21.jpg 60w, https:\/\/docs.tellya.ai\/wp-content\/uploads\/2021\/02\/fulfillment-journey-config-100x35.jpg 100w, https:\/\/docs.tellya.ai\/wp-content\/uploads\/2021\/02\/fulfillment-journey-config.jpg 1527w\" sizes=\"(max-width: 666px) 100vw, 666px\" \/><\/figure>\n\n\n\n<p>I formati della <em>request<\/em> e della <em>response<\/em> che permettono la comunicazione tra i vari sistemi sono consultabili nella documentazione di <a href=\"https:\/\/cloud.google.com\/dialogflow\/es\/docs\/fulfillment-webhook\">Google Dialogflow ES<\/a>.<\/p>\n\n\n\n<p>A seconda dei connettori abilitati all&#8217;interno della journey invocata, Tellya potr\u00f2 popolare alcuni campi all&#8217;interno dell&#8217;oggetto &#8220;payload&#8221; messo a disposizione dal formato della Webhook response per restituire il risultato dell&#8217;elaborazione effettuata dai connettori.<\/p>\n\n\n\n<p>In particolare:<\/p>\n\n\n\n<ul><li>Se presente il connettore <strong>Natural Language <\/strong>verr\u00e0 popolato l&#8217;oggetto <em>naturalLanguageResult<\/em><\/li><li>Se presente il connettore <strong>Translate<\/strong> verr\u00e0 popolato l&#8217;oggetto <em>translateResult<\/em><\/li><\/ul>\n\n\n\n<h3>naturalLanguageResult<\/h3>\n\n\n\n<div class=\"table-responsive\">\n  <table class=\"table api-table\">\n    <thead>\n      <tr>\n        <th scope=\"col\" colspan=\"2\">Fields<\/th>\n      <\/tr> \n    <\/thead>\n    <tbody>\n      <tr>\n        <th scope=\"row\">sentiment<\/th>\n        <td>\n          <p class=\"api-parameter-type\">Number<\/p>\n          <p>Il valore del sentiment compreso tra -1,0 (negativo) e 1,0 (positivo) corrisponde alla tendenza emotiva generale del testo analizzato.<\/p>\n        <\/td>\n      <\/tr>\n      <tr>\n        <th scope=\"row\">magnitude<\/th>\n        <td>\n          <p class=\"api-parameter-type\">Number<\/p>\n          <p>Indica la forza complessiva dell&#8217;emozione (sia positiva che negativa) all&#8217;interno del testo dato, compresa tra 0,0 e +infinito.<\/p>\n        <\/td>\n      <\/tr>\n      <tr>\n        <th scope=\"row\">textAnalyzed<\/th>\n        <td>\n          <p class=\"api-parameter-type\">String<\/p>\n          <p>Testo analizzato dal connettore.<\/p>\n        <\/td>\n      <\/tr>\n      <tr>\n        <th scope=\"row\">noValues<\/th>\n        <td>\n          <p class=\"api-parameter-type\">Boolean<\/p>\n          <p>Quando valorizzato a TRUE indica che non \u00e8 stato specificato alcun testo da analizzare con il connettore.<\/p>\n        <\/td>\n      <\/tr>\n    <\/tbody>\n  <\/table>\n  <\/div>\n\n\n\n<h3>translateResult<\/h3>\n\n\n\n<div class=\"table-responsive\">\n  <table class=\"table api-table\">\n    <thead>\n      <tr>\n        <th scope=\"col\" colspan=\"2\">Fields<\/th>\n      <\/tr> \n    <\/thead>\n    <tbody>\n      <tr>\n        <th scope=\"row\">languageTextAnalyzed<\/th>\n        <td>\n          <p class=\"api-parameter-type\">String<\/p>\n          <p>Lingua rilevata nel campo testuale da analizzare.<\/p>\n        <\/td>\n      <\/tr>\n      <tr>\n        <th scope=\"row\">textAnalyzed<\/th>\n        <td>\n          <p class=\"api-parameter-type\">String<\/p>\n          <p>Testo analizzato.<\/p>\n        <\/td>\n      <\/tr>\n      <tr>\n        <th scope=\"row\">languageTextTarget<\/th>\n        <td>\n          <p class=\"api-parameter-type\">String<\/p>\n          <p>Lingua selezionata per tradurre il testo.<\/p>\n        <\/td>\n      <\/tr>\n      <tr>\n        <th scope=\"row\">textResult<\/th>\n        <td>\n          <p class=\"api-parameter-type\">String<\/p>\n          <p>Traduzione del testo.<\/p>\n        <\/td>\n      <\/tr>\n    <\/tbody>\n  <\/table>\n  <\/div>\n\n\n\n<p><\/p>\n\n\n\n<h3>Esempio (Status Code 200)<\/h3>\n\n\n\n<div class=\"table-responsive\">\n<table class=\"table api-table\">\n  <thead>\n    <tr>\n      <th scope=\"col\">JSON representation<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr class=\"json-example\">\n      <td>\n        <pre><code>{\n  <span class=\"str\">\"fulfillmentMessages\"<\/span>: [\n    {\n      <span class=\"str\">\"text\"<\/span>: {\n        <span class=\"str\">\"text\"<\/span>: [\n          <span class=\"str\">\"Buongiorno, avrei bisogno di un'informazione\"<\/span>\n        ]\n      }\n    }\n  ],\n  <span class=\"str\">\"payload\"<\/span>: {\n    <span class=\"str\">\"naturalLanguageResult\"<\/span>: {\n      <span class=\"str\">\"sentiment\"<\/span>: <span class=\"num\">0.8<\/span>,\n      <span class=\"str\">\"magnitude\"<\/span>: <span class=\"num\">0.8<\/span>,\n      <span class=\"str\">\"textAnalyzed\"<\/span>: <span class=\"str\">\"Buongiorno, avrei bisogno di un'informazione\"<\/span>,\n      <span class=\"str\">\"noValues\"<\/span>: <span class=\"bool\">false<\/span>\n    },\n    <span class=\"str\">\"translateResult\"<\/span>: {\n      <span class=\"str\">\"languageTextAnalyzed\"<\/span>: <span class=\"str\">\"it\"<\/span>,\n      <span class=\"str\">\"textAnalyzed\"<\/span>: <span class=\"str\">\"Buongiorno\"<\/span>,\n      <span class=\"str\">\"languageTextTarget\"<\/span>: <span class=\"str\">\"en\"<\/span>,\n      <span class=\"str\">\"textResult\"<\/span>: <span class=\"str\">\"Good morning\"<\/span>\n}\n  },\n  <span class=\"str\">\"outputContexts\"<\/span>: [\n    {\n      <span class=\"str\">\"name\"<\/span>: <span class=\"str\">\"projects\/agent-name\/agent\/sessions\/session-id\/contexts\/session\"<\/span>,\n      <span class=\"str\">\"lifespanCount\"<\/span>: <span class=\"num\">99<\/span>,\n    }\n  ]\n}\n<\/code><\/pre>\n      <\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Quando il Front End deve necessariamente invocare direttamente il motore di NLU senza la possibilit\u00e0 di intermediari, Tellya deve posizionarsi posteriormente rispetto a tale motore e ci\u00f2 \u00e8 possibili attraverso la creazione di una Fulfillment Journey. A seconda del motore di NLU utilizzato \u00e8 necessario configurare i dettagli e i&#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"_links":{"self":[{"href":"https:\/\/docs.tellya.ai\/index.php\/wp-json\/wp\/v2\/pages\/638"}],"collection":[{"href":"https:\/\/docs.tellya.ai\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/docs.tellya.ai\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/docs.tellya.ai\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/docs.tellya.ai\/index.php\/wp-json\/wp\/v2\/comments?post=638"}],"version-history":[{"count":23,"href":"https:\/\/docs.tellya.ai\/index.php\/wp-json\/wp\/v2\/pages\/638\/revisions"}],"predecessor-version":[{"id":669,"href":"https:\/\/docs.tellya.ai\/index.php\/wp-json\/wp\/v2\/pages\/638\/revisions\/669"}],"wp:attachment":[{"href":"https:\/\/docs.tellya.ai\/index.php\/wp-json\/wp\/v2\/media?parent=638"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}