外部ライターの田中正吾です。今回はLINE Clova Extensions Kitとenebularを連携して会話させてみます。
LINE Clova Extensions Kit とは
【LINE Clova】「Clova」のスキルを開発・拡張できる「Clova Extensions Kit」を本日より一般公開 | LINE Corporation | ニュース
LINE Clova Extensions Kit とは、「Clova」のスキルを開発・拡張できるキットです。
LINE Clova Extensions Kit(以後、CEK)は、ユーザーとClovaの対話シナリオ(対話モデル)と、ClovaとExtension間のやりとりを担当しています。
CEKとCustom ExtensionはHTTPリクエストでやり取りしています。対話シナリオに合わせた応答をするのがCustom Extensionですが、enebularの場合はNode-REDベースのFlowという機能でデータのやり取りを手軽に調整することが出来るため相性が良いです。
また、Custom ExtensionのサーバーはHTTPSでやりとりできる必要がありますが、enebularでデプロイされた仕組みはHTTPSが可能なサーバーで、すぐにやり取りが可能です。
今回の仕組み
早速ですが、こちらをenebularとつなげてみます。
今回はこのように、対話を応答するExtensionサーバーにenebularを使って、起動時のセリフ「はい!私は「エネブラー」から応答しているLINEボットです。」という応答して起動します。
また、対話モデルを登録して「元気ですか?」という質問をキャッチしてenebularのExtensionサーバーから「はい、元気です!」と応答させる仕組みも作ります。
enebular Discover Flowからの取り込み
まず、対話を応答するExtensionサーバーを作ります。enebularからはDiscover Flowからの読み込みを行います。
flow-simple-clova-cek-enebular
こちらのDiscover Flowを自分のプロジェクトに取り込みましょう。
Forkボタンを押します。
Fork先を設定します。
取り込むプロジェクトを指定します。
Default Role for Assetはsuperdevを指定します。
Fork ボタンを押します。
Fork完了です。
プロジェクトページに戻り登録を確認できたらenebularの設定は完了です。
これでenebularの準備は完了です。
スキルチャネルを新規作成する
このドキュメントについて – Clova Developer Center β
2018/07/24時点でのドキュメントを参考にしています。
まず、LINE Developersでスキルチャネルを新規作成していきます。
呼び出し名を決める
簡単なExtensionを作成する – Clova Developer Center β
こちらを参考に設定を進めていきます。
気をつけるのは呼び出し名です。LINEが音声認識しやすいものを模索しましょう。今回は サンプルのツール と名付けています。
他の設定はドキュメントに従って進めていきます。
ExtensionサーバーのURLを決めます
つづいてサーバー設定ExtensionサーバーのURLを決めます。
ExtensionサーバーのURLを探します。
これは今回設定したenebularのFlowをEdit Flowで開きます。
フローの上部の i アイコンからURL確認します。
Session Remaining Timeはこのサーバーの使用できる残り時間です。こまめに見て、もし制限時間が近くなったら、Edit Flowから起動し直して再度変更されたURLを見に行きましょう。
今回はこのURLに /clova をくっつけたものを登録します。
他の設定はドキュメントに従って進めていきます。
対話モデルを作っていきます。
つづいて設定を進めていき、対話モデルの設定を行います。
スロットタイプを設定
カスタムスロットタイプを作成します。
スロット名はGenkiSlotで。
スロットファイルをアップロード
https://raw.githubusercontent.com/1ft-seabass/LINECEKGenkiModelSample/master/GenkiSlot.tsv
このURLの内容をローカルにUTF-8のテキストファイルでGenkiSlot.tsvとして保存します。
作成できたら辞書をアップロードします。
アップロードウィンドウが表示されます。
ファイル選択で、さきほどのGenkiSlot.tsvを指定します。
アップロード完了します。設定が反映されます。
今回は元気という文言を捉えるため、このようにスロットタイプを設定しました。
確認できたら保存ボタンを押します。
インテントを作成
続いて、インテントを作成します。先ほどのスロットをサンプル発話リストに関連付けていきます。
インテント名はGenkiIntentで。
インテントファイルをアップロード
https://raw.githubusercontent.com/1ft-seabass/LINECEKGenkiModelSample/master/GenkiIntent.tsv
このURLの内容をローカルにUTF-8のテキストファイルで GenkiIntent.tsv として保存します。
作成できたらインテントファイルをアップロードします。
アップロードウィンドウが表示されます。
ファイル選択で、さきほどの GenkiIntent.tsv を指定します。
アップロード完了します。設定が反映されます。
元気という言葉が引っかかるよう、このようにサンプル発話リストとスロットリストが設定されています。
確認できたら保存ボタンを押します。
ビルドする
ここまで設定できたらいよいよビルドです!
出来上がりを待ちます!
ビルドをしないと、発話の認識だけでなく、呼び出し名の認識もできないので、このあとのテストで呼び出しすらできず困るので、ビルドを見届けましょう!
テストしてみる
ビルドができたらテストしてみましょう。
メニューからテストを押します。
debug ノードで、すでに /clova から入ってくるデータを確認することができます。
debug タブを表示して待ちましょう。
「元気ですか」と入力してテストをクリックします。
うまく設定できていれば、このように、発話が解析されて返答されます!
enebularのdebug タブを見に行くと、送られてきたデータの内容が表示されています。
これで動作確認はできました!
動かしてみる
では、実際に、起動から動かしてみましょう!
注意点:実際に運用するときは
実際に運用されるときの注意点です。今回のフローエディターで表示されているURLは一時的なもので、すぐ動作を体験したいときは良いですが、実際に運用するときには向きません。
たとえば、URLが一定時間で変化したりインスタンスの制限があります。
ということで、もし運用をしたくなったら、enebularで作った動作を書き出すDeployを行いましょう。
私の場合は、HerokuにDeployするHeroku DeployがHerokuアカウントを持っているとすぐ使えるので、今回もHeroku Deployしています。
まとめ
LINE Clova Extensions Kitとenebularを連携して会話させることができました。インテントとスロットを駆使して普段の会話のキーワードをうまく釣り上げて、enebular側で操作していく実装はとても楽しかったです。
今回は元気というキーワードだけでしたが、enebularでは視覚的にデータの流れが調整できるので、新しくキーワードを加えて会話に合わせた細かな調整の試行錯誤ができることでしょう。
さらに、その先にあるデータ。たとえば、enebularが得意としているIoTデバイスのセンサー値を話させたり、はたまた、音声によってデバイスを動かすようなこともできる未来を感じました!
このように連携ができたので、引き続き、LINE Clova Extensions Kitとenebularを試していこうと思います。