Teaching Susi

In this blog post, I’ll explain how you can add a skill to SUSI.

Skills to be added in this tutorial:

1. Ask SUSI for conversion of decimal into Binary .
2. Ask SUSI to tell a quote.
3. Skill development in SUSI is very interesting and easy. A comprehensive guide for skill development can be found here.

We have a Susi Skill development environment based on an Etherpad. Are you unaware what an Etherpad is? It is a blank web page where you can just put in your text and everyone can collaborate.

Here is a screenshot of what etherpad looks like:

• open http://dream.susi.ai
• name a dream (just pick a name for your tests in lower case letters)
• the etherpad is filled with a welcome message, just delete the content completely

Ask SUSI for conversion of decimal into Binary

“*” here represents any decimal number number.Suppose we enter a decimal number and want susi to return it’s binary equivalent. So to make our skill, first of all we should form a general query.

Query: Convert * into binary or * in binary

After defining our query we want susi to reply with relevant answer.

For taking out the conversion from decimal to binary we can use JavaScript.

We define Javascript syntax in etherpad as follows :

```!javascript:Binary for \$1\$ = \$!\$
(+\$1\$).toString(2);
eol
```

Explanation :

!javascript” allows us to print like javascript console. We can add JavaScript code by using this and do mathematical calculations to convert our decimal into binary.

“Binary for \$1\$ = \$!\$”  represents output format where \$1\$ stores the value in “*” in query given by user to susi. \$!\$ will print the result of javascript code below.

“(+\$1\$).toString(2);” This is a single line javascript code while converts value in “\$1\$” to binary, It’s output is reflected in “\$!\$”

“eol” represents end of line, which signifies our code for skill is finished.

In etherpad our skill would look like :

“#” – used for commenting out lines in skill

```#The following code returns binary equivalent of a decimal number given by user

convert * into binary || binary of *
!javascript:Binary for \$1\$ = \$!\$
(+\$1\$).toString(2);
eol
```

Screenshot:

Ask SUSI to tell a quote

We can use external API’s for providing answer to user’s query. The external API used for telling the quote is Quotes Rest API created by They Said So. It offers a very good quotes platform and also the quotes are not repeated when several requests are made continuously.

We need a query for our skill.

Query: Tell me a quote.

Now let’s say that we use this JSON response for fetching quote data.

Our JSON object looks like:

```{
success: {
total: 1
},
contents: {
quotes: [
{
quote: "Let our advance worrying become advance thinking and planning.",
length: "62",
author: "Winston Churchill",
tags: [
"anxiety",
"inspire",
"planning",
"time-management"
],
category: "inspire",
date: "2017-05-31",
title: "Inspiring Quote of the day",
background: "https://theysaidso.com/img/bgs/man_on_the_mountain.jpg",
id: "o3aMOSUwOPqUnJv9YyfYHweF"
}
],
}
}
```

Now we are interested in getting value corresponding to  quotes key, which takes the path:  “path”:”\$.contents.quotes“.

We make output query as follows:

```!console:\$quote\$
{
"url" : "http://quotes.rest/qod.json",
"path":"\$.contents.quotes"
}
eol
```

Explanation :

“!console” prints the output and this is returned by SUSI.AI.

\$quote\$” is the key whose value will be printed from parsed JSON.It contains our quote and this is a random quote. This is the string which will be responded by SUSI.AI

“url” generated JSON response from external API.

“path” is parsing path of JSON object which we follow for getting correct response.

Our skill will look like:

```tell me a quote
!console:\$quote\$
{
"url" : "http://quotes.rest/qod.json",
"path":"\$.contents.quotes"
}
eol
```

Screenshot :