jQuery Ajax チャットボットの実装事例

jQuery Ajax チャットボットの実装事例

チャットボットは多くの手作業を省くことができ、顧客サービス、天気予報対応など、さまざまな状況で使用できます。この記事では、jQuery Ajax チャットボットを次のように詳しく紹介します。

'

実装手順:

1. ケースのコード構造を整理する

a. ページのUIレイアウトを整理する

b. ビジネスコードをchat.jsに抽出する

c. resetui() の機能を理解する: スクロールバーの位置をリセットする

<link rel="スタイルシート" href="css/reset.css" rel="外部nofollow" />
<link rel="スタイルシート" href="css/index.css" rel="外部nofollow" />
<script src="js/jquery-1.12.4.min.js"></script>
<script src="js/jquery-ui.min.js"></script>
<script src="js/jquery.mousewheel.js"></script>
        <div class="wrap">
      <!--ヘッダー領域-->
      <div class="header">
        <h3>シャオシャンのクラスメイト</h3>
        <img src="images/person01.png" alt="アイコン" />
      </div>
 
      <!-- チャットコンテンツエリア-->
      <div class="main">
        <ul class="トークリスト" style="top: 0px" id="トークリスト">
          <li class="left_word">
            <img src="images/person01.png" /> <span>こんにちは、最近会えなくて寂しかったですか? </span>
          </li>
          <!-- <li class="right_word">
            <img src="images/person02.png" /> <span>こんにちは</span>
          </li> -->
        </ul>
        <div class="drag_bar" style="display: none;">
            <div
              クラス="drager ui-draggable ui-draggable-handle"
              スタイル="表示: なし; 高さ: 412.628px;"
            </div>
          </div>
      </div>
 
      <!-- 音声を再生 -->
      <audio src="" id="voice" 自動再生 style="display: none;"></audio>
 
      <!-- メッセージ編集領域-->
      <div class="footer">
          <img src="images/person02.png" alt="">
          <input type="text" placeholder="何か言ってください..." class="input_txt" id="ipt" />
          <input type="button" value="送信" class="input_sub" id="btnSend">
      </div>
    </div>
 
    <!-- ページスクロールを実装する -->
    <script src="js/scroll.js"></script>
    <script src="js/chat.js"></script>

インデックス.css、

体 {
    フォントファミリ: 'Microsoft YaHei';
}
 
。包む {
    位置: 固定;
    幅: 450ピクセル;
    左: 50%;
    左マージン: -225px;
    上: 20px;
    下: 20px;
    境界線: 1px 実線 #ebebeb;
    背景色: #fff;
    境界線の半径: 10px;
    ボックスの影: 0 0 30px rgba(0, 0, 0, 0.1);
    オーバーフロー: 非表示;
}
 
.ヘッダー{
    高さ: 55px;
    背景: linear-gradient(90deg, rgba(246, 60, 47, 0.6), rgba(128, 58, 242, 0.6));
    オーバーフロー: 非表示;
}
 
.ヘッダー h3 {
    色: #faf3fc;
    行の高さ: 55px;
    フォントの太さ: 標準;
    フロート: 左;
    文字間隔: 2px;
    左マージン: 25px;
    フォントサイズ: 18px;
    テキストシャドウ: 0px 0px 5px #944846;
}
 
.ヘッダー画像{
    フロート: 右;
    マージン: 7px 25px 0 0;
    境界線の半径: 20px;
    ボックスの影: 0 0 5px #f7f2fe;
}
 
。主要 {
    位置: 絶対;
    左: 0;
    右: 0;
    上: 55px;
    下: 55px;
    背景色: #f4f3f3;
    ボックスのサイズ: 境界線ボックス;
    パディング: 10px 0;
    オーバーフロー: 非表示;
}
 
.トークリスト{
    位置: 絶対;
    幅: 100%;
    左: 0px;
    上: 0px;
}
 
.トークリスト li {
    オーバーフロー: 非表示;
    マージン: 20px 0px 30px;
}
 
.talk_list .left_word 画像 {
    フロート: 左;
    左マージン: 20px;
}
 
