Androidのメモとか

ポキオの日記です。今日も遅延してない。

Clova + Clova Extension Kit + IBM Cloud FoundryでClovaスキルをチョッパヤで作ってみる(後半)

チョッパヤとか言いながら、2部構成です。

ポキオ Clova Extension Kit with IBM Cloud Foundry

前回まではスキル作成のための登録を行いました

relativelayout.hatenablog.com

さて、これからが本番です。

  • スキルで使う単語とその同義語を登録
  • スキルで使う文章を登録
  • スキルに対して呼びかけがあった時に、裏で行う処理の記述
  • その処理をIBM Cloud Foundryにデプロイ
  • Web上と実機でテスト

こんな感じで開発を進めていきます。

スキルで使う単語とその同義語を登録

まずはスキルで使う単語と同義語を登録します。Dialogflowで言うところのEntitiesです。

ポキオ Clova Extension Kit with IBM Cloud Foundry

スキルの一覧から、対話モデルの「修正」を選択し、対話モデルの開発を始めます。

ポキオ Clova Extension Kit with IBM Cloud Foundry

すると、スキルのダッシュボードが表示されるので、カスタムスロットの部分の「+」マークを押して追加をします。

ポキオ Clova Extension Kit with IBM Cloud Foundry

たとえば、京急関連のスキルを作る際に、想定しているClovaの呼びかけで京急という単語を含む場合、人によっては京急線と言うかもしれないし、京浜急行と言うかもしれません。そのあたりのバリエーションをカスタムスロットで吸収するようにしていきます。

スキルで使う文章を登録

これはDialogflowでも単語は同じでIntentです。

ポキオ Clova Extension Kit with IBM Cloud Foundry

たとえば、京急線の運行情報を調べるスキルを作るとします。京急という単語自体のバリエーションはカスタムスロットで吸収できましたが、そもそもユーザーの質問の仕方はまちまちで「京急の運行情報を教えて」とちゃんと行ってくれる人から「京急動いてる?」「京急どう?」みたいな言い方まで想定されます。ただ、どれもやりたいことは「京急の運行情報を知りたい」ということなので、同じインテントでいろいろな言い回しを登録していきます。

裏で行う処理の記述

ここまでできると、京急の運行情報を知りたいときに、色んな言い回しでClovaに話しかけても、なんとか対応できるようになりました。しかし、実際にどういうセリフを返すのかはまだ未実装です。

その部分はCEKから提供されているSDKをつかって実装していきます。いろいろな言語向けにSDKが準備されていますが、今回はNode.jsで実装していきます。

またまた、dotstudioさんの素晴らしいチュートリアル記事を参考にさせていただきました。ごめんなさい、コピペしました。ごめんなさい。

dotstud.io

適当にフォルダをほって、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を積極的に使っていきます。

www.ibm.com

とはいえ、ほぼLambdaです。

ポキオ Clova Extension Kit with IBM Cloud Foundry

大切なことなので何回も言いますが、クレジットカード登録不要の無料アカウント「ライトアカウント」でも、無料枠を使って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 Extension Kit with IBM Cloud Foundry

サービスの応答の部分に「京急は神です!」と表示されています。うまく行ってそうなので、実機でテストしたいと思います。

ポキオ Clova Extension Kit with IBM Cloud Foundry

スマホのClovaアプリを開き、スキルストアの画面を開きます。LINE Developerと同じLINE IDであれば、テスト中のスキルというところに先程作成したスキルが表示されるはずなので、これを有効にしてあげると実機でも動作確認ができます。

こんな感じでオレオレClovaスキルが簡単にできてしまいます。みなさんもぜひClovaスキル開発をしてみましょう。

「Androidのメモとか」は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。

このブログは個人的なメモ書きであったり、考えを書く場所であります。執筆者の所属する団体や企業のコメントや意向とは無関係であります。また、このブログは必ずしも正しいことが書かれているとは限らず、誤字脱字や意図せず誤った情報を載せる場合がありえます。それが原因で読者が不利益を被ったとしても、執筆者はいかなる責任も負いません。ありがとうございます。