一步步配置免费企业电话系统-设置自动话务员和语音导航

本章节,我们将讨论创建语音导航菜单,也有人称之为自动话务员和IVR菜单。IVR表示 语音交互响应,它用来描述一个系统的处理流程,当呼叫方呼入到系统时,呼叫方通过系统提示音的提示,然后按呼叫方用户的选择按键,例如,2,2,3,4等,然后进入到下一个流程中。

当呼叫方按按键时,电话会生成一个双信号音,我们称为DTMF 音。DTMF 英文表示 Dual Tone Multi-Frequency。 Asterisk收到这些DTMF音以后,通过识别,然后进行相应的处理。

现在,我们开始通过一系列的介绍在Asterisk中创建一个IVR菜单。


一步步配置免费企业电话系统-设置自动话务员和语音导航

Background 和 WaitExten Applications 应用

这里,我们首先介绍两个非常基础的应用。Background() 应用播放一个语音提示,并且会监听DTMF按键输入。Asterisk然后根据输入结果找到当前拨号规则中的一个extension,这个extension和DTMF输入结果匹配。如果找到了匹配结果,Asterisk将会发送此呼叫到那个 extension。

Background() 应用程序的第一个参数为语音提示音的文件名称,就像另外一个Asterisk应用- Playback()一样,这里记住,不要包含文件拓展后缀

如果用户需要连续多个提示音的话,用户可以使用Background(),然后使用 (&) 合并多个播放文件。


<code>exten => 6123,1,Background(prompt1&prompt2&prompt3), 依次播放3个提示音/<code>

如果用户使用以上示例来播放语音的话,用户可能遇到一点问题,就是语音文件不能有任何中间间隔,只能连续播放,这样的话,可能会导致用户体验不好。为了解决这个问题,用户可以使用一个等待应用程序,让系统等待一段时间,然后再执行余下的流程。

WaitExten() 应用就可以满足以上要求。熟悉Asterisk的用户可能在一些拨号规则的使用中经常会看到Background() 执行以后,系统会马上执行一个WaitExten() 应用程序。在此应用中,第一个取值就是等待时长,以秒为单位。提示音后系统等待10秒钟,让用户有一个反应时间,输入DTMF按键。如果用户没有在限定时间内输入DTMF,那么,应用中内置的超时设置会触发。此内置超时设置也可以通过拨号规则中的 TIMEOUT() 函数来修改。

<code>[auto_attendant]
exten => start,1,Verbose(2,Incoming call from ${CALLERID(all)})
same => n,Playback(silence/1)
same => n,Background(prompt1&prompt2&prompt3)
same => n,WaitExten(10)
same => n,Goto(timeout-handler,1)

exten => (timeout-handler,1)
same => n,Dial(${GLOBAL(OPERATOR)},30)
same => n,Voicemail(operator@default,${IF($[${DIALSTATUS} = BUSY]?b:u)})
same => n,Hangup()/<code>

Goto Application 和 Priority 标签Labels使用方式

在我们创建简单自动接线员菜单之前,首先我们了解价格其他有关的拨号规则的应用程序。Goto() 应用会要求处理流程从拨号规则中的一个位置跳到其他的处理位置上。

Goto() 就是这样的功能程序,它比其他的应用程序可能相对复杂一点,但是也不用担心其复杂性,让我们一步步学习了解它的使用。

Goto() 应用程序可以通过一个或者两个甚至于三个参数来调用。如果用户使用单个参数调用Goto() 应用程序时,Asterisk将会在当前的extension中,直接跳转到指定的优先级priority (或者它的标识label上)。如果用户指定了两个参数时,Asterisk将会在当前的context读取第一个参数为一个extension,第二个参数为优先级参数 (或者标识 label) ,它们仍然在此extension上。如果用户传递了三个参数时,Asterisk将会假设执行流程会跳转到指定的context和extension和优先级priority。

<code>[StartingContext]
exten => 100,1,Goto(monkeys) // 一个参数仅在此环境执行
same => n,NoOp(We skip this)
same => n(monkeys),Playback(tt-monkeys)
same => n,Hangup()

exten => 200,1,Goto(start,1) ; play tt-weasels then tt-monkeys

exten => 300,1,Goto(start,monkeys) ; only play tt-monkeys

exten => 400,1,Goto(JumpingContext,start,1) ; play hello-world
// 3个参数,完全跳转到完全不同的地方
exten => start,1,NoOp()
same => n,Playback(tt-weasels)
same => n(monkeys),Playback(tt-monkeys)

[JumpingContext]

exten => start,1,NoOp()
same => n,Playback(hello-world)
same => n,Hangup()/<code>

SayDigits,SayNumber,SayAlpha,和 SayPhonetic使用方式

现在,我们还没有真正开始做和自动接线员菜单,我们还要介绍几个应用程序可以读取DTMF输入结果,然后播放给呼叫方。SayDigits()SayNumber() 应用程序读取指定的号码回放给呼叫方。使用 SayDigits()SayNumber() 程序的话,仅传递给此应用用户想播放的结果。此数据传递给第一个参数。

SayDigits() 应用每次读取一个数字号码,例如,如果用户拨打 SayDigits(123),Asterisk将会回放“one two three”。如果执行 SayNumber() 应用程序的话,Asterisk将会读取整个数字,而不是单独数字读取。例如,如果用户拨打 SayNumber(123) ,Asterisk将会回放“one hundred twenty three”。

如果用户需要读取字母或者字符串的话,需要通过以下处理方式来执行。

SayAlpha()SayPhonetic() 应用程序检测字母拼写构成,然后回放给呼叫方。SayAlpha() 将会每次读取指定的字符串中的每个字母。例如,SayAlpha(hello) 将会每次读取单词"hello" 中的每个字母。SayPhonetic() 将会使用国际拼音字母表的标准,每次回放字符串的一个起始字母。例如, SayPhonetic(hello) 将会回放"Hotel Echo Lima Lima Oscar"。这里,回放的字符串中,都是以首字母开头的单词。

下面的示例中,系统演示了一个完整的呼叫示例,这个示例来读取各种数字和字母组合形式:

<code>exten => 6592,1,SayDigits(123)
exten => 6593,1,SayNumber(123)
exten => 6594,1,SayAlpha(hello)
exten => 6595,1,SayPhonetic(hello)/<code>


分享到:


相關文章: