SlideShare a Scribd company logo
powered bypowered by
 Cos’è un bot
 Come sviluppare un bot con Microsoft Bot Framework
 Cognitive services
 Custom vision
 Pubblicazione
Agenda
Da A a Bot con un pizzico di
Cognitive
Meet{cast}
powered by
Meet{cast}
powered by
Alessio Iafrate
Freelance Developer e Fondatore DotNetAbruzzo
http://www.acquariusoft.com
@alessioiafrate
alessioiafrate@hotmail.com
powered bypowered by
Meet{cast}
in collaborazione con
powered bypowered by
ll bot è un programma che accede alla rete attraverso lo stesso tipo di
canali utilizzati dagli utenti umani.
Programmi di questo tipo sono diffusi in relazione a molti diversi servizi in
rete, con scopi vari, ma in genere legati all'automazione di compiti che
sarebbero troppo gravosi o complessi per gli utenti umani.
(Fonte Wikipedia)
Cosa è un bot?
powered bypowered by
 Facebook Messenger
 Telegram
 Skype
 Slack
 Cortana
 SMS
 Sito Web
 Email
 ………….
Dove posso ospitare un bot
powered bypowered by
Per ogni piattaforma abbiamo API differenti con metodologie diverse di
sviluppo e concetti propri di ogni servizio.
- Sviluppo per ogni singola piattaforma
- Utilizzo framework comune (Es. Microsoft Bot Framework)
Come lo sviluppo?
powered bypowered by
 Account azure anche in versione trial
 Conoscenze di C# o node.js
 Visual Studio anche in versione community (opzionale)
La lista della spesa
powered bypowered by
 Bot Framework Connector (Singola Api rest che permette al bot di
comunicare con i vari canali)
 Activity (Oggetto contenente i vari dati della conversazione)
 Dialog (Gestisce la conversazione)
 State (Gestione dati associati all’utente, alla conversazione e all’utente
nella conversazione)
Concetti base
powered bypowered by
Il nostro primo bot
powered bypowered by
Un’occhiata al codice - Il controller
La classe principale del
progetto è un controller che
gestisce le chiamate in
ingresso ed in base al tipo e
distingue tra un messaggio
inviato oppure operazioni di
gestione ( typing, ping,
aggiunta e rimozione di
membri dalla conversazione
ecc)
powered bypowered by
Un’occhiata al codice - Dialog
La classe dialog permette di
gestire i messaggi inviati
dall’utente con tutti i dettagli
associati e di rispondere di
conseguenza
powered bypowered by
Memorizziamo i dati
Il bot builder SDK permette di
memorizzare i dati delle sessioni in
• Memoria (volatile)
• Azure table
• Database SQL
• CosmosDB
Nel template di default la registrazione
viene eseguita nel metodo
Application_Start del Global.asax
powered bypowered by
Come gestisco il debug?
Con il bot framework
emulator possiamo testare
in locale il nostro bot con
una semplice interfaccia
che mostra anche il log
delle chiamate
E’ open source e disponibile
su github
powered bypowered by
Demo time!
powered bypowered by
Cosa ci fornisce il framework:
 Gestione dello stato dell’utente
 Domanda e risposta (Richiesta di informazioni o selezione di una
scelta)
 Invio messaggio ad un’utente a seguito di un evento lato server
Interagire con l’utente
powered bypowered by
Il context permette di gestire i dati associati all’utente e per farlo abbiamo
a disposizione
 UserData relativo allo User
 ConversationData relativo alla Conversazione
 PrivateConversationData relativo a quell’utente in quella specifica
conversazione
Per gestirli esistono i relativi metodi get e set (GetUserData,
SetUserData, ecc)
Lo stato dell’utente
powered bypowered by
Un’occhiata al codice - PromptDialog
La classe PromptDialog permette di gestire le conversazioni basate basate su domanda e risposta, in
questo caso il metodo Text (o quello relativo al dato che vogliamo ottenere) prende come parametro
una callback alla funzione da richiamare direttamente dopo che l’utente ha inviato una risposta
powered bypowered by
Un’occhiata al codice - Proactive Message
Per inviare un messaggio all’utente è necessario ricreare tutta la cascata di connessioni per
raggiungerlo utilizzando i dati memorizzati precedentemente
powered bypowered by
I Cognitive services
Aggiungiamo un pizzo di intelligenza!
powered bypowered by
powered bypowered by
Custom Vision
powered bypowered by
Demo custom vision
powered bypowered by
Integriamo il tutto
Con una semplice chiamata
Rest è possibile inviare i
dati della nostra immagine e
ricevere i dati
dell’elaborazione
powered bypowered by
Come leggere le immagini inviate
Il message contiene una
lista di file in Attachments
che contengono l’url da cui
con una semplice chiamata
http è possibile scaricare i
files che ci sono stati inviati
powered bypowered by
Demo time!
powered bypowered by
Andiamo a pubblicare
powered bypowered by
 https://docs.microsoft.com/en-us/bot-framework/
 https://github.com/Microsoft/BotFramework-Emulator
 https://azure.microsoft.com/en-us/services/cognitive-services/
 https://www.customvision.ai/
 http://t.me/RostyBot
 https://github.com/a-iafrate/Rosty
