首页 /

微信订阅号

/ 微信语音识别点歌功能开发教程

微信语音识别点歌功能开发教程

  在微信接口里面有一个语音识别接口,这个接口是非常棒的,大家想一下如果您对着微信公众号说一句话,然后,公众号就根据您说的话返回相应的东西,这其不是非常秒!而且我们在公众号里面发送关键字时,有时会按错手机小键盘上面的符号,如果说一句话就能代替按键而且也不用打字那该多好,微信官方已经提供了这个语音接口,而且,腾讯开发的这个功能是非常强的,您说一句话他会把语音给您解析成汉字文本,既使是一个相对普通话不好的人来说,腾讯的语音识别也非常准确,从这一点也可以看出腾讯的技术确实不错。

  要使用语音识别接口首先要开通语音识别,开通过方法是进入到微信公众号里找到“接收语音识别结果”点后面的开启,如下图所示:

开启语音识别

  这是我的微信公众号测试号开启的方法。

  开通后就可以使用微信语音识别功能了。

语音识别原理分析

  当用户通过公众号用手“按住说话”按扭说话后,腾讯服务器就会接收到语音,然后,在腾服务器上面把语音解析成文本,然后,通过语音的xml数据包把语音的信息发送给开发者服务器,我们收到xml数据包后就可以提取里面的语音信息,根据我们的需要进行开发。

  上面已经提到了语音经过腾讯处理后就会转变成文本,例如,您在微信公众号里面说“小水果”,那么,微信服务器就会把“小水果”这句语音转换成文本“小水果”,然后,把生成的文本“小水果”及其相关的信息以xml的形式发送给开发者。

  语音的xml数据包如下:

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1357290913</CreateTime>
<MsgType><![CDATA[voice]]></MsgType>
<MediaId><![CDATA[media_id]]></MediaId>
<Format><![CDATA[Format]]></Format>
<Recognition><![CDATA[小水果!]]></Recognition>
<MsgId>1234567890123456</MsgId>
</xml>

参数说明:

参数 描述
ToUserName 开发者微信号
FromUserName 发送方帐号(一个OpenID)
CreateTime 消息创建时间 (整型)
MsgType 语音为voice
MediaID 语音消息媒体id,可以调用多媒体文件下载接口拉取该媒体
Format 语音格式:amr
Recognition 语音识别结果,UTF8编码
MsgID 消息id,64位整型



  也就是说用户说了一句“小水果”后腾讯就会在xml数据包中增加一个Recongnition字段,这个字段就是由腾讯把用户说的“小水果”转换成文字“小水果!”后的值。

请注意:在腾讯把语音转换成文本后,会在文本后面增加一个中文状态下的叹号,而不是英文状态下的叹号,这一点非常重要,因为,我们在回复用户发送的语音时会用到。

  通过上面的xml我们发现腾讯服务器发送过来的消息类型为voice,跟多媒体文本类型差不多,而且传递过来的语音格式为amr,其它与文本、图片、图文等没有什么区别。


开发要求:

  开发一个当用户说一首歌曲后,就返回一首歌曲,这里以用户在微信公众号里面说一首歌曲“小水果”为例子,然后,就返回一首“小水果”mp3供用户点播。

程序开发开始

  通过上面的分析可以知道,跟被动回复没有什么区别,我们接收到了的内容就是一个voice,所以,我们回复时按照以前的进行开发即可。

  开发的代码如下所示:

case 'voice':

    //简单的微信语言点歌系统
    if($postObj->Recognition == '小水果!')
    {
        $title = '小水果';
        $decription = '小水果,是一首非常好听的歌曲';
        $music_url = 'http://www.phpos.net/music/xsg.mp3';

        $resultStr = sprintf($tmp_arr['music'], $fromUsername, $toUsername, $time, $title, $decription, $music_url, $music_url);
        echo $resultStr;
    }else
    {
        $contentStr = "您要听的歌曲 {$postObj->Recognition},不存在!";
        $resultStr = sprintf($tmp_arr['text'], $fromUsername, $toUsername, $time, $contentStr);
        echo $resultStr;
    }
    break;


  请注意上面的条件里面的叹号,这是非常简单的一段代码,要注意的是在开发前请上传mp3到music文件夹里面,并且,在上面的代码里面换上自己服务器地址。

  上面我们只是演示了一个简单的语音识别的应用,其实,在实际应用中这个语音识别是非常多的,这里只是用一个简单的mp3作了简单的被动回复。现实生活中使用的比较多,比如收到用户的语音转换后的文本,您就可以根据自己业务的需要进行扩展功能、发一张照片给用户、发一首歌曲给用户、还可以推荐一个产品给客户,还可以开发成当用户说一个练习题的名字,返回一道习题的答案等等。