contentful関数とazure関数を使用したchatbotのビルド方法


私はシェービングキットを忘れていることに気づきました.私はすぐに私は滞在されるホテルのアプリを開きました.そのchatbot機能のおかげで、私は彼らに要求を落としました.彼らはすぐに私のシェービング問題を解決することができました、そして、加えて、私に空港からタクシーを予約しました.
チャットボットの利点は非常に明白です:彼らは顧客を満足させる、彼らは販売ツールとして動作し、会話の関係を維持することができます.私は不満を感じなかった、私はホテルに接続し、今我々は会話の歴史を構築した.
会話ボットは、顧客に到達するために重要なチャネルを提供するため、ほとんどのブランドは、特定のソリューションを提供する専門家のボットを開発している.いくつかのチャットは、FAQソリューションを提供し、他の顧客のニーズに応じて特定の製品をお勧めしますが、まだ他の迅速に請求やアカウント情報に関する質問に返信します.Contentfulあなたのchatbotのコンテンツ層を処理することができますこのポストは、アーキテクチャ、実装と結果を介して歩きます.

Chatbotのための特定の文脈と技術スタック


我々の企業顧客の1人は、彼らが彼らのウェブ製品を正常に動かすために内容プラットホームを使用したあと、ContentfulでFAQ Chatbotを構築したかったです.マイクロソフトクラウドサービスを利用していたので、マイクロソフトAzure機能と知識ベースを用いたコンセプトを簡単に構築することを決めました.Contentfulはこれらのツールで動作しますが、Amazon Webサービス、Googleクラウドプラットフォーム、またはIAPIワトソンのAPIのような他のクラウドとボットサービスでも使用できます.いくつかの最初の調査の後、我々はここで提示されるアーキテクチャを開発しました.

建築



