Extensionのデザインガイドライン

新規のExtensionを作成する際、すでに持っている技術やサービスを、どうすればユーザーが心地よく利用できるか考慮して設計する必要があります。このドキュメントは、ユーザーの役に立つサービスを提供するために、Extensionを設計する際に守るべき事項についてのガイドラインを提供します。

ウェブサービスの情報照会、ショッピングおよび宅配サービス、対話型のゲーム、放送またはリアルタイムのブリーフィング、IoTデバイスの制御、その他の音声を使用したアクティビティやサービスを提供するExtensionを作成することができます。Extensionを設計するとき、以下の内容に準ずる必要があります。ちなみに、ここで扱っている内容はExtension設計の基本推奨事項で、簡単な例を挙げながら説明されています。お持ちのビジネス経験とサービスの特性によって、もっと多くの可能性を持つExtensionに設計・実装することもできます。

  • 目標を設定する
  • ユーザーシナリオスクリプトを作成する
  • スキル名/呼び出し名を定義する
  • 対話モデルを定義する
  • 応答タイプを決める
  • プラットフォームでサポートされている音声圧縮形式
  • CLOVAスキルのコンテンツガイドライン
  • 継続的にアップデートする

目標を設定する

Extensionの設計は、まず最初にExtensionの目標を設定することから始まります。Extensionの目標とは、具体的にユーザーに何をどうやって届けるかを決めることです。Extensionの目標を設定すると、これからユーザーにどんな機能を提供して、ユーザーがその機能をどんなシナリオで使用するか予測する根拠となります。Extensionの目標として、次のような根本的で抽象的な目標が一例として挙げられます。

ユーザーにピザの宅配サービスを提供する。

このように設定したExtensionの目標は、もっと具体的な目標に書き換えることができます。具体的な目標を定義する際、次の項目を参考する必要があります。

  • 具体的な目標は、ユーザーの立場で作成します。
  • 具体的な目標は、ユーザーがどうやってExtensionを呼び出すかを含めて作成してください
  • 具体的な目標を達成するための必要条件と、獲得する結果を組み合わせて作成することをお勧めします。必要条件には、次のようなものがあります。
    • 事前に必要な動作または状態
    • Extensionが必要とする機能やリソース(GPS、カメラ、マイク)
    • 外部サービスまたはプラットフォームの情報(モバイルデバイスの連絡先、SNSアカウントの情報)
  • 作成した具体的な目標の集合が、達成しようとしているExtensionの目標の範囲をすべてカバーしているか確認してください。
  • 1つの具体的な目標は、サービスで区別して処理する1つのユーザーアクションの単位と同じレベルに作成することをお勧めします。

以下は、ピザの宅配サービスを考慮して作成した具体的な目標の例です。

目標ID カテゴリ 目標
#1 サービスの呼び出し ユーザーが「ピザボットを起動して」とCLOVAに呼びかけると、ピザの宅配サービスを使用できる。
#2 利用の提案や推奨 ピザの宅配サービスが開始されると、ユーザーはピザの注文に必要なアクションの案内を受けることができる。
#3 サービス提供者の確認および選択 ユーザーはピザのサービス提供者を選択できる。
#4 メニューの確認および選択 ユーザーはピザのメニューを確認して選択できる。
#5 注文および支払い ユーザーはピザの種類、数量および配達先の住所を入力して、ピザを注文できる。
#6 利用の提案や推奨 ユーザーがピザのサービス提供者を選択すると、最近の注文履歴からピザの種類、配達先および支払い方法が提案される。
#7 メニューの提案や推奨 ユーザーが他のメニューをリクエストすると、別のメニューを推奨される。
#8 注文および支払い ユーザーはカメラを使用してクーポンを利用できる。
#9 配達状況の確認 注文が完了すると、ユーザーはピザの準備状況および配達状況を確認できる。
#10 サービス終了 ユーザーが希望する作業を完了すると、サービスを終了できる。
... ... ...

メモ

こうして作成された目標は、ユーザーシナリオのスクリプトを作成する時や、対話モデルを定義する際の基盤情報となります。また、Extensionを配布する際にその情報を登録する必要があります。その情報に基づいて、Extensionが正しく動作するか審査を受けることになります。

ユーザーシナリオスクリプトを作成する

ユーザーシナリオのスクリプトは、ユーザーとCLOVAの対話をあらかじめ想定したものです。具体的な目標に基づき、様々なユーザーシナリオで起こるユーザーとCLOVAの対話を予測することで、サービスの利便性、流れなどを点検することができます。目標を設定するで決めた具体的な目標に基づいて、予想されるユーザーシナリオのスクリプトを作成します。後ほど対話モデルを登録する際に再使用できます。

ユーザーシナリオのスクリプトは、次の事項を考慮して作成することをお勧めします。

  • 書き言葉ではなく、話し言葉で作成してください。
  • Extensionが情報を提供する際、情報や選択肢を与えすぎないでください。
  • Extensionはユーザーに対して次の動作に関する案内や、サービスの使用を推奨する案内を応答に含める必要があります。
  • 繰り返しの表現は避けることをお勧めします。
  • 常に突発的なリクエストや状況が発生する可能性があるということを念頭に置く必要があります。

以下は、ユーザーシナリオのスクリプトを作成した例です。

  • 連続するユーザーリクエストタイプのシナリオ