Link
powered bypowered by
Global Azure Bootcamp
http://bit.ly/gabrome18
powered bypowered by
Domande?
powered bypowered by
Grazie a tutti!

More Related Content

Similar to Da A a Bot con un pizzico di Cognitive

Win02 bing e windows store apps
Win02   bing e windows store appsWin02   bing e windows store apps
Win02 bing e windows store appsDotNetCampus
 
Fun with Machine Translation APIs
Fun with Machine Translation APIsFun with Machine Translation APIs
Fun with Machine Translation APIs
Massimo Bonanni
 
HTML5, il lato client della forza...
HTML5, il lato client della forza... HTML5, il lato client della forza...
HTML5, il lato client della forza...
Marco Vito Moscaritolo
 
LinuxDay2013 - Web2py: make the web easier
LinuxDay2013 - Web2py: make the web easierLinuxDay2013 - Web2py: make the web easier
LinuxDay2013 - Web2py: make the web easier
Davide Marzioni
 
Liferay: Esporre Web Services Custom
Liferay: Esporre Web Services CustomLiferay: Esporre Web Services Custom
Liferay: Esporre Web Services Custom
Antonio Musarra
 
.NET Microservices
.NET Microservices.NET Microservices
.NET Microservices
Luca Congiu
 
Rich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsRich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.js
Giorgio Di Nardo
 
Acadevmy - Visual Studio Code Overview
Acadevmy - Visual Studio Code OverviewAcadevmy - Visual Studio Code Overview
Acadevmy - Visual Studio Code Overview
Francesco Sciuti
 
Programma il futuro: una scelta open source
Programma il futuro: una scelta open sourceProgramma il futuro: una scelta open source
Programma il futuro: una scelta open source
Marco Ferrigno
 
Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open source
Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open sourceLinux Day 2014 - Napoli - Programma Il Futuro: una scelta open source
Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open source
Mario Rossano
 
Niccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTNiccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWT
firenze-gtug
 
Realizzazione di un ChatBot sulla piattaforma Messenger di Facebook per l'inf...
Realizzazione di un ChatBot sulla piattaforma Messenger di Facebook per l'inf...Realizzazione di un ChatBot sulla piattaforma Messenger di Facebook per l'inf...
Realizzazione di un ChatBot sulla piattaforma Messenger di Facebook per l'inf...
Xhoi Kerbizi
 
Wcf data services
Wcf data servicesWcf data services
Wcf data services
Salvatore Sorrentino
 
#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2
Dominopoint - Italian Lotus User Group
 
Un'architettura di riferimento per applicazioni enterprise
Un'architettura di riferimento per applicazioni enterpriseUn'architettura di riferimento per applicazioni enterprise
Un'architettura di riferimento per applicazioni enterpriseAlberto Lagna
 
XMASDEV 2018 - XMAS GIFT ASSISTANT
XMASDEV 2018 - XMAS GIFT ASSISTANTXMASDEV 2018 - XMAS GIFT ASSISTANT
XMASDEV 2018 - XMAS GIFT ASSISTANT
Luca Congiu
 
Push Notification, Live Tile e Background Agent
Push Notification, Live Tile e Background AgentPush Notification, Live Tile e Background Agent
Push Notification, Live Tile e Background Agent
DomusDotNet
 
Programma il futuro : una scelta Open Source
Programma il futuro : una scelta Open SourceProgramma il futuro : una scelta Open Source
Programma il futuro : una scelta Open Source
NaLUG
 
September 2010 - Gatein
September 2010 - GateinSeptember 2010 - Gatein
September 2010 - Gatein
JBug Italy
 
Modi innovativi per costruire App
Modi innovativi per costruire AppModi innovativi per costruire App
Modi innovativi per costruire App
Commit University
 

