当サイトを最適な状態で閲覧していただくにはブラウザのJavaScriptを有効にしてご利用下さい。
JavaScriptを無効のままご覧いただいた場合には一部機能がご利用頂けない場合や正しい情報を取得できない場合がございます。
承知しました
本サイトではWebサイトのエクスペリエンスを向上させるために、Cookieを使用しています。Cookieはブラウザの設定から無効にできます。本サイトで使用するCookieについては、プライバシーポリシーをご確認ください。

Blog

ブログ

統合

KenticoCloudでAlexaを強化

By Bryan Soltis  

ウェブサイト。モバイルアプリ。スマートウォッチ。ウェアラブル。デジタルアシスタント。コンテンツを配信する方法は無限であり、人々が情報を消費および活用する方法については非常に多くのオプションがあります。 AIのおかげで、人々はテクノロジーを日常生活に統合し、それを使用してお気に入りのソースから情報を取得しています。

ヘッドレスCMSを入力してください。コンテンツを中央の場所でホストすることにより、データをデジタルバトラーに簡単に提供できます。この記事では、KenticoCloudコンテンツでAlexaを強化する方法を紹介します。

ヘッドレスCMSの最大の利点の1つは、コンテンツを1つの場所に保存し、複数のチャネルに配信できることです。 Webはおそらくほとんどの企業の主な焦点ですが、データを消費する方法は他にもたくさんあります。モバイルからスマートウォッチ、看板からデジタルアシスタントまで、人々がいつどのように情報を入手したいかについては、無限の可能性があります。

デジタルアシスタントの人気は急上昇しており、多くの家庭がデジタルアシスタントを日常生活に取り入れています。ホームオートメーションであろうとストリーミングであろうと、AmazonのAlexaは、AIペルソナの人々が情報を入手するのを手伝ってもらいたいという点で確かに最有力候補の1つです。プライバシーの懸念はさておき、これらのデバイスは、オーディエンスにリーチしてブランドを売り込むための優れたツールになります。

この記事では、KenticoCloudコンテンツをAlexaと統合する方法を紹介するのはクールだと思いました。プロセスは驚くほど単純で、ほんの少しのコードと構成が必要です。また、コンテンツはKentico Cloudに保存されているため、他のコミュニケーションやプレゼンテーションに簡単に転用できます。それで、どうやってそれをしましたか?

Kenticoクラウドコンテンツを作成する

Alexaを使い始める前に、コンテンツを作成する必要がありました。 Kenticoに関する事実を提供したいと思っていたので、これはKenticoCloudでコンテンツタイプを定義することを意味しました。各アイテムのファクトのタイプを判別するためにラジオ選択要素を使用したことに注意してください。

Kentico Kontent


作成したコンテンツタイプで、事実を追加しました。

Kentico Kontent


事実はウェブサイトではなくAlexaに使用されるため、他の種類のコンテンツを作成する必要はありませんでした。これにより、作成プロセスが大幅に簡素化され、開発に集中できるようになりました。

コンテンツを取得するサービスを作成する

コンテンツが処理されたので、コーディングという楽しいものに取り掛かる準備ができました。統合の最初のステップは、KenticoCloudからコンテンツを取得するサービスを作成することでした。すべてRESTAPIにアクセスできるため、ほぼすべてのソリューションが適しています。 AWS Lambda関数、RESTサービス、またはスタンドアロンのWebアプリケーションでさえ、データの取得にはすべて問題ありません。私のことを知っている人なら誰でも驚くことではありませんが、私はその仕事にAzureFunctionsを選びました。関数を非常に迅速にコーディングでき、ニーズに完全に適合することはわかっていました。

Azureポータルで、新しいHTTPトリガー関数を作成しました。作成後、依存関係を取得するためにproject.jsonファイルを追加しました。

Kentico Kontent