発話の主体 サンプル発話 関連する目標ID
ユーザー ピザボットを起動して。 #1
Extension 登録されたピザ屋は、XXピザとYYピザがあります。どちらにしますか? #2、#3
ユーザー XXピザにして。 #3
Extension コンビネーションピザ、ペパロニピザ、スーパー・シュプリームピザがあります。どれを注文しますか? #4
ユーザー コンビネーションピザを注文して。 #4
Extension XXピザのXX店に、コンビネーションピザ1枚、コーラ1.5リットル1本を新宿区新宿4丁目1-6に配達します。合計金額は2,300円、お支払い方法は配達員に現金払いです。よろしいですか? #3、#4、#6
ユーザー 他のメニューにして。 #7
Extension スーパー・シュプリームピザ1枚、コーラ1.5リットル1本を新宿区新宿4丁目1-6に配達します。合計金額は2,650円、お支払い方法は配達員に現金払いです。よろしいですか? #2、#7
ユーザー うん。 #5
Extension 注文が完了しました。 #2
ユーザー ピザボットを終了して。 #10

スキル名/呼び出し名を定義する

新しくExtensionを作成する際には、スキル名 と 呼び出し名 を設定する必要があります。 スキル名 とは、スキルストアに表示されるCustom Extensionの表示名です。また、呼び出し名 は、ユーザーがExtensionを起動する際にCLOVAに話しかけるための名称です。

スキル名と呼び出し名は、必ずしも同じ表記である必要はありません。ただし、スキル名と呼び出し名の内容が大きく異なる場合や、コンテンツの内容と無関係な名称、またはユーザーを混乱させる可能性のあるものは避けてください。

スキル名/呼び出し名の要件

スキル名/呼び出し名は、次の条件を満たしていることが必要です。

  1. 単語1語でないこと
  2. 人名や地名、場所でないこと
  3. CLOVAの機能に影響があるフレーズを含まないこと
  4. 他スキルと同一または類似する名称でないこと
  5. 誤解を招く表現が含まれないこと
  6. 利用規約に違反していないこと
  7. その他の留意事項

1. 単語1語でないこと

単語1語のスキル名/呼び出し名は、許可されません。2語以上であっても「スポーツニュース」等の汎用的な言葉は、審査中に他者が取得して使用できなくなる場合があります。また、ビルトインスキルに影響する可能性がある場合は、将来的に登録された呼び出し名でスキルを起動できなくなることがありますので、あらかじめご了承ください。これらの状況を避けるために、呼び出し名には開発者名やサービス名等をかけ合わせることを推奨します。

  • 例:「太郎のスポーツニュース」

例外として、独自のブランドまたはサービス名等は1語であったとしても利用することができますが、他者の知的財産権を侵害するものはこの限りではありません。

2. 人名や地名、場所でないこと

人名や地名、場所のみで構成されたスキル名/呼び出し名は許可されません。

  • 例:「太郎」「山田太郎」「東京」「東京都港区」

例外として、スキル名/呼び出し名の一部として使用することは可能です。

  • 例:「太郎のおしゃべりスキル」

3. CLOVAの機能に影響があるフレーズを含まないこと

CLOVAの機能に影響があるフレーズを含めることはできません。

  • 呼び名
    • 例:「ねぇCLOVA」
  • CLOVAの既存機能に影響があるフレーズ
    • 例:「LINE送って」「今日の天気は?」「おもしろニュース」「今日の運勢」
  • スキルを実行、終了するフレーズ
    • 例:「を起動して」「を開いて」「を終了して」
  • 呼び出し名と呼び出す目的を組み合わせるフレーズ
    • 例:「を使って」 <呼び出し名(ピザボット)>を使って<呼び出す目的(ペパロニピザを注文して)>

なお、呼び出し名は、呼び名やスキルを実行するフレーズと組み合わせたときに、自然な言い回しである必要があります。

4. 他スキルと同一または類似する名称でないこと

他のスキルで利用されているスキル名/呼び出し名は使用しないでください。また、呼び出し名が他スキルと類似している場合や、システムに悪影響する場合も許可されない可能性があります。

5. 誤解を招く表現が含まれないこと

以下に該当する場合は、呼び出し名が許可されません。

  • 第三者または、LINE株式会社および関連会社のサービスと誤解される可能性がある。
    • 例:「ブラウンのおすすめレシピ」
  • スキル名や呼び出し名と、コンテンツの内容がそれぞれ異なる、または誤解を招く可能性がある。
    • 例:スキル名「ネコちゃんの鳴き声」→呼び出し名「ワンちゃんの鳴き声」
  • 呼び出し名(サブ)が呼び出し名(メイン)の内容と異なるまたは表記や音声認識のゆらぎに関係のない、全く異なる呼び出し方を設定する。
    • 例:呼び出し名(メイン)「ネコちゃんの鳴き声」→呼び出し名(サブ)「ワンちゃんの鳴き声」

6. 利用規約に違反していないこと

CLOVA Extensions Kit利用規約を遵守しなければなりません。第三者の権利の侵害したり、わいせつな表現を用いたりした呼び出し名であってはなりません。

7. その他の留意事項

  • 原則として、Extensionのスキル名と呼び出し名は、日本のユーザーを対象としてください。例外として、独自のブランド名や知的財産、名前や場所等の固有名詞等は使用可能です。
  • 呼び出し名はユーザーが正確に発話しやすく、他の言葉と聞き間違えにくいものである必要があります。
  • 一般的に読み方がわかりづらい呼び出し名は使用しないでください。スキル名に読み方がわかるように括弧書きで記載するなど、ユーザーがわかるように補足することをお勧めします。
  • ガイドラインは変更される可能性があり、すでに許可されたスキル名/呼び出し名が使用できなくなる可能性もありますので、あらかじめご了承ください。

メモ

一部例外がある場合がありますので、判断が難しい場合は、審査時にコメントを記載いただきますようお願いいたします。

呼び出し名(サブ)を定義する