Similar to Da A a Bot con un pizzico di Cognitive (20)

Win02 bing e windows store apps
Win02   bing e windows store appsWin02   bing e windows store apps
Win02 bing e windows store apps
 
Fun with Machine Translation APIs
Fun with Machine Translation APIsFun with Machine Translation APIs
Fun with Machine Translation APIs
 
HTML5, il lato client della forza...
HTML5, il lato client della forza... HTML5, il lato client della forza...
HTML5, il lato client della forza...
 
LinuxDay2013 - Web2py: make the web easier
LinuxDay2013 - Web2py: make the web easierLinuxDay2013 - Web2py: make the web easier
LinuxDay2013 - Web2py: make the web easier
 
Liferay: Esporre Web Services Custom
Liferay: Esporre Web Services CustomLiferay: Esporre Web Services Custom
Liferay: Esporre Web Services Custom
 
.NET Microservices
.NET Microservices.NET Microservices
.NET Microservices
 
Rich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsRich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.js
 
Acadevmy - Visual Studio Code Overview
Acadevmy - Visual Studio Code OverviewAcadevmy - Visual Studio Code Overview
Acadevmy - Visual Studio Code Overview
 
Programma il futuro: una scelta open source
Programma il futuro: una scelta open sourceProgramma il futuro: una scelta open source
Programma il futuro: una scelta open source
 
Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open source
Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open sourceLinux Day 2014 - Napoli - Programma Il Futuro: una scelta open source
Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open source
 
Niccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTNiccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWT
 
Realizzazione di un ChatBot sulla piattaforma Messenger di Facebook per l'inf...
Realizzazione di un ChatBot sulla piattaforma Messenger di Facebook per l'inf...Realizzazione di un ChatBot sulla piattaforma Messenger di Facebook per l'inf...
Realizzazione di un ChatBot sulla piattaforma Messenger di Facebook per l'inf...
 
Wcf data services
Wcf data servicesWcf data services
Wcf data services
 
#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2
 
Un'architettura di riferimento per applicazioni enterprise
Un'architettura di riferimento per applicazioni enterpriseUn'architettura di riferimento per applicazioni enterprise
Un'architettura di riferimento per applicazioni enterprise
 
XMASDEV 2018 - XMAS GIFT ASSISTANT
XMASDEV 2018 - XMAS GIFT ASSISTANTXMASDEV 2018 - XMAS GIFT ASSISTANT
XMASDEV 2018 - XMAS GIFT ASSISTANT
 
Push Notification, Live Tile e Background Agent
Push Notification, Live Tile e Background AgentPush Notification, Live Tile e Background Agent
Push Notification, Live Tile e Background Agent
 
Programma il futuro : una scelta Open Source
Programma il futuro : una scelta Open SourceProgramma il futuro : una scelta Open Source
Programma il futuro : una scelta Open Source
 
September 2010 - Gatein
September 2010 - GateinSeptember 2010 - Gatein
September 2010 - Gatein
 
Modi innovativi per costruire App
Modi innovativi per costruire AppModi innovativi per costruire App
Modi innovativi per costruire App
 

More from Alessio Iafrate

Workshop sulle spatial anchors
Workshop sulle spatial anchorsWorkshop sulle spatial anchors
Workshop sulle spatial anchors
Alessio Iafrate
 
Realtà aumentata ed Azure, un binomio imbattibile
Realtà aumentata ed Azure, un binomio imbattibileRealtà aumentata ed Azure, un binomio imbattibile
Realtà aumentata ed Azure, un binomio imbattibile
Alessio Iafrate
 
Custom Vision e Win.ml per le nostre app intelligenti offline
Custom Vision e Win.ml per le nostre app intelligenti offlineCustom Vision e Win.ml per le nostre app intelligenti offline
Custom Vision e Win.ml per le nostre app intelligenti offline
Alessio Iafrate
 
What's new in Visual Studio 2019
What's new in Visual Studio 2019What's new in Visual Studio 2019
What's new in Visual Studio 2019
Alessio Iafrate
 
Santa Claus Alert: ovvero come sfruttare WinML per intercettare babbo natale
Santa Claus Alert: ovvero come sfruttare WinML per intercettare babbo nataleSanta Claus Alert: ovvero come sfruttare WinML per intercettare babbo natale
Santa Claus Alert: ovvero come sfruttare WinML per intercettare babbo natale
Alessio Iafrate
 
