LINEが販売しているClovaのスキルを作成したので,その方法を記しておきます.
Clovaスキルのチャンネル作成する
Clova Developer Centerに行き,ログインしてもらってスキルチャンネルを作成してください.
プロバイダーは自分のプロバイダーを選択,Extension IDは自分で適当に決めてください. あとは必要事項を入力して作成を押してください.
対話モデルの作成する
対話モデルにはインテントとスロットという二つの定義する必要があります.
- インテント
- サンプル発話を登録し,どういった発話を認識させるかを定義する
- スロット
- 実際に取得した単語の辞書を定義します.
インテントの作成する
カスタムインテントの+ボタンを押して,インテントを作成してください.
名前は適当でいいと思います.作成したら以下の画面になると思います.
そしてサンプル発話リストに,受け取りたい発話サンプルを入力してください.追加後は以下のような感じになると思います.今回は「たこ焼き食べたいな」の「たこ焼き」をスロット(辞書)に登録し,「たこ焼き」という単語をClovaが取得できるようにしてみます.最後に保存を押してくださいね.
スロットの作成する
カスタムスロットの+ボタンを押して,スロットを作成してください.
取得したい単語を入力して保存してください.今回はお好み焼きも追加しておきます.これによりたこ焼きに加えて,お好み焼きも取得できるようになります.
インテントにスロットを適応する
サンプル発話のどこの単語を取りたいかを指定します.取りたい単語をマウスか何かしらで選択すると,以下のような画面になると思います.
スロットの名前は適当で大丈夫です. そしてスロットタイプは先ほど作成したスロットを選択してください.
ここまでできたら左上のビルドを押してください.ビルドには3~5分ほどかかるので,その間にプログラムを書いていきましょう.
プログラムを作成する
今回はPythonを利用します.バージョンは3.6.5です.(3系だったらおそらく大丈夫です)
ライブラリとしては以下の二つを利用します.
install
pipを利用して,installします.
pip3 install flask pip3 install clova-cek-sdk
pip3で入らなかったら,pipでinstallしてください
コード
基本的には,起動時やインテント取得時などでハンドラを作成していきます.そして各ハンドラでは最後にメッセージを返してあげて終了です.アプリケーションIDは各自の設定したIDに置き換えてください.
from cek import Clova # 設定 application_id = "<Your Application ID>" clova = Clova(application_id=application_id, default_language="ja", debug_mode=False) # 起動時に実行 @clova.handle.launch def launch_request_handler(clova_request): return clova.response("こんにちは,たこ焼き食べたいなと言ってください") # 終了時に実行 @clova.handle.end def end_handler(clova_request): return # インテントを取得したら実行 @clova.handle.intent("FoodsIntent") def intent_handler(clova_request): # Konamonスロットタイプの単語を取得 food_name = clova_request.slot_value('Konamon') return clova.response(str(food_name)) # デフォルトはこれを実行 @clova.handle.default def default_handler(clova_request): return clova.response("すみません.もう一度お願いします") from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/', methods=['POST']) def my_service(): resp = clova.route(request.data, request.headers) resp = jsonify(resp) # make sure we have correct Content-Type that CEK expects resp.headers['Content-Type'] = 'application/json;charset-UTF-8' return resp if __name__ == "__main__": app.run()
実行
python3 main.py
ngrokによる,外部公開
別のターミナルを開いて,以下のコマンドを実行してください.
ngrokが入っていない場合は,brew cask install ngrok
で入ると思います.
ngrok http 5000 ## 実行結果 Session Status online Session Expires 7 hours, 49 minutes Version 2.2.8 Region United States (us) Web Interface http://127.0.0.1:4040 Forwarding http://****.ngrok.io -> localhost:5000 Forwarding https://****.ngrok.io -> localhost:5000
この実行結果のForwardingのhttpsの方をコピーしておいてください.
アドレスをClova Developer Centerに登録する
スキルのページで基本情報の修正を選択してください.そしてサーバー設定を選択してください.
先ほどコピーしたngrokのアドレスをサーバーのURLに貼り付けて,保存してください.
これであとは対話モデルをテストするだけです.
対話モデルのテスト
対話モデルのウィンドウのテストを選択してください.
さて,サンプル発話を入力して,テストを押してみましょう.
サーバーのURLが正しくできていた場合,ちゃんとレスポンスが返ってきてテスト結果に表示されたと思います.おそらく以下のような感じ.
ついでにお好み焼きもスロットに登録しておいたので,試してみます.
ちゃんと返ってきました.🎉
スロットに登録していない用語も試してみます.
Noneが返ってきました.これはPython側で値を取得しようとしたけど,値がなかったことを意味します.辞書に登録してないものも取得できたら嬉しいなと思ったりしたりしなかったり.
実機テスト
実機でテストする際はスキルを作成したLINEアカウントとClovaでのLINEアカウントを同一にしておくと,「Clova,<スキル名>を起動して」で起動してくれます.実機で試す時の設定が特に必要ないのがいいところだと思いました.
サーバーを外部サーバーにデプロイする
私はherokuを利用しましたが,みなさんお好きな場所に置いてください.デプロイについては各自検索してもらえると助かります.🙇♂️
まとめ
今回はスキルの作成方法をざっくり説明してきました.jsでサーバーを書いている人が多い印象でしたが,今回は個人的に好きなPythonで書きました.みなさんもぜひClovaのスキルを作成してみてくださいね.😎
もっと拡張したい場合は,ライブラリの英語の公式ドキュメントを頑張って読んでもらえると助かります.