チョッパヤとか言いながら、2部構成です。
前回まではスキル作成のための登録を行いました
さて、これからが本番です。
- スキルで使う単語とその同義語を登録
- スキルで使う文章を登録
- スキルに対して呼びかけがあった時に、裏で行う処理の記述
- その処理をIBM Cloud Foundryにデプロイ
- Web上と実機でテスト
こんな感じで開発を進めていきます。
スキルで使う単語とその同義語を登録
まずはスキルで使う単語と同義語を登録します。Dialogflowで言うところのEntitiesです。
スキルの一覧から、対話モデルの「修正」を選択し、対話モデルの開発を始めます。
すると、スキルのダッシュボードが表示されるので、カスタムスロットの部分の「+」マークを押して追加をします。
たとえば、京急関連のスキルを作る際に、想定しているClovaの呼びかけで京急という単語を含む場合、人によっては京急線と言うかもしれないし、京浜急行と言うかもしれません。そのあたりのバリエーションをカスタムスロットで吸収するようにしていきます。
スキルで使う文章を登録
これはDialogflowでも単語は同じでIntentです。
たとえば、京急線の運行情報を調べるスキルを作るとします。京急という単語自体のバリエーションはカスタムスロットで吸収できましたが、そもそもユーザーの質問の仕方はまちまちで「京急の運行情報を教えて」とちゃんと行ってくれる人から「京急動いてる?」「京急どう?」みたいな言い方まで想定されます。ただ、どれもやりたいことは「京急の運行情報を知りたい」ということなので、同じインテントでいろいろな言い回しを登録していきます。
裏で行う処理の記述
ここまでできると、京急の運行情報を知りたいときに、色んな言い回しでClovaに話しかけても、なんとか対応できるようになりました。しかし、実際にどういうセリフを返すのかはまだ未実装です。
その部分はCEKから提供されているSDKをつかって実装していきます。いろいろな言語向けにSDKが準備されていますが、今回はNode.jsで実装していきます。
またまた、dotstudioさんの素晴らしいチュートリアル記事を参考にさせていただきました。ごめんなさい、コピペしました。ごめんなさい。
適当にフォルダをほって、npm init
していきます。
mkdir keikyu cd keikyu npm init -y
そして、CEKのSDKなどをインストールしていきます。
$ npm install @line/clova-cek-sdk-nodejs express body-parser --save-dev
最後に、app.js
ファイルを作成し、以下のようにコーディング。
const clova = require('@line/clova-cek-sdk-nodejs'); const express = require('express'); const clovaSkillHandler = clova.Client .configureSkill() .onLaunchRequest(responseHelper => { responseHelper.setSimpleSpeech( clova.SpeechBuilder.createSpeechText('こんにちは、ポキオです!') ) }) .onIntentRequest(responseHelper => { const intent = responseHelper.getIntentName(); const sessionId = responseHelper.getSessionId(); responseHelper.setSimpleSpeech( clova.SpeechBuilder.createSpeechText('京急は神です!') ) }) .onSessionEndedRequest(responseHelper => { const sessionId = responseHelper.getSessionId(); clova.SpeechBuilder.createSpeechText('さようなら!') }) .handle(); const app = new express(); const port = process.env.PORT || 3000; const clovaMiddleware = clova.Middleware({ applicationId: "スキルのIDをここに記載" }); app.post('/clova', clovaMiddleware, clovaSkillHandler); app.listen(port, () => console.log(`Server running on ${port}`));
ここでは、何を聞かれても「京急は神です」と答えるだけのスキルを実装しました。必要であれば、onIntentRequest()
内でインテントの種類を見分けて、そこからWebAPIをたたくなどして、レスポンスの文言を動的に変えるなどの実装が必要になります。
その処理をIBM Cloud Foundryにデプロイ
おとなしくLambdaを使えばいいものを、大好きなIBM Cloudを積極的に使っていきます。
とはいえ、ほぼLambdaです。
大切なことなので何回も言いますが、クレジットカード登録不要の無料アカウント「ライトアカウント」でも、無料枠を使ってIBM Cloud Foundryを使うことができますので、控えめに言ってかなりおすすめです。
とりあえず、Cloud FoundryのNode.jsのスペースを作りまして、そこにさっき書いたコードをデプロイしていきます。
デプロイする前に、IBM Cloud Foundry向けのおまじないをします。
IBM Cloud 上で稼動する Web アプリケーション開発方法 – Node.js 編www.ibm.com
下記のように、ファイルを2つ作る必要があります。
Procfile ファイルの作成
IBM Cloud 上でメモ帳アプリケーションを開始するための実行コマンドは Procfile ファイルで指定します。下記内容で作業ディレクトリーに「Procfile」 (拡張子なし) ファイルを作成ください。テキスト・エディターによって拡張子が付加されてしまう場合がありますので、ご注意ください。
Procfile ファイル (C:\Bluemix\MemoApp\Procfile)
web: node app
.cfignore ファイルの作成
IBM Cloud 上へメモ帳アプリケーションをアップロードする際、除外したいディレクトリーやファイルは.cfignore ファイルで指定します。下記内容で作業ディレクトリーに「.cfignore」ファイルを作成ください。npm モジュールは package.json ファイルによって別途インストールされますので、node_modules ディレクトリーを除外する必要があります。
.cfignore ファイル (C:\Bluemix\MemoApp.cfignore)
node_modules
あとは、IBM Cloud CLIをインストールしさえすれば、簡単にターミナルからコードをデプロイできます。
cd keikyu bluemix api https://api.ng.bluemix.net bluemix login -u (ユーザー名) -o (ORG名) -s (スペース名) bluemix app push (Foundry App名)
これでデプロイ完了です。先程のスキルのExtensionサーバーのURLに、このIBM Cloud FoundryのURLに/clova
を足したものを入力すればOKです。
Web上と実機でテスト
スキルのダッシュボードに戻ってきて、左上のビルドを押してから(この処理が数分かかる・・・)、テストという項目をクリックして、実際に文章を入力してテストをしてみましょう。
サービスの応答の部分に「京急は神です!」と表示されています。うまく行ってそうなので、実機でテストしたいと思います。
スマホのClovaアプリを開き、スキルストアの画面を開きます。LINE Developerと同じLINE IDであれば、テスト中のスキルというところに先程作成したスキルが表示されるはずなので、これを有効にしてあげると実機でも動作確認ができます。
こんな感じでオレオレClovaスキルが簡単にできてしまいます。みなさんもぜひClovaスキル開発をしてみましょう。