nlp – Xenioo Mon, 07 Dec 2020 09:04:59 +0000 en-US hourly 1 https://wordpress.org/?v=5.5.3 /wp-content/uploads/2018/09/cropped-xenioo-badge-32x32.png nlp – Xenioo 32 32 Learn How To Create A Telegram Group Chatbot /learn-how-create-telegram-group-chatbot/ /learn-how-create-telegram-group-chatbot/#respond Thu, 14 Feb 2019 14:13:26 +0000 https://wp.xenioo.com/?p=993 In a previous tutorial, we saw how to create and deploy a Telegram chatbot using Xenioo. While we did cover the basics of single and group conversations and the concept of bot privacy, we didn’t go into the depths on how to fully manage a Telegram group chatbot. This time we are going to see exactly this: we will create a very simple chatbot that will act as a group manager and moderator. Telegram Privacy Mode When building you chatbot using ...

Read MoreLearn How To Create A Telegram Group Chatbot

The post Learn How To Create A Telegram Group Chatbot appeared first on Xenioo.

]]>
In a previous tutorial, we saw how to create and deploy a Telegram chatbot using Xenioo.
While we did cover the basics of single and group conversations and the concept of bot privacy, we didn’t go into the depths on how to fully manage a Telegram group chatbot.

This time we are going to see exactly this: we will create a very simple chatbot that will act as a group manager and moderator.

Telegram Privacy Mode

When building you chatbot using the BotFather, you will notice multiple configuration options where you can change the name, the avatar and some other settings.

One of these options is /setprivacy and can be used to turn on or off “Group Privacy”. What is it exactly?

  • With Bot Privacy OFF, your chatbot will receive every message that is sent to the chat by any user. If you have a hundred thousands users in your group, Xenioo will receive all of the messages and process them.
  • With Bot Privacy ON, none of the messages sent by any user will reach Xenioo. Only messages starting with the symbol ‘/’, or direct mentions of your chatbot, will be received.

By default, Bot Privacy is ON and for our example, we will leave it as it is.

As we said, we are going to create a Group Manager and we do not want, for now, to check all users messages.

Reacting to Chat Commands

As explained, with group privacy turned on, we will be receiving only chat messages starting with a ‘/’. A typical use of these commands are /help or /about but you can just handle whatever command you like.

Using Xenioo global bot operations you can handle these commands very easily and make sure that they are always triggered whatever the status of your chatbot.

In our chatbot sample, the /hep command will reply with a very simple bubble proposing two different commands.

Whatever text starts with a ‘/ ‘ symbol inside a Xenioo text will be transformed into a link command inside the Telegram Bubble.

The user can either write the command or just click on the command link inside the bubble to invoke your chatbot again.

Users coming and going

As soon as you add your Xenioo chatbot to a Telegram group you will start receiving events related to every user joining and leaving.

Each event will trigger your chatbot populating specific variables you can use in your flow to react and eventually welcome, or bid farewell to users.

Managing variables and messages have been covered in multiple articles so we will be focusing now only on which variables are available to you whenever your chatbot is invoked in a Telegram Group.

VariableValore contenuto
telegram_new_users_countContains the number of new users added. If the value is equal to zero, no user has been added.
telegram_new_user_<num>Contains the full username of one of the users that just entered the group where <num> represents the index number of the user.
telegram_new_user_<num>_typeContains the type of user that just joined the group where <num> represents the index number of the user. The value can be either USER for a normal user or BOT for a bot.
telegram_user_leavingContains the full username of the user that just left the group.
last_userContains the full username of the last user that sent a text or a command in the group chat .

Users can be added massively with a single invite so make sure to always check for the correct number indicated by the telegram_new_user_count variable.

On big groups, it is not uncommon to have tens of users joining altogether. Using Xenioo variable manipulation capabilities you can create a simple loop very easily.

On the other hand, users leaving can be multiple but never massive as removal is immediate and never simultaneous. Variable telegram_user_leaving value is always related to a single user and your flow will be called for each user.

Overseeing users behavior

Another important aspect of managing groups is overseeing users behavior.

If your group runs with specific language policy, for example, a chatbot can be a very effective way of enforcing it and Xenioo gives not only the tools to detect user text but also to kick them from the group.

The first thing to do is turn off group privacy on your bot: this will allow Xenioo to receive and process each and every message that goes in the group.

After this, you can easily create an NLP intent containing all of the expressions that you do not want your users to use.

The expressions can vary from simple, even single word entries to more complex sentences covering different topics. The Xenioo NLP engine will automatically train itself and detect also texts that are different but express the same intent.

Once you’re satisfied with your intent, we can link it to our global chatbot operations and attach it to an interaction.

As you can see from the diagram our approach is to give the user up to 3 warnings before taking on final action.

Each user warning count has its own variable and our chatbot will be able to take note of the count even after months (or you can go ahead and reset counter once in a while using just a broadcast).

Having a high number of users may require a more complex and database oriented approach but for our example, it is going to be just fine.

Your Personal Group Manager

We’ve just seen how building a Telegram Group Manager bot with Xenioo is incredibly easy and flexible.

Want to try it right away? There’s a free template built exactly like this example and ready to be tested in your account.

Do you have any special request or requirement for your Telegram group? Let us know in our community group or just drop a line to our team!

The post Learn How To Create A Telegram Group Chatbot appeared first on Xenioo.

]]>
/learn-how-create-telegram-group-chatbot/feed/ 0
Come creare un chatbot per moderare un gruppo Telegram /come-creare-un-chatbot-per-moderare-un-gruppo-telegram/ /come-creare-un-chatbot-per-moderare-un-gruppo-telegram/#respond Thu, 14 Feb 2019 14:13:26 +0000 https://wp.xenioo.com/?p=993 Scopri come utilizzare Xenioo per creare un semplice e versatile chatbot per la gestione e moderazione di un gruppo Telegram. All'interno disponibile anche il template gratuito da riutilizzare nel proprio account Xenioo.

The post Come creare un chatbot per moderare un gruppo Telegram appeared first on Xenioo.

]]>
In un nostro precedente articolo abbiamo visto come creare e pubblicare un chatbot per Telegram usando Xenioo.

Abbiamo spiegato le basi di come gestire una conversazione singola o di gruppo ed i concetti legati alla privacy del bot, ma non siamo entrati nel dettaglio di come poter gestire un gruppo su Telegram attraverso un chatbot.