Kentico Cloudと統合してJSONを返すだけなので、パッケージのリストは非常に短いものでした。これが完全なproject.jsonファイルです。

 { 'frameworks': { 'net46':{ 'dependencies': { 'KenticoCloud.Delivery':'4.1.0' } } }}


次に、関数ロジックを追加しました。データを取得するためにDeliveryAPIコードを追加しました。これはHTTPトリガーであったため、入力パラメーターとしてHttpRequestMessageと、TraceWriterを受け取ります。

Kentico Kontent


Alexaが関数にリクエストを送信するため、クエリに関する詳細を決定するためのコードも追加しました。心配しないでください。これは、Alexaカスタムスキルを取得したときに意味があります。

 dynamic data = await req.Content.ReadAsAsync(); string type = 'general'; string fact = ''; if (data.request.intent.slots.type.value != null) { switch(data.request.intent.slots.type.value.ToString().ToLower()) { case 'history': type = 'history'; break; case 'general': type = 'general'; break; case 'product': type = 'product'; break; default: type = 'general'; break; } }


次に、 type値をKenitco Cloud APIに渡して、フィルタリングされたアイテムを取得しました。次に、数学のランダム化を少し使用して、返されたコレクションからランダムなファクトを引き出しました。

 // Get the Kentico Cloud content DeliveryClient client = new DeliveryClient(ConfigurationManager.AppSettings['KenticoFactsProjectID']); // Get the fact items from Kentico Cloud var responseFact = await client.GetItemsAsync( new EqualsFilter('system.type', 'fact'), new ContainsFilter('elements.facttype', type) ); int r = rnd.Next(responseFact.Items.Count); fact = responseFact.Items[r].GetString('facttext'); log.Info(fact);


最後に、Alexaが期待するJSONを返すように関数をコーディングしました。このJSON構造の詳細については、 こちらをご覧ください

 return req.CreateResponse(HttpStatusCode.OK, new { verstion = '1.0', sessionAttributes = new {}, response = new { outputSpeech = new { type = 'PlainText', text = fact }, card = new { type = 'Simple', title = 'Fact', content = fact }, shouldEndSession = true } });


