Clova

An abstracted layer on top of the cek.core module.

URL

class cek.clova.URL(url)
Parameters:url (str) – As str which points directly to a source which should be played by Clover

Message

class cek.clova.Message(message, language=None)
Parameters:
  • message (str) – Message of type str which Clova should speak out
  • language (str) – Language code of the message. Can be ja, ko or en.

MessageSet

class cek.clova.MessageSet(brief, verbose)
Parameters:

Clova

class cek.clova.Clova(application_id, default_language='ja', debug_mode=False)

Clova provides the easiest way to create your extension.

Parameters:
  • application_id (str) – Set registered application id to verify all incoming requests
  • default_language (str) – Set default language for all messages. Can be ja, ko or en.
  • debug_mode (bool) – Use only for development. If set to True, request and applicationId verification are turned off
Raises:

ValueError – if unsupported language is specified.

Variables:

handle (RequestHandler) – Helper to handle requests from CEK. Request handlers must be defined using the handler.

Usage:

Create Clova instance:

>>> from cek import Clova
>>> clova = Clova(application_id='', default_language='jp', debug_mode=True)

Define request handlers using (Clova.handle). Response can be created using Clova.response().

>>> @clova.handle.launch
... def launch_request_handler(clova_request):
...     return clova.response("こんにちは世界。スキルを起動します")
>>> @clova.handle.default
... def default_handler(clova_request):
...     return clova.response("もう一度お願いします")

Plug into your web application using Clova.route():

>>> rom flask import Flask, request, jsonify
>>> app = Flask(__name__)
>>> @app.route('/app', methods=['POST'])
... def my_service():
...     resp = clova.route(request.data, request.headers)
...     resp = jsonify(resp)
...     resp.headers['Content-Type'] = 'application/json;charset-UTF-8'
...     return resp

See docs for Clova.route() and Clova.response() for detailed usages.

response(message, reprompt=None, end_session=False)

Create a Response that should be sent back to CEK

Parameters:
Returns:

Response containing passed message

Return type:

cek.core.Response

Raises:

ValueError – if unsupported language is specified.

Usage:
>>> import cek
>>> from cek import Clova
>>> from pprint import pprint
>>> clova = Clova(application_id="", default_language="ja", debug_mode=True)

Simplest case:

>>> resp = clova.response("こんにちは")
>>> pprint(resp)
{'response': {'card': {},
              'directives': [],
              'outputSpeech': {'type': 'SimpleSpeech',
                               'values': {'lang': 'ja',
                                          'type': 'PlainText',
                                          'value': 'こんにちは'}},
              'shouldEndSession': False},
 'sessionAttributes': {},
 'version': '1.0'}

With explicit language:

>>> resp = clova.response(cek.Message("English", language="en"))
>>> pprint(resp)
{'response': {'card': {},
              'directives': [],
              'outputSpeech': {'type': 'SimpleSpeech',
                               'values': {'lang': 'en',
                                          'type': 'PlainText',
                                          'value': 'English'}},
              'shouldEndSession': False},
 'sessionAttributes': {},
 'version': '1.0'}

URL:

>>> resp = clova.response(cek.URL("https://dummy.mp3"))
>>> pprint(resp)
{'response': {'card': {},
              'directives': [],
              'outputSpeech': {'type': 'SimpleSpeech',
                               'values': {'lang': '',
                                          'type': 'URL',
                                          'value': 'https://dummy.mp3'}},
              'shouldEndSession': False},
 'sessionAttributes': {},
 'version': '1.0'}

List:

>>> resp = clova.response(["こんにちは", cek.URL("https://dummy.mp3")])
>>> pprint(resp)
{'response': {'card': {},
              'directives': [],
              'outputSpeech': {'type': 'SpeechList',
                               'values': [{'lang': 'ja',
                                           'type': 'PlainText',
                                           'value': 'こんにちは'},
                                          {'lang': '',
                                           'type': 'URL',
                                           'value': 'https://dummy.mp3'}]},
              'shouldEndSession': False},
 'sessionAttributes': {},
 'version': '1.0'}

With reprompt message:

>>> resp = clova.response("こんにちは", reprompt="聞こえていますか?")
>>> pprint(resp)
{'response': {'card': {},
              'directives': [],
              'outputSpeech': {'type': 'SimpleSpeech',
                               'values': {'lang': 'ja',
                                          'type': 'PlainText',
                                          'value': 'こんにちは'}},
              'reprompt': {'outputSpeech': {'type': 'SimpleSpeech',
                                            'values': {'lang': 'ja',
                                                       'type': 'PlainText',
                                                       'value': '聞こえていますか?'}}},
              'shouldEndSession': False},
 'sessionAttributes': {},
 'version': '1.0'}
route(body, header)

Route request from CEK to handlers

Depending on the request type (intent, launch, etc), the function routes the request to the proper handler defined by the user and returns the response as a dictionary. Request verification is done per request before routing.

The method is an alias to cek.core.RequestHandler.route_request().

Parameters:
  • body (bytes) – Binary Request body from CEK
  • header (dict) – Request Header as a dictionary
Returns:

Returns body for CEK response

Return type:

cek.core.Response

Raises:
Usage:
>>> from cek import Clova
>>> clova = Clova(application_id="", default_language="ja", debug_mode=True)
>>> from flask import Flask, request, jsonify
>>> app = Flask(__name__)
>>> @app.route('/app', methods=['POST'])
... def my_service():
...     resp = clova.route(request.data, request.headers)
...     resp = jsonify(resp)
...     resp.headers['Content-Type'] = 'application/json;charset-UTF-8'
...     return resp