呼び出し名は、音声認識結果によって表記がゆらぐ可能性があります。スキルを正しく呼び出すために、呼び出し名(メイン) の他に 呼び出し名(サブ) を設定することが可能です。

  • 呼び出し名(サブ)
  • 音声認識結果を確認する

呼び出し名(サブ)

呼び出し名(サブ) とは、表記や音声認識のゆらぎを補ってスキルを起動しやすくするものです。

例えば、「ネコちゃんの鳴き声」という表記のみが呼び出し名(メイン)に登録されている場合、音声認識の結果が「ねこちゃんの泣き声」となってゆらぎが発生すると、スキルを正しく起動できないことがあります。

このような場合は、次のように 呼び出し名(サブ) を設定すると、スキルを起動しやすくすることができます。

呼び出し名(メイン) 呼び出し名(サブ)
ネコちゃんの鳴き声 ねこちゃんの泣き声
猫チャンのなき超え
ねこちゃんとなきごえ
ねこちゃんこ鍋

呼び出し名(サブ)を定義する際は発話テストを行って音声認識結果を確認し、実際に認識された表記を設定することを推奨します。

音声認識結果を確認する

呼び出し名(サブ)を定義する際は、対話モデルのテストの発話履歴機能を利用して、次のようなパターンでCLOVAデバイスに呼びかけた場合の音声認識結果を確認します。

  • 「ねぇCLOVA、<呼び出し名>を起動して」
  • 「ねぇCLOVA、<呼び出し名>を開いて」
  • 「ねぇCLOVA、<呼び出し名>につないで」
  • 「ねぇCLOVA、<呼び出し名>」

発話テストを複数回繰り返し、その中で多かった認識結果から<呼び出し名>にあたる部分の表記を抜き出してExtensionの基本情報の呼び出し名(サブ)に入力します。

CLOVAデバイスの実機を使用して発話履歴(音声認識の結果)を確認する手順については、CLOVAデバイスでテストするを参照してください。

メモ

「を起動して」などの実行フレーズを含まない、「ねぇCLOVA、<呼び出し名>」といった呼び出し名だけによるスキル起動は、CLOVAの既存機能に影響がない場合のみ可能です。

なお、CLOVAの機能拡張が行われた場合や、音声認識結果の表記のゆらぎが再度発生した場合は、呼び出し名のみでスキルを起動できなくなる可能性があります。

対話モデルを定義する

音声から認識されたユーザーのリクエストは、まずサービスの提供に必要なフォーマット(JSON)に変換され、Extensionに渡されます。例えば、ピザの宅配サービスを提供するCustom Extensionがあると仮定します。その場合、ユーザーから「ペパロニピザを2枚注文して」のようなリクエストが入力されます。CLOVAの対話モデルとは、このようなユーザーのリクエストを、次のようにサービスの提供に必要な標準形式(JSON)に変換するルールを定義したものです。

対話モデルをCLOVA Developer Centerで定義するには、まず対話モデルとは何であるかを理解する必要があります。対話モデルをきちんと理解せずに定義してしまうと、パフォーマンスが低いか、ユーザーのリクエストを正しく処理できないExtensionになる可能性があります。ユーザーの実際の意図をうまく把握する対話モデルを作成するためには、対話モデルを作成する前に、まず以下の内容を理解して、設計に反映する必要があります。

  • インテント
  • スロット
  • サンプル発話

インテント(Intent)

インテントは、Extensionが処理するユーザーのリクエストを区分したカテゴリーです。主にユーザーの発話で使われた動詞型の要素によって区別されます。インテントには、カスタムインテントとビルトインインテントの2種類があります。

  • カスタムインテント
  • ビルトインインテント

カスタムインテント

カスタムインテントはビルトインインテントとは違って、提供するサービスに特化したユーザーリクエストのカテゴリーを定義します。次のような内容が定義されています。

  • サービスが処理するユーザーリクエストのカテゴリ
  • ユーザーリクエストのカテゴリーごとに必要とする情報(スロット)
  • ユーザーリクエストのカテゴリーごとに予想される様々なサンプル発話

先ほど例として挙げたピザの宅配サービスの場合、次のようなリクエストのカテゴリーが考えられます。

  • メニュー確認のリクエスト
  • 注文のリクエスト
  • 配達状況確認のリクエスト

ピザの宅配サービス(Extension)の対話モデルを定義するということは、メニュー確認インテント、注文インテント、配達状況確認インテントのようにインテントのリストを宣言して、それぞれのインテントが必要とする情報(スロット)とサンプル発話を列挙するということです。従って、対話モデルを定義する際、一番最初に、Extensionが処理するリクエストのカテゴリーを定義し、列挙する必要があります。これはExtensionを開発する際に、ビジネスロジックでプログラムの分岐を分ける基準にもなります。

ユーザーリクエストのカテゴリーを区分したら、次はカテゴリーごとに名前を定義します。 これがインテント名です。ピザの宅配サービスの「注文インテント」のようなものは、あくまで抽象的な概念です。それをExtensionが認識できる具体的な名前、つまり識別しやすい文字列として宣言してください。例えば、「注文インテント」は、「OrderPizza」のような名前で宣言することができます。

次に、「OrderPizza」インテントがユーザーの発話から取得する情報(スロット)を定義し、処理できる様々なサンプル発話を列挙します。

ビルトインインテント

ビルトインインテントは、CLOVAプラットフォームが一部の共通したユーザーリクエストのカテゴリーを決め、それを共有するために宣言した仕様です。頻繁に発生するインテントとして、次のようなリクエストがあらかじめ定義されています。

