通过百度MrcpServer实现简单的呼叫对话机器人。 一、参考百度AI接入指南,创建应用,获取AppID、APIKey、SecretKey,用于后续配置使用 https:ai。baidu。comaidocREFERENCECk3dwjgn3 二、下载MrcpServer安装包sdkasrMRCPServer20200609。tar。gz https:ai。baidu。comaidocSPEECH7kaxz0h2z https:ai。baidu。comdownload?sdkId111 wgethttps:platform。bj。bcebos。comsdk2FasMRCPServer20200609。tar。gz 三、解压sdkasrMRCPServer20200609。tar。gz文件。会生成个MRCPServer文件夹。 tarxvfsdk2Fasr2FMRCPServer20200609。tar。gz 四、。安装百度MrcpServer cdMRCPServer sh。bootstrap。sh lloptcompiler total4 drwxrwxrx3330833084096Jun92020gcc8。2 五、配置Mrcp 1配置ASR,为FreeSWITCH提供语音识别服务。 mrcpserverconfmrcpasr。conf 更改AUTHAPPID和AUTHAPPKEY为从百度官方获取的APPID和APIKey的值 2配置TTS,为FreeSWITCH提供语音合成服务。 配置文件为:mrcpserverconfmrcpproxy。conf 更改AUTHAPPID和AUTHAPPKEY为从百度官方获取的APPID和APIKey的值 3配置MrcpServer的SIP服务端,为FreeSWITCH的MrcpClient提供SIP服务。 mrcpserverconfunimrcpserver。xml 4启动MrcpServer,无报错即正常。 cdmrcpserver 。binunimrcpserverr。 5FreeSWITCH使用百度的MrcpServer需要用到grammar。xml这个语法文件。 cpMRCPServermrcpserverdatagrammar。xmletcfreeswitchgrammarbaidu。gram 六、FreeSWITCH配置 vimetcfreeswitchconfmrcpprofilesbaiduserver。xmlinclude!后面我们使用该配置文件,均使用name作为唯一标识,而不是文件名profilenamebaiduserverversion2!MrcpServer地址!MrcpServer地址和FreeSWITCH如果不在同一个服务器,请酌情修改paramnameserveripvalue127。0。0。1!MrcpServer端口号paramnameserverportvalue6060paramnameresourcelocationvalue!FreeSWITCH的MrcpClent的ipporttransferrtpiprtpport等信息!MrcpServer地址和FreeSWITCH如果不在同一个服务器,请酌情修改clientiprtpip,以便能连接到MrcpServerparamnameclientipvalue127。0。0。1paramnameclientportvalue6666paramnamesiptransportvalueudpparamnamertpipvalue127。0。0。1paramnamertpportminvalue21000paramnamertpportmaxvalue22000paramnamespeechsynthvaluespeechsynthesizerparamnamespeechrecogvaluespeechrecognizerparamnamecodecsvaluePCMUPCMAL16968000!AddanydefaultMRCPparamsforSPEAKrequestsheresynthparamssynthparams!AddanydefaultMRCPparamsforRECOGNIZErequestshererecogparams!paramnamestartinputtimersvaluefalserecogparamsprofileinclude vimetcfreeswitchconfautoloadconfigsunimrcp。conf。xmlconfigurationnameunimrcp。confdescriptionUniMRCPClientsettingsparamnamedefaultttsprofilevaluebaiduserverparamnamedefaultasrprofilevaluebaiduserverparamnameloglevelvalueDEBUGparamnameenableprofileeventsvaluefalseparamnamemaxconnectioncountvalue100paramnameoffernewconnectionvalue1paramnamerequesttimeoutvalue3000settingsprofilesXPREPROCESScmdincludedata。。mrcpprofiles。xmlprofilesconfiguration 七、测试 !百度unimrcpserverasr测试python版!playanddetectspeechextensionnameasrplayanddetectspeechconditionfielddestinationnumberexpression8899434;conditionextensionimportosimportfreeswitchfromfreeswitchimportimportsysimportjsonimporttempfileimportrequestsimportxml。etree。ElementTreeasETimportfreeswitchasfsfromfreeswitchimportfromxml。dom。minidomimportparseStringimportrandomimportrequests百度UNIT3。0聊天clientidADIB9GGUGzYNpLclientkeyeOu8qYRU5sogDKMKVkMYheXVuserid88888默认userid都为88888defhandler(session,args):session。answer()session。sleep(1000)session。execute(speak,unimrcp:baiduserver我是你的智能小卓子,有什么可以帮助你的?)tryagain0whilesession。ready():session。execute(playanddetectspeech,silencestream:1000detect:unimrcp:baiduserver{startinputtimersfalse,noinputtimeout60000,inputtimeout60000,recognitiontimeout60000}builtin:grammarbaidu)asrresultsession。getVariable(detectspeechresult)ifasrresultisNone:tryagain0else:try:freeswitch。consoleLog(CRIT,asrresult)语音转文字guesttextasr2text(asrresult)freeswitch。consoleLog(CRIT,结果识别:text)tryagain1对接机器人bottextbotchat(guesttext,userid,clientid,clientkey)session。execute(speak,unimrcp:baiduserverbottext)exceptExceptionase:fs。consoleLog(CRIT,ASRresultparsefailedse)continuesession。sleep(1000)session。hangup()defasr2text(text):xmldomparseString(text)collectionxmldom。documentElementreturnInfocollection。getElementsByTagName(input)guesttextreturnInfo〔0〕。firstChild。datareturnguesttextdefbotchat(chatinput,userid,clientid,clientsecret):设置默认回复chatreply不好意思,我正在学习中,随后回复你固定的url格式urlhttps:aip。baidubce。comoauth2。0token?granttypeclientcredentialsclientidsclientsecrets(clientid,clientsecret)resrequests。post(url)accesstokenjson。loads(res。text)〔accesstoken〕unitchatboturlhttps:aip。baidubce。comrpc2。0unitservicev3chat?accesstokenaccesstoken拼装聊天接口对应请求postdata{version:3。0,serviceid:S75157,sessionid:,logid:str(random。random()),skillids:〔1237888,1237895〕,request:{terminalid:userid,query:chatinput}}将聊天接口对应请求数据转为json数据resrequests。post(urlunitchatboturl,jsonpostdata)获取聊天接口返回数据unitchatobjjson。loads(res。text)ifunitchatobj〔errorcode〕!0:returnchatreply(unitchatobj〔errormsg〕)unitchatresponsereplyunitchatobj〔result〕〔responses〕〔0〕〔actions〕〔0〕〔say〕returnunitchatresponsereply