Tecniche di Machine Learning per l’analisi offline dei dati aziendali
Tecniche di Machine Learning per l’analisi offline dei dati aziendaliTecniche di Machine Learning per l’analisi offline dei dati aziendali
Tecniche di Machine Learning per l’analisi offline dei dati aziendali
Alessio Iafrate
 
Aperitech winml
Aperitech winmlAperitech winml
Aperitech winml
Alessio Iafrate
 
Xamarin forms
Xamarin formsXamarin forms
Xamarin forms
Alessio Iafrate
 
Windows 10 e Universal Windows Platform
Windows 10 e Universal Windows PlatformWindows 10 e Universal Windows Platform
Windows 10 e Universal Windows Platform
Alessio Iafrate
 
Introduzione alle Universal App
Introduzione alle Universal AppIntroduzione alle Universal App
Introduzione alle Universal App
Alessio Iafrate
 

More from Alessio Iafrate (10)

Workshop sulle spatial anchors
Workshop sulle spatial anchorsWorkshop sulle spatial anchors
Workshop sulle spatial anchors
 
Realtà aumentata ed Azure, un binomio imbattibile
Realtà aumentata ed Azure, un binomio imbattibileRealtà aumentata ed Azure, un binomio imbattibile
Realtà aumentata ed Azure, un binomio imbattibile
 
Custom Vision e Win.ml per le nostre app intelligenti offline
Custom Vision e Win.ml per le nostre app intelligenti offlineCustom Vision e Win.ml per le nostre app intelligenti offline
Custom Vision e Win.ml per le nostre app intelligenti offline
 
What's new in Visual Studio 2019
What's new in Visual Studio 2019What's new in Visual Studio 2019
What's new in Visual Studio 2019
 
Santa Claus Alert: ovvero come sfruttare WinML per intercettare babbo natale
Santa Claus Alert: ovvero come sfruttare WinML per intercettare babbo nataleSanta Claus Alert: ovvero come sfruttare WinML per intercettare babbo natale
Santa Claus Alert: ovvero come sfruttare WinML per intercettare babbo natale
 
Tecniche di Machine Learning per l’analisi offline dei dati aziendali
Tecniche di Machine Learning per l’analisi offline dei dati aziendaliTecniche di Machine Learning per l’analisi offline dei dati aziendali
Tecniche di Machine Learning per l’analisi offline dei dati aziendali
 
Aperitech winml
Aperitech winmlAperitech winml
Aperitech winml
 
Xamarin forms
Xamarin formsXamarin forms
Xamarin forms
 
Windows 10 e Universal Windows Platform
Windows 10 e Universal Windows PlatformWindows 10 e Universal Windows Platform
Windows 10 e Universal Windows Platform
 
Introduzione alle Universal App
Introduzione alle Universal AppIntroduzione alle Universal App
Introduzione alle Universal App
 