ビルトインインテントの名前 意図 ユーザーのサンプル発話
Clova.CancelIntent 対話キャンセルのリクエスト キャンセル
Clova.FallbackIntent 予想していない発話の入力を処理するリクエスト (予想していない発話)
Clova.GuideIntent ヘルプのリクエスト 使い方を教えて
Clova.NextIntent 次のコンテンツをリクエストする 次、次の曲を再生して
Clova.PauseIntent 再生を一時停止するようにリクエストする ちょっと止めて、止めて
Clova.PreviousIntent 前のコンテンツをリクエストする 前、前の曲を再生して
Clova.ResumeIntent 再生を再開するようにリクエストする 再生を再開して、再び再生して
Clova.YesIntent 肯定の返事(はい、Yes) はい
Clova.NoIntent 否定の返事(いいえ、No) いいえ

スロット

スロットは、ユーザーの発話から取得される情報です。ユーザーの発話で使われた名詞型の要素がスロットになります。カスタムインテントを定義する際、そのインテントが必要とするスロットを一緒に定義する必要があります。ソフトウェアの開発に例えると、インテントは特定のカテゴリーのユーザーリクエストを処理する関数またはハンドラーで、スロットはその関数やハンドラーに必要なパラメータに該当します。先ほど例として挙げた「ペパロニピザを2枚注文して」というユーザーの発話の場合、「OrderPizza」インテントを処理するには、「ペパロニピザ」のような、ピザの種類に関する情報と、「2枚」のような数量に関する情報が必要なことがわかります。インテントを定義する際、そのインテントがどんな情報(スロット)を必要とするかをあらかじめ把握しておく必要があります。

また、スロットを宣言する際には、そのスロットがどんなタイプの情報かを区分する必要があります。それがスロットタイプです。スロットタイプには、ビルトインスロットタイプとカスタムスロットタイプの2種類があります。

  • ビルトインスロットタイプ
  • カスタムスロットタイプ

ビルトインスロットタイプ

ビルトインスロットタイプは、CLOVAであらかじめ定義されている情報のタイプです。すべてのサービス(Extension)に共通で使用できる情報の表現が定義されています。ビルトインスロットタイプは、主に時間、場所、数量などのような情報を認識する必要がある場合に使用されます。上記の発話の場合、「2枚」に該当する情報を認識するためにビルトインスロットタイプを使用することができます。CLOVAは、次のようなビルトインスロットタイプを提供しています。

地域・都市名を取得する
ビルトインスロットタイプ 説明
CLOVA.JP_ADDRESS_KEN 国内の行政地域のうち、都道府県名を提供します(例:"東京都"、"京都府"、"福岡県"、"北海道")
CLOVA.JP_ADDRESS_SHI 国内の行政地域のうち、市町村名を提供します(例:"武蔵野市"、"奥多摩町"、"小笠原村" )
CLOVA.JP_ADDRESS_KU 国内の行政地域のうち、東京特別区(23区)名と行政区名を提供します(例:"新宿区"、"中村区"、"淀川区")
CLOVA.WORLD_COUNTRY 世界の国名に相当する表現を提供します(例:"カナダ"、"日本"、"大韓民国"、"フランス")
CLOVA.WORLD_CITY 世界の都市名表現を提供します(例:"ワシントンD.C."、"ローマ")
日時・時間を取得する
ビルトインスロットタイプ 説明
CLOVA.DATETIME 日付や時刻表現を提供します。現在の日付またはそれより先の日時を返します。(例:"1日"、"10分30秒"、"午前9時"、"1時間前"、"12時"、"正午"、"2017年8月4日")
CLOVA.DATETIME_RECENT 日付や時刻表現を提供します。現在の日付またはそれより前の日時を返します。(例:"火曜日"、"7月29日"、"7月")
CLOVA.DURATION 期間の表現を提供します(例:"1秒間"、"1分間"、"1時間"、"1週間"、"1日間"、"一ヶ月"、"1年間")
CLOVA.OFFICIALDATE 公休日を提供します(例:"元日"、"成人の日")
CLOVA.ORDER 順序表現を提供します(例:"次"、"前")
CLOVA.RELATIVETIME 相対的な時間表現を提供します(例:"これから"、"後で"、"しばらく後"、"今"、"さっき")
数値を取得する
ビルトインスロットタイプ 説明
CLOVA.WHOLE_NUMBER 0と正の整数、数字で構成された文字列の表現を提供します(例:"0123 4567")
単位を取得する
ビルトインスロットタイプ 説明
CLOVA.UNIT CLOVA.UNIT_xxxxのすべてを含む単位表現を提供します
CLOVA.UNIT_GENERAL 一般な助数詞(単位)を提供します(例:"個"、"枚"、"本"、"台"、"体"、"回"、"件")
CLOVA.UNIT_AREA 面積を表す単位を提供します(例:"平方メートル"、"坪")
CLOVA.UNIT_CURRENCY 通貨名コードを提供します(例:"円"、"ドル"、"ユーロ")
CLOVA.UNIT_INFORMATION データの単位を提供します(例:"ビット"、"バイト")
CLOVA.UNIT_LENGTH 長さ・距離を表す単位を提供します(例:"メートル"、"キロメートル"、"マイル")
CLOVA.UNIT_RATIO 割合・比率を表す単位を提供します(例:"パーセント"、"倍")
CLOVA.UNIT_SPEED 速度を表す単位を提供します(例:"メートル毎秒")
CLOVA.UNIT_TEMPERATURE 温度を表す単位を提供します(例:"度"、"℃")
CLOVA.UNIT_VOLUME 体積・容積を表す単位を提供します(例:"ミリリットル")
CLOVA.UNIT_WEIGHT 重量を表す単位を提供します(例:"キログラム"、"ミリグラム")
数値と単位を取得する
ビルトインスロットタイプ 説明
CLOVA.NUMBER 数値 または 数値と単位の組み合わせ表現を提供します(例:1234個と発話した場合、"1234" または "1234個")
CLOVA.GENERIC_NUMBER 数値と一般な助数詞(単位)の組み合わせ表現を提供します(例:"3杯")
CLOVA.AREA 数値と面積を表す単位の組み合わせ表現を提供します(例:"20坪")
CLOVA.INFORMATION 数値とデータの単位の組み合わせ表現を提供します(例:"6ギガバイト")
CLOVA.LENGTH 数値と長さ・距離を表す単位の組み合わせ表現を提供します(例:"2.2キロメートル")
CLOVA.MONEY 数値と通貨単位の組み合わせ表現を提供します(例:"88円")
CLOVA.RATIO 数値と割合・比率を表す単位の組み合わせ表現を提供します(例:"100倍")
CLOVA.SPEED 数値と速度を表す単位の組み合わせ表現を提供します(例:"75キロメートル毎時")
CLOVA.TEMPERATURE 数値と温度を表す単位の組み合わせ表現を提供します(例:"36.5度")
CLOVA.VOLUME 数値と体積・容積を表す単位の組み合わせ表現を提供します(例:"5リットル")
CLOVA.WEIGHT 数値と重量を表す単位の組み合わせ表現を提供します(例:"30mg")