L’obiettivo di questo articolo è proprio questo: vi mostreremo come creare un semplice chatbot che funzioni come gestore e moderatore di un gruppo Telegram.

Impostare la privacy di un gruppo Telegram

Nella creazione del chatbot attraverso il BotFather, avrai notato come è possibile configurare una serie di opzioni come il nome, l’avatar e molte altre ancora.

Una di queste opzioni è la /setprivacy e può essere impostata per abilitare o disattivare la “Group Privacy“.

Ma cos’e’ la Group Policy di Tegram?

  • con la Group Policy OFF (disabilitata), il chatbot riceverà ogni messaggio inviato dagli utenti. Se il tuo chatbot ha migliaia di utenti nel gruppo, Xenioo riceverà e processerà tutti i messaggi inviati da ciascuno di essi.
  • con la Group Policy ON (attivata), nessun messaggio scritto dagli utenti in chat raggiungerà Xenioo. Gli unici messaggi che verranno ricevuti e processati da Xenioo saranno quelli che iniziano con il carattere ‘/’ oppure menzioni dirette.

Per impostazione predefinita, la Group Policy è impostata ad ON ed è quindi attivata.

Per il momento lasceremo l’impostazione della privacy predefinita, in quanto non ci interessa ricevere tutti i messaggi degli utenti per gestire i comandi nel gruppo. Vedremo successivamente come disattivarla quando dovremo configurare il nostro chatbot per funzionare anche da moderatore del gruppo.

Rispondere ai comandi ricevuti in chat

Come descritto nel paragrafo precedente, con la Group Privacy attivata, il chatbot riceverà solo i messaggi che iniziano con il carattere ‘/’. Chiameremo questi messaggi “comandi”.

L’utilizzo tipico di questi comandi è per richiedere aiuto (/help) oppure informazioni aggiuntive (/about), ma è possibile creare e gestire qualsiasi tipo di comando.

In Xenioo è possibile creare i comandi nella sezione Global Bot Operations del chatbot. Infatti, ogni operazione inserita nella Global Bot Operations viene sempre processata indipendentemente dallo stato del chatbot ed in qualsiasi punto della conversazione utente.

Per impostare il comando è sufficiente inserire (/help) nel campo Control Expression di una operazione Text Parse. Questo tipo di operazione cattura l’input dell’utente e reagisce se il testo corrisponde ad una specifica espressione regolare.

Nel nostro caso ci si aspetta che l’utente scriva esattamente il testo /help ed il chatbot risponderà con un semplice messaggio proponendo quello che sono gli altri comandi disponibili.

Inoltre ogni testo che inizia con il carattere ‘/’ viene trasformato da Telegram in un comando cliccabile. L’utente può quindi attivare il comando sia scrivendolo nella chat, sia cliccando direttamente sul link del comando.

Gestire gli utenti in entrata ed uscita dal gruppo

Nel momento in cui si aggiunge un chatbot ad un gruppo Telegram, Xenioo comincerà a ricevere una serie di eventi relativi agli utenti che si iscrivono oppure lasciano il gruppo.

Ognuno di questi eventi viene intercettato dal chatbot e Xenioo valorizza delle specifiche variabili che possono essere poi utilizzate all’interno del flusso, per esempio per dare il benvenuto agli utenti oppure salutarli nel momeno in cui se ne vanno.

Abbiamo già discusso come utilizzare le variabili per gestire il flusso in articoli precedenti, quindi per ora ci limiteremo a vedere nel dettaglio le variabili che sono disponibili quando il chatbot è collegato ad un gruppo Telegram.

VariableValore contenuto
telegram_new_users_countNumero di nuovi utenti aggiunti al gruppo. Se è uguale a 0, nessun utente è stato aggiunto al gruppo.
telegram_new_user_<num>Nome utente completo dell’ utente aggiunto al gruppo, dove <num> rappresenta l’indice della lista di utenti aggiunti complessiva.
telegram_new_user_<num>_typeTipo di utente che si è appena aggiunto al gruppo, dove <num> rappresenta l’indice della lista di utenti aggiunti complessiva. Il valore può essere USER per un normale utente oppure BOT per un bot.
telegram_user_leavingNome utente completo dell’utente che ha appena lasciato il gruppo.
last_userNome utente completo dell’ultimo utente che ha inviato del testo o un comando nella chat del gruppo.

Qando si gestisce un gruppo Telegram bisogna tener presente che gli utenti possono essere aggiunti massivamente con un singolo invito. Dal momento che il bot viene chiamato quando uno o più utenti sono stati aggiunti al gruppo, diventa quindi necessario verificare correttamente il numero indicato dalla variabile telegram_new_user_count.

Sfruttando la capacità di Xenioo nel manipolare le variabili, è possibile creare facilmente dei blocchi per gestire questa casistica, come è possibile vedere nell’immagine sottostante.

Al contrario, la rimozione di un utente dal gruppo è immediata e quindi mai si verificheranno rimozioni massive di utenti contemporaneamente. La variabile telegram_user_leaving è sempre relativa ad un singolo utente e il bot verrà chiamato una volta per ogni utente che lascia il gruppo.

Moderare il gruppo

Un aspetto importante nella gestione di un gruppo è la supervisione del comportamento degli utenti. Se per esempio il gruppo adotta delle regole specifiche riguardanti il linguaggio non permesso, il chatbot si presta come una soluzione ideale per verificare che queste vengano fatte rispettare.

Xenioo permette non solo di rilevare e processare ogni testo scritto dagli utenti nel gruppo, ma consente al chatbot di rimuovere automaticamente dal gruppo gli utenti che non rispettino per esempio quelle determinate regole.

La prima cosa da fare per sì che il chatbot funzioni da moderatore del gruppo è quella di disabilitare la Group Policy, disattivandola come abbiamo visto nel paragrafo iniziale. Questo permetterà a Xenioo di ricevere tutti i messaggi inviati dagli utenti nel gruppo.

Il passo successivo è quello di creare una serie di intenti NLP contenenti tutte le espressioni che non si vuole vengano utilizzate all’interno del gruppo (parole volgari, argomenti politici, etc…)

Le espressioni possono variare da una semplice sentenza, anche a singola parola, fino ad arrivare a sentenze complesse che coprono diversi argomenti. Il motore NLP di Xenioo sarà in grado di imparare automaticamente da queste espressioni e quindi capace di individuare anche testi che sono differenti ma esprimono lo stesso intento.