Da A a Bot con un pizzico di Cognitive

  • 1. powered bypowered by  Cos’è un bot  Come sviluppare un bot con Microsoft Bot Framework  Cognitive services  Custom vision  Pubblicazione Agenda Da A a Bot con un pizzico di Cognitive
  • 2. Meet{cast} powered by Meet{cast} powered by Alessio Iafrate Freelance Developer e Fondatore DotNetAbruzzo http://www.acquariusoft.com @alessioiafrate alessioiafrate@hotmail.com
  • 4. powered bypowered by ll bot è un programma che accede alla rete attraverso lo stesso tipo di canali utilizzati dagli utenti umani. Programmi di questo tipo sono diffusi in relazione a molti diversi servizi in rete, con scopi vari, ma in genere legati all'automazione di compiti che sarebbero troppo gravosi o complessi per gli utenti umani. (Fonte Wikipedia) Cosa è un bot?
  • 5. powered bypowered by  Facebook Messenger  Telegram  Skype  Slack  Cortana  SMS  Sito Web  Email  …………. Dove posso ospitare un bot
  • 6. powered bypowered by Per ogni piattaforma abbiamo API differenti con metodologie diverse di sviluppo e concetti propri di ogni servizio. - Sviluppo per ogni singola piattaforma - Utilizzo framework comune (Es. Microsoft Bot Framework) Come lo sviluppo?
  • 7. powered bypowered by  Account azure anche in versione trial  Conoscenze di C# o node.js  Visual Studio anche in versione community (opzionale) La lista della spesa
  • 8. powered bypowered by  Bot Framework Connector (Singola Api rest che permette al bot di comunicare con i vari canali)  Activity (Oggetto contenente i vari dati della conversazione)  Dialog (Gestisce la conversazione)  State (Gestione dati associati all’utente, alla conversazione e all’utente nella conversazione) Concetti base
  • 9. powered bypowered by Il nostro primo bot
  • 10. powered bypowered by Un’occhiata al codice - Il controller La classe principale del progetto è un controller che gestisce le chiamate in ingresso ed in base al tipo e distingue tra un messaggio inviato oppure operazioni di gestione ( typing, ping, aggiunta e rimozione di membri dalla conversazione ecc)
  • 11. powered bypowered by Un’occhiata al codice - Dialog La classe dialog permette di gestire i messaggi inviati dall’utente con tutti i dettagli associati e di rispondere di conseguenza
  • 12. powered bypowered by Memorizziamo i dati Il bot builder SDK permette di memorizzare i dati delle sessioni in • Memoria (volatile) • Azure table • Database SQL • CosmosDB Nel template di default la registrazione viene eseguita nel metodo Application_Start del Global.asax
  • 13. powered bypowered by Come gestisco il debug? Con il bot framework emulator possiamo testare in locale il nostro bot con una semplice interfaccia che mostra anche il log delle chiamate E’ open source e disponibile su github
  • 15. powered bypowered by Cosa ci fornisce il framework:  Gestione dello stato dell’utente  Domanda e risposta (Richiesta di informazioni o selezione di una scelta)  Invio messaggio ad un’utente a seguito di un evento lato server Interagire con l’utente
  • 16. powered bypowered by Il context permette di gestire i dati associati all’utente e per farlo abbiamo a disposizione  UserData relativo allo User  ConversationData relativo alla Conversazione  PrivateConversationData relativo a quell’utente in quella specifica conversazione Per gestirli esistono i relativi metodi get e set (GetUserData, SetUserData, ecc) Lo stato dell’utente
  • 17. powered bypowered by Un’occhiata al codice - PromptDialog La classe PromptDialog permette di gestire le conversazioni basate basate su domanda e risposta, in questo caso il metodo Text (o quello relativo al dato che vogliamo ottenere) prende come parametro una callback alla funzione da richiamare direttamente dopo che l’utente ha inviato una risposta
  • 18. powered bypowered by Un’occhiata al codice - Proactive Message Per inviare un messaggio all’utente è necessario ricreare tutta la cascata di connessioni per raggiungerlo utilizzando i dati memorizzati precedentemente
  • 19. powered bypowered by I Cognitive services Aggiungiamo un pizzo di intelligenza!
  • 22. powered bypowered by Demo custom vision
  • 23. powered bypowered by Integriamo il tutto Con una semplice chiamata Rest è possibile inviare i dati della nostra immagine e ricevere i dati dell’elaborazione
  • 24. powered bypowered by Come leggere le immagini inviate Il message contiene una lista di file in Attachments che contengono l’url da cui con una semplice chiamata http è possibile scaricare i files che ci sono stati inviati
  • 27. powered bypowered by  https://docs.microsoft.com/en-us/bot-framework/  https://github.com/Microsoft/BotFramework-Emulator  https://azure.microsoft.com/en-us/services/cognitive-services/  https://www.customvision.ai/  http://t.me/RostyBot  https://github.com/a-iafrate/Rosty Link
  • 28. powered bypowered by Global Azure Bootcamp http://bit.ly/gabrome18

Editor's Notes

  1. Connector The Bot Framework Connector provides a single REST API that enables a bot to communicate across multiple channels such as Skype, Email, Slack, and more Activity The Connector uses an Activity object to pass information back and forth between bot and channel (user). The most common type of activity is message, but there are other activity types that can be used to communicate various types of information to a bot or channel Dialog When you create a bot using the Bot Builder SDK for .NET, you can use dialogs to model a conversation and manage conversation flow. A dialog can be composed of other dialogs to maximize reuse, and a dialog context maintains the stack of dialogs that are active in the conversation at any point in time. A conversation that comprises dialogs is portable across computers, which makes it possible for your bot implementation to scale. State The Bot Builder Framework enables your bot to store and retrieve state data that is associated with a user, a conversation, or a specific user within the context of a specific conversation. State data can be used for many purposes, such as determining where the prior conversation left off or simply greeting a returning user by name. If you store a user's preferences, you can use that information to customize the conversation the next time you chat. For testing and prototyping purposes, you can use the Bot Builder Framework's in-memory data storage. For production bots, you can implement your own storage adapter or use one of Azure Extensions. The Azure Extensions allow you to store your bot's state data in either Table Storage, CosmosDB, or SQL