.talk_list .left_word span {
    フロート: 左;
    背景色: #fe9697;
    パディング: 10px 15px;
    最大幅: 290px;
    境界線の半径: 12px;
    フォントサイズ: 16px;
    色: #fff;
    左マージン: 13px;
    位置: 相対的;
    行の高さ: 24px;
}
 
.talk_list .left_word span:before {
    コンテンツ: '';
    位置: 絶対;
    左: -8px;
    上: 3px;
    幅: 13px;
    高さ: 12px;
    背景: url('../images/corner01.png') 繰り返しなし;
}
 
.talk_list .right_word 画像 {
    フロート: 右;
    右マージン: 20px;
}
 
.talk_list .right_word span {
    フロート: 右;
    背景色: #fff;
    パディング: 10px 15px;
    最大幅: 290px;
    境界線の半径: 12px;
    フォントサイズ: 16px;
    色: #000;
    右マージン: 13px;
    位置: 相対的;
    行の高さ: 24px;
}
 
.talk_list .right_word span:before {
    コンテンツ: '';
    位置: 絶対;
    右: -8px;
    上: 3px;
    幅: 13px;
    高さ: 12px;
    背景: url('../images/corner02.png') 繰り返しなし;
}
 
.ドラッグバー{
    位置: 絶対;
    右: 0px;
    上: 0px;
    背景色: #fff;
    高さ: 100%;
    幅: 6px;
    ボックスのサイズ: 境界線ボックス;
    下境界線: 1px 実線 #f4f3f3;
}
 
.drager {
    位置: 絶対;
    左: 0px;
    上: 0px;
    背景色: #cdcdcd;
    高さ: 100px;
    幅: 6px;
    境界線の半径: 3px;
    カーソル: ポインタ;
}
 
.フッター{
    幅: 100%;
    高さ: 55px;
    左: 0px;
    下: 0px;
    背景色: #fff;
    位置: 絶対;
}
 
.footer画像{
    フロート: 左;
    マージン: 8px 0 0 20px;
}
 
.input_txt {
    フロート: 左;
    幅: 270ピクセル;
    高さ: 37px;
    境界線: 0px;
    背景色: #f4f3f3;
    マージン: 9px 0 0 20px;
    境界線の半径: 8px;
    パディング: 0px;
    アウトライン: なし;
    テキストインデント: 15px;
}
 
.input_sub {
    フロート: 左;
    幅: 70ピクセル;
    高さ: 37px;
    境界線: 0px;
    背景色: #fe9697;
    マージン: 9px 0 0 15px;
    境界線の半径: 8px;
    パディング: 0px;
    アウトライン: なし;
    色: #fff;
    カーソル: ポインタ;
}

効果は以下のとおりです。

2. ユーザー入力をチャットウィンドウにレンダリングする

チャット.js、

    //スクロールバーの位置をリセットします resetui();
 
    //マウスクリックイベントを送信ボタンにバインドします$("#btnSend").on('click', function () {
        let text = $("#ipt").val().trim(); //送信するコンテンツ//送信するコンテンツが空かどうかを判定します if (text.length <= 0) {
            $("#ipt").val(''); を返します。
        }
 
        //ユーザーがチャット内容を入力した場合、チャット内容をページに追加して表示します $("#talk_list").append(`<li class="right_word"><img src="images/person02.png" /> <span>${text}</span></li>`);
        
        //送信後に入力ボックスをクリアします$("#ipt").val('');
        
        //スクロールバーの位置をリセットします resetui();
    }); 

3. チャットメッセージを取得するためのリクエストを開始する

チャット.js、

    //サーバーからデータを要求する関数を定義します -- チャットボット関数から返されたデータを取得します getMsg(text){
        $.ajax({
            メソッド: 'GET'、
            URL: 'http://www.liulongbin.top:3006/api/robot',
            data:{// ユーザーが送信したメッセージをサーバーに送信する。spoke: text
            },
            成功: function(res){
                // コンソールログ(res);
 
                //リクエストが成功したかどうかを判断する data.info.text
                if(res.message === "成功"){
                    // サーバーから返されたチャット メッセージを受信します。let msg = res.data.info.text;
                    // コンソールログ(メッセージ);
 
                    // サーバーから返されたチャット メッセージをチャット インターフェイスにレンダリングします $("#talk_list").append(`<li class="left_word"><img src="images/person01.png" /> <span>${msg}</span></li>`);
                    //スクロールバーの位置をリセットします resetui();
                }
            }
        })
    } 