カスタムスロットタイプ

カスタムスロットタイプは、提供するサービス(Extension)のドメインに特化した情報のタイプを定義したものです。カスタムスロットタイプは、主に固有名詞または一般名詞を指定して作成します。例えば、上記の発話で「OrderPizza」インテントで、ピザの種類に該当する情報(スロット)をユーザーの発話から把握する必要があります。また、ピザの種類を示す表現は、ピザに関するサービスでのみ使用される可能性が高いです。従って、「PIZZA_TYPE」のようなカスタムスロットタイプを定義し、そのカスタムスロットタイプに、ピザの宅配サービスで注文できる「ペパロニピザ」「コンビネーションピザ」「チーズピザ」などの項目が使用されると宣言することができます。

ただし、同じ意味を持つ言葉でも、実際の発話では様々な言い方で表現されることがあります。「バーベキューピザ」は「BBQピザ」のような同義語を持ち、「シュリンプ・ゴールドクラストピザ」のような長い名前の場合、「シュリンプ・ゴルクラ」のようによく使われる短縮表現が存在する可能性もあります。従って、カスタムスロットタイプを定義する際には、概念的に区別される項目だけでなく、その項目ごとに代表語と同義語・類義語を定義する必要があります。そうすることで、ユーザーの発話を認識する際に、様々な言い方で表現される同義語や類義語を代表語に変換できます。また、Extensionがインテントを処理する際に、同じ概念に該当する情報の表現のゆれを解消し、統一した値でExtensionに渡すことができます。

上記のようにスロットタイプを定義したら、次はそれぞれのインテントで使用するスロットの名前を定義し、そのスロットがどんなスロットタイプを持つか宣言する必要があります。例えば、「OrderPizza」インテントは、ピザの種類に関する情報のために「pizzaType」、ピザの数量に関する情報のために「pizzaAmount」というスロットを宣言し、スロットごとにあらかじめ定義した「PIZZA_TYPE」のカスタムスロットタイプと、すでに提供されている「CLOVA.NUMBER」のビルトインスロットタイプを指定することができます。

現在、同義語の登録数の上限は、1つのスロットタイプ毎に代表語と同義語を合わせて20万件となっています。詳細についてはカスタムスロットタイプを追加するを参照してください。

サンプル発話

インテントを定義する際、様々なサンプル発話を列挙することができます。サンプル発話は、CLOVAが同じ意図を持つ様々な言い方を認識するにあたって必要な基本データであり、ユーザーの発話のうち、スロットに該当する情報を把握する際に利用されます。サンプル発話を適切に入力しておくと、ユーザーの意図を正しく認識する対話モデルを作成することができます。サンプル発話は、可能な限り次の事項に従って作成することを強くお勧めします。

  • 同じ意図を表しているが、違う言い方で表現されるサンプル発話を様々なバリエーションで十分に入力してください。
  • パターンが重複しないように、言い方には幅広いバリエーションを持たせて発話サンプルを作成してください。
  • サンプル発話の数は、次の基準に従ってください。
    • インテントにビルトインスロットタイプが使用されている、または、人が管理可能な量の辞書を持つカスタムスロットタイプの場合、そのスロットが含まれるサンプル発話を少なくとも30個作成してください。
    • インテントにアーティスト名、曲名、映画のタイトル、会社名など、サイズが大きな辞書を持つスロットタイプが使用されている場合、そのスロットが含まれる文章を少なくとも100個は作成してください。
    • 表現がシンプルなインテントであれば、10個程度のサンプル発話を入力してください。
  • 上記の基準でサンプル発話を入力した後、新しい表現やうまく認識されない表現が見つかった場合には、サンプル発話を追加してください。
  • スロットタイプの辞書に、スロットに該当するかどうかの判断が難しい値がある場合、その値をサンプル発話に使用することで、スロットであることを明示してください。しかし、スロットタイプに曖昧な値が含まれないようにしてください。

サンプル発話をたくさん入力しながらも、パターンが重複しないようにするという推奨事項について、以下の図を参照してください。

例えば、ピザの宅配サービスで、注文に関するインテント(OrderPizza)に、以下のようなサンプル発話を作成したと仮定します。

ペパロニピザ1枚頼んで。
ペパロニピザ1枚注文してちょうだい。
ペパロニピザ1枚出前取って。
ペパロニピザ1枚宅配でお願い。

CLOVAが上記のサンプル発話で学習した場合、"ペパロニ"や"1枚"という値がユーザーの発話に含まれると、その発話はOrderPizzaインテントとして認識される可能性が高いです。例えば、「ペパロニピザ1枚いくらなの?」などのように、メニューの検索を予想した発話が、ピザの注文をリクエストした発話として処理される可能性があります。

