Rome 2017: Building advanced voice assistants and chat bots

Post on 11-Apr-2017

201 views 6 download

transcript

Building advanced Chat Bots & Voice Interactive Assistants

Stève SFARTZAPI Evangelist - Cisco DevNetstsfartz@cisco.com, @SteveSfartz, github://ObjectIsadvantag

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public

/Cisco/DevNet/SteveSfartz

• API Evangelist @CiscoDevNet• Cisco Spark Apps & Tropo APIs • code addict, nodejs, love story

with #golang• France and all around Europe• hosted @PIRL – Paris Innovation

Center & Research Lab• twitter://@SteveSfartz• github://ObjectIsAdvantag

“vision without execution is

hallucination”

-- Thomas Edison

stsfartz@cisco.com@SteveSfartz

© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 3

Zero to advanced Voice Machines, ChatBots

Demoes & code samples +39-069-480-4685, QuizBot@sparkbot.io

Challenges & Lessons learntT

so what’s on the menu

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public

From Zero to advanced Voice Machines with Tropo

4

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public

What is Tropo ?

5

Cloud APIs enabling developers to quickly and easily embed communication capabilities into their applications and business processes.

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public 6

+• Ask

• Call

• Conference

• Hangup

• Record

• Reject

• Say

• Transfer

Tropo in a nutshell

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public 7

say("hello world");

Text to Speech

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public 8

Play an Audio File

