アプリの開発
各アプリには独自のアーキテクチャと必要なコンポーネントがありますが、アプリ開発の全体的なプロセスは同じです。
- アプリシェルを作成する
- アプリのコア機能を開発する
- 設定ページと設定DBを作成して接続し、ミドルウェア/コンテクストカードに接続する(オプション)
- マニフェストを更新してアプリを NTT CPaaS に接続する
- アプリをテストするを参照してください。
- マーケットプレイスへのリスト(オプション)
アプリ シェルを作成するCreate the app shell
アプリの作成を開始するには、NTT CPaaS がアプリの機能を使用するために必要な情報を含むアプリ シェルを作成する必要があります。これにより、OAuthプロセスで使用できるアプリのクライアントIDとクライアントシークレットも作成されます。
アプリシェルが最初に作成されたときは、自分のアカウントで使用できますが、他のユーザーは使用できません。これは、プライベート アクセスと呼ばれます。アプリを他のアカウントで使用できるようにするには、「Exchange マーケットプレースにアプリを掲載する」(./list-your-app) のセクションを参照してください。
アプリシェルを作成するには:
-
NTT CPaaSアカウントにログインし、 Exchangeに移動します。
-
[公開] をクリックします。 [発行] オプションが表示されない場合は、 NTT CPaaS サポート チームに連絡してアクセスを要求してください。
-
[アプリの作成] をクリックします。
-
アプリ名にアプリの名前を入力します 任意の名前を選択できますが、パブリック Exchange マーケットプレースにアプリを一覧表示する場合は、一意の名前を選択する必要があります。
-
[対象製品] ドロップダウン リストから、アプリで使用する製品を選択します。関連するすべての製品を選択することができます。
積 備考 Conversations アプリがコンテクストカードの場合、アプリは Conversations でサポートされているチャネルとネイティブに連携するため、チャネルを選択する必要はありません。 答え アプリがチャットボットブロックの場合、アプリはAnswersでサポートされているチャネルとネイティブに連携するため、チャネルを選択する必要はありません。 Moments フロー アプリが Moments フロー エレメント の場合、アプリは Moments でサポートされているチャネルとネイティブに連携するため、チャネルを選択する必要はありません。 People アプリがPeople APIを介してデータを同期する場合、アプリはPeopleでサポートされているチャネルで動作するため、チャネルを選択する必要はありません。 チャンネル APIを使用してチャネルを製品に統合した場合は、関連するチャネルを選択します。 次に、埋め込まれたテキスト エディターが表示され、値を編集してマニフェストを作成できます。[対象製品] ドロップダウン リストから複数の製品を選択した場合は、統合ポイント マニフェストごとに個別のタブが表示されます。マニフェストの定義に YAML と JSON のどちらを使用するかを選択します。
-
埋め込みテキスト エディターでマニフェストの例を編集して、アプリを NTT CPaaS に接続する方法を定義します。この段階では、既定値またはダミー値を使用してアプリを作成できますが、関連情報を入手したら、必ずマニフェストを更新してください。 マニフェストを正しく構成するには、マニフェストの更新 を参照してください。
-
次の URL を指定します。 設定 URL: アプリの設定と構成の場所。これは、ユーザーが設定を保存し、アプリを構成できる Web ページです。このフィールドはオプションです。 認証後にリダイレクトするためのリダイレクト URL。OAuth を使用してアプリを NTT CPaaS に接続する場合、これは認証後にアプリにリダイレクトされる URL です。
-
**[ロゴ URL] フィールドで、ロゴの画像に URL を追加します。ロゴ ファイルは SVG 形式 (.svg) で、サイズは 40 x 40 ピクセルである必要があります。
-
NTT CPaaS OAuth を使用する場合、またはアプリの機能の一部として NTT CPaaS API を使用する場合は、統合で使用する API スコープ を選択します。ベストプラクティスとして、統合に必要なスコープのみを選択します。
-
[アプリの作成] をクリックしてアプリの設定を保存し、NTT CPaaS に接続するためのアプリの資格情報を生成します。
アプリが作成され、[Exchange の発行] ページに一覧表示されます。
アプリの詳細には、名前と プライベート ラベルが表示され、自分のアカウントでのみ使用できることを示します。
また、このアプリに関連する NTT CPaaS 製品も表示されます。
3ドットメニューには、いくつかのオプションがあります。
| オプション | Description (説明) |
| 編集について | 公開ステージで入力した設定を変更します。また、クライアントID、クライアントシークレット、署名シークレットを表示することもできます。 |
| 構成 | アプリの設定と構成の設定 URL ページを開きます。 |
| ビュー ID | クライアント ID とクライアント シークレット、承認で使用される OAuth 資格情報を表示します。 |
| 削除 | Exchange からアプリを削除します。 |
アプリを作成すると、そのアプリは自分のアカウントでのみ有効になります。アプリにコンテクストカードが含まれている場合、そのカードはアカウント内のすべてのエージェントが使用できます。アプリにAnswers チャットボットブロックが含まれている場合、そのブロックはチャットボットビルダーキャンバスで使用できます。
アプリで OAuth 2.0 フローを使用する場合は、クライアント ID とクライアント シークレットを保存する必要があります。Answers で実行署名を検証するには、署名シークレットを保存する必要があります。
アプリのコア機能を開発する
このステップでは、アプリのコア機能を作成します。アプリのニーズに応じて、iframe、API、またはミドルウェアを介して埋め込まれたWebサイトを介してUIエクスペリエンスを作成し、AnswersからAPIエンドポイントへの呼び出しを解釈できます。
Conversations [#conversations-develop-core-functionality-of-your-app]
Conversations では、次のコア機能を開発できます。
- コンテキスト カード UI: 標準サイズと XL サイズ
- フルページUI
コンテキスト カード UI [#context-card-ui-develop-core-functionality-of-your-app]
Conversations コンテキスト カードを使用すると、エンド カスタマーをサポートするときに、ワークスペース内のコンタクト センター エージェントにカスタム情報を表示できます。コンテクストカード UI は、iframe を使用してエージェント エクスペリエンスに埋め込むことができる Web ページまたは Web サイトである必要があります。
コンテキスト カードには、標準と XL の 2 つのサイズがあります。
標準サイズのコンテキスト カード [#standard-size-context-cards-develop-core-functionality-of-your-app]
標準サイズのコンテキスト カードは、[マイ ワーク] のエージェントのワークスペースの右側のパネルに読み込まれます。既定では、標準サイズのコンテキスト カードは展開されません。エージェントは、コンテクストカードのタイトルをクリックして展開することで、コンテクストカードを開くことができます。
コンテクストカードで最適に表示されるようにするには、アプリのコンテンツを最大サイズ 425 x 500 で設計します。
XL サイズのコンテキスト カード [#xl-size-context-cards-develop-core-functionality-of-your-app]
XL サイズのコンテキスト カードは、[マイ ワーク] のエージェントのワークスペースの別のパネルに読み込まれます。デフォルトでは、XL コンテキスト・カードは会話がロードされるときに展開されます。エージェントには、複数のXLカードが取り付けられていても、1つのXLカードしか表示されません。すべての NTT CPaaS アカウントが XL カードをサポートするように構成されているわけではないため、このセットアップを使用する予定がある場合は、お問い合わせください。
XL カードで使用できる領域は、使用可能な画面によって異なるため、レスポンシブ UI が最適に表示されます。ユーザーの画面幅が 750px 未満の場合、XL カードは表示されません。
コンテクストカードの UI と機能の作成 [#creating-the-context-card-ui-and-functionality-develop-core-functionality-of-your-app]
コンテクストカードの UI は、好きなように作成できます。NTT CPaaS には、ユーザーのエクスペリエンスを調整するのに役立つ情報がいくつかあります。
ページの読み込み時に、Conversations は UI を読み込み、Conversations ID をクエリ パラメーターとしてリファラー ヘッダーに含めます。
conversations:manage スコープを選択した場合は、Conversations ID と OAuth を使用して、 Conversations API API を使用して会話に関する詳細情報を取得できます。顧客に代わって NTT CPaaS API を使用するには、OAuth 2.0 フロー を完了する必要があります。
ヘッダーの内容の例:
次の表は、コンテキスト カードで一般的に使用される機能を示しています。
| アクション | 源 | 必要なスコープ |
|---|---|---|
| 顧客のアカウント キーを取得する | OAuth 2.0 (英語) | 何一つ |
| ユーザーのメールを取得する | OAuth 2.0 (英語) | 何一つ |
| ユーザーの優先言語を取得する | OAuth 2.0 (英語) | 何一つ |
| API 呼び出しで使用する NTT CPaaS トークンを取得する | OAuth 2.0 (英語) | 何一つ |
| 顧客のチャネルを取得する | Conversations API: メッセージの取得 | カンバセーション:管理[かんり:かんり |
| 顧客の電話番号またはメールアドレスを取得する | Conversations API: メッセージの取得 | カンバセーション:管理[かんり:かんり |
| 会話メッセージを取得する | Conversations API: メッセージの取得 | カンバセーション:管理[かんり:かんり |
| 会話でメッセージを送信する | Conversations API: メッセージの作成 | カンバセーション:管理[かんり:かんり |
| メモを作成 | Conversations API: ノートを作成 | カンバセーション:管理[かんり:かんり |
| 顧客情報の取得 | People API: 人を得る | 人:読み取り[ひと:よみが] |
| 顧客情報の更新 | People API: Person の更新 | 人:管理[人:かんり] |
| 新しい顧客を作成する | People API: 人を作成 | 人:管理[人:かんり] |
| 顧客へのイベントの作成 | People API: イベントの作成 | 人:管理[人:かんり] 人:使用[人:しよう] |
フルページUI [#full-page-ui-develop-core-functionality-of-your-app]
Conversations フルページアプリを使用すると、コンタクトセンターのエージェントとスーパーバイザーにカスタム情報を Conversations 内の別の領域に表示できます。ページ全体の UI は、iframe を使用して埋め込むことができる Web ページまたは Web サイトである必要があります。このアプリのコンテンツのサイズに制限はありませんが、モバイルを含むさまざまな画面サイズで正しく表示されるように、レスポンシブな方法で UI を作成することをお勧めします。
ページ全体のUIは、好きなように作成できます。NTT CPaaS から UI で利用できる情報には、ユーザーのエクスペリエンスを調整するのに役立つものがあります。
ページの読み込み時に、Conversations によって UI が読み込まれます。このエクスペリエンスは特定の会話に関連付けられていないため、参照元には Conversations ID が含まれません。顧客のアカウントに関する情報を取得し、顧客に代わって NTT CPaaS API を使用するには、OAuth 2.0 フロー を完了する必要があります。
次の表は、フルページ アプリで一般的に使用される機能を示しています。
| アクション | 源 | 必要なスコープ |
|---|---|---|
| 顧客のアカウント キーを取得する | OAuth 2.0 (英語) | 何一つ |
| ユーザーのメールを取得する | OAuth 2.0 (英語) | 何一つ |
| ユーザーの優先言語を取得する | OAuth 2.0 (英語) | 何一つ |
| API 呼び出しで使用する NTT CPaaS トークンを取得する | OAuth 2.0 (英語) | 何一つ |
| エージェントを取得する | Conversations API: エージェントの取得 | カンバセーション:管理[かんり:かんり |
| キューの取得 | Conversations API: get Queues (キューの取得) | カンバセーション:管理[かんり:かんり |
| 営業時間の更新 | Conversations API: 勤務時間の更新 | カンバセーション:管理[かんり:かんり |
| 会話のルーティング情報を取得する | Conversations API: ルーティングの取得 | カンバセーション:管理[かんり:かんり |
| 顧客情報の取得 | People API: 人を得る | カンバセーション:管理[かんり:かんり |
| タグのリストを取得する | People API: タグを取得する | 人:読み取り[ひと:よみが] |
| ユーザーのバッチにタグを追加する | People API: タグを追加する | 人:管理[人:かんり] |
| カスタム属性のリストを取得する | People API: タグを取得する | 人:読み取り[ひと:よみが] |
| カスタム属性の作成 | People API: タグを追加 | 人:管理[人:かんり] |
答え [#answers-develop-core-functionality-of-your-app]
Answersでは、次のコア機能を開発できます。
- Answers への API 接続
- API への変数の受け渡し
- デザイナー体験
- アカウントレベルの変数
- 配列と複雑なデータリスト
- Webhook (英語)
Answers に接続するための API のセットアップ [#setting-up-the-api-to-connect-answers-develop-core-functionality-of-your-app]
Answers は API 呼び出しを介してアプリに接続します。API を直接呼び出すことも、ミドルウェアを介して呼び出すこともできます。直接接続はアプリをすばやく作成する方法ですが、いくつかの制限があります。API のニーズとユーザーに提供するエクスペリエンスに応じて、Answers からの呼び出しを API に必要な呼び出し形式に変換するためのミドルウェアを開発する必要があるか、開発したい場合があります。APIの準備ができたら、マニフェストの更新 を使用してAnswers APIに接続します。
API への変数の受け渡し [#passing-variables-to-your-api-develop-core-functionality-of-your-app]
Answers は、クエリ パラメーターとパス パラメーターの 2 つの方法でチャットボット変数を API に送信できます。ヘッダー パラメーターは現在サポートされていません。API でヘッダーを使用して変数を送信する必要がある場合は、ミドルウェア API を使用して、Answers からの呼び出しを API の正しい形式に変換する必要があります。
注:チャットボット属性のデータセットは安全に保存されないため、プラットフォームの資格情報やトークンなどの情報にはこのオプションをお勧めしません。
Answers Designer エクスペリエンス [#answers-designer-experience-develop-core-functionality-of-your-app]
API 呼び出しで変数を設定および受信する場合、Answers は Answers デザイナーによってチャットボット 属性 で設定された値を使用します。Answers Designer が特定の変数を属性として取り込む方法を認識していない可能性が高い場合は、統合マネージャーに「構成」ページで変数を定義してもらい、ミドルウェアを使用してチャットボットで設定された属性と構成ページで設定した変数を組み合わせることをお勧めします。
アカウントレベルの変数 [#account-level-variables-develop-core-functionality-of-your-app]
一部の変数が特定のアカウント (アカウントの資格情報など) で常に同じ場合は、統合マネージャーに [構成] ページで変数を定義してもらい、ミドルウェアを使用して、チャットボットで設定された属性と構成ページで設定された変数を組み合わせることをお勧めします。
配列と複合データ型 [#arrays-and-complex-data-types-develop-core-functionality-of-your-app]
配列は Answers にリストとして格納されます。現時点では、API からの可変長配列応答をリストに直接マップする方法はありません。配列をJSONまたはText属性に戻し、Answers Designerにコードブロックを使用してリストへの応答を解析するように要求することをお勧めします。
Webhook の処理 [#handling-webhooks-develop-core-functionality-of-your-app]
チャットボットがアプリの状態の変化を待つ必要がある場合は、API またはミドルウェアでこれを管理する必要があります。Answers デザイナーは、チャットボット設定の一部としてチャットボットインスタンスの Webhook を作成できます。Answers デザイナーがコードブロックを使用して属性に sessionId を割り当てると、そのセッション ID を API に送信できます。その後、アプリは https://api.infobip.com/bots/webhook/\{\{sessionId\}\} で Webhook を呼び出すことでチャットボットを続行できます。
Moments - フロー [#moments--flow-develop-core-functionality-of-your-app]
Moments - フローでは、次のコア機能を開発できます。
- フローへの API 接続
- API への変数の受け渡し
フロー に接続するための API のセットアップ [#setting-up-the-api-to-connect-flow-develop-core-functionality-of-your-app]
フロー は API 呼び出しを介してアプリに接続します。API を直接呼び出すことも、ミドルウェアを介して呼び出すこともできます。
直接接続はアプリをすばやく作成する方法ですが、いくつかの制限があります。
API のニーズとユーザーに提供するエクスペリエンスに応じて、フロー からの呼び出しを API に必要な呼び出し形式に変換するためのミドルウェアを開発する必要があるか、開発する必要がある場合があります。API の準備ができたら、マニフェストの更新 して フロー を API に接続します。
フロー 変数と People 属性を API に渡す [#passing-flow-variables-and-people-attributes-to-your-api-develop-core-functionality-of-your-app]
変数は、次の方法で API に送信できます。
- パスとクエリ - URL パラメーターとも呼ばれます
- 体
- ヘッダー - フローでのみサポート
認証トークンの処理 [#handling-authorization-tokens-develop-core-functionality-of-your-app]
API に認証トークンが必要な場合、特に有効期限が切れている場合は、API またはミドルウェア内でトークンのライフサイクルを管理する必要があります。
設定ページと設定DBの作成
このオプションの手順では、構成ページの UI と、必要なサポート データベースと API 接続を設定します。APIにアカウント レベルの情報が必要な場合、ミドルウェアで使用される追加の設定がある場合、またはアプリを使用するように設定するユーザーがより多くの情報を利用できるようにする場合は、最適なユーザーエクスペリエンスを得るために構成ページを使用することをお勧めします。また、設定ページはオンボーディング プロセスを支援するためにも使用でき、ユーザーがアプリを最大限に活用するために必要なテンプレートや追加のドキュメントにアクセスできます。統合マネージャーによって定義された設定を設定データベースに保存し、ミドルウェアを使用して適切な呼び出しを API エンドポイント呼び出しに挿入できます。
構成ページの UI [#configuration-page-ui-creating-a-configuration-page-and-settings-db]
構成ページを使用すると、統合マネージャーは、アプリのあらゆる使用に適用できる設定を定義できます。 統合マネージャーは、Exchange の [マイ アプリ] セクションからこのページにアクセスできます。構成ページの UI は、iframe を使用して埋め込むことができる Web ページまたは Web サイトである必要があります。このページのコンテンツのサイズに制限はありませんが、モバイルを含むさまざまな画面サイズで正しく表示されるように、レスポンシブな方法で UI を作成することをお勧めします。このページは、アプリ シェルで 設定 URL フィールドに入力することで定義されます。
構成ページの UI は、好きなように作成できます。NTT CPaaS から UI で利用できる情報には、ユーザーのエクスペリエンスを調整するのに役立つものがあります。
ページの読み込み時に、Exchange によって UI が読み込まれます。顧客のアカウントに関する情報を取得し、顧客に代わって NTT CPaaS API を使用するには、OAuth 2.0 フロー を完了する必要があります。設定ページで一般的に使用される機能には、次のようなものがあります。
| Action | Source |
|---|---|
| 顧客のアカウント キーを取得する | OAuth 2.0 (英語) |
| ユーザーのメールを取得する | OAuth 2.0 (英語) |
| ユーザーの優先言語を取得する | OAuth 2.0 (英語) |
| API 呼び出しで使用する NTT CPaaS トークンを取得する | OAuth 2.0 (英語) |
NTT CPaaS の API のスコープが アプリ シェル で定義されている場合は、NTT CPaaS の API を使用して追加情報にアクセスできます。アプリの公開時に [設定] URL でページの場所を指定するか、アプリの [編集] オプションを選択してこの場所を変更できます。
アプリの設定ページの URL を入力すると、アプリの 3 ドット メニューにも [構成] オプションが表示されます。
アプリの設定を表示できるように設定ページを開くには、 [構成] を選択します。
マニフェストを更新する
マニフェストは、アプリと NTT CPaaS の間のインターフェイスです。マニフェストには、NTT CPaaS がアプリを表示して使用するために必要なすべての情報が含まれています。
マニフェストは、JSON 形式または YAML 形式のいずれかにすることができます。マニフェストの完全な構造は、Conversations、Answers、Moments のいずれのアプリを構築しているかによって異なります。
Conversations [#conversations-update-the-manifest]
Conversations マニフェストには、アプリがサポートする各エントリーポイントのディクショナリが含まれています。現在、各アプリは 1 つのコンテクストカードとフルページ アプリをサポートできます。
Conversations マニフェストには、コンテクストカード用の次のキーと値のペアが含まれています。
| カードキー | カード値の説明 |
| カード | コンテクストカードの統合ポイントタイプ。 |
| タイトル | ユーザーに表示されるアプリの名前。これは必須フィールドです。既定の例は My App Name です。 |
| src (ソース) | Conversations の iframe に挿入されるページの URL。HTTPSリンクを強くお勧めします。これは必須フィールドです。デフォルトの例は https://awesome.app.com/context-card です。 |
| 大きさ | Conversations の右側のパネルに表示されるコンテクストカードのサイズ。デフォルトは標準です。 標準: コンテクストカードは他のカードと一緒に表示されます。 XL: コンテクストカードは単独で表示され、画面の高さ全体に広がります。 |
Conversations マニフェストには、フル ページ アプリ用の次のキーと値のペアが含まれています。
| ページキー | ページ値の説明 |
| ページ | フルページの統合ポイントタイプ。 |
| タイトル | ユーザーに表示されるアプリの名前。これは必須フィールドです。既定の例は My App Name です。 |
| src (ソース) | Conversations の iframe に挿入されるページの URL。HTTPSリンクを強くお勧めします。これは必須フィールドです。既定の例は https://awesome.app.com/context-card. です。 |
| パス | 統合が提示されるパス。パスは「/」で始まる必要があります。たとえば、/my-app です。 |
これは、Conversations の YAML マニフェストの例です。
これは、Conversations の JSON マニフェストの例です。
これは、両方のエントリポイントを使用した Conversations の YAML マニフェストの例です。
答え [#answers-update-the-manifest]
Answers のマニフェストを作成するときに、次のいずれかのレイアウトタイプを選択できます。
- 詳細レイアウト: 入力フィールドと出力フィールドを含む、API 呼び出しで使用される関数の完全な構造を定義します
- 簡略化されたレイアウト: 完全な関数の詳細を返すマニフェストでのエンドポイントの指定
各マニフェストのレイアウトの概要を以下に示します。
Answers マニフェストには、次のキーと値のペアの一部またはすべてが含まれる場合があります。
| 鍵 | 値の説明 |
| 関数 | このディクショナリで使用可能なすべての関数のリストを定義します。 |
| 名前 | 関数の名前 (デフォルトは My Order App)。この値はチャットボットエディターに表示されます。各アプリは複数の機能を持つことができます。 |
| 方式 | 関数を呼び出す方法を定義します。使用できるメソッドは、GET、POST、DELETE、POST、および PATCH です。 |
| 形容 | このフィールドを使用して、関数の動作を記述します。たとえば、この関数は注文 ID で注文の詳細を取得します。この説明は、チャットボットエディターに表示されます。 |
| URI (英語) | これは、チャットボットが関数を実行するために呼び出すエンドポイントです。たとえば、https://my-shopping-app.com/app/8/invoke/getOrderDetails. です。 |
| inSchema (英語) | 関数要求への入力となる変数 (変数の型、顧客が判読できる説明、変数名、変数が必要かどうかなど) を定義します。type: 型 (例: object)。required: 必須のプロパティを一覧表示します。これらは、properties フィールドに記述するプロパティです。properties: エンドポイント呼び出しに渡すことができる各プロパティのリスト。複数のプロパティを定義できます。property_name: エンドポイント要求で使用される入力プロパティの名前 (order_id などのプロパティ名など)。 type: プロパティの型。指定できる値は、string、number です。title: 入力プロパティの UI わかりやすい名前。このプロパティのタイトルは、チャットボットエディターに表示されます。example: プロパティの値の例を提供します。これは、この情報がどのように表示されるかをユーザーに示すために使用されます。 |
| outSchema (英語) | 関数応答から出力される変数 (変数の型、顧客が判読できる説明、変数名など) を定義します。type: 型 (例: object)。required: 必須のプロパティを一覧表示します。これらは、properties フィールドに記述するプロパティです。properties: エンドポイントの応答で返される可能性のある各プロパティのリスト。複数のプロパティを定義できます。property_name: エンドポイント要求で使用される出力プロパティの名前。 type: プロパティの型 (整数や文字列など)。title: 入力プロパティの UI わかりやすい名前。このプロパティのタイトルは、チャットボットエディターに表示されます。default: プロパティのデフォルト値。整数型の場合、既定値は 0 です。文字列型の場合、既定値は '' です。example: プロパティの値の例を提供します。これは、この情報がどのように表示されるかをユーザーに示すために使用されます。pattern: 想定されるスキーマ パターン。既定値は ^(.*)$ です |
マニフェストに変更を加える [#making-changes-to-the-manifest-update-the-manifest]
ユーザーが統合を実装した後にマニフェストを更新する場合は注意してください。オプションの変数を inSchema と outSchema に追加しても影響は最小限に抑えられますが、必須の変数を inSchema に追加すると、本番環境でユーザーが機能しなくなる可能性があります。リストされているアプリのマニフェストに大幅な変更を加える必要がある場合は、contact NTT CPaaSを使用して、新しいバージョンのマニフェストに顧客を移行できるようにしてください。
クエリ パラメーターとパス パラメーター [#query-parameters-and-path-parameters-update-the-manifest]
Answers マニフェストでは、サポートするクエリ パラメーターとパス パラメーターを追加できます。これは、チャットボット属性を関数内のパラメーターとして含めることができることを意味します。関数内でチャットボット属性を使用するには、属性を中括弧 { } で囲みます。
たとえば、エンドポイントを呼び出す関数があるとします。
[https://my-shoping-app.com/app/8/invoke/getOrderDetails
チャットボットから orderId を取得すると、マニフェストの uri 値は次のようになります。
https://my-shoping-app.com/app/8/invoke/getOrderDetails/\{orderId\}
クエリ パラメーターを使用する別の例は次のとおりです。
https://my-shoping-app.com/app/orders?limit=\{limit\}
パラメーターを inSchema プロパティとして含める必要はありません。
Answers内でチャットボットブロックを使用する場合、定義された各パラメータの値を選択できます。
マニフェストの詳細レイアウト [#verbose-manifest-layout-update-the-manifest]
このレイアウトは、アプリの全体的な構造が ユーザー から ユーザー に変更されず、エンドポイントや関数スキーマが頻繁に変更されることが予想されない場合は使用します。
マニフェストを定義するには、アプリが使用する各関数、そのエンドポイント、関数が使用するすべての入力フィールドと出力フィールドを指定します。
これは、Answers の YAML 詳細マニフェストの例です。
これは、Answers の JSON 詳細マニフェストの例です。
これは、getOrderDetails と getShippingDetails の 2 つの関数を持つ Answers の YAML 詳細マニフェストの例です。
簡略化されたマニフェストのレイアウト [#simplifiedmanifest-layout-update-the-manifest]
このレイアウトは、ログインしているユーザーに基づいて異なるエンドポイントを使用する予定がある場合に使用します。Answers は、このエンドポイントに対してクエリを実行して、関数とその入力と出力の一覧を取得します。
これは、YAML の簡略化されたマニフェストの例です。
以下は、JSON の簡略化されたマニフェストの例です。
Moments - フロー [#moments--flow-update-the-manifest]
Moments - フローマニフェストには、フローエディタでフロー要素を定義する関数が含まれています。Moments – フローマニフェストは、エレメントを構築し、フローでのレンダリング方法を定義するパラメーターで構成されます。
Moments - フローマニフェストは、次のメインセクションで構成されています。
- 関数 - サードパーティのサービスで実行できる任意のプロシージャを定義します。
- アクション - すべてのアクションはフローのエレメントを定義し、フローの開始時に何らかの関数を実行します
- レンダリング - アクションで使用される入力フィールドのリストと、ユーザーがフローエディターで関数を表示する方法を具体的に定義します。
Exchange の既定のマニフェストの関数フィールドと例に関する次の情報を使用します。
inSchema と outSchema はどちらも https://json-schema.org/ 標準をサポートしています。
名前
関数の名前を関数識別子として定義します。各アプリは複数の機能を持つことができます。これは、フローエレメントが処理されるときに実行される関数です。アクションを定義するときは、アクション名に同じ名前の対応する関数があることを確認してください。フィールド model が設定されているすべてのレンダリング オプションには、model と同じ名前の定義済み関数が必要です。これは、このフィールドの事前定義された値がフェッチされたときに実行される関数です。
方式
関数を呼び出す方法を定義します。有効なメソッドは、GET、POST、DELETE、POST、および PATCH です。
形容
このフィールドを使用して、関数の動作を記述します。この説明は、フローエディターの関数定義としてユーザーに表示されます。
URI (英語)
これは、関数を実行するためのエンドポイント呼び出しです。このエンドポイントは、関数の実行時に Exchange によって使用されます。
必要に応じて、サポート クエリ パラメーターとパス パラメーターを追加できます。これにより、関数内に属性をパラメーターとして含めることができます。関数内で属性を使用するには、属性を中かっこ { } で囲みます。
たとえば、エンドポイントを呼び出す関数があるとします。
https://api.example.com/{path1}/v1?query1={query1}
パラメーターを inSchema のプロパティにマップします。たとえば、クエリ パラメーター query1={query1} は、次のようにプロパティにマップされます。
プロパティは、アンダースコア接頭辞 (_query1) を使用して定義する必要があります。
inSchema (英語)
変数の型、顧客が判読できる説明、変数名、変数が必要かどうかなど、関数への入力パラメーターを定義します。
inSchema には、次のパラメーターを含める必要があります。
- type: 型をオブジェクトとして設定します。
- properties: エンドポイント呼び出しに渡すことができる各プロパティのマップ。複数のプロパティを定義できます。
- 必須: 関数に含める必要がある入力プロパティを一覧表示します。
プロパティごとに、以下を定義する必要があります。
- property_name: エンドポイント要求で使用される入力プロパティの名前。プロパティ名は、このフィールドが依存するレンダリング オプションのフィールド名(
dateやhost_emailなど)と一致する必要があります。 - type: プロパティの型 (
string,number)。 - title: 入力プロパティの UI わかりやすい名前。このプロパティのタイトルは、フローエディターに表示されます。
また、プロパティの値の例を含めることもできます。これは、この情報がどのように表示されるかをユーザーに示すために使用されます。
outSchema (英語)
関数応答からの出力パラメーター (変数の型、ユーザーが判読できる説明、変数名など) を定義します。
outSchema には、次のパラメーターを含める必要があります。
- type: 最上位の型は object です。
- properties: エンドポイントの応答で返すことができる各プロパティのマップ。複数のプロパティを定義できます。
プロパティごとに、以下を定義します。
- property_name: エンドポイント要求で使用される出力プロパティの名前。プロパティの名前は、レンダリング オプションのフィールドの名前と一致する必要があります。
- path: 応答の場所 (ヘッダーや本文など) を定義します。既定値は
bodyです。statusCode を定義することもできます。 - type: プロパティの型 (
integer、string、number、boolean、object)。 型には、ドロップダウンリストの定義済みの値をフェッチする関数のarrayを含めることもできます。レンダリング オプション 'viewClass: SelectView' を使用する場合は、型arrayを定義します。 - title: プロパティの名前。
プロパティのマップには、SelectView (ドロップダウン) フィールドに使用される値を [オプション名] と [オプション ID] として識別するための 2 つのプロパティを含める必要があります。
selectViewOptionIdPath(選択ビューオプション Idパス)selectViewOptionNamePath(ビューオプション名パスの選択)
これらのプロパティの値を JSON パスとして定義し、指定された配列の ID と Name に到達します。
マニフェストの例 [#example-manifest-update-the-manifest]
以下は、Moments フロー の JSON マニフェストの例です。このマニフェストは、架空のレストランの予約を管理するためのデモ アプリケーションとの統合を表しています。
次のリンクのデモアプリケーションに移動します: https://restaurant-reservations-demo.azurewebsites.net/
デモアプリケーションは Github で公開されています: https://github.com/infobip-community/restaurant-reservations-demo
このマニフェストを使用して、NTT CPaaS アカウントのアプリとの統合がどのように機能するかをテストできます。
このアプリは、Exchange 統合の表現例として、およびマニフェスト機能を示すためにのみ使用されます。デモ アプリケーションを運用シナリオで使用したり、個人データをアプリケーションと共有したりしないでください。
API 要求の例 [#api-request-example-update-the-manifest]
API 要求の例を次に示します。Exchange は、この形式で提供されたデータを使用して、定義された URI を呼び出します。
この例は、"Creation reservation" https://restaurant-reservations-demo.azurewebsites.net/exchange/restaurant/reservations 関数の生の本体を示しています。
API 応答の例 [#api-response-example-update-the-manifest]
API 応答の例を次に示します。Exchange は、関数がマニフェスト構成に対してこの形式でデータを返すことを想定しています。
この例は、関数 "Get all reservations" https://restaurant-reservations-demo.azurewebsites.net/exchange/restaurant/reservations の応答を示しています。
モデル [#model-update-the-manifest]
関数が入力フィールドのモデルに対応する場合、その inSchema プロパティは array 以外のリストから任意の値にすることができ、outSchema プロパティは array である必要があります。outSchema では、プロパティの名前は render オプションのフィールドの名前と一致する必要があります。また、inSchema では、プロパティ名は、このフィールドが依存するレンダリング オプションのフィールド名と一致する必要があります。マニフェストの例を次に示します。
アクションでのレンダリングのフィールド定義(フィールド field3、field4、field5 は field6 と同じリストで定義されています)。
フィールドのモデルの関数定義:
配列の値の形式は次のとおりです。
これは、id フィールド (処理中に使用) と name フィールド (ドロップダウン メニューに表示) を持つオブジェクトのリストです。
依存 関係 [#dependencies-update-the-manifest]
レンダリングオプションの依存関係フィールドには、いくつかのユースケースがあります。次の例は、それがどのように機能するかを示しています。
*大陸を選択し、大陸を選択すると、国を選択できる別の選択フィールドが表示され、国を選択すると、都市を選択するための3番目の選択フィールドが表示されます。
この例では、field0 は TextFieldView で、他のフィールドは SelectView です。依存関係は次のとおりです。
- field1 には依存関係がありません
- field2 は field1 に依存している
- field3 は field1 と field2 に依存します。
- field4 は field3 に依存
- field5 は field3 と field4 に依存
- field6 は field3 、 field4 および field5 に依存
フィールドが解決される順序は、field1 から field6 までの数値です。
field1 の値を選択すると、field2 は事前定義された値を取得し、ロックが解除されます。
次のフィールドの値を選択します。
field2 の値を変更すると、その値に直接依存しないが推移的に依存するすべてのフィールド(この例では field4 )が消去され、無効になります。それに直接依存するフィールドも消去されますが、新しい事前定義された値がフェッチされ、解決可能なフィールドは無効になります。この例では、field3.
マニフェストに変更を加える [#making-changes-to-the-manifest-update-the-manifest]
ユーザーが統合を実装した後にマニフェストを更新する場合は注意してください。オプションの変数を inSchema と outSchema に追加しても影響は最小限に抑えられますが、必須の変数を inSchema に追加すると、本番環境でユーザーが機能しなくなる可能性があります。リストされているアプリのマニフェストに大幅な変更を加える必要がある場合は、contact NTT CPaaSを使用して、新しいバージョンのマニフェストに顧客を移行できるようにしてください。
テストのヒント
アプリをテストするには、まず NTT CPaaS 製品にアクセスできることと、NTT CPaaS 製品に精通していることを確認します。使用する通信チャネルによっては、senders/numbersを構成する必要がある場合があります。
最初にシンプルなアプリを作成してから、追加の変数の管理、ページ ナビゲーション、OAuth など、より複雑なエクスペリエンスのレイヤー化を開始することをお勧めします。
一般的な問題については、「トラブルシューティング」(./トラブルシューティング)セクションを参照してください。
Answersチャットボットのテスト [#testing-answers-chatbots-tips-for-testing]
Answersアプリの場合、すべての部分が正しく接続されていることを確認するために、完全なエクスペリエンスの概要を示すチャットボットを設定することをお勧めします。また、チャットボットをエクスポートして顧客に提供し、独自のチャットボットのテンプレートとして使用することもできます。
Momentsのテスト - フロー要素 [#testing-moments--flow-elements-tips-for-testing]
Moments - フロー要素については、すべての部分が正しく接続されていることを確認するために、完全なカスタマージャーニーの概要を示すフローを設定することをお勧めします。フローをテンプレートとして保存して、再度使用することもできます。
フローエディターの使用とフローの管理について詳しくは、フローの管理を参照してください。