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コード

アイデア:外側のボックスは背景を設定し、内側のボックスは背景の幅と高さを設定し、ボックスを動かすアニ...

MySQL マルチバージョン同時実行制御 MVCC の実装

トランザクション分離レベルの設定 グローバルトランザクション分離レベルを読み取りコミット済みに設定;...

Vue 開発ツリー構造コンポーネント (コンポーネント再帰)

この記事では、Vue開発ツリー構造コンポーネントの具体的なコードを例として紹介します。具体的な内容は...

JavaScriptは行削除機能を備えたテーブルを動的に生成します

この記事の例では、テーブルを動的に生成したり行を削除したりするためのJavaScriptの具体的なコ...

dl、dt、dd リスト ラベルの例

dd タグと dt タグはリストに使用されます。通常は <ul><li> タ...

Mysql が CPU を過剰に占有する場合の最適化方法 (必読)

Mysql が CPU を占有しすぎる場合、どこから最適化を開始すればよいでしょうか? CPU 使...

ノードイベントループとメッセージキューの分析

目次非同期とは何ですか?なぜ非同期性が必要なのでしょうか?非同期IOとは何ですか?イベントループとは...

Linux で MySQL データベースのスケジュールされたバックアップを実装する簡単な方法

詳細な手順は次のとおりです。 1. ディスク容量を確認します。 [root@localhost バッ...

vue-cli を使用してプロジェクトを作成し、webpack でパッケージ化する方法

1. 環境を準備する(Node.jsをダウンロードし、環境変数を設定する) 2. vue-cliをグ...

Docker-compose におけるdepends_on 順序問題を解決する方法についての簡単な説明

コンテナをソートするためにdepends_onを使用しても、コンテナ間の依存関係の問題は完全には解決...

LinuxにComposerをインストールする方法

1. インストールスクリプト(composer-setup.php)を現在のディレクトリにダウンロー...

JavaScript で虫眼鏡の特殊効果を実現

達成される効果:マウスを小さな画像の上に置くと、小さなブロックが小さな画像の上に表示され、この小さな...

MySQLのSQL文はインデックスを使用しません

インデックス集約を使用しない MySQL クエリご存知のとおり、インデックスを追加することはクエリ速...

Java は Apache.POI を使用して HSSFWorkbook を Excel にエクスポートします

Apache.POI の HSSFWorkbook を使用して Excel にエクスポートします。具...