This is an old revision of the document!
====== IVR ====== Interactive voice response is what we call IVR. When you dial 10086 and you will hear voice instruction to guide you for services. IVR can be used to guide customers, deal interactive services, play voice broadcast etc. **Module function:** Set the voice process and control the IVR flow. ===== Add Main Flow ===== {{:en:module_manual:advanced:ivr_add.jpg?700|}} Add main ivr flow, which contains many sub-flow. And only main flow can be the original entrance for ivr, and can have an independent extionsion number **Name:**to show the purpose or function of this ivr. **Team:**apply the data to which team. And when the team is set, the system will automatically get the voice file and queue information under this team. **Extension:**we can see this as the telephone number of this ivr in the system, and take this ivr as an automatic interaction telephone. Extension number can only be numbers and not be the same as other extensions. **Failover:** the setting when the main flow fails and where to turn to, and the cause to the failure: ivr reaches the max loop time; fail to call web service; fail to play broadcast; no target has been set to the flow; IVR fails to switch to the device. When these situations occur, the flow will be switched to this target set here. **Failed Announce: ** this function is not enabled. **IVR event url:**the http URL where the call events related to IVR are sent to ( program can be used to analyse the recordings). This can be left blank, and documentary recording is default. When using dialer dials IVR , and choose documentary recording, the system will record the ivr path into campaign call recording, and get the input of customers in the IVR . **Web Service time out:** in this main flow, when perform all acts related to calling web service, and the program runs out of time, it will lead to "fail over to". **Max loop times : **The max time the flow is allowed to be called. And when it exceeds this time, it will turn to "fail over to". **Save variables : **To send the certain variables which are dealt in the flow to the agent or the program that receives through call events (enabled in version 2.0). ===== Edit Action ===== {{:en:module_manual:advanced:ivr_action_add.jpg?700|}} IVR action contains the typs shown in the picture above ↑. **Answer:**to all the after call work of IVR, in most flow we should set this action first. When the route supports progress (like the theory of ring back music), that is, it plays before the call is answered. 需要注意的是有一些应用如进入会议室等,应用内部会默认进行应答。↓ {{:en:module_manual:advanced:ivr_action_answer.jpg?700|}} **Play announce:**Play a certain broadcast, and during this the button pressing is invalid, and it will play regardless of the input. 所指定的语音分两类型, 一种为选择系统已增加的固定的[[zh:模块使用说明:pbx高级管理:呼叫语音管理|呼入语音]],直接在列表中选择即可 ↓ {{:en:module_manual:advanced:ivr_action_play_announce.jpg?700|}} 另一种为通过webservice动态获取的语音文件路径,在根据条件动态决定所播放的语音,或是需要外部系统进行动态生成语音等流程中可以用到,当然获取到的语音文件路径必须以某种方式存在于CTI服务器的文件系统中(如通过samba将外部目录映射到CTI服务器) ↓ {{:en:module_manual:advanced:ivr_action_play_ws.jpg?700|}} WS 地址: 获取语音文件名所调用webservice的地址。 WS 方法名: 获取语音文件名所调用webservice的方法名。 WS 参数: 获取语音文件名所调用webservice的参数,参数写法请参见下方介绍调用webservice动作的部分。 语音文件地址: 语音文件在文件系统中的目录,如果设置此项,则拨放语音的路径为 此项所设置的内容/webservice返回的结果,如果不设置此项则直接用webservice返回的结果。 播放次数: 系统在挂机产自动播放该语音的次数。 **放音收号:**播放指定语音并获取用户按键输入,一旦用户开始按键,则语音将停止播放。↓ {{:en:module_manual:advanced:ivr_action_readdata_system.jpg?700|}} 此动作的语音类型同播放话音动作同样分为系统和webservice两种,参见上方播放语音动作部分参数。 保存至变量:用户的按键输入默认存入变量inputcode, 但inputcode值只在当前节点内有效果,例如主流程中有一个放音收号的动作输入123,并存入inputcode,但一旦转入某个子流程后,inputcode就会被清空,并且如果在一个流程内有多次放音收号的动作,inputcode值只存最后一次的按键结果,所以,如果有以上情况,并且你希望本次动作的按键结果能随话务一直保留,则需要设置本参数,以便后续引用;此参数请以大写字母开头,且只允许包含大写字母,数字,中横杠"-" ,下划线"_"。 输入限制: 限制此动作中允许的最大按键位数,0,代表无限制,当用户按键长度达到此限制时,系统将停止收号并完成此动作,执行后续流程。 输入超时:即用户开始输入后,最大输入间隔时长,如果输入间隔达到此参数值,系统则认为已完成输入,将停止收号并完成此动作,执行后续流程 <note tip>以下三种情况系统将结束放音收号,执行后续流程: - 1,达到输入限制位数 - 2,达到输入超时时长 - 3,按#结束输入,#为系统默认结束符,无论何时输入#,系统都认为输入已完成,所以,#只能做为结束符提示用户输入,请不要将#设置为其它选项,要求用户输入。 如果放音收号动作中,可以确定输入按键都为固定长度或可确定最大长度,如你要求用户输入卡号,且卡号都是12位,则设置输入限制为12,用户输入12位数字后,系统自动向下转向,不需要再按“#”或等待输入超时。如果为非固定长度可在语音提示中要求用户按#结束。 </note> **webservice:**调用外部webservice接口。↓ {{:en:module_manual:advanced:ivr_action_webservice.jpg?700|}} WS 地址: 获取语音文件名所调用webservice的地址(webservice接口请使用utf8编码)。 WS 方法名: 获取语音文件名所调用webservice的方法名。 WS 参数: 获取语音文件名所调用webservice的参数,参数写法为每个参数以竖线"|"分隔,参数可为系统内部变量(见下表)或流程中自定义的变量,也可以为字符串,字符串写法为[字符串内容]。例如要传参数为:主叫号码、流水号、当前语言、字符串abc.txt、主定义变量CARDNO,则写为 <wrap hi>callerid|sessionid|CURLANG|[abc.txt]|CARDNO</wrap> 。 <WRAP center round box 85%> 内部变量列表: <WRAP column 20%> * systime * inputcode * callerid * didnumber * sessionid * TEAMID * TEAMIDENTITY * ENTERSYS * CURLANG * CURIVRID * AGENTNO * AGENTGROUPID * MODELTYPE * MODELID </WRAP> <WRAP column 45%> * 系统当前时间 * 用户最后按键输入值 * 主叫号码 * 接入号码(DID) * 呼叫流水号 * 团队ID * 团队标识 * 话务接入系统时间(当前通话开始时间) * 当前话务语言 * 当前IVR节点id * 话务最后一个相关坐席工号 * 话务最后一个相关坐席组id * 业务模块类型 * 业务模块id </WRAP> <WRAP column 20%> <note important>注意大小写</note> </WRAP> </WRAP> WS 返回值:为webservice返回值加标识,以便保存全局变量时使用;webservice返回值要求为字符串,多个值之间以竖线"|"分隔,且第一个返回值会默认保存为inputcode,其它返回值按顺序依照此项设置进行标识,此参数请以大写字母开头,且只允许包含大写字母,数字,中横杠"-" ,下划线"_"。 全局变量: 将WS 返回值中标识的返回值设为全局可用变量,多个参数同样使用竖线"|"分隔,要设置的全局变量必须为WS 返回值中的参数,如WS 返回值 设置为 USERID|CREDIT , webservice 返回 1|001|321|ABC, 则第一个返回值 1 会存入内部变量inputcode中,根据WS 返回值的设置第二个参数标识为USERID,第三个参数标识为CREDIT , 如果想将这两个返回值都设为全局变量,则全局变量应设为USERID|CREDIT(先后顺序没有要求,USERID|CREDIT和CREDIT|USERID效果相同),如果只需要CREDIT设为全局变量,那么全局变量只设为CREDIT即可。 ===== 设置目标 ===== 如果这个ivr结束后,需继续引导客户,那么我们需要设置ivr目标。 例如,你的第一条ivr是一则语音提示,“欢迎致电本公司,产品咨询请按1,技术服务请按2”。那么我们需要为按1和2设置一个去向。即按了1或2应该如何处理。 首先保存你这条ivr记录,然后在ivr列表中找到此记录,鼠标左键双击记录,打开ivr编辑界面,在编辑界面上点击【设置目标】按钮。 根据“转向”的不同,需要填写不同的参数。 * **分机**,当客户输入指定内容时(输入目标),将客户送至一部分机设备,让话务员与客户通话。 {{:en:module_manual:advanced:ivr_dest_extension.jpg?700|}} * **呼入语音**,一般配合“获取数据”的ivr使用,播报获取到的内容(需要选择后续动作=是,如果为否,仅是播放一则语音告知客户而已)。 {{:en:module_manual:advanced:ivr_dest_announce.jpg?700|}} 输入,客户输入什么内容时,才触发此目标。 转向目标,选择你要播报的语音文件。 后续动作、动作类型,配合“获取数据”功能使用,譬如转向目标播放“您的卡内余额为”,接着播放后续动作的语音(号码,金额,数字)。 动作参数,指你程序返回值对应的变量,例如上文中提到的“CREDIT”,即“您的卡内余额为”+“CREDIT”(按照金额方式读出)。 返回语音,提高客户体验度,提示客户按*返回上一级菜单。 后续语音,提高客户体验度,播报返回值后(“您的卡内余额为”+“CREDIT”),提示“重听请按1”。 可参照下述实例中的步骤三。 * **电脑话务**,将客户送到另一个ivr流程中,适用于多级ivr导航。 {{:en:module_manual:advanced:ivr_dest_ivr.jpg?700|}} * **队列**,将客户送到一个技能组的队列中,让某个坐席组为客户服务。例如人工服务请按0。 {{:en:module_manual:advanced:ivr_dest_queue.jpg?700|}} 如果选择自动转向队列,那么系统会随机将客户送到某一个空闲队列。 跳过队列公告,进入队列后,忽略队列中设置的公告内容(即不播放队列公告中设置的语音内容)。 * **振铃组**,是分机设备的集合。客户进入振铃组后,按照振铃策略,依次有分机振铃,直到有话务员服务或者振铃超时(超时后,会结束通话)。 {{:en:module_manual:advanced:ivr_dest_ringgroup.jpg?700|}} * **应用**, {{:en:module_manual:advanced:ivr_dest_application.jpg?700|}} * **会议室**,将客户送到系统中的会议室,即多人群聊。 {{:en:module_manual:advanced:ivr_dest_conference.jpg?700|}} * **语音邮件**,让客户进行语音留言。 {{:en:module_manual:advanced:ivr_dest_voicemail.jpg?700|}} * **忙线**,系统告知电信商服务繁忙,然后我方会结束通话。客户收到电信商的忙音提示,客户自行挂机。 {{:en:module_manual:advanced:ivr_dest_busy.jpg?700|}} * **挂断**,即挂机,直接结束通话,客户电话显示通话结束。 {{:en:module_manual:advanced:ivr_dest_hangup.jpg?700|}} * **传真设备**,指定传真设备,给出传真信号,让客户发送传真到系统。 {{:en:module_manual:advanced:ivr_dest_fax.jpg?700|}} * **拨出路由**, {{:en:module_manual:advanced:ivr_dest_oroute.jpg?700|}} * **留言**, {{:en:module_manual:advanced:ivr_dest_record.jpg?700|}} * **发送DTMF** {{:en:module_manual:advanced:ivr_dest_dtmf.jpg?700|}} * **要求回访** {{:en:module_manual:advanced:ivr_dest_request_callback.jpg?700|}} ===== 实例 ===== **要求:**客户进线后,首先播报公司介绍,告知客户咨询请按1(转到客服部做产品解答),技术服务按2(转到技术部人工服务),产品许可查询按3(要求客户输入产品序列号,系统进入数据库查询后,告知客户当前许可信息) **准备工作** 请确保你的系统中已存在坐席组客服部和技术部,且组内坐席能够使用内线分机互相通话。 <wrap em>语音录制要求:</wrap>16位8kHz单通道PCM格式的wav文件。 {{:zh:模块使用说明:pbx高级管理:电脑话务_录音格式.jpg}} - 录制语音1,内容“欢迎致电本公司,产品咨询请按1,技术服务请按2,许可查询请按3”; - 录制语音2,内容“请输入产品序列号,按#键结束” - 录制语音3,内容“您的产品授权坐席数为” - 录制语音4,内容为“无当前产品的相关信息” - 程序员需要编写一个webservice程序等待ivr的调用,收到客户输入的产品序列号后,查找到此产品的授权坐席数,并返回给ivr。 返回格式要求为字符串,多个参数以|分割,第一位默认为输入目标(与ivr设置的输入目标相对应,稍后会具体介绍) 格式举例1“1|50”,告知系统执行输入目标1,程序返回值50(即许可授权坐席数为50) 格式举例2“0|0”,未查到许可信息,告知系统执行输入目标0 **开始设置电脑话务** <wrap hi>第一步:</wrap>进入PBX高级管理->语音文件管理页面,上传录制好的语音文件。 {{:zh:模块使用说明:pbx高级管理:电脑话务_上传语音文件1.jpg?768|}} 点击【批量上传】,打开上传界面,选择你录制好的语音文件(如上图)。 然后点击【Uploads】按钮,开始上传,上传成功后,出现下图所示页面 {{:zh:模块使用说明:pbx高级管理:电脑话务_上传语音文件2.jpg?768|}} 选择录音属于哪个团队,如果不选团队,那么其它团队人员也可以使用此录音文件。 修改录音文件的显示名称,默认为上传时的录音文件名。 确认信息无误后,点击【保存】,录音上传完毕。 <wrap hi>第二步:</wrap>进入PBX高级管理->呼叫语音管理页面,建立语音数据,供电脑话务使用。 {{:zh:模块使用说明:pbx高级管理:电脑话务_呼入语音1.jpg?768|}} 数据创建后,编辑这条数据,为其选择目标语音文件“语音1”。 {{:zh:模块使用说明:pbx高级管理:电脑话务_呼入语音2.jpg?768|}} 系统ivr同一个流程支持多个语言版本播报(当然你需要录制相应语种的录音),我们这里语言都选择“简体中文”。确认语音文件选择无误后,点击【增加】。 看到下图的显示效果,表明你成功创建了一条呼叫语音。 {{:zh:模块使用说明:pbx高级管理:电脑话务_呼入语音3.jpg}} 重复步骤二,将其余三条语音也加入到呼叫语音中。 <wrap hi>第三步:</wrap>建立一条电脑话务,要求客户输入产品序列号(语音2),同时调用webservice程序,获取产品信息。 {{:zh:模块使用说明:pbx高级管理:电脑话务_第三步1.jpg?768|}} ivr名称,设置可以表达此ivr目的的词语“请输入产品序列号”; 内线号码,任意填写,只要不与系统当前存在的内线号码重复即可。使用内线分机拨打此内线号码,可以测试ivr流程。 播放语音,选择语音2,即进入此级ivr就先播放提示语“请输入产品序列号,按#结束”。 {{:zh:模块使用说明:pbx高级管理:电脑话务_第三步2.jpg?768|}} IVR类型,选择获取数据,因为我们要使用客户的输入内容去程序端获得许可信息; 获取数据类型,选择获取数据的程序类型,这里我们已webservice为例; 获取数据地址,你的程序访问地址,例如“http://192.168.1.88/getlic.php?wsdl”; 获取数据方法,调用你程序中的哪个方法; 获取数据参数,在ivr中抓取客户的输入内容,填写inputcode,即将客户输入内容赋值给inputcode变量; 获取数据返回值,将你程序的返回值赋值给一个变量,留着在此条ivr中使用。要求变量字母大写。我填写了"LICNO";接收多个变量使用"|"分割。 准备工作中我们说到返回值的格式为“1|50”,首位为输入目标,不算作变量。所以实际上我们是将"50"赋值给"LICNO"变量。 此条ivr创建完毕后,我们打开此条记录的编辑界面,点击【设置目标】按钮,处理程序返回值。 {{:zh:模块使用说明:pbx高级管理:电脑话务_第三步3.jpg?768|}} 如上图设置,按照之前约定,输入目标为1时,代表查询成功,我们需要播报语音3+返回值。 {{:zh:模块使用说明:pbx高级管理:电脑话务_第三步4.jpg?768|}} 如上图设置,按照约定,输入目标为0时,代表查询失败,我们需要播报语音4. 有人会问到,“返回”字段是做什么用的? 为了提高交互体验,客户查询成功或失败后,可能还有其它业务要做,所以此处我们还可以选择一个语音,譬如“返回上级菜单请按*键”。 另外后续语音选择“是”时,可以看到“后续语音”,这个字段也是用来提高客户体验度的。例如选择一个语音“重听请按1”。 实际使用用,此条ivr的流程如下 语音3->客户输入->调用程序->得到返回值->使用返回值第一个变量匹配输入目标 匹配输入目标1->语音3+返回值->后续语音->返回语音 匹配输入目标0->语音4->返回语音 <wrap hi>第四步:</wrap>再建立一条电脑话务,播放开场白,即语音1。 这条ivr我们称为主ivr,即客户进线后,首先播报的语音。 {{:zh:模块使用说明:pbx高级管理:电脑话务_第四步1.jpg?768|}} ivr名称,设置可以表达此ivr目的的词语“主IVR”或“开场IVR”; 内线号码,任意填写,只要不与系统当前存在的内线号码重复即可。使用内线分机拨打此内线号码,可以测试ivr流程。 播放语音,选择语音1,即进入此ivr播放开场语音“欢迎致电本公司,产品咨询请按1,技术服务请按2,许可查询请按3”。 ivr类型,普通语音,即不需要程序辅助获取数据。 根据语音要求,我们为此ivr设置三个目标。 {{:zh:模块使用说明:pbx高级管理:电脑话务_第四步2.jpg?768|}} 如上图,客户按1,我们将客户送到技能组1的队列中。让技能组1的坐席为客户服务。 同样的操作,我们再设置一个输入2,将客户送到技能组2的队列中。 当客户输入3时,我们要把客户送到步骤三中设置的IVR“请输入产品序列号”,如下图 {{:zh:模块使用说明:pbx高级管理:电脑话务_第四步3.jpg?768|}} **测试** 客服组和技术组均有坐席签入,且坐席分机已成功连接至系统。 使用系统中的任意一部内线分机,拨打第四步所创建电脑话务的内线号码50001,根据语音提示进行操作,看看每个环节是否正确,是否达到你预想的效果。 ===== 故障与调试 ===== <wrap em>1.当使用ivr获取数据模式时,如何调试我的代码?</wrap> 你可以在程序中进行一个写文件操作,这样你就知道ivr是否调到你的程序了。 如果未调用到你的程序,请检查获取地址和方法填写是否正确,以及网络上是否有限制,是否允许了ivr的访问。另外可以自行写个程序调用下你的程序,看看程序是否有错误。 <wrap em>2.测试中,在电话上按键后没有反映(ivr不能向下流转),依然重复播报语音</wrap> 如果使用的是内线分机,请在pbx模版页面检查分机模版的dtmfmode参数是否正确。 如果是外部电话通过中继呼入,请在pbx模版检查中继模版的dtmfmode参数是否与线路商规定的dtmf编码符合。 还有可能是你的网关或其它设备的dtmf被禁用或配置不正确。 <wrap em>3.电话进入ivr或在ivr某一个环节,未听到相关语音,通话就断掉了</wrap> 检查ivr中设置的语音文件是否存在。