Una volta creati gli intenti, possono essere utilizzati all’interno delle Global Bot Operations collegandoli ad una interazione che si occuperà di gestire la risposta del chatbot.

Come è possibile vedere dall’immagine, l’approccio che abbiamo usato nel chatbot di esempio è quello di dare all’utente 3 avvertimenti prima di essere rimosso dal gruppo. Ogni avvertimento viene gestito con una specifica variabile per utente ed il chatbot sarà in grado di ricordarsi del conteggio anche dopo mesi (oppure si potrebbe implementare un meccanismo per il reset del contatore degli avvisi usando un broadcast).

Se il gruppo da gestire contiene un numero molto alto di utenti, potrebbe essere necessario implementare una soluzione un poco più complessa e basata su database, ma per il nostro chatbot di esempio l’approccio scelto è più che sufficiente.

Ricapitolando…

In questo articolo abbiamo visto come creare un chatbot per gestire e moderare un gruppo Telegram con Xenioo sia estremamente semplice e flessibile.

Vorresti provarlo subito? Questo chatbot è disponibile come Template gratuito all’interno di Xenioo, ti basta entrare nel tuo account per poterlo utilizzare.

Hai delle richieste specifiche per il tuo chatbot Telegram? Non esitare a contattare direttamente il nostro team oppure scrivi alla nostra community Facebook!

The post Come creare un chatbot per moderare un gruppo Telegram appeared first on Xenioo.

]]>
/come-creare-un-chatbot-per-moderare-un-gruppo-telegram/feed/ 0
Building an Alexa Skill With Xenioo (Part 1) /building-an-alexa-skill-with-xenioo-part-1/ /building-an-alexa-skill-with-xenioo-part-1/#respond Thu, 27 Dec 2018 13:24:29 +0000 https://wp.xenioo.com/?p=989 The natural evolution of pure conversational chatbots is probably being transformed into fully functional voice assistants. Alexa, Google Assistant, Duplex and other emerging technologies will seamlessly integrate into our devices and offer conversational interactions that (hopefully) mimic real human interactions. Many have been asking us to make available this kind of integration inside Xenioo and our team have been working around the clock to make it happen. Right now you can design, build and deploy a marketplace ready Alexa skill by ...

Read MoreBuilding an Alexa Skill With Xenioo (Part 1)

The post Building an Alexa Skill With Xenioo (Part 1) appeared first on Xenioo.

]]>
The natural evolution of pure conversational chatbots is probably being transformed into fully functional voice assistants.

Alexa, Google Assistant, Duplex and other emerging technologies will seamlessly integrate into our devices and offer conversational interactions that (hopefully) mimic real human interactions.

Many have been asking us to make available this kind of integration inside Xenioo and our team have been working around the clock to make it happen.

Right now you can design, build and deploy a marketplace ready Alexa skill by just building a Xenioo chatbot like you would do with any other channel.

Today we’re going to see exactly that: we will be building a brand new Alexa Skill capable of streaming your own, personal music wherever your device is.

Too awesome? Keep reading.

Creating Your Alexa Developer Account

Alexa skills need to be created inside an Alexa Development Account.

Creating a development account is free and (if you want) it can be the same account you already use for buying on Amazon.

Any Skill that is under testing status is automatically distributed on all the devices associated with your development account so it may be a good idea to use the account you’re using on all devices.

Please note that if you want to update the development state of your account on any device, you will need to unregister it and register it again like detailed in this procedure.

After you’ve set up your development account you are ready to create your first Skill. There are multiple wizards and templates that let you create multiple Skills with little to no effort but with also little to no real control.

What we are going to choose for our example is a fully custom skill.

After that, we will be telling the Alexa developer console that we are going to “Start from scratch” and proceed to the Builder section.

Since we will be doing an Audio Streaming Skill, we can click on the “Interfaces” button and enable the Audio Player interface.

We don’t need anything more from the console right now: we can move on to the streaming setup.

Streaming Your Own Music

In our example, we don’t want to use generic and global streaming services. We want, instead, to stream our own music collection we’ve been curating and building through the years and that sits in one or more disks of our home network.

To accomplish that, we’re going to integrate Xenioo with another terrific service: Epicentric.

Epicentric is an incredible service that lets you upload your own music and stream it wherever you are. and allows the creation of multiple, complex playlists that are automatically managed by an AI that will make sure you are always listening to something fresh.

Just like we did with Alexa account, go ahead and signup to Epicentric. It is free and after the quick and useful walk-through, you are ready to continue with our streaming skill creation.

Conversation With Alexa

Alexa is built around the free conversational interaction concept: the conversation between the user and Alexa (and so to your chatbot) cannot have real predefined flows.

A user can say just about anything in any order and with different levels of information.

Let’s consider the exchange below:

While being extremely simple, the above example embodies the perfect exchange: the user expresses exactly what is required for the Skill to continue.

But you cannot expect everyone to interact with you like that. Mostly, in fact, are more likely to interact like this:

As you can see the user is not giving away all the info at once and our Skill is trying to fill all the information by repeating or rephrasing the question.

Your skill required information are called slots, and they are pretty much like Xenioo NLP Entities and Xenioo Variables in a standard conversational chatbot.

Creating Our Voice Chatbot

With the above information in mind, we can now move on to create our Xenioo chatbot for Alexa.

It won’t be much different from creating a standard conversational chatbot: since, as we said, there won’t be a real step-by-step flow, we can head directly to the AI section and set up the NLP that will drive our Skill.

Inside the Xenioo AI section, we will define all the intents and expressions that will be used to create our Skill model and to define how the flow of the conversation will execute.

Depending on the type of Skill you are creating, you may be required to implement specific intents in your chatbot.

A streaming Skill like the one we’re building now, for example, is required to implement at least a Pause and a Resume intent. Outside of these two, you can go on and create as many intents as you like.

Everything that is said to Alexa will be processed by the defined intents and passed to Xenioo which in turn will dispatch the intent redirection to your chatbot interactions. The schema below illustrates what happens behind the curtains:

Xenioo does full use of Alexa SSML in every text that is sent back to the user. Feel free to use any lang, break, whisper or other supported tags to obtain specific voice effects.

Once you’ve created your intents, remember to connect your Activation to your chatbot interactions.

Since everything the user says will trigger an existing intent, only intents that are connected to an existing chatbot interaction will be deployed to your skill model. Also, if you want to implement or override existing Alexa skills(like the resume or pause we are required to do) remember to specify the Alexa skill key in your intent skill key.