4. ロボットのチャット内容を音声に変換する

5. <audio> でオーディオを再生する

    //ロボットのチャット内容を音声に変換する function getVoice(text){
        $.ajax({
            メソッド: 'GET'、
            URL: 'http://www.liulongbin.top:3006/api/synthesize',
            データ: {
                テキスト: テキスト
            },
            成功: function(res){
                // コンソールログ(res);
 
                //リクエストが成功したかどうかを判断します if (res.status === 200) {
                    //音声を再生$("#voice").attr("src",res.voiceUrl);
                }
            }
        })
    } 

6. Enterキーを使ってメッセージを送信します

    //テキスト入力ボックスにイベントをバインドします。Enter キーが押されて放されたときにチャットコンテンツを自動的に送信します。$("#ipt").on('keyup',function(e){
        // console.log(e.keyCode); // 13
 
        //ユーザーがEnterキーを押したかどうかを判定します if(e.keyCode === 13){
            //ボタン要素のクリック関数を呼び出してそのコンテンツを送信します $("#btnSend").click();
        }
    }) 

jQuery を使用した Ajax チャットボットの実装の完全なケースに関するこの記事はこれで終わりです。より関連性の高い jQuery Ajax チャットボットのコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • jQuery チャットボットの実装

<<:  MySQL query_cache_type パラメータと使用方法の詳細

>>:  HTML コメント HTML 内のテキストコメントをマークするための記号

推薦する

マウスがカード上に移動したときにフローティング効果を実現する CSS の使用例

原理ホバーしたときに要素に影を設定します: box-shadow で、通常とは異なるスタイルにします...

Vueはel-tree遅延読み込みを使用して、追加、削除、変更、クエリ機能を実装します。

Vue のツリー表示については、プロジェクトが使用されています: エフェクト ダイアグラムがツリー...

JavaScript でグレイウルフのポットビーティングゲームを実装

1. プロジェクト文書 2. ページレイアウトにHTMLとCSSを使用するHTML部分 <di...

Vue 親子コンポーネントの相互値の転送と呼び出し

目次1. 親が子コンポーネントに値を渡す2. 子コンポーネントが親コンポーネントに値を渡す3. 子コ...

HTML のキャンバスに基づくスクリーンショットのデモ

冒頭に書いた以前、Renren で JS ベースのスクリーンショット ソリューションについて説明した...

時系列転位修復ケースを実装するSQL

目次1. 要件の説明2. アイデアの概要1. 延長を要求する2. アイデアの概要3. SQLコード1...

MySQL パーティションテーブルの制限と制約の詳細な説明

ビルドを無効にするパーティション式では、次の構成はサポートされません。ストアドプロシージャ、ストアド...

Tomcatのクラスロードメカニズムを説明する記事

目次- 序文 - - JVM クラスローダー - 1. JVMクラスローダー2. クラスローダーのソ...

JavaScript でのモグラ叩きゲームの実装

この記事では、モグラ叩きゲームを実装するためのJavaScriptの具体的なコードを参考までに紹介し...

docker を使用して複数のネットワーク インターフェースを持つコンテナーを起動する方法の例

コンテナにネットワークインターフェースを追加する1 デフォルトのネットワークモードでコンテナを実行す...

ボタンをクリックして画像を切り替える JavaScript

この記事の例では、ボタンをクリックすることで画像を切り替えることを実現するJavaScriptの具体...

Linuxターミナルでファイルを作成する2つの一般的な方法を簡単に理解する

mkdir コマンドを使用して新しいディレクトリを作成できることは誰もが知っていますが、多くの場合、...

JavaScriptは、マウスが通過したときにドロップダウンボックスを表示するように実装します。

この記事では、マウスがドロップダウンボックスの上を通過するときにドロップダウンボックスを表示するため...

Better-scrollはメニューとコンテンツをリンクする効果を実現します

1. 基本的な使い方 <!DOCTYPE html> <html lang=&qu...

MySQL への接続時に発生する 1449 および 1045 例外の解決方法

MySQL への接続時に発生する 1449 および 1045 例外の解決方法 mysql 1449:...