そのようなことを防ぐために、サンプル発話は以下のように作成することを推奨します。

ペパロニピザ2枚頼んで。
BBQピザ1つ出前取ってくれる?
コンビネーション3つ宅配でお願い。
シュリンプ・ゴルクラピザ早くお願い、お腹空いてるの。

この例では発話が名詞(ピザの種類)、名詞(数量)、動詞(意図)のパターンで構成されていて、日常で使用される助詞、語尾、副詞、感嘆詞なども含まれています。発話のパターンをすべて洗い出すと、これらのパターンを再利用して、スロットの値を変えながらサンプル発話を推奨基準まで追加します。その際、次の事項に注意してください。

  • サンプル発話に使用されたスロットの値を発話毎に変更して文章を追加してください。
  • 助詞、語尾、副詞、感嘆詞などの使用にバリエーションを与えながら文章を追加します。
  • 特に 特定の値の組み合わせが何度も使用されないように注意します。 例えば、「ペパロニピザ2枚頼んで」と「ペパロニピザを1枚だけ頼んでください」の場合、語尾、助詞、数量は変わっていますが、"ペパロニ"と"頼む"という値の組み合わせが重複しています。
バーベキュー5つ早く注文して。
ペパロニ1枚食べるからね。
ベジタリアンピザお願い。
おいしいチーズピザを4つ注文してちょうだい。

「OrderPizza」インテントに関する発話をテキストで列挙し、スロットに該当する部分を次のように表示します。

<pizzaType>ペパロニピザ</pizzaType><pizzaAmount>2枚</pizzaAmount>頼んで。
<pizzaType>BBQピザ</pizzaType><pizzaAmount>1つ</pizzaAmount>出前取ってくれる?
<pizzaType>コンビネーション</pizzaType><pizzaAmount>3つ</pizzaAmount>宅配でお願い。
<pizzaType>シュリンプ・ゴルクラピザ</pizzaType>早くお願い、お腹空いてるの。
<pizzaType>バーベキュー</pizzaType><pizzaAmount>5つ</pizzaAmount>早く注文して。
<pizzaType>ペパロニ</pizzaType><pizzaAmount>1枚</pizzaAmount>食べるからね。
<pizzaType>ベジタリアンピザ</pizzaType>お願い。
おいしい<pizzaType>チーズピザ</pizzaType>を<pizzaAmount>4つ</pizzaAmount>注文してちょうだい。
...

メモ

対話モデルのテストや、統計機能の「発話」データ(スキル設定画面で統計を選択して表示)を参照して調整することにより、完成度を高めることができます。対話モデルをテストする際には、サンプル発話の作成者ではなく、第三者がテストすることをお勧めします。そうすることで、新たな発話パターンを見つけることができます。

CLOVA Developer Centerで対話モデルを登録すると、登録されたCustom Extensionが次のようなJSONメッセージを受信します。

// カスタムインテント: ペパロニピザ2枚注文してちょうだい。
{
  "version": "0.1.0",
  "session": {
    "new": false,
    "sessionAttributes": {},
    "sessionId": "a29cfead-c5ba-474d-8745-6c1a6625f0c5",
    "user": {
      "userId": "U399a1e08a8d474521fc4bbd8c7b4148f",
      "accessToken": "XHapQasdfsdfFsdfasdflQQ7"
    }
  },
  "context": {
    "System": {
      "application": {
        "applicationId": "com.example.extension.pizzabot"
      },
      "user": {
        "userId": "U399a1e08a8d474521fc4bbd8c7b4148f",
        "accessToken": "XHapQasdfsdfFsdfasdflQQ7"
      },
      "device": {
        "deviceId": "096e6b27-1717-33e9-b0a7-510a48658a9b"
      }
    }
  },
  "request": {
    "type": "IntentRequest",
    "intent": {
      "name": "OrderPizza",
      "slots": {
        "pizzaAmount": {
          "name": "pizzaAmount",
          "value": "2"
        },
        "pizzaType": {
          "name": "pizzaType",
          "value": "ペパロニ"
        }
      }
    }
  }
}

// ビルトインインテント: キャンセルして
{
  "version": "0.1.0",
  "session": {
    "new": false,
    "sessionAttributes": {},
    "sessionId": "a29cfead-c5ba-474d-8745-6c1a6625f0c5",
    "user": {
      "userId": "U399a1e08a8d474521fc4bbd8c7b4148f",
      "accessToken": "XHapQasdfsdfFsdfasdflQQ7"
    }
  },
  "context": {
    "System": {
      "application": {
        "applicationId": "com.example.extension.pizzabot"
      },
      "user": {
        "userId": "U399a1e08a8d474521fc4bbd8c7b4148f",
        "accessToken": "XHapQasdfsdfFsdfasdflQQ7"
      },
      "device": {
        "deviceId": "096e6b27-1717-33e9-b0a7-510a48658a9b"
      }
    }
  },
  "request": {
    "type": "IntentRequest",
    "intent": {
      "name": "Clova.CancelIntent",
      "slots": {}
    }
  }
}

応答タイプを決める

Extensionは、ユーザーのリクエストを処理し、その結果をCLOVAを介してユーザーに伝える必要があります。CLOVAは、基本的にユーザーとの対話に音を使用し、リクエストを受け付けるときはもちろん、ユーザーに返事をするときも音を使用します。CLOVAは、音を使用した応答タイプとして、以下のものを提供します。Extensionは、ユーザーシナリオに応じ、適切なタイプの応答を提供する必要があります。

  • 音声出力タイプ
  • オーディオコンテンツの再生タイプ