First Deploy Of Alexa Chatbot

We’re looking forward to deploying our very first Skill for a test drive: before fully completing our chatbot we want to push our first work!

We can do it anytime by just clicking on the Publish button inside our Build section. In the channel selection screen let’s select Alexa and a default Amazon login window will open. This window will connect your Amazon profile and allow Xenioo to push Alexa skills for you.

After confirming your account and confirming all required permissions, we can continue configuring our skill deployment.

In the above window, you are required to select the skill you’re publishing, the locale and the activation text you like.

The activation text will be used by Alexa to activate your skill so be sure to pick something which is both easy to say and not clashing with default Alexa phrases.

The most important setting here is the Hook Url: be sure to copy this URL and paste it to your Alexa skill configured endpoints.

Note that Xenioo will only update and build your Invocation Model as that is the key to Alexa Skill inner workings.

Xenioo does not wish to overwrite any setting you may have specified in your Alexa skill and that you may change later and so let you decide whatever is your desired configuration from the native Alexa console.

Xenioo is the perfect backend middleware and AI-driven flow platform for your Skill and it does exactly that awesomely.

Once you’re done configuring everything press publish and your Skill is ready to be tested live!

In our next post, we will see how Streaming, Account Linking, and Device State management works!

The post Building an Alexa Skill With Xenioo (Part 1) appeared first on Xenioo.

]]>
/building-an-alexa-skill-with-xenioo-part-1/feed/ 0
Come creare una Skill Alexa con Xenioo (Parte 1) /come-creare-una-skill-alexa-con-xenioo-parte-1/ /come-creare-una-skill-alexa-con-xenioo-parte-1/#respond Thu, 27 Dec 2018 13:24:29 +0000 https://wp.xenioo.com/?p=989 La naturale evoluzione dei chatbot conversazionali è con tutta probabilità la trasformazioni verso veri e propri assistenti virtuali vocali. Amazon Alexa, Google Assistant, Duplex ed altre tecnologie emergenti, si integreranno perfettamente all’interno dei nostri dispositivi, consentendo esperienze di conversazione sempre più simili a quelle di solito affrontate con persone reali. Il “business della voce” è un trend in crescita e molte grosse realtà, a partire da Bezos di Amazon, stanno investendo molto nel mercato degli applicativi vocali. Inoltre molti nostri ...

Read MoreCome creare una Skill Alexa con Xenioo (Parte 1)

The post Come creare una Skill Alexa con Xenioo (Parte 1) appeared first on Xenioo.

]]>
La naturale evoluzione dei chatbot conversazionali è con tutta probabilità la trasformazioni verso veri e propri assistenti virtuali vocali.

Amazon Alexa, Google Assistant, Duplex ed altre tecnologie emergenti, si integreranno perfettamente all’interno dei nostri dispositivi, consentendo esperienze di conversazione sempre più simili a quelle di solito affrontate con persone reali.

Il “business della voce” è un trend in crescita e molte grosse realtà, a partire da Bezos di Amazon, stanno investendo molto nel mercato degli applicativi vocali.

Inoltre molti nostri clienti ci hanno chiesto di rendere disponibile questo tipo di integrazione all’interno di Xenioo.

Non potevamo non accettare questa sfida.

Con Xenioo è ora possibile progettare, costruire e pubblicare una Skill Alexa semplicemente creando un chatbot Xenioo come faresti per qualsiasi dei canali già disponibili.

In questo articolo andremo a vedere nel dettaglio esattamente come costruire una Skill Alexa capace di riprodurre la tua musica personale indipendentemente da dove si trova il tuo dispositivo.

Fantastico, vero? Continua a leggere.

Se ti interessa scoprire come costruire una Action Google Assistant, Xenioo supporta anche questo. Dettagli nel nostro articolo dedicato.

Creaiamo il Developer Account di Alexa

Ogni Skill di Alexa deve essere creata all’interno di un account di sviluppatore Alexa (Alexa Development Account).

La creazione di questo account è gratuita e puoi utilizzare, se preferisci, lo stesso account che già utilizzi per gli acquisti su Amazon.

Ogni Skill in stato di test viene automaticamente distribuita su tutti i dispositivi associati al tuo account di sviluppo. E’ quindi una buona idea utilizzare lo stesso account che stai utilizzando sui tuoi dispositivi.

Tieni presente che se desideri aggiornare lo stato del tuo account su ogni dispositivo, sarà necessario procedere prima alla de-registrazione e successivamente alla registrazione, come spiegato nella documentazione tecnica di Alexa.

Dopo che l’account di sviluppo è stato impostato, sei pronto per creare la tua prima Skill Alexa.

Esistono una moltitudine di templates che ti permettono di creare Skills con uno sforzo minimo e molto rapidamente, ma con il limite di lasciare poco controllo su quelle che la Skill potrà fare.

Per il nostro esempio andremo a selezionare una Skill completamente personalizzata (“Custom”).

Successivamente, andremo a selezionare che intendiamo cominciare da zero (“Start from scratch”), proseguendo nella sezione Builder.

Dal momento che vogliamo costruire una Skill che faccia streaming audio, andremo a cliccare sul bottone “Interfaces” per poi abilitare l’interfaccia “Audio Player”.

Perfetto! Per ora non ci serve più niente dal pannello sviluppatore di Alexa. Possiamo quindi procedere nella configurazione del servizio di streaming.

Configuriamo il servizio di Streaming

Nel nostro esempio non vogliamo usare un servizio di streaming generico, come tanti disponibili online.

Ci interessa invece ascoltare musica dalla nostra collezione musicale che abbiamo pazientemente creato e curato nel corso degli anni e che si trova depositata su uno o più dischi del nosto network casalingo.

Per fare tutto questo, dobbiamo integrare Xenioo con un altro eccezionale servizio: Epicentric.

Epicentric è un servizio online che ti consente di caricare la tua musica personale per ascoltarla ovunque ti trovi.

Inoltre ti permette di creare playlist multiple ed avanzata, basate su mappe mentali e che verranno automaticamente gestite dalla intelligenza artificiale della piattaforma.

Esattamente come abbiamo fatto per l’account Alexa, dovremo procedere a creare un account anche su Epicentric. E’ gratuito e dopo una veloce introduzione per capire come utilizzarlo, saremo pronti per procedere con la creazione della nostra Skill.

La conversazione con Alexa

Alexa è costruito attorno al concetto di interazione conversazionale libera: la conversazione tra l’utente ed Alexa (e quindi il tuo chatbot) non può avere veri flussi predefiniti.

Infatti un utente potrebbe dire qualsiasi cosa, in qualsiasi momento e con diversi livelli di informazioni presenti.

Vediamo un esempio qui sotto:

Seppure estramente semplice, l’esempio di conversazione sopra riportato rappresenta il perfetto scambio utente – Alexa: l’utente esprime esattamente la sua richiesta e la Skill risponde di conseguenza.

Purtroppo non possiamo aspettarci che tutte le conversazioni siano cosi lineari e precise. Anzi, molto spesso il tipo di conversazione che avvine è più simile all’esempio sottostante:

Come puoi vedere, l’utente non stà dando tutte le informazioni alla prima interazione, e questo porta la Skill a dover riformulare alcune domande per poter arrivare ad ottenere tutte le informazioni necessarie a completare la richiesta.

Le informazioni richieste dalla Skill sono chiamate Slots e possono essere paragonate a quelle che in Xenioo sono le Entità NLP e Variabili durante un conversazione standard con un chatbot.

Creiamo il chatbot vocale

Con le informazioni che abbiamo appreso nel paragrafo precedente, possiamo ora proseguire finalmente nella creazione del nostro chatbot per Alexa.

Non sarà molto diverso dalla creazione di un chatbot conversazionale standard: dal momento che, come abbiamo detto precedentemente, non ci sarà un vero e proprio flusso guidato, possiamo andare direttamente nella sezione AI per configurare tutta la NLP necessario per guidare la nostra Skill.

All’interno della sezione AI di Xenioo, andremo a definire tutti gli intenti e le espressioni che saranno usate per creare il modello conversazionale della Skill, definendo allo stesso tempo come verrà eseguito il flusso.

In base al tipo di Skill che si sta creando, potrebbe essere necessario implementare degli specifici intenti.

Per la nostra Skill di streaming, per esempio, è necessario implementare almeno due tipi di intenti specifici: Pause e Resume.

Oltre questi due, obbligatori, potrai poi creare quanti più intenti ti servono per far gestire la conversazione ad Alexa nel modo desiderato.

Qualsiasi cosa venga detto ad Alexa verrà processato dagli intenti definiti e passato a Xenioo, che a sua volta redirigerà il flusso alle interazioni configurate.

Lo schema sottostante illustra cosa effettivamente accade dietro le quinte:

Xenioo utilizza l’ Alexa SSML in ogni testo che è spedito indietro all’utente. Sei quindi libero di poter usare ogni interruzione, sospiro o qualsiasi altro tag supportato per ottenere specifici effetti vocali.

Una volta che hai creato i tuoi intenti, ricordati di collegarli alle interazioni del chatbot. Infatti qualsiasi cosa detta dall’utente attiverà uno degli intenti esistenti e solo gli intenti che sono collegati ad una interazione esistente saranno pubblicati nella Skill.

Inoltre, se vuoi implementare o sovrascrivere uno degli intenti predefiniti in Alexa (come per esempio il Resume oppure Pause), ricorda di specificare la chiave Alexa nel campo Key dell’intento, come mostrato nell’immagine sottostante.

Pubblichiamo il chabot in una Skill Alexa

Siamo arrivati al punto in cui finalmente possiamo pubblicare il nostro chatbot nella nostra prima Skill Alexa e cominciare a fare dei veri test sui dispositivi.

Possiamo farlo come sempre cliccando sul bottone Publish dalla sezione Build del chatbot.

Nella sezione dei canali, selezioniamo Alexa e clicchiamo sul bottone di login con logo Amazon. Seguite la procedura che vi porterà a connettere il vostro profilo Amazon con Xenioo: è in questo modo che Xenioo potrà pubblicare la vostra Skill per voi.

Dopo aver confermato il collegamento tra gli account ed i permessi richiesti, possiamo continuare con la configurazione della pubblicazione della Skill.

Nella sezione Deploy dovrete selezionare la Skill da pubblicare, la localizzazione ed il testo per l’attivazione.

Il testo di attivazione sarà usato da Alexa per attivare la tua skill, quindi cerca di utilizzare una parola o una frase che isa semplice da ripetere e che non possa andare in conflitto che le frasi di default di Alexa.

La configurazione più importante in questa sezione è l’ Hook Url: copiate questo URL ed incollatelo nella configurazione dell’endpoint nel pannello di Alexa per skill che si sta configurando.

Tieni presente che Xenioo aggiornerà unicamente l’ Invocation Model della Skill, dal momenteo che è ciò che permette la gestione della conversazione. Xenioo non andrà mai a sovrascrivere nessun settaggio configurato dal pannello nativo di configurazione della Skill Alexa.

Xenioo è il “middleware back-end” perfetto e la piattaforma basata su intelligenza artificiale ideale per progettare anche le skill più compesse. E lo fa decisamente bene.

Una volta che tutto è stato configurato correttamente, cliccate Publish e la Skill sarà pronta per essere testata dal dispositivo.

Nel nostro prossimo articolo, vedremo come funzionano nel dettaglio lo Streaming, Account Linking (collegamento degli account) e Device State Management (gestione dello stato del dispositivo).

The post Come creare una Skill Alexa con Xenioo (Parte 1) appeared first on Xenioo.

]]>
/come-creare-una-skill-alexa-con-xenioo-parte-1/feed/ 0
Using NLP to Fuel Your Chatbot AI /using-nlp-to-fuel-your-chatbot-ai/ /using-nlp-to-fuel-your-chatbot-ai/#respond Thu, 19 Jul 2018 13:02:32 +0000 https://wp.xenioo.com/?p=860 Chatbots are quickly evolving and moving from the typical buttons-clicking experiences to a real, meaningful conversational experience. Multiple real world applications demand a deeper user relation and a better general usage experience. While probably not yet passing a touring test, your chatbot can already be of great help in multiple applications like first level support, customer inquiry and first contact management (to name a few). One of the latest Xenioo updates introduced a number of enhancements to the NLP sections ...

Read MoreUsing NLP to Fuel Your Chatbot AI

The post Using NLP to Fuel Your Chatbot AI appeared first on Xenioo.

]]>
Chatbots are quickly evolving and moving from the typical buttons-clicking experiences to a real, meaningful conversational experience.

