前端基于vue企业微信JS-SDK语音识别功能开发(同公众号)

前端基于vue企业微信JS-SDK语音识别功能开发(同公众号)

微信JS-SDK

前端需要实现一个功能,如录音,拍照,分享,地理位置等,前端想要实现这些功能的调用,必须要通过调用JS-SDK的方式来实现,那么如何使用呢,本文进行简单的介绍

1.前期准备

因为是第一次开发,看了很多文档,包括官方文档,看了很多遍,仍然是一头雾水,那些东西该前端配,哪些东西该后端做,没有一点概念。经过了一番与后端的尝试与合作,终于调用成功!
企业微信里有个应用与小程序,里面的自建应用开发同公众号开发,后端设置略微有些不同
这个是企业微信里的目录
后端:根据企业微信里我的企业选项最下面的企业id和应用与小程序里的自建应用的Secret获取token,并计算签名等一系列操作,具体官方文档网上都很详细,这里就不多说;
配置
需要在企业微信的自建程序里设置域名:此域名为前端写代码的外网网页域名,也就是最后呈现的网页域名(前端写完代码给后端,后端根据项目地址我的是gitLab配置外网域名),第一次配置需要启动,所以要和后端配合好,启动时有一个txt文件,前端需要打包给后端,后端配置到根目录并确保可以访问到txt文件
在这里插入图片描述
说明:此域名的配置是必要的,只有配置此域名才可以使用此域名调用JS-SDK,可以使用微信开发者工具的公众号开发选项进行在线调试域名,注意:只可以调试你打包到线上的外网ip

前端代码撰写

安装并在组建里引入wx

import wx from 'weixin-js-sdk';
const _this = wx;

要想在一个组件使用在当前组件引入就行,引入完成就是使用,在页面调用接口之前必须完成注册等逻辑,因为录音功能是手动触发执行,所以在vue中可以写个函数在mounted钩子函数中执行完成注册,代码如下:

methods: {
      getConfig() {
        const self=this;
        const data=self.qs.stringify({url: location.href.split('#')[0]});//需要传的地址为#前面的地址
        self.axios({
          method: 'post',
          url: '',//获取签名等信息的地址
          headers: {'Content-Type': 'application/json'},
          data:data  //向服务端提供授权url参数,并且不需要#后面的部分
        }).then((res) => {
           let list = res.data.data;
          	_this.config({
            debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
            appId: list.appId, // 必填,公众号的唯一标识
            timestamp: list.timestamp, // 必填,生成签名的时间戳
            nonceStr: list.noncestr, // 必填,生成签名的随机串
            signature: list.signature, // 必填,签名
            jsApiList: [
              'startRecord', //开始录音接口
              'stopRecord',// 停止录音接口
              'playVoice', //播放语音接口
              'pauseVoice',//暂停播放接口
              'stopVoice', //停止播放接口
              'uploadVoice',//上传语音接口
              'downloadVoice', //下载语音接口
              'onVoicePlayEnd', // 监听语音播放完毕api
              'translateVoice'
            ] // 必填,需要使用的JS接口列表
          });
          _this.ready(() => {
            // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个
            // 客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调
            // 用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
          })
          _this.error((res) => {
            // 这个地方的好处就是wx.config配置错误,会弹出窗口哪里错误,然后根据微信文档查询即可。
          })
        }).catch((error) => {
          // error
        })
      },
      // 开始录音
      start(e) {
        let that = this;
        that.stop();
        that.time = 0;
        if(!localStorage.rainAllowRecord || localStorage.rainAllowRecord !== 'true'){
          _this.startRecord({
            success: function () {
               	that.timer = setInterval(() => {
                that.time++
              }, 1000)
              that.vicoeEnd()
            },
            fail: function () {
              // 开始录音失败
            },
            cancel: function () {
              // 用户拒绝授权录音
            }
          })
        }
      },
      // 停止录音
      stop() {
        let that = this
          _this.stopRecord({
          success: function (res) {
            if(that.time<0.5){
              return
            }
            // 暂停成功
            clearInterval(that.timer)
            that.localId = res.localId
          },
          fail: function (error) {
            // 停止失败
          }
        })
      },
      //取消录音判断
      isCancel(e) {
          this.cancel()
      },
      // 取消录音
      cancel() {
        _this.stopRecord({
          success: (res) => {
            // 取消录音成功
          },
          fail:function (error) {
            // 取消录音失败
          }
        })
      },
      // 60秒监听
      vicoeEnd() {
        let that = this
        _this.onVoiceRecordEnd({
          // 录音时间超过一分钟没有停止的时候会执行 complete 回调
          complete: function (res) {
            // 60秒停止录音
            that.localId = res.localId
            clearInterval(that.timer);
          }
        })
      },
      // 合并
      merge() {
        let that = this
        this.axios({
          method: 'post',
          url: '',
          headers: {'Content-Type': 'application/json'},
          data: {url: location.href.split('#')[0]}
        }).then((ser) => {
            that.$refs.allRecord.src = ser.data
        }).catch((error) => {
          // error
        })
      },
      // 结束录音并识别语音
      translate () {
        const that = this;
        _this.stopRecord({
          success: function (res) {
            // 翻译前停止录音
            that.localId = res.localId;
            _this.translateVoice({
              localId: that.localId,
              complete: function (res) {
                // 调用翻译完成时
              }
            });
          },
          fail: function (res) {
            // 调用停止失败
          }
        });
      },
      // 上传语音
      upVoice() {
        let that = this
        _this.uploadVoice({
          localId: that.localId, // 需要上传的音频的本地ID,由stopRecord接口获得
          isShowProgressTips: 1, // 默认为1,显示进度提示
          success: function (res) {
            var apiUrl = window.location.href
            // 上传成功
            that.serverId = res.serverId // 返回音频的服务器端ID
            that.axios({
              method: 'post',
              url: 'http://my.service.com/index.php/opcode/6002',
              headers: {'Content-Type': 'application/json'},
              data: {
                serverId: res.serverId,
                url: location.href.split('#')[0]
              }
            }).then((data) => {
                that.$refs.player.src = data.data
            }).catch((error) => {
              // error
            })
          }
        })
      }
      // 下载语音
      // downVoice () {
      //   let that = this
      //   _this.downloadVoice({
      //     serverId: that.serverId, // 需要下载的音频的服务器端ID,由uploadVoice接口获得
      //     isShowProgressTips: 1, // 默认为1,显示进度提示
      //     success: function (res) {
      //       // 下载成功
      //       that.downLoadId = res.localId // 返回音频的本地ID
      //     }
      //   })
      // },
      // 模拟上传语音
      // fake () {
      //   var apiUrl = window.location.href
      //   this.axios({
      //     method: 'post',
      //     url: 'api',
      //     headers: {'Content-Type': 'application/json'},
      //     data: {
      //       serverId: '',
      //       url: apiUrl
      //     }
      //   }).then((res) => {
      //       this.$refs.player.src = res.data
      //     }).catch((error) => {
      //       // error
      //     })
      // }
    },