メモ

音声出力タイプ、オーディオコンテンツの再生タイプ共に、音源(.mp3)のリソースはHTTPSのみ許可されます。

音声出力タイプ

文字で表された情報を音声合成技術を用いて加工し、音声(TTS)で出力するタイプです。主に、ユーザーの質問やリクエストに対する返事として使用されます。応答は1つ以上の音声出力(TTS)で構成されます。また、短い効果音(.mp3)を一緒に提供することができます。

音声出力タイプで応答を作成するとき、以下のルールに従う必要があります。

  • 1つの応答当たり、500文字または90秒以内に作成することを推奨します。応答が長くなると、ユーザーにとってわかりにくくなる可能性があります。
  • 効果音は、比較的長さの短いオーディオコンテンツを使用します。
  • 効果音は、応答が始まるときに必ず一度だけ再生されるように構成する必要があります。
    • 正しい例:効果音(.mp3) > 音声出力(TTS) > 音声出力(TTS) > ...
    • 間違った例1:音声出力(TTS) > 効果音(.mp3) > 音声出力(TTS) > ...
    • 間違った例2:効果音(.mp3) > 音声出力(TTS) > 効果音(.mp3) > 音声出力(TTS) > ...
  • 1つの応答は、10個以下の音声出力で構成することを推奨します。

以下は、音声出力タイプのサンプルです。

//例1:短い案内フレーズ
「首都名を当てるクイズです」

//例2:詳しい説明と問題で構成された応答
1番目のTTS:「各国の首都名を当てるクイズを途中でやめるには「やめる」と言ってください。問題を再度聞きたいときには「もう一度」、他の問題に移るときには「他の問題」と言ってください」
2番目のTTS:「アメリカの首都はどこですか」

//例3:効果音が含まれた応答
1番目の効果音(.mp3):正解の効果音を再生する
2番目のTTS:「正解です」

メモ

音声出力タイプの応答に関する実装の説明については、Custom Extensionレスポンスを返すを参照してください。

オーディオコンテンツ再生タイプ

音楽のように長い間オーディオコンテンツを再生するタイプで、主に音楽を提供するスキルで使用されます。このタイプは、長時間オーディオコンテンツを再生するときだけでなく、一時停止、再開、停止するときにも使用されます。オーディオコンテンツ再生タイプで応答するには、Extensionが以下のようにオーディオ再生をコントロールできる必要があります。

  • Custom Extensionは、ユーザーのリクエストがあると、クライアントがオーディオコンテンツを再生できるようにレスポンスメッセージ(AudioPlayer.Play)を返す必要があります。
  • Custom Extensionは、ユーザーのリクエストがあると、いつでもオーディオコンテンツを一時停止または停止できる必要があります。
  • Custom Extensionは、一時停止または停止したコンテンツを再開または再生できる必要があります。
  • Custom Extensionは、前や次に曲戻し/曲送りできる必要があります。

以下は、オーディオコンテンツ再生タイプの簡単なユーザーシナリオです。

「クラシックボックスを起動して」

「どんなクラシック音楽を再生しますか?」(TTS)

「ヴィヴァルディの四季を再生して」

「はい。ヴィヴァルディの四季を再生します」(TTS)

ヴィヴァルディの四季第1楽章を再生するよう指示する (AudioPlayer.Play)

「ねぇCLOVA、ちょっと止めて」

再生を停止するよう指示する (PlaybackController.Pause)

「ねぇCLOVA、再開して」

再生を再開するよう指示する (PlaybackController.Resume)

「ねぇCLOVA、次へ」

ヴィヴァルディの四季第2楽章を再生するよう指示する (AudioPlayer.Play)

メモ

オーディオコンテンツ再生タイプで応答する方法については、オーディオコンテンツを提供するを参照してください。

プラットフォームでサポートされるオーディオ圧縮形式

Extensionでオーディオコンテンツを提供する場合、必ずCLOVAでサポートされている音声圧縮形式で提供する必要があります。

CLOVAでは、以下の音声圧縮形式がサポートされています。

音声圧縮形式 ファイルの拡張子 転送方式 ライセンス費用
MPEG-1 or MPEG-2 Audio Layer III .mp3 HLS(HTTP Live Streaming) v3 無料

メモ

CLOVAが対応するオーディオ圧縮フォーマットと配信方式は、さらに増える可能性があります。

注意

CLOVAでサポートされていない音声圧縮形式でオーディオを提供すると、クライアントがオーディオを正常に再生できないことがあります。

CLOVAスキルのコンテンツガイドライン

開発者は、スキル(Extension)を開発した後、CLOVA事務局による審査を受け、適切であると判断されたスキルのみスキルストアで公開することができます。CLOVA事務局が以下のコンテンツガイドラインに違反する、または違反する恐れがあると判断するスキルは、審査で不適切とされ、申請が却下・配布中止となる場合があります。
審査をリクエストする際は、事前にこのガイドラインを確認してください。ただし、以下の項目に該当する場合でも、CLOVA事務局の判断により公開可能となることがあります。

コンテンツガイドライン

開発したスキルが以下の項目に該当する場合は、申請が却下あるいは保留となる場合があります。

  1. スキルの完全性
  2. スキルの安全性
  3. 権利、法律
  4. ビジネス、広告
  5. モラル
  6. プライバシー
  • その他の留意事項

1. スキルの完全性

  • サーバーの保守が必要であるなどやむを得ない場合を除き、ユーザーのリクエストに対して正常に応答できないもの。
  • 基本情報(基本設定やサーバー設定、審査情報等)に正しい情報が登録されていない、または、情報が不足しているもの。
    なお、情報は常に最新の状態になるように努める必要があります。
  • 発話がうまく認識できない、または明らかな技術上の問題があるもの。
  • サーバー連携やアカウント連携など、CLOVA事務局が指定するセキュリティ要件や技術要件を満たしていないもの。