Multiple real world applications demand a deeper user relation and a better general usage experience. While probably not yet passing a touring test, your chatbot can already be of great help in multiple applications like first level support, customer inquiry and first contact management (to name a few).

One of the latest Xenioo updates introduced a number of enhancements to the NLP sections meant to give you even greater control over your bot chat experience.

In this post we are going to explore these new features and see real life examples and applications.

Conversation Control by ChatBot AI and NLP

Before this update, you could control how your chatbot reacted to triggered NLP intents by adding NLP detection actions at a global level: this approach is great and gives you an incredible level of flexibility directly at design time.

The only issue of this approach is that it works wonders until you want to switch to a chatbot that heavily relies (or is completely based) on NLP.

What if your chatbot contains not just 4 or 5, but 40 or 50 intents?

When approaching this kind of chatbots, doing everything inside the designer may prove too complicated and difficult to maintain in the long run.

With the idea of giving you the maximum control over your chat flow when using Natural Language Processing intensively, we’ve created the conversation control ability directly inside each and every Intent.

Let’s see how it works.

Automatic Redirection

With automatic redirection, you can instruct Xenioo to activate a specific Behavior/Interaction whenever a given intent is detected.

There’s no designer action involved as everything is controlled by the Chatbot AI engine and it works automatically for you.

Whenever the user says something in the chat, the Xenioo NLP engine will parse the active intents and automatically redirect the conversation to the given Interaction as the Confidence threshold is surpassed.

Immediate Reply

What if you do not really need an interaction and the answer may very well be a simple text?

The Immediate Reply conversation control let you do just that: you type any text you wish and, if the intent is triggered during the conversation, Xenioo will reply with it.

Note that you current flow position will always stay the same: after the text is sent to your user, the conversation will be exactly where it was before.

Test Run

Ready to give these two new features a try?

We’ve built a showcase page with a full support bot that will try to help you configure your printer.

The very same chatbot is also available as as template in your account templates section! Remember: templates do not count toward your account resources until you decide to publish them on one of the available channels, so feel free to try and test everything!

No limits, as always

If you’ve been using Xenioo for a while, you should know by now that we hate putting limits to how you should approach your chatbot creation.

Everything around Xenioo is built to let you build things the way you prefer and these features are not different. You are free to use them together with the global bot actions and mix and match results for an even greater control.

We can’t wait to see what you will be able to create!

Do you have a great chatbot experience created with Xenioo and want to share it with all of us? Do you want to keep track of all the wonderful features that we’re adding to Xenioo as soon as they are released?

Our Xenioo Chatbot Community is the right place to go! Join the discussion!

The post Using NLP to Fuel Your Chatbot AI appeared first on Xenioo.

]]>
/using-nlp-to-fuel-your-chatbot-ai/feed/ 0
TUTORIAL #6: Changing conversation flow using variables and tags /changing-conversation-flow/ /changing-conversation-flow/#respond Sat, 02 Dec 2017 13:33:40 +0000 https://www.xenioo.com/?p=501 In our previous tutorial, we learned how to create a bot that uses Xenioo’s Natural Language Processing engine to detect and react to user input. In this lesson we will expand the example further by creating different switches that alter the chat flow, thereby ensuring that our pizza order is complete. You can follow our lesson directly from the video below. At the end of the post you will find a Xenioo bot file that simply restores the example bot ...

Read MoreTUTORIAL #6: Changing conversation flow using variables and tags

The post TUTORIAL #6: Changing conversation flow using variables and tags appeared first on Xenioo.

]]>
In our previous tutorial, we learned how to create a bot that uses Xenioo’s Natural Language Processing engine to detect and react to user input.

In this lesson we will expand the example further by creating different switches that alter the chat flow, thereby ensuring that our pizza order is complete.

You can follow our lesson directly from the video below. At the end of the post you will find a Xenioo bot file that simply restores the example bot into your account for playback and testing. Let’s start!

YouTube Video

The missing entities

As we complete our NLP configuration and test our bot we can notice one simple detail: some phrases we accept may contain the pizza size, some others may contain information about the topping and sometimes, we can get both.

This situation can happen very often when dealing with free user input: each user will express an intent differently and may place an order (or anything else in your chatbot) in just a partial way.

“A large one!” or “One with onions” are human valid answers to our pizza ordering tutorial chatbot. 

Xenioo Conditional Actions can help you manage these situations by checking the values of your variables, and redirecting the user to a relevant interaction.

Conditional Switches

Variable and Tag Conditional Switch Action are among the most powerful Xenioo actions: they allow you to create switches in the conversation that can redirect the chatbot to other interactions, based on the content of a variable or on the existence of a tag.

Going back to our initial example, we’ve already seen how our NLP will store all detected entities into variables.

In our pizza ordering chatbot, we have two variables available: size and topping. Let’s add a check for both.

In our chatbot designer, let’s add a new interaction that we will call “Order Check”. Once created, click on the Add Action button to add a new action. From the Available Actions menu, select Variable Condition from the Flow tab.

We will check for size first. In the Variable Name just type size and in the criteria menu select ‘Empty Or Unset’. Notice how the criteria value field disappears as you select this type of criteria: there’s no need to specify a check value in this case.

Now we need to add an operation that, if size is empty or unset, will move our conversation to an action that can ask the user for this value. Let’s add a Go To Interaction operation to the Variable Condition Switch action.
Use the plus button attached to the Interaction menu to create a brand new interaction and save everything to confirm the connection.

Completing the Order

In the target interaction we are going to ask the user to tell us the desired pizza size.

We can create a specific NLP Intent to detect more complex replies (and we encourage you to experiment!) but for our example, we will just use a simpler Generic Input Action.

This action can filter a user input based on a simple regular expression. Since we’re accepting either small, medium or large, we’re going to specify a very simple expression and grouping for these values: (small)(medium)(large).

It’s as simple as that!

Now as the user can complete this information, we may go forward a step to ensure that the toppings are selected using the very same technique.

The checking approach is up to you: you can either have a step that checks all variables and redirects accordingly or have a step by step check, like in our video example.

Xenioo Actions and Operations allow for a great deal of freedom for you chatbot.

With this tutorial you’ve learned how to switch the flow of your chatbot conversation based on variables and user input and witnessed how incredibly powerful the Xenioo Actions and Operations architecture is.

As with all our lessons, you can find the chatbot sample in your Xenioo account so that you can import it to further experiment and learn.