say(“http://.../troporocks.mp3");

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public9

Outbound Voice Call

call("+14155550100");say("Tag, you’re it!");

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public10

Send a Text Message

call("+14155550100", {network:"SMS"});say("Tag, you’re it!");

11

Asking a Questionvar result = ask("What's your favorite color? Choose red, blue or green.", { choices:"red, blue, green"});say("You said " + result.value);log("They said " + result.value);

12

Voicemail Applicationrecord("Leave your message. Press pound when finished.", { beep:true, timeout:10, silenceTimeout:7, maxTime:60, terminator:'#', recordFormat:"audio/mp3", recordURI:"ftp://.../file.mp3" });

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public 13

How to setup your own Voice Machine

• Signup at http://tropo.com

• Create a new Scripting app

• Point to an IVR script: http://bit.ly/TROPO-IVR

• Pick a phone number

• Save the application

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public 14

Globally availableGlobal Outgoing Calls & MessagesNumbers in 42 countries80 speech languages

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public 15

Account Types

• Free• Low-volume• Restricted use• No production

usage• 24x7 support

Developer

• Pre-paid• Credit Card• Self-service

signup• Shared Cloud• one minute

billing increments

Production

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public

Check upcoming talksvia CodeMotion Rome’s

Voice Machine

+39 069 480 468516

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public

CodeMotion Rome Voice MachineIVR = Interactive Voice Responder

• Call +39 069 480 4685 and listen…

• Dial 1 to receive more details by SMS, 2 for next• Check a session details on your mobile phone• Text your email to the caller /!\ you’re texting US !!! • Launch CiscoSpark, and meet the bot…

17

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public 18

{CodeMotion} Rome Voice Machine

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public 19

How to setup a custom IVR• The IVR is composed of :

• a local phone number • a custom script executed by the Tropo Scripting platform

dials #1

+39 069 480 4685« Welcome »

details via SMScalls

Voice Machinescript

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public 20

IVR script highlights

• Forking a new session to send a SMS

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public

Join the Cisco DevNet code labshttps://github.com/CiscoDevNet/codemotion-rome-2017

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public

Serverless is great• no deployment hurdles, scalability from day 1

… but • tedious dev cycles (commit, push, test)• painful to diagnose (read logs through)

Þ local emulators to the rescue run and debug locally integrate in a CI/CD tool chain

Lessons learnt

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public

Tropo Ready!

• Tropo Ready!

• + URL to the project

• Browse the project

https://github.com/ObjectIsAdvantag/tropo-ready-vscode

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public

Tropo Emulator in practicehttps://github.com/ObjectIsAdvantag/tropo-ready-vscode

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public

Best practices: ChatOpsDiagnose & follow real time activity

“Follow your application usage in

real-time”

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public

Best practices: ChatOpsDiagnose & follow real time activity

“Follow your application usage in

real-time”

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public

Best practices: ChatOpsDiagnose & follow real time activity

“Diagnose a Serverless script”

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public 28

How to setup ChatOps

To stream logs and get instant view about your Voice Machine activity:

1. Create a ChatOps room

2. Add an Incoming Webhook

3. Post messages

Voice Machinescript

Log2Sparklibrary

/newlogs

POSTmessage

« ChatOps »Room

12

3

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public

From Zero to advanced Chat Bots with Cisco Spark

29

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public 30

Cisco Spark

Secure & Open

Complete & Simple

Spark for DevelopersUser Integrations, APIs/SDKs...

Spark Hybrid ServicesCloud + Prem

Partner ServicesInterconnect

Message Meeting Call1:1 and team messaging Cloud-based phone systemAudio, video, and web meetings

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public 31

‘Your App’ now with

Cisco Collab!

Spark APIs extend Cisco Collaboration Cloud

GET

POST

DELETE

PUT/Rooms

/Memberships

/Messages

/Webhooks

/People

/Teams

https://developer.ciscospark.com/

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public 32

Meet the roomId bot

• Add roomId@sparkbot.io to a room

1. The bot sniffs room identifier,

2. Posts the identifier in a 1-1 space,

3. And finally leaves the space you originally invited it to join

https://github.com/CiscoDevNet/node-sparkbot-samples

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public

• nothing more than an API responding to events

• a few lines of code with a Bot framework

What it takes to build a Chat Bot

33

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public

Run a bot sample

• Leverages the node-sparkbot framework• aimed at Cisco Spark bot education • https://github.com/CiscoDevNet/node-sparkbot

• Community frameworks• Flint: https://github.com/flint-bot/flint • BotKit: https://github.com/howdyai/botkit

34

https://github.com/CiscoDevNet/node-sparkbot-samples

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public

Cisco Spark Cloud Service

1. interacts in spacesvia a Cisco Spark client

Cisco Spark User

Your Bot code runningOn-premise or on a Public Coud

2. posts notifications to registered WebHooks

Publicly accessible APIs

3. posts messages as notifications fly in

Bot Architecture

Register WebHook events your bot is interested to listened to Messages /

created Memberships /

created

As events happen in spaces, receive notifications from Cisco Spark

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public

Cisco Spark Cloud Service

1. interacts in spacesvia a Cisco Spark client

Cisco Spark User

DMZ

2. posts notifications to registered WebHooks

Publicly accessible

3. responds to Webhook events

Your Bot code runningon-premises

Enterprise secured

2b. forwards notifications

Bot Architecture: on-premises

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public

Cisco Spark Cloud Service

1. interacts in Roomsvia the various Spark Clients

Cisco Spark User

Tunneling infrastructure

Your Bot code runningon your local machine

2. posts notifications to registered WebHooks

Dev environmentPublicly accessible

2b. forwards Webhook events

3. responds to Webhook events

Bot Architecture: dev machine

ngrok, localtunnel…

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public 38

Bot Contest

Sign in on CiscoSpark

Meet the Botquizbot@sparkbot.io

Take the challenge

Win an iPhone7…

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public

Meet the QuizBot

39

https://github.com/LucaCalabrese/codemotion-spark-bot Java, AWS, PostGreSQL, WebHooks @LukeCalab

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public 40

@QuizBot help

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public

@QuizBot now

41

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public

Enhance the User Experience

• Help command• better show at the invite, welcome message• But how much help do the bot really

provide?• /hlp • Help• #help• HELP!!!

Þ Fallback command

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public

Fallback command

43

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public 44

Add conversations to the game…https://github.com/ObjectIsAdvantag/devnet-botkit-sample

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public 45

…and context storagehttps://github.com/CiscoDevNet/botkit-ciscospark-samples

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public 46

Bot Frameworks survey

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public

Bot community frameworks

• Flint, https://github.com/flint-bot/flint

• BotKit, https://github.com/howdyai/botkit

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public

Community frameworks for Cisco SparkFlint

First Bot framework for Cisco Spark

Highly tuned for the Cisco Spark API (webhooks events, moderation…)

Basic Key/Value data store

Coding best practices (ES6, exception handling, logs, retries, rate limitation)

BotKit

Largest community Bot framework

Cross platform support with code reuse (no magic convert button: events name, message formatting)

Advanced Key/Value data store (user / space level)

Powerful conversational paradigm

https://github.com/flint-bot/flint https://github.com/howdyai/botkit

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public 49

Taking bots to the next stage

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public

Taking bots to the next stage

• But who created the bot ?• What is the usage policy ?• How can I contact support, send feedback ?• What about my data privacy ?

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public 51

@CiscoDevNet /about

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public

Taking bots to the next stage

Is the bot down ?

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public 53

Bot MetadataHealthCheck

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public 54

Is the bot down ? a proposal

• Register the Bot in a Universal Database• Chat services supported• Healthcheck endpoints• Author, Policies• Metadata again…

• chatbot.land domain reserved• who’s in ? twitter://@SteveSfartz

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public

Taking bots to the next stageHosting

• Many options: IaaS, Containers, PaaS• Concerns: Availability, Scalability,

Security, Rate Limitation• Pricing balance: who’s willing to pay for

the bot, and how much• Heroku PaaS Free Dynos• AWS/Google/Microsoft free plans• Currently testing Serverless Functions

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public 56

Google Functions pricing

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public 57

The Serverless Functions opportunityhttps://github.com/ObjectIsAdvantag/devnetexpress-bot

Remember? a bot is nothing more than a POST endpoint …with an healthcheck !

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public 58

The Serverless Functions opportunity

> gcloud alpha functions deploy sparkbot --entry-point googlefunction --stage-bucket objectisadvantag-functions --trigger-http --memory 128MB --timeout 1s

https://github.com/ObjectIsAdvantag/devnetexpress-bot

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public 59

The Serverless Functions opportunity

• An easy way to remove the Serverless burden

https://github.com/ObjectIsAdvantag/devnetexpress-bot

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public

Taking bots to the next stage

• Pick Bots coding best practices & frameworks• Exception management, Retries• Help, Fallback command, Healthcheck• Conversations (test is challenging)

• Choose the best hosting approach • Monitor your bot activity

• Chatops + Analytics

• Think twice before going to NLP and then choose the best approach (local vs 3rd party)

https://devnetcreate.io/2017 Nick Marus’s Talk

• Hosting• Security• Rate limitation

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public

Taking bots to the next stageMachine Learning

• The bot companion learns from interactions

• Use case: classify my Twitter Followers

• Who’s ready to pay for it ?• Data Privacy vs Real Cost

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public

Join the Cisco DevNet code labshttps://github.com/CiscoDevNet/codemotion-rome-2017

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public 63

Bot Contest

• Sign in on Cisco Spark

• Meet the Botquizbot@sparkbot.io

• Take the challenge• Win iPhone7…

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public

Meet Cisco at CodeMotion Rome

March 24th 9:40: It's all about Developers, discover Cisco DevNet11:30: Build advanced Voice Assistants and Chat Bots14:10: How to embed Video Calls and Messaging without being a Media, WebRTC, XMPP or SIP expert

All day: Learn by taking a code lab with proctors

March 25th

11:30: Microservices and containers networking: Contiv, an industry leading open source solution from Cisco

https://github.com/CiscoDevNet/codemotion-rome-2017

Thank you

© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Public 65

@CiscoDevNet@CiscoSparkDev@SteveSfartz