Kuzunoha-NEのブログ

プログラミングなどの勉強をしてます

python clova_sdkで開発しているんですよ -その1-

python clova_sdkで開発しているんですよ -その1-

久しく、お世話になっております。葛の葉です。

最近はclovaの開発を行っております。clovaの開発の記事はまだまだネット上には少ないので、今は公式のドキュメントを読み解きながらプログラミングをするという状況での開発を行っております。

前回の記事では、pythonSDKが来たことと、そのpipでのインストール方法、そして、SDKのドキュメントのリンクなどを記載しました。

kuzunoha-ne.hateblo.jp

現在、clovaの開発用SDKのある言語は以下のようになるようですね。

↓引用元

clova-developers.line.me

SDKがあると、開発が簡単になりますね。使える言語がある人はチャレンジされてみてはいかがでしょうか?


それと、今回は私が開発をしていて、気になった点などを記載したいと思います。

clovaのしゃべるセリフが淡々としている

完全に個人的な感想なのですけど、抑揚とブレス、といいますか。人間っぽくない喋り方といいますか。意図してセリフを区切ったりしないと、淡々としゃべり続けてしまうのがclovaなのかなと思いました。(ほかのスマートスピーカーがどうかは知らないですけど…)ですので、長いセリフとかになりますと全部聞き取れないです。勉強の一環として色んなスキルを導入して使ってみていますが、セリフとしては1秒以内に区切りを入れたほうがいいのかな、と思いました。途中でよくなに喋ってるのかよくわからなくなりました。

ビルトインインテントとカスタムインテントの優先順位ってどっちなんだ?

「はい」や「いいえ」という言葉に反応する「ビルトインインテント」がありまして、個人的には「はい」「いいえ」も自分で作ったインテントで反応させたかったのですが、使ってみたところ「ビルトインインテント」が優先されているように感じました。というか、カスタムインテントで呼び出されることはありませんでした。「はい」も「いいえ」もそれぞれ同じインテントで受け取って、プログラミング内で、返答を変えたかったのですが…ちょっと残念。

最初はよくわからなかったsession_attributesという存在

clovaにはsession_attributesというものが存在しています。最初、これを理解することがなかなかできませんでしたが、やってみれば見るほど、必要な存在なのだなと認識するようになりました。session_attributesとは、clovaがスキルの起動中において、データとしてユーザーが発音した内容を記憶しておける部分になります。例えばユーザーが答えた「マカロニピザ」や「ペパロニピザ」というピザの種類の情報と「2枚」「3枚」という枚数の情報を、session_attributesに保存しておくことができます。その保存した情報を使って、プログラムを使ってピザ屋に情報を送信する、ということが可能になります。

pythonsdkではこんな感じ

import cek
extensionId = '************skill.first'
clova = cek.Clova(application_id=extensionId,default_language='ja', debug_mode=True)
response_builder = cek.ResponseBuilder(default_language='ja')
~~~~~~~~
flaskだとかwebアプリ部分
~~~~~~~~

# PizzaInntent(ピザの種類が呼ばれたときに呼び出されるインテント)
@clova.handle.intent('PizzaIntent')
def pizza_handler(clova_request):
message = '何枚欲しいの?'
end_session = False
response = response_builder.simple_speech_text(message=message, end_session=end_session)

response.session_attributes['pizza'] = clova_request.slot_value('pizzaName')

PizzaInntentが呼び出され、そのうち、pizzaName、ピザの種類を表す単語を取得します。 「マカロニピザを頼んで」という言葉のうち「マカロニピザ」という単語を取得します。

これをsession_attributesとして、{"pizza":"マカロニピザ"}というものに保存されます。

{
    "response": {
        "card": {},
        "directives": [],
        "outputSpeech": {
            "type": "SimpleSpeech",
            "values": {
                "lang": "ja",
                "type": "PlainText",
                "value": "何枚欲しいの?"
            }
        },
        "shouldEndSession": false
    },
    "sessionAttributes": {
        "pizza": "マカロニピザ",
     },
    "version": "1.0"
}

逆にsession_attributesから値を取り出す場合は

pizza = clova_request.session_attributes['pizza']

のような形になります。

このように、ユーザーがしゃべった内容を受け取ることで、プログラミング側であれこれ出来るようになるのです。


私、プログラミング歴短いんですけど、Clovaの開発を通して色々なことを学べていっていけているように感じます。とりあえず、今日は気になったところをサクッと書いてみました。来週もclovaについて書いていきます。よかった次も見ていってください。