The post TUTORIAL #6: Changing conversation flow using variables and tags appeared first on Xenioo.

]]>
/changing-conversation-flow/feed/ 0
LEZIONE #6: modificare il flusso della conversazione con variabili e tag /change-conversation-flow-variable-tag/ /change-conversation-flow-variable-tag/#respond Sat, 02 Dec 2017 13:33:40 +0000 https://www.xenioo.com/?p=501 In our previous tutorial, we learned how to create a bot that uses Xenioo’s Natural Language Processing engine to detect and react to user input. In this lesson we will expand the example further by creating different switches that alter the chat flow, thereby ensuring that our pizza order is complete. You can follow our lesson directly from the video below. At the end of the post you will find a Xenioo bot file that simply restores the example bot ...

Read MoreLEZIONE #6: modificare il flusso della conversazione con variabili e tag

The post LEZIONE #6: modificare il flusso della conversazione con variabili e tag appeared first on Xenioo.

]]>
In our previous tutorial, we learned how to create a bot that uses Xenioo’s Natural Language Processing engine to detect and react to user input. In this lesson we will expand the example further by creating different switches that alter the chat flow, thereby ensuring that our pizza order is complete.

You can follow our lesson directly from the video below. At the end of the post you will find a Xenioo bot file that simply restores the example bot into your account for playback and testing. Let’s start!

YouTube Video

The missing Entities

As we complete our NLP configuration and test our bot we can notice one simple detail: some phrases we accept may contain the pizza size, some others may contain information about the topping and sometimes, we can get both. This situation can happen very often when dealing with free user input: each user will express an intent differently and may place an order (or anything else in your chatbot) in just a partial way.


“A large one!” or “One with onions” are human valid answers to our pizza ordering tutorial chatbot. Xenioo Conditional Actions can help you manage these situations by checking the values of your variables, and redirecting the user to a relevant interaction.


Conditional Switches

Variable and Tag Conditional Switch Action are among the most powerful Xenioo actions: they allow you to create switches in the conversation that can redirect the chatbot to other interactions, based on the content of a variable or on the existence of a tag.

Going back to our initial example, we’ve already seen how our NLP will store all detected entities into variables. In our pizza ordering chatbot we have two variables available: size and topping. Let’s add a check for both.
In our chatbot designer, let’s add a new interaction that we will call “Order Check”. Once created, click on the Add Action button to add a new action. From the Available Actions menu, select Variable Condition from the Flow tab.
We will check for size first. In the Variable Name just type size and in the criteria menu select ‘Empty Or Unset’. Notice how the criteria value field disappears as you select this type of criteria: there’s no need to specify a check value in this case. Now we need to add an operation that, if size is empty or unset, will move our conversation to an action that can ask the user for this value. Let’s add a Go To Interaction operation to the Variable Condition Switch action. Use the plus button attached to the Interaction menu to create a brand new interaction and save everything to confirm the connection.

Completing the Order

In the target interaction we are going to ask the user to tell us the desired pizza size. We can create a specific NLP Intent to detect more complex replies (and we encourage you to experiment!) but for our example, we will just use a simpler Generic Input Action. This action can filter a user input based on a simple regular expression. Since we’re accepting either small, medium or large, we’re going to specify a very simple expression and grouping for these values: (small)(medium)(large). It’s as simple as that!


Now as the user can complete this information, we may go forward a step to ensure that the toppings are selected using the very same technique. The checking approach is up to you: you can either have a step that checks all variables and redirects accordingly, or have a step by step check, like in our video example. Xenioo Actions and Operations allow for a great deal of freedom for you chatbot.

With this tutorial you’ve learned how to switch the flow of your chatbot conversation based on variables and user input and witnessed how incredibly powerful the Xenioo Actions and Operations architecture is.

You can find this chatbot in the Templates section of your Xenioo account. From there you can easily restore the chabot to try the explained features at will.

The post LEZIONE #6: modificare il flusso della conversazione con variabili e tag appeared first on Xenioo.

]]>
/change-conversation-flow-variable-tag/feed/ 0
TUTORIAL #5: Detecting user input using NLP /detecting-user-input-using-natural-language-processing/ /detecting-user-input-using-natural-language-processing/#respond Fri, 01 Dec 2017 16:03:27 +0000 https://www.xenioo.com/?p=486 Now that we’ve explored just about all of the possible contents that our chatbot can display, is time to move a little behind the scenes and discover the sheer number of customization and automation features that Xenioo offers. In this less we’re going to configure and train our first AI-driven content, and apply it to a simple chatbot. You can follow our lesson directly from the video below. At the end of the post you will find a Xenioo bot ...

Read MoreTUTORIAL #5: Detecting user input using NLP

The post TUTORIAL #5: Detecting user input using NLP appeared first on Xenioo.

]]>
Now that we’ve explored just about all of the possible contents that our chatbot can display, is time to move a little behind the scenes and discover the sheer number of customization and automation features that Xenioo offers.

In this less we’re going to configure and train our first AI-driven content, and apply it to a simple chatbot.

You can follow our lesson directly from the video below. At the end of the post you will find a Xenioo bot file that simply restore the example bot into your account for playback and testing. Let’s start!

YouTube Video

Intents and Expressions

Working with Xenioo AI components is very quick and easy. The first main element, is the Intent: an Intent generally describes a user’s intention to express something.

To have an actual example, let’s create our first intent: we want to accept pizza orders from our users!

Go ahead and create a new Intent by clicking on the “add intent” button. Call the intent as you please: it is just a descriptive name and can be changed anytime. Nobody but you will see this name.

Once your intent has been created, it is time to click it on and go to the Expressions List. An Expression is a phrase that can be associated with the Intent. In our example, a phrase like ‘I would like a large pizza!’ may very well define (although not completely) a pizza ordering sentence.

Go ahead and add as many phrases defining placing an order, as you can.

Language Entities

Once you’re happy with all your expressions, it is time to go ahead and define entities.

An Entity is a word (or a group of words) that you want to be automatically detected and extracted from your expressions.

When the Xenioo AI Engine detects an expression with enough confidence it will also automatically extract any defined entity and make it available in your chat flow.

As we’re going to see in our tutorial, this is an incredibly powerful feature that opens an unlimited number of flow and interaction possibilities.

To create an entity simply click on a word of an expression. A small popup will appear, asking you to define what the word is.