公表フロー

  • エディタは、ContentfulでFAQを発表します
  • FAQの出版は、ContentfulでWebhookを引き起こします
  • Webhookは私たちの公開クラウド関数を呼び出します
  • 機能は、知識ベースにコンテンツをプッシュします
  • 未発表流

  • エディタは、ContentfulでFAQを公表します
  • FAQの非公開は、ContentfulでWebhookを引き起こします
  • Webhookは私たちの未発表のクラウド関数を呼び出す
  • この関数は、知識ベースからFAQを削除します
  • 実装


    満足


    我々は、チャットボットの質問と回答を格納するためにcontentfulを使用します.Contentful Webアプリケーションでは、エディタを簡単に書くことができます編集、そのコンテンツを公開します.畝

    コンテンツモデル


    我々はコンテンツモデルを非常に簡単にこのデモのために維持している-ちょうど1つのコンテンツタイプは、我々の質問と回答のペアを保持するだけでなく、コンテンツエディタのための内部のタイトルを参照として持っている.畝

    網掛け


    私たちは、私たちのクラウド機能をトリガーして、PublishingとPublishイベントのためにWebhooksを使用します.

    Publishing Event Webhookを作成する場合は、次のようにエントリPublicationイベントのWebhookのトリガーを設定してください.URLについては、クラウド関数のエンドポイントを追加する必要があります.私たちはDummyWebhook ウェブサイトngrok ダミーのエンドポイントを作成して追加します.

    未公開イベントwebhookを作成するとき、以下に示すように、エントリーのために我々のWebhookの引き金をセットしてください.前回と同じように、ダミーの値をDummyWebHoopまたはNgrokからURLに設定します.

    一度完了すると、エントリを作成することができますし、公開することによって私たちのワークフローをテストし、それを解いて、webhookペイロードを送信チェックします.次に、我々のwebhookログにペイロードを表示することができます.
    エントリwebhook payload :
    {
      "sys": {
        "type": "Entry",
        "id": "1ssZF4Lqq1Wpi9KSHvq9jE",
        "space": {
          "sys": {
            "type": "Link",
            "linkType": "Space",
            "id": "bwn0phmhnub6"
          }
        },
        "environment": {
          "sys": {
            "id": "master",
            "type": "Link",
            "linkType": "Environment"
          }
        },
        "contentType": {
          "sys": {
            "type": "Link",
            "linkType": "ContentType",
            "id": "faqQuestion"
          }
        },
        "revision": 2,
        "createdAt": "2020-04-13T23:06:07.225Z",
        "updatedAt": "2020-04-13T23:07:05.635Z"
      },
      "fields": {
        "title": {
          "en-US": "First question"
        },
        "question": {
          "en-US": "What is contentful? \n\n"
        },
        "answer": {
          "en-US": {
            "data": {},
            "content": [
              {
                "data": {},
                "content": [
                  {
                    "data": {},
                    "marks": [],
                    "value": "Contentful is Headless CSM",
                    "nodeType": "text"
                  }
                ],
                "nodeType": "paragraph"
              }
            ],
            "nodeType": "document"
          }
        }
      }
    }
    
    エントリWebhookペイロードを無効にします
    {
      "sys": {
        "type": "DeletedEntry",
        "id": "1ssZF4Lqq1Wpi9KSHvq9jE",
        "space": {
          "sys": {
            "type": "Link",
            "linkType": "Space",
            "id": "bwn0phmhnub6"
          }
        },
        "environment": {
          "sys": {
            "id": "master",
            "type": "Link",
            "linkType": "Environment"
          }
        },
        "contentType": {
          "sys": {
            "type": "Link",
            "linkType": "ContentType",
            "id": "faqQuestion"
          }
        },
        "revision": 2,
        "createdAt": "2020-04-13T23:27:30.971Z",
        "updatedAt": "2020-04-13T23:27:30.971Z",
        "deletedAt": "2020-04-13T23:27:30.971Z"
      }
    }
    
    今のところ、それは我々がcontentful以内にしなければならないすべてです.畝

    マイクロソフト知識ベースのFAQチャットボットの作成


    QNAサービス


    1 . gohttps://www.qnamaker.ai/ そして、無料のアカウントを作成します.

    2 .知識ベースの作成.

    3 . QNAサービスを作成します.

    4 .に戻るhttps://www.qnamaker.ai/ そして、あなたの購読名とAzure QNAサービスを見るためにリフレッシュしてください.

    5 .知識ベースを作成する手順の残りを完了します.一度完了すると、知識ベースが以下のいずれかに似ていることになります.

    統合するAPI


    今我々は知識ベースを作成することで行われて、我々は質問と回答をChatbotのためにcontentfulから来てそれを組み込む必要があります.我々は知識ベースから情報を追加、更新、または削除するために使用できるAPIを探索しましょう.
    私たちはupdate endpoint コンテンツを追加および削除するには.また、私たちはdownload endpoint すべての質問と回答を取得し、それらをフィルタリングします.

    アジュール関数


    Azure関数は、サーバーレスアプリケーションを開発し、配備する強力な方法です.このユースケースのために、我々はすぐに我々の概念の証明を開発して、テストすることができるように、Azure機能を選びました.

    セットアップ


    これは、Visual Studioのコードを使用してAzure機能プロジェクトを設定するためのガイドを提供します.
    このchatbotプロジェクトの次の設定を使用しました.
  • 言語:選択できますmultiple languages , しかし、我々はJavaScript
  • 関数トリガー
  • 名前:最初の関数のためのPublishWebHookHandlerと第2の機能のためのUnPublishWebHookHandlerを使用した関数
  • アクセス権:今すぐ匿名に設定します.生産のために、適切なセキュリティメカニズムを実行するようにしてください
  • PublishWebHookHandlerとUnPublishWebHookHandlerの2つの機能を持つ新しいAzure関数プロジェクトを作成しました.

    PublishWebHookHandler


    この機能は、コンテンツが公開されるたびにContentfulから来るWebhookを使用して我々の知識ベースにコンテンツをプッシュするために使用されます.
    アルゴリズム
  • webhookから以下を取り出します:エントリーID、質問と答え
  • メイクするAPI すべての質問と回答を得るために私たちの知識ベースに呼び出します.すべての質問がある場合は、フィルタの質問を使用して、メタデータを使用してエントリIDをチェックします.
  • 質問が存在するならば、我々はその質問を使っている質問を更新しますupdate endpoint . 新しい質問を追加するには、同じエンドポイントを使用します.唯一の違いはペイロードの本体です.メタデータ内でキーコンテクストとその値を追加していることがわかります.これは、我々が知識ベースのエントリとcontentfulでエントリをマップするのを助けて、エントリを削除して、更新するのを助けます.
  • 新しい質問の追加
    {
      "add": {
        "qnaList": [
          {
            "answer": "answer",
            "source": "source",
            "questions": [
              "question"
            ],
            "metadata": [{"name":"contentfulid","value":"1ssZF4Lqq1Wpi9KSHvq9jE"}]
          }
        ]
      }
    }
    
    質問の更新
    {
      "update": {
        "name": "QnA Maker FAQ Prompts Bot",
        "qnaList": [
          {
            "id":87,
            "answer": "answer 2",
            "source": "source",
            "questions": {
              "add":["questions 1"],
              "delete":[]
            }
          }
        ]
      }
    }
    
    知識ベースにコンテンツを追加するためのサンプル関数
    module.exports = async function(context, req) {
       if (req.body) {
           const contentfulID = req.body.sys.id;
           const contentfulQuestion = req.body.fields.question['en-US'];
           const contentfulAnswer = req.body.fields.answer['en-US'].content[0].content[0].value;
    
           const questionFromKB = await getQuestionIdFromKB(contentfulID);
           const response = await  upsertQuestionInKB(context, questionFromKB, contentfulID, contentfulAnswer, contentfulQuestion);
    
           context.res = {
               status: 200,
               body: JSON.stringify(response),
           };
       } else {
           context.res = {
               status: 400,
               body: 'Please pass a name on the query string or in the request body',
           };
       }
    };
    

    UnPublishWebHookhandler


    この関数は、未公開のWebhookを使って知識ベースからコンテンツを削除します.
    module.exports = async function(context, req) {
     if (req.body) {
         const contentfulID = req.body.sys.id;
         const questionId = await getQuestionIdFromKB(contentfulID);
         const response = await removeQuestionFromKB(questionId);
         context.res = {
             body: JSON.stringify(response),
         };
     } else {
         context.res = {
             status: 400,
             body: 'Please pass a name on the query string or in the request body',
         };
     }
    };
    
    アルゴリズム
  • webhookからエントリIDを取得する
  • メイクするAPI すべての質問を取得し、エントリのIDを使用して質問をフィルタリングする当社の知識ベースに呼び出して
  • メイクするAPI 我々の知識ベースから質問を削除するために呼び出します.ペイロードは以下のようになります.
  • {
       "delete":{
          "ids":[
             29
          ]
       }
    }
    

    配備する


    両方の機能が準備ができたら、彼らはAzure雲に展開することができます.

    展開が完了すると、マイクロソフトAzureポータルからPublishWebHookHandlerおよびUnPublishWebHokler URLを取得します.それらを最初のステップで作成したwebhooksに追加します.

    Chatbotの最後までのテスト


    コンテンツを設定する


    我々は、コンテントでのテストのための3つのQ&Aを発表しました.公開イベントの各々は、webhookを引き起こしました、そして、彼らは我々の知識ベースに押し込まれました.チェックするにはログインしますhttps://www.qnamaker.ai 質問が公開されているかどうかを確認します.
    以下のスクリーンショットでは、3つの公開Q&Contentfulと同様に我々の知識ベースに追加を参照することができます.

    現在、我々の知識ベースは、内容を訓練します.QNAサービスの内部では、テストをクリックしてチャットをテストすることができます.

    結果


    今、あなたはインテリジェントチャットボット顧客が話をすることができます.この方法の顧客は、単純な答えを探してウェブサイト上の広範なリストを通過する必要はありません.また、顧客と彼らの頻繁な質問の感情を測定することができます.この追加情報を使用すると、私たちは私たちのFAQを改善する権限を与えられます.畝

    我々のchatbotのための将来の強化

  • 私たちのコンテンツモデルは、単一の答えのための複数の質問を追加する拡張することができますすべてのエントリについては、追加のメタデータを追加することができます.このため、PublishWebHookHandler関数内で同期機能を更新する必要があります.
  • contentfulも異なる提供localization パターンは、複数の言語でコンテンツを作成するために使用することができます、私たちは多言語ボットをパワーすることができます.畝
  • この記事では、我々はマイクロソフトテックスタックを使用して探求したが、同様のことを使用して達成することができますAWS Lambda and AWS Lex . 彼らの知識ベースにAPIアクセスを提供するどんなChatbotプラットホームも、contentfulで使われることができます.WebHooksとCloud機能を使用すると、知識ベースにコンテンツをプッシュし、その後、それを訓練することができます.
  • あなた自身の会話のchatbotを実装するために探している場合は、することができますsign up それを試してみてください.お気軽にお問い合わせください.当社のソリューションサービスチームは、企業の顧客とのデジタルの旅を加速する動作します.