520,你的语音自动回复小情人

345 阅读1分钟

一、前言

520情人节快到了,上次这么无论的时候还是在上次,
无聊中在网上发现个有趣的接口,是一个会自动回复语音的智能机器人接口,
终于我也有了甜甜的聊天了...

1652629779(1).jpg

二、功能分析

主要是调用了一个可以自动回复的接口,我把它做成了一个类似微信聊天的页面,功能是往输入框输入内容,用鼠标点击或者直接回车就可以发送消息,然后接口机器人会根据你输入的内容做一个自动文字回复,还能进行语音自动播放。

这个自动回复接口有趣的地方主要在于你可以输入任何内容,智能接口总是可以给你回复一些你意想不到的回复,大家有什么新奇的想法都可以往对话框里面输入,回复完内容以后,还会自动播放甜甜的语音~~

由于时间问题,还有很多功能可以完善,没有考虑去做优化,主要是用这个接口娱乐一下,希望各位大佬莫要嘲笑,接下来就直接上代码了。

css样式

    <link rel="stylesheet" href="./iconfont/iconfont.css">
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .box{
            margin: 100px auto;
            position: relative;
            width: 350px;
            height: 580px;
            border: 1px solid #f5e4e4;
            box-sizing: border-box;
            background-color: #ededed;
        }
        .bottom{
            position: absolute;
            bottom: 0;
            left: 0;
            display: flex;
            width: 100%;
            height: 40px;
            background-color: #f7f7f7;
            justify-content:space-evenly;
            align-items: center;
        }
        .speak{
           font-size: 25px;
        }
        .emo{
           font-size: 25px;
        }
        input{
            width: 200px;
            height: 33px;
            border-radius: 5px;
            background-color: #fff;
            border: none;
            outline: none;
        }
        button{
            width: 60px;
            height: 33px;
            border-radius: 5px;
            background-color:#07bf61;
            color: #f7fdfb;
            border: none;
        }
        ul{
            list-style: none;
            height: 54px;
        }
        img{
            width: 45px;
            height: 45px;
            border-radius: 5px;
        }
        li{
            display: flex;
            align-items:center;
            position: relative;
        }
        .rightposition{
            display: flex;
            justify-content: flex-end;
            position: relative;
        }
      
       .content{
           position: relative;
           text-align: center;
           padding: 5px;
           margin-right: 10px;
           margin-top: 28px;
           border-radius: 3px;
           vertical-align: middle;
           border: none;
           background-color: #95ec69;
       }
       .content::after{
           content: '';
           position: absolute;
           top: 3px;
           right: -15px;
           border-left: 10px solid #95ec69;
           border-top: 10px solid transparent;
           border-right: 10px solid transparent;
           border-bottom: 10px solid transparent;
       }
       .resContent{
           position: relative;
           text-align: center;
           padding: 5px;
           margin-right: 10px;
           margin-top: 28px;
           border-radius: 3px;
           vertical-align: middle;
           border: none;
           background-color: #fff;
       }
       .resContent::after{
           content: '';
           position: absolute;
           top: 3px;
           left: -15px;
           border-left: 10px solid transparent;
           border-top: 10px solid transparent;
           border-right: 10px solid #fff;
           border-bottom: 10px solid transparent;
       }
       .sendright{
            display: flex;
            align-items:center;
        
       }
       audio{
           display: none;
       }
       .top{
           box-sizing: border-box;
           display: flex;
           justify-content:space-between;
           align-items: center;
           padding: 5px;
           width: 100%;
           height: 45px;
           border-bottom: 1px solid #e6e5e5;
           background-color: #ededed;
           color:#232323;
           font-weight: 700;
       }
       .top span{
           color: black;
       }
       .user{
          width: 40px;
          height: 40px;
       }
       .arrow{
           display: inline-block;
           font-size: 20px;
       }
       .point{
           display: inline-block;
           font-size: 25px;
       }
      
    </style>

HTML部分

    <audio src="" controls autoplay></audio>
    <div class="box">
     
    <!-- 顶部 -->
    <div class="top">
        <span class="iconfont icon-zuojiantou arrow"></span>
        <p>宝贝</p>
        <span class="iconfont icon-gengduo point"></span>
    </div>  
    
    <!-- 内容 -->
      <ul></ul>

      <!-- 底部 -->
     <div class="bottom">
        <span class="iconfont icon-yuyin speak"></span>
        <input type="text">
        <span class="iconfont icon-xiaolian emo"></span>
        <button>发送</button>
     </div>   
    </div>

JS部分

    <script src="./axios.js"></script>
    <script>
            const btn = document.querySelector('button')
            const input = document.querySelector('input')
            const ul = document.querySelector('ul')
            const response = document.querySelector('.response')
            const box =document.querySelector('.box')
            const audio = document.querySelector('audio')
            
            // 获得焦点
            input.focus()

            // 回车 触发
            input.addEventListener('keydown', function (event) {
                    if (event.key === 'Enter') {
                        // trim() 去除 输入框的值 的两侧的 空字符串
                        const value = this.value.trim(); 
                        if (value) {
                            console.log('不是空字符串');

                            let liHtml = `
                                <li class="rightposition">
                                <div class="sendright">    
                                <div class="content">${input.value}
                                </div>    
                                <div class="info">
                                  <img class="userpic" src="./11.jpg" />
                                </div>
                                </div>
                                </li>
                                    `
                            ul.innerHTML += liHtml

                            // 文本
                            const txt = input.value
                            getMsg(txt)

                            btn.blur();
                            input.value = ''
                        } else {
                            console.log(123);
                        }
                    }
                });

            // 点击触发
            btn.addEventListener('click', function () {
                console.log('123');
            let liHtml = `
            <li class="rightposition">
            <div class="sendright">    
            <div class="content">${input.value}
            </div>    
            <div class="info">
              <img class="userpic" src="./11.jpg" />
            </div>
            </div>
            </li>
                `
            ul.innerHTML += liHtml     
             
            // 文本
            const txt = input.value
            getMsg(txt)

            // 失焦
            btn.blur();
            input.value=''
        })
            
        //文字
        function getMsg(txt) {
            axios.get('http://www.liulongbin.top:3009/api/robot?', { params: { spoken: txt } })
                .then(result => {
                    const msg =  result.data.data.info.text
                    console.log(msg);
                    let resHtml = `
                        <li>
                        <div class="resInfo">
                        <img class="userpic" src="./09.jpg" />
                        </div>
                        <div class="resContent">${msg}
                        </div>    
                        </li>
                            `
                    ul.innerHTML += resHtml   
                    getVoice(msg)
                }
        )}

        //语音部分
        function getVoice(msg){
            axios.get('http://www.liulongbin.top:3009/api/synthesize', { params: { text: msg } })
            .then(result=>{
                const vioceUrl = result.data.voiceUrl
                audio.src = vioceUrl
            })
        }
    </script>