In our example, since we’re accepting orders, we may click on any topping name and define it as “topping”. And we may click on any small, large or regular and define them as “size” for our pizzas.

Once you’ve selected all the entities you want to go ahead and add a new Expression.

See how Xenioo has automatically detected any Entity you’ve written? That is the NLP Engine running and learning as the list grows.

You can test your intents anytime by just selecting the “Train & Test” section. From there you can write any phrase you like and verify in real-time how the Xenioo AI Engine detects different Intents and Entities.

Using NLP in your chatbot

Once you’re happy with your NLP training, you can move back to the Build menu to implement the AI in your chatbot.

Select your default interaction and add a new Action: this time, we’re using an NLP action, under the Input tab.

Configuring the action is straightforward: just select the intent you would like to be detected and define the minimum confidence to assume detection. The default proposed confidence of 80% is usually fine.

That’s it! From that point, your chatbot will stop the flow and wait for the user input. If your Pizza Order intent is detected, your flow will continue. If not, the chat flow will continue looping until the Intent is detected.

Putting Intelligence near Artificial

If that was all we could do with NLP there wouldn’t be very much to help us in our Pizza Ordering bot.

Detecting an order is just the very first step: what we need to do really is also check what the user has ordered. Xenioo Actions and Operations can allow us to extend the NLP Action to suit our needs.

Instead of simply making the flow go on, we can use a Variable Condition Switch Operation to check the value of topping and switch the flow accordingly.

As you see, we can use any detected Entity to switch our chat flow and really react to our user input. There are no limits to the number of switches and conditions that you can make based on Xenioo variables!

Wrapping up

In this tutorial, we’ve learned how to configure and use the Xenioo AI Engine and the Natural Language Processing Engine.

In the next lesson we will push it further by asking our user to complete the order if anything is missing.

As with all our lessons, you can find the chatbot sample in your Xenioo account so that you can import it to further experiment and learn.

The post TUTORIAL #5: Detecting user input using NLP appeared first on Xenioo.

]]>
/detecting-user-input-using-natural-language-processing/feed/ 0
LEZIONE #5: rilevare l’input dell’utente attraverso la NLP /rilevare-input-nlp/ /rilevare-input-nlp/#respond Fri, 01 Dec 2017 16:03:27 +0000 https://www.xenioo.com/?p=486 Now that we’ve explored just about all of the possible contents that our chatbot can display, is time to move a little behind the scenes and discover the sheer number of customization and automation features that Xenioo offers. In this less we’re going to configure and train our first AI-driven content, and apply it to a simple chatbot. You can follow our lesson directly from the video below. At the end of the post you will find a Xenioo bot file ...

Read MoreLEZIONE #5: rilevare l’input dell’utente attraverso la NLP

The post LEZIONE #5: rilevare l’input dell’utente attraverso la NLP appeared first on Xenioo.

]]>
Now that we’ve explored just about all of the possible contents that our chatbot can display, is time to move a little behind the scenes and discover the sheer number of customization and automation features that Xenioo offers. In this less we’re going to configure and train our first AI-driven content, and apply it to a simple chatbot.

You can follow our lesson directly from the video below. At the end of the post you will find a Xenioo bot file that simply restore the example bot into your account for playback and testing. Let’s start!

YouTube Video

Intents and Expressions

Working with Xenioo AI components is very quick and easy. The first main element, is the Intent: an Intent generally describes a user’s intention to express something. To have an actual example, let’s create our first intent: we want to accept pizza orders from our users! Go ahead and create a new Intent by clicking on the “add intent” button. Call the intent as you please: it is just a descriptive name and can be changed anytime. Nobody but you will see this name.

Once your intent has been created, it is time to click it on and go to the Expressions List. An Expression is a phrase that can be associated with the Intent. In our example, a phrase like ‘I would like a large pizza!’ may very well define (although not completely) a pizza ordering sentence. Go ahead and add as many phrases defining placing an order, as you can.

Language Entities

Once you’re happy with all your expressions, it is time to go ahead and define entities. An Entity is a word (or a group of words) that you want to be automatically detected and extracted from your expressions. When the Xenioo AI Engine detects an expression with enough confidence it will also automatically extract any defined entity and make it available in your chat flow. As we’re going to see in our tutorial, this is an incredibly powerful feature that opens an unlimited number of flow and interaction possibilities.

To create an entity simply click on a word of an expression. A small popup will appear, asking you to define what the word is. In our example, since we’re accepting orders, we may click on any topping name and define it as “topping”. And we may click on any small, large or regular and define them as “size” for our pizzas. Once you’ve selected all the entities you want go ahead and add a new Expression. See how Xenioo has automatically detected any Entity you’ve written? That is the NLP Engine running and learning as the list grows.

You can test your intents anytime by just selecting the “Train & Test” section. From there you can write any phrase you like and verify in real-time how the Xenioo AI Engine detects different Intents and Entities.

Using NLP in your chatbot

Once you’re happy with your NLP training, you can move back to the Build menu to implement the AI in your chatbot. Select your default interaction and add a new Action: this time, we’re using an NLP action, under the Input tab. Configuring the action is straightforward: just select the intent you would like to be detected and define the minimum confidence to assume detection. The default proposed confidence of 80% is usually fine.


That’s it! From that point, your chatbot will stop the flow and wait for the user input. If your Pizza Order intent is detected, your flow will continue. If not, the chat flow will continue looping until the Intent is detected.

Putting Intelligence near Artificial

If that was all we could do with NLP there wouldn’t be very much to help us in our Pizza Ordering bot. Detecting an order is just the very first step: what we need to do really is also check what the user has ordered. Xenioo Actions and Operations can allow us to extend the NLP Action to suit our needs.

Instead of simply making the flow go on, we can use a Variable Condition Switch Operation to check the value of topping and switch the flow accordingly. As you see, we can use any detected Entity to switch our chat flow and really react to our user input. There are no limits to the number of switches and conditions that you can make based on Xenioo variables!

In this tutorial we’ve learned how to configure and use the Xenioo AI Engine and the Natural Language Processing Engine. In the next lesson we will push it further by asking our user to complete the order if anything is missing.

You can find this chatbot in the Templates section of your Xenioo account. From there you can easily restore the chabot to try the explained features at will.

The post LEZIONE #5: rilevare l’input dell’utente attraverso la NLP appeared first on Xenioo.

]]>
/rilevare-input-nlp/feed/ 0