附录2-聊天机器人案例

目录

1  效果

2  后端

3  前端


1  效果

2  后端

视频中的后台用了NLP的聊天机器人,那个搞起来比较麻烦,不过语音合成还是能搞的,我们就搞一个固定的对话

接口文档我就不写了,直接看postman

无论发什么都会返回你好

视图是这样的,在POST请求的同时会存储一个静态文件,静态文件名称为test.mp3是机器人回复你的文字合成的音频文件

3  前端

这个是移动端的web页面,我们按照移动端开发

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="initialization.css">
    <link rel="stylesheet" href="index.css">
</head>
<body>
    <header>
        <span>小思同学</span>
        <div></div>
    </header>
    <article>
        <div class="robot_chat">
            <div class="robot_head"></div>
            <div class="robot_content">你好,我是小思同学</div>
        </div>
        <!-- <div class="user_chat">
            <div class="user_head"></div>
            <div class="user_content">123123131231456456</div>
        </div>
        <div class="robot_chat">
            <div class="robot_head"></div>
            <div class="robot_content">1231231312314564564</div>
        </div>
        <div class="user_chat">
            <div class="user_head"></div>
            <div class="user_content">123123131231456456</div>
        </div>
        <div class="robot_chat">
            <div class="robot_head"></div>
            <div class="robot_content">1231231312314564564</div>
        </div> -->
    </article>
    <footer>
        <div></div>
        <input type="text" placeholder="说点儿什么吧...">
        <button>发 送</button>
    </footer>
    <audio src="http://127.0.0.1:8000/static/start.mp3" autoplay="autoplay" style="display:none;"></audio>
</body>
<script src="../jquery-3.6.1.min.js"></script>
<script src="index.js"></script>
</html>

css

body {
    background-color: rgb(243,242,241);
}

header {
    position: fixed;
    display:flex;
    justify-content: space-between;
    width:100%;
    height:10vw;
    padding:0vw 5vw;
    background:-webkit-linear-gradient(left,rgb(248,137,134),rgb(181,136,246));
    z-index:999;
    span {
        font-size:2vw;
        line-height:10vw;
        color:white;
    }
    div {
        position: absolute;
        transform: translateY(-50%);
        top:50%;
        right:5%;
        width:8vw;
        height:8vw;
        border-radius: 50%;
        background-image:url(upload/robot_head.jpg);
        background-size:8vw 8vw;
    }
}


article {
    position: relative;
    top:10vw;
    width:100%;
    height:100%;
    padding-bottom:15vw;
    .robot_chat {
        position: relative;
        width:100vw;
        height:10vh;
        padding:10vw 0;
        .robot_head {
            position: absolute;
            transform: translateY(-50%);
            top:45%;
            left:2%;
            width:8vw;
            height:8vw;
            border-radius: 50%;
            background-image:url(upload/robot_head.jpg);
            background-size:8vw 8vw;
        }
        .robot_content {
            position: absolute;
            transform: translateY(-50%);
            top:75%;
            left:11%;
            max-width:75%;
            border-width: 2vw;
            padding:2vw 2vw 2vw 5vw;
            border-style:solid;
            border-image-source:url(upload/robot_chat_border.png);
            border-image-slice:81 99 73 155;
            border-image-width:81px 99px 73px 155px;
        }
    }
    .user_chat {
        position: relative;
        width:100vw;
        height:10vh;
        padding:10vw 0;
        .user_head {
            position: absolute;
            transform: translateY(-50%);
            top:45%;
            right:2%;
            width:8vw;
            height:8vw;
            border-radius: 50%;
            background-image:url(upload/user_head.jpg);
            background-size:8vw 8vw;
        }
        .user_content {
            position: absolute;
            transform: translateY(-50%);
            top:75%;
            right:11%;
            max-width:75%;
            border-width: 2vw;
            padding:2vw 10vw 2vw 2vw;
            border-style:solid;
            border-image-source:url(upload/user_chat_border.png);
            border-image-slice:81 99 73 155;
            border-image-width:81px 155px 73px 99px;
        }
    }
}

footer {
    position: fixed;
    bottom:0px;
    display: flex;
    justify-content: space-between;
    width:100%;
    height:10vw;
    background-color: rgb(253,254,253);
    z-index:999;
    div {
        margin:1vw 0vw 0vw 5vw;
        width:8vw;
        height:8vw;
        border-radius: 50%;
        background-image:url(upload/user_head.jpg);
        background-size:8vw 8vw;
    }
    button {
        width:16vw;
        height:8vw;
        margin:1vw 5vw 0vw 0vw;
        border:1px solid transparent;
        border-radius: 2vw;
        font-size:3vw;
        color:white;
        background-color: rgb(254,150,150);
    }
    input {
        margin-top:1vw;
        width:60vw;
        height:8vw;
        border:1px solid transparent;
        border-radius: 2vw;
        text-indent: 3vw;
        outline: none;
        background-color: rgb(243,242,241);
    }
}

JS

function get_chat() {
    user_content = $('footer input').val().trim()
    if (user_content) {
        $('article').append('<div class="user_chat"><div class="user_head"></div><div class="user_content">'+ user_content +'</div></div>')
        $.ajax({
            type:'POST',
            url:'http://127.0.0.1:8000/robot_chat',
            data:{user_content:user_content},
            success:function(result) {
                result = JSON.parse(result)
                robot_content = result['content']
                $('article').append('<div class="robot_chat"><div class="robot_head"></div><div class="robot_content">'+ robot_content +'</div></div>')
                window.scroll(0,$('body').height())
                $('audio').attr('src','http://127.0.0.1:8000/static/test.mp3')
            }
        })
    }
    $('footer input').val('')
}


$('footer button').on('click',function() {
    get_chat()
})

$('footer input').on('keyup',function(e) {
    if (e.keyCode == 13) {
        get_chat()
    }
})

需要注意的点

  • 除了用POST发送用户给机器人的话以外,audio标签的src其实是一个隐藏的get请求,在项目中我使用了静态文件中的音频文件
  • 使用JS更换audio标签的src,如果audio标签设置了autoplay,即使是谷歌浏览器也可以播放出音频
  • 初次加载audio标签,即使使用JS更换src,依然不能自动播放出声音
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Suyuoa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值