这里样式代码根据需要进行编写就行,哪个按钮需要调用录音开始,哪个按钮调用录音结束,哪个需要翻译,需要用到哪个功能,直接调用methods里面的对应方法即可,(如果调用其它JS-SDK,原理等同,注册时给jsApiList数组添加你需要的功能字段微信公众号API文档可查就可以引用了), 需要对应方法执行成功后做的事情在对应方法里写就ok啦

是不是很简单呢,代码撰写完毕就是打包代码提交代码了,后台更新代码到线上,就可以看到效果了。注意:由于微信开发者工具是模拟调试,所以只能有一条模拟的录音结果返回,真正的语音及翻译结果还得发送网址到微信里打开查看

好了,微信JS-SDK接口调用就介绍到这里了,新手初写,希望能帮助到大家,也请大家多多指导

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于开发Vue微信公众号网页,你可以按照以下步骤进行: 1. 创建项目:首先,你需要创建一个Vue项目。你可以使用Vue CLI来快速创建一个Vue项目,运行命令`vue create project-name`来创建一个新的项目。 2. 配置公众号:在微信公众号后台,你需要配置网页授权域名和JS接口安全域名。确保你的网页域名和JS接口安全域名与你的Vue项目所在的域名一致。 3. 安装依赖:在Vue项目中,你可能需要安装一些依赖来处理微信公众号相关的功能。你可以使用npm或者yarn来安装这些依赖。 4. 配置路由:在Vue项目中,你可以使用Vue Router来管理页面的路由。根据你的需求,配置路由来实现不同页面之间的跳转。 5. 接入微信SDK:使用微信提供的JS-SDK实现网页授权和获取用户信息等功能。你可以在Vue项目中引入微信SDK,并根据微信JS-SDK的文档进行配置和使用。 6. 开发页面:根据你的需求,开发各个页面。你可以使用Vue的组件化开发方式来构建页面,并使用Vue的数据绑定和事件机制来实现交互功能。 7. 发布上线:完成开发后,你需要将Vue项目打包并发布到生产环境中。使用Vue CLI提供的命令来进行打包,然后将生成的静态文件部署到服务器上。 以上是一个简单的概述,希望对你有所帮助。如果你有具体的问题或者需要更详细的指导,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值