2. スキルの安全性

  • 人の生命または身体の安全を害するおそれのある行為を助長し、または促進するもの。
  • 面識のない異性との出会い等を目的とするもの。
  • 青少年の家出を誘引・助長するもの。
  • 当社または第三者の機器、設備、システム等の利用もしくは運用を妨げ、またはかかる利用もしくは運用に支障を与えるもの。
  • 当社または第三者の設備に蓄積された情報を不正に書き換え、または消去する機能を有しているもの。
  • コンピュータウィルス等の有害なプログラムを含む、またはかかるプログラムを送信し、または送信する機能を含むもの。

3. 権利、法律

  • 第三者の権利(著作権、著作者人格権、特許権、商標権、意匠権、実用新案権、営業秘密、名誉権、肖像権、プライバシー権、パブリシティー権を含みますが、これらに限りません)を侵害しているもの。
  • 権利の所在が明確でないもの。
    • 例:二次創作など
  • 権利者からの許諾が証明できないもの。
  • 賭博その他の違法なギャンブルを行わせ、または賭博その他の違法なギャンブルへの参加を勧誘するもの。
  • その他、犯罪を構成もしくは助長し、または公序良俗もしくは法令等に違反する、またはそれらのおそれのあるもの。

なお、CLOVA事務局は別途権利確認書類を求めることがあります。

4. ビジネス、広告

  • ユーザーに対して開発者その他第三者の商品、サービス等の広告を行うもの。
    ただし、以下のような例を除きます。
    • 開発者の製品やサービス等の販売促進を目的とするもので、当社の事前承諾があるもの。
    • 開発者の商品、サービス等の有償プラン・アップグレードを誘導するもので、当社の事前承諾があるもの。
    • スキルと関連する企業名やサービス名の告知をするもので、当社の事前承諾があるもの。
      • 例:「以上、<企業名> がお送りしました」(とCLOVAデバイスに発話させる)
      • 例:企業名やサービス名を用いたサウンドロゴ
  • ユーザーに対して開発者その他第三者の商品、サービス等の販売や購入、注文を行うもの。または会員限定のもの。
    ただし、以下のような例を除きます。
    • 注文・予約・購入等が発生するもので、当社の事前承諾が完了しているもの。なお、これらはアカウント連携が必須です。
    • 無償または定額課金型の会員向けサービスで、当社の事前承諾が完了しているもの。

なお、事前に承諾があった場合でも、CLOVA事務局が不適切と判断するものは、却下・配布中止、保留となる場合があります。

5. モラル

  • グロテスク、露骨な性描写、児童ポルノもしくは児童虐待にかかる表現、その他残虐もしくはわいせつな表現、またはこれらを連想させる表現をするもの。
  • 犯罪を助長、または奨励するもの。
  • 特定の個人や法人、国、グループなどを誹謗、中傷、攻撃する可能性のあるもの。
  • 第三者もしくは自己の個人情報を開示し、または開示する恐れのあるもの。
  • 宗教、文化、民族性、国民性を攻撃し、または特に不快感を与えるもの。
  • 宗教への勧誘や啓蒙にあたるもの、宗教的要素の強いもの。
  • ユーザーが混乱、嫌悪するように設計されているもの。
  • 賭博を助長し、または賭博に類するもの。
  • その他反社会的な内容を含み、または他者に不快感を与えるもの。
  • 当社がスキルを開発もしくは提供している、または当社と開発者が提携していると誤解を与える、またはそのおそれのあるもの。
  • 当社または第三者を不当に差別もしくは誹謗中傷し、またはそれらを助長するもの。

6. プライバシー

  • CLOVA利用データ等その他の個人情報の収集を目的としたもの。
  • 以下に該当する機微情報を扱うもの。
    • 人種、信条、社会的身分、病歴、前科、犯罪被害情報
    • その他本人に対する不当な差別、偏見が生じないように特に配慮を要するものとして政令で定めるもの
      • 身体障害・知的障害・精神障害等があること
      • 健康診断その他の検査の結果
      • 保健指導、診療・調剤情報
      • 本人を被疑者または被告人として、逮捕、捜索等の刑事事件に関する手続が行われたこと
      • 本人を非行少年またはその疑いのある者として、保護処分等の少年の保護事件に関する手続が行われたこと

その他の留意事項

  • 開発者やその他第三者のデバイス(例:IoT製品)との連携が発生するスキルに関しては、CLOVA事務局は動作テストのために、開発者に対して別途製品の提出を求めることがあります。
  • 日本以外を対象としたものは許可されない場合があります。
  • 上記に記載されていない場合でも、CLOVA Extensions Kit利用規約に違反しているものは許可されません。
  • 本ガイドラインは随時変更される可能性があります。あらかじめご了承ください。

メモ

一部例外がある場合がありますので、判断が難しい場合は、審査時にコメントを記載いただきますようお願いいたします。

継続的にアップデートする

新規にExtensionを開発する際には、ユーザーがどんなフレーズを発話するか予測してシナリオを作成し、Extensionに適用します。Extensionの公開後は、実際のユーザーの使い方が予想と必ず一致するとは限らず、またユーザーのすべての使用パターンを網羅できていない可能性もあります。ユーザーは想定していない方法でExtensionを使用する可能性があるのです。UXを向上させるためには、Extensionを公開してからも、Extensionの機能や対話の流れを継続的に改善する必要があります。

Extensionを登録した後、CLOVAプラットフォームで提供される統計データ(CLOVA Analytics)を分析し、随時Extensionをアップデートする必要があります。