claudia-bot-builder-fb
Version:
Create chat-bots for various platforms and deploy to AWS Lambda quickly
363 lines (241 loc) • 16 kB
Markdown
# Skype Custom Messages and Message Templates
In this guide:
1. [Intro](#intro)
2. [Text messages](#text-messages)
3. [Emoticon messages](#emoticon-messages)
4. [Photo messages](#photo-messages)
5. [Carousel messages](#carousel-messages)
1. [Hero](#hero-messages)
2. [Thumbnail](#thumbnail-messages)
3. [Receipt](#receipt-messages)
6. [Button types](#button-types)
7. [Typing messages](#typing-messages)
8. [Handling errors](#handling-errors)
## Intro
Skype Template Message builder allows you to generate more complex messages for Skype Messenger without writing JSON files manually.
To use it, just require `skypeTemplate` function from _Claudia Bot Builder_:
```javascript
const skypeTemplate = require('claudia-bot-builder').skypeTemplate;
```
`skypeTemplate` exports an object that contains multiple classes that allows you to generate different types of structured messages for Skype:
- Photo
- Carousel
Carousel class gives you ability to add Hero, Thumbnail and Receipt messages. See more here: https://docs.botframework.com/en-us/skype/getting-started/#cards-and-buttons
## Text messages
If you simply want to answer with the text you can just return text. And if you want your messages Markdown or XML support, use this API.
### API
`Text` (class) - Class that allows you to build a text messages.
_Arguments:_
- text, string (required) - message you want to send
- format, string (optional) - `plain`, `markdown` or `xml`. default is `plain`.
### Methods
| Method | Required | Arguments | Returns | Description |
| ------------------------ | -------- | ---------------------------------------- | --------------------------------- | ---------------------------------------- |
| get | Yes | No arguments | Formatted JSON to pass as a reply | Get method is required and it returns a formatted JSON that is ready to be passed as a response to Skype Messenger |
### Example
```javascript
const botBuilder = require('claudia-bot-builder');
const skypeTemplate = botBuilder.skypeTemplate;
module.exports = botBuilder(message => {
if (message.type === 'skype')
return new skypeTemplate.Text('**HELLO**!', 'markdown').get();
});
```
more markdown or XML syntax, refer to: https://docs.microsoft.com/en-us/bot-framework/rest-api/bot-framework-rest-connector-create-messages
## Emoticon messages
Skype doesn't have specific API method for sending emoticons. If you want to send emoticon, just retun a string with emoticon shortcut. You can find list of emoticons and shortcuts here: https://support.skype.com/en/faq/FA12330/what-is-the-full-list-of-emoticons
## Photo messages
Photo attachment allows you to send images.
### API
`Photo` (class) - Class that allows you to build a photo messages.
_Arguments:_
- photo, base64 string URL (required) - a base64 encoded image.
### Methods
| Method | Required | Arguments | Returns | Description |
| ------------------------ | -------- | ---------------------------------------- | --------------------------------- | ---------------------------------------- |
| get | Yes | No arguments | Formatted JSON to pass as a reply | Get method is required and it returns a formatted JSON that is ready to be passed as a response to Skype Messenger |
### Example
```javascript
const botBuilder = require('claudia-bot-builder');
const skypeTemplate = botBuilder.skypeTemplate;
module.exports = botBuilder(message => {
if (message.type === 'skype')
return new skypeTemplate.Photo('data:image/png;base64,...').get();
});
```
## Carousel messages
Carousel class allows you to send cards and buttons.
### API
`Carousel` (class) - Class that allows you to build carousel with Skype cards and buttons.
_Arguments:_
- summary, string (optional) - a caption summary.
- text, integer (optional) - an optional text.
### Methods
| Method | Required | Arguments | Returns | Description |
| ------------------------ | -------- | ---------------------------------------- | --------------------------------- | ---------------------------------------- |
| addHero | No | See [Hero](#hero-messages) | `this` for chaining | Hero card |
| addThumbnail | No | See [Thumbnail](#thumbnail-messages) | `this` for chaining | Thumbnail card |
| addReceipt | No | See [Receipt](#receipt-messages) section | `this` for chaining | Receipt card |
| get | Yes | No arguments | Formatted JSON to pass as a reply | Get method is required and it returns a formatted JSON that is ready to be passed as a response to Skype Messenger |
### Example
```javascript
const botBuilder = require('claudia-bot-builder');
const skypeTemplate = botBuilder.skypeTemplate;
module.exports = botBuilder(message => {
if (message.type === 'skype')
return new skypeTemplate.Carousel('summary', 'text')
.addHero(['http://lorempixel.com/400/200/'])
.addThumbnail(['http://lorempixel.com/400/200/'])
.addReceipt('$100')
.get();
});
```
## Hero messages
Hero message requires Carousel class to be initialized.
### API
`addHero` (method) - Method that allows you to build Hero messages with optional images and buttons.
_Arguments:_
- images, array (required) - an array of urls of images.
### Methods
| Method | Required | Arguments | Returns | Description |
| ------------------------ | -------- | ---------------------------------------- | --------------------------------- | ---------------------------------------- |
| addTitle | No | title (string, required, title for Hero) | `this` for chaining | Adds title on Hero message |
| addSubtitle | No | subtitle (string, required, subtitle for Hero) | `this` for chaining | Adds subtitle on Hero message |
| addText | No | text (string, required, text for Hero) | `this` for chaining | Adds text on Hero message |
| addButton | No | title (string, required, title of button), value (string, required, value of button), type (string, required, [Button types](#button-types)) | `this` for chaining | Adds button on Hero message |
| get | Yes | No arguments | Formatted JSON to pass as a reply | Get method is required and it returns a formatted JSON that is ready to be passed as a response to Skype Messenger |
### Example
```javascript
const botBuilder = require('claudia-bot-builder');
const skypeTemplate = botBuilder.skypeTemplate;
module.exports = botBuilder(message => {
if (message.type === 'skype')
return new skypeTemplate.Carousel()
.addHero(['http://lorempixel.com/400/200/'])
.addTitle('New Hero')
.addSubtitle('Our new Hero')
.addText('Some description')
.addButton('Hi', 'hello', 'imBack')
.addButton('Other button', 'hello again', 'imBack')
.get();
});
```
## Thumbnail messages
Thumbnail message requires Carousel class to be initialized.
### API
`addThumbnail` (method) - Method that allows you to build Thumbnail messages with optional images and buttons.
_Arguments:_
- images, array (required) - an array of urls of images.
### Methods
| Method | Required | Arguments | Returns | Description |
| ------------------------ | -------- | ---------------------------------------- | --------------------------------- | ---------------------------------------- |
| addTitle | No | title (string, required, title for Thumbnail) | `this` for chaining | Adds title on Thumbnail message |
| addSubtitle | No | subtitle (string, required, subtitle for Thumbnail) | `this` for chaining | Adds subtitle on Thumbnail message |
| addText | No | text (string, required, text for Thumbnail) | `this` for chaining | Adds text on Thumbnail message |
| addButton | No | title (string, required, title of button), value (string, required, value of button), type (string, required, [Button types](#button-types)) | `this` for chaining | Adds button on Thumbnail message |
| get | Yes | No arguments | Formatted JSON to pass as a reply | Get method is required and it returns a formatted JSON that is ready to be passed as a response to Skype Messenger |
### Example
```javascript
const botBuilder = require('claudia-bot-builder');
const skypeTemplate = botBuilder.skypeTemplate;
module.exports = botBuilder(message => {
if (message.type === 'skype')
return new skypeTemplate.Carousel()
.addThumbnail(['http://lorempixel.com/400/200/'])
.addTitle('New Thumbnail')
.addSubtitle('Our new Thumbnail')
.addText('Some description')
.addButton('Hi', 'hello', 'imBack')
.addButton('Other button', 'hello again', 'imBack')
.get();
});
```
## Receipt messages
Receipt message requires Carousel class to be initialized.
### API
`addReceipt` (method) - Method that allows you to build Receipt messages with optional items and facts.
_Arguments:_
- total, string (required) - total value.
- tax, string (required) - tax value.
- vat, string (required) - vat value.
### Methods
| Method | Required | Arguments | Returns | Description |
| ------------------------ | -------- | ---------------------------------------- | --------------------------------- | ---------------------------------------- |
| addTitle | No | title (string, required, title for Receipt) | `this` for chaining | Adds title on Receipt message |
| addSubtitle | No | subtitle (string, required, subtitle for Receipt) | `this` for chaining | Adds subtitle on Receipt message |
| addText | No | text (string, required, text for Receipt) | `this` for chaining | Adds text on Receipt message |
| addFact | No | key (string, required, key for Fact), value (string, required, value for Fact) | `this` for chaining | Adds fact on Receipt message |
| addItem | No | title (string, optional), subtitle (string, optional), text (string, optional), price (string, optional), quantity (string, optional), image (string, optional), | `this` for chaining | Adds item to Receipt message |
| addButton | No | title (string, required, title of button), value (string, required, value of button), type (string, required, [Button types](#button-types)) | `this` for chaining | Adds button on Receipt message |
| get | Yes | No arguments | Formatted JSON to pass as a reply | Get method is required and it returns a formatted JSON that is ready to be passed as a response to Skype Messenger |
### Example
```javascript
const botBuilder = require('claudia-bot-builder');
const skypeTemplate = botBuilder.skypeTemplate;
module.exports = botBuilder(message => {
if (message.type === 'skype')
return new skypeTemplate.Carousel()
.addReceipt('100')
.addTitle('New Thumbnail')
.addSubtitle('Our new Thumbnail')
.addText('Some description')
.addFact('factKey', 'I am fact')
.addItem('Some item', 'I am some item', 'My description', '20', '5', 'http://lorempixel.com/400/200/')
.addButton('Hi', 'hello', 'imBack')
.addButton('Other button', 'hello again', 'imBack')
.get();
});
```
## Typing messages
Typing message allows you to send typing event from chat bot.
### API
`Typing` (class) - Class that allows you to build a Typing message.
### Methods
| Method | Required | Arguments | Returns | Description |
| ------------------------ | -------- | ---------------------------------------- | --------------------------------- | ---------------------------------------- |
| get | Optional | No arguments | Formatted JSON to pass as a reply | Get method is required and it returns a formatted JSON that is ready to be passed as a response to Skype Messenger |
### Example
```javascript
const botBuilder = require('claudia-bot-builder');
const skypeTemplate = botBuilder.skypeTemplate;
module.exports = botBuilder(message => {
if (message.type === 'skype')
return new skypeTemplate.Typing();
});
```
## Button types
Skype buttons have specific types for the function they are supposed to do. Bellow is the table with the types and explanations:
### API
`addButton` (method) - Method that allows you to add a button.
_Arguments:_
- title, string (required) - text caption on button.
- value, string (required)
- type, string (required) - look table below.
| Type | Explanation |
|------------------|-----------------------------------------------------------------------|
| openUrl | Open given url in the built-in browser. |
| imBack | Post message to bot, so all other participants will see that was posted to the bot and who posted this. |
| postBack | Post message to bot privately, so other participants inside conversation will not see that was posted. |
| playAudio | Playback audio container referenced by url. |
| playVideo | Playback video container referenced by url. |
| showImage | Show image referenced by url. |
| downloadFile | Download file referenced by url. |
| signin | Signin button. |
### Example
```javascript
const botBuilder = require('claudia-bot-builder');
const skypeTemplate = botBuilder.skypeTemplate;
module.exports = botBuilder(message => {
if (message.type === 'skype')
return new skypeTemplate.Carousel('summary')
.addReceipt('$100')
.addButton('go to google!', 'https://www.google.com', 'openUrl')
.get();
});
```
## Handling errors
Skype Template Message builder checks if messages you are generating are following Skype guidelines and limits, in case they are not an error will be thrown.
_Example:_
Calling `new skypeTemplate.Carousel().addHero('imageUrl')` where's `image` passed as string instead of array will throw `Images should be sent as array for the Skype Hero template` error.
All errors that Claudia bot builder's skypeTemplate library is throwing can be found [in the source code](../lib/skype/format-message.js).
Errors will be logged in Cloud Watch log for your bot.