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 内のテキストコメントをマークするための記号

推薦する

MySQLステートメントの記述と実行順序を理解するだけです

MySQL ステートメントの書き込み順序と実行順序には大きな違いがあります。書き順、mysql の一...

Centos8 の Django プロジェクトに nginx+uwsgi をデプロイするチュートリアル

1. 仮想環境virtualenvのインストール1. virtualenvをインストールするpip3...

Ubuntu MySQL バージョンが 5.7 にアップグレードされました

数日前、図書館はサーバー(Ubuntu 14.04)にセキュリティ上の脆弱性があり、時間通りに修復さ...

HTML チュートリアル: よく使われる HTML タグのコレクション (5)

関連記事:初心者が学ぶ HTML タグ (4)導入された HTML タグは、必ずしも XHTML 仕...

img 画像タグに alt 属性を付与する必要がありますか?

img 画像タグに alt 属性を追加しますか?画像 img タグの alt 属性を見落とすことはよ...

Dockerコンテナを閉じずに終了する方法の詳細な説明

Docker コンテナに入った後、コンテナを終了すると、コンテナは Exited 状態に変わります。...

MySQL infobrightのインストール手順

目次1. 次のように、「rpm -ivh インストール パッケージ」コマンドを使用して rpm パッ...

CocosCreatorで複数のタイマーを使用する方法の詳細な説明

1.タイムアウトを設定する3 秒後に abc を印刷します。一度だけ実行します。 setTimeou...

Python 仮想環境のインストールとアンインストールの方法と発生する問題

Ubuntu16.04 のインストールとアンインストール pip実験環境Ubuntu 16.04; ...

MySQL でトランザクションのコミットとロールバックを実装する方法の詳細な例

最近、データベース データのスケジュールされた移行を実行する必要があります。実行プロセス中に何らかの...

CSS3プロパティline-clampはテキスト行の使用を制御します

説明: ブロック要素に表示されるテキストの行数を制限します。 -webkit-line-clamp ...

ES6 の Set および WeakSet コレクションの詳細な説明

目次セットは値が重複しない特別なコレクションです。セットコレクション基本API独自の価値判断セットを...

Mysql の主キー インデックスと非主キー インデックスの違いについて簡単に説明します。

目次インデックスとは何か主キーインデックスと通常のインデックスの違いインデックスにはどのデータ構造が...

MySQL で遅い SQL 文を見つける方法

MySQL で遅い SQL ステートメントを見つけるにはどうすればよいでしょうか?これは、多くの人を...