これが完全なAzure関数コードです。

 using System.Net;using KenticoCloud.Delivery;using System.Text;using System.Configuration;static Random rnd = new Random();public static async Task Run(HttpRequestMessage req, TraceWriter log){ dynamic data = await req.Content.ReadAsAsync(); string type = 'general'; string fact = ''; if (data.request.intent.slots.type.value != null) { switch(data.request.intent.slots.type.value.ToString().ToLower()) { case 'history': type = 'history'; break; case 'general': type = 'general'; break; case 'product': type = 'product'; break; default: type = 'general'; break; } } // Get the Kentico Cloud content DeliveryClient client = new DeliveryClient(ConfigurationManager.AppSettings['KenticoFactsProjectID']); // Get the fact items from Kentico Cloud var responseFact = await client.GetItemsAsync( new EqualsFilter('system.type', 'fact'), new ContainsFilter('elements.facttype', type) ); int r = rnd.Next(responseFact.Items.Count); fact = responseFact.Items[r].GetString('facttext'); log.Info(fact); return req.CreateResponse(HttpStatusCode.OK, new { verstion = '1.0', sessionAttributes = new {}, response = new { outputSpeech = new { type = 'PlainText', text = fact }, card = new { type = 'Simple', title = 'Fact', content = fact }, shouldEndSession = true } });}

Alexaカスタムスキルを作成する

Azure関数を配置したら、Alexaカスタムスキルを作成する準備が整いました。 Alexaスキルの作成には、いくつかの基本的な構成、サービスとの対話方法のAlexaへの指示、Alexaとサービスが相互に通信できるように配管を設定することが含まれます。

スキル情報

Amazon Developerポータルで、KenticoFactsという名前の新しいスキルを作成しました。 NameInvocationNameに特定の値を使用したことに注意してください。これらは、Alexaマーケットプレイスに表示されるものと、Alexaがスキルを開始するためにリッスンするフレーズです。

Kentico Kontent


インタラクションモデル

インタラクションモデルの設定で、Alexaがスキルとどのように連携するかを定義しました。

Kentico Kontent


Alexaがリクエストを行うために使用するJSONを指定するインテントスキームを定義しました。スロットの定義に注意してください。これにより、取得するファクトのタイプが決まります。

 { 'intents': [ { 'slots': [ { 'name': 'type', 'type': 'LIST_OF_FACTTYPES' } ], 'intent': 'GetKenticoFact' } ]}


カスタムスロットタイプについては、ファクトタイプの新しいリストを定義しました。これらの値は、KenticoCloudコンテンツタイプの無線選択要素に対応しています。

歴史
一般
製品

最後に、サンプル発話を定義しました。この設定は、スキルリクエストがあったときにAlexaが応答するフレーズを指定します。タイプスロットがさまざまなフレーズでどのように使用されているかに注意してください。

GetKenticoFactは私に{type}ファクトを取得します
GetKenticoFactは{type}ファクトを取得します
GetKenticoFactは{type}ファクトを教えてくれます
GetKenticoFactはkenticoについて教えてください
GetKenticoFactは会社について何か教えてくれます
GetKenticoFactは、kenticoの{type}について教えてください
GetKenticoFactは、会社の{type}について教えてください
GetKenticoFactkenticoの何が面白いのか
GetKenticoFact会社の何が面白いのか
GetKenticoFactkenticoの{type}の何が面白いのか
GetKenticoFact会社の{type}の何が面白いのか
GetKenticoFactkenticoの何が面白いのか
GetKenticoFact会社の何が面白いのか
GetKenticoFactkenticoの{type}の何が面白いのか
GetKenticoFact会社の{type}の何が面白いのか

注:サンプル発話のリストは、ユーザーがスキルをどのように操作するかを学習するにつれて、時間の経過とともに進化する可能性があります。

構成

構成には、HTTPSを選択し、Azure関数のURLを入力しました。

Kentico Kontent


ヒント:関数内の関数URLの取得リンクを使用して、Azureポータルで関数のURLを取得できます。

Kentico Kontent


SSL証明書

SSL証明書の場合、 [開発エンドポイントはサブドメインです... ]オプションを選択しました。私の関数はAzureFunctionsでホストされていたため、*。azurewebsites.net証明書を利用しました。

Kentico Kontent

テスト

スキル定義の最後の部分はそれをテストすることでした。インターフェイスを使用して、スキルにコマンドを送信し、適切な値が返されることを確認しました。リクエストの一部として商品タイプを使用して、正しい種類の事実が返されることを確認しました。

Kentico Kontent


また、Azure Functionがリクエストを受信し、ファクト情報を返していることを確認しました。

Kentico Kontent

私のデジタルフレンドと話す

すべてが整ったので、EchoDotを使用してスキルをテストする準備ができました。 Alexaアプリで、カスタムスキルが[マイスキル]の下に表示されていることを確認しました。次に、Alexaに事実を尋ねました。

これは私が作った機能をデモンストレーションするビデオです。画面にAzure関数ログが表示され、新しいリクエストが届くたびに更新されました。関数でTraceWriterを使用して、返されたファクトをログに書き込みました。

前進する

かなりすごいですよね?!? Kentico Cloudでコンテンツを管理することにより、ほぼすべてのチャネルにコンテンツを簡単に配信できます。おそらくあなたのサイトには、もっとアクセスしやすくしたいナレッジベースがあります。このソリューションを使用すると、すべての記事をKCに保持し、サイトに表示したり、人々がそれらを消費するためのインタラクティブなAIエクスペリエンスを提供したりできます。この記事が、AlexaをKentico Cloudと統合し、独自のソリューションを構築することがいかに簡単であるかを示してくれることを願っています。がんばろう!

Headless CMSの導入をお考えでしょうか?

クラウドとマルチデバイスに最適化されたKentico Kontentをお試しください