目录

简介

先决条件

要求

使用的组件

规则

概述

使用Cisco Unity Express脚本编辑器

创建基本脚本

集成方法

示例Callflow

示例脚本

将脚本上传到Cisco Unity Express

故障排除

Appendix

附录1 — 系统提示

附录2 — 重置默认跟踪

相关信息

简介

本文档提供有关Cisco Unity Express(CUE)系统的信息。具体而言，本文档提供了在产品中创建自定义自动总机应用的入门。

有关Cisco Unity Express的更多详细信息，请参阅《Cisco Unity Express脚本编辑器指南》。本文档面向需要基本指南以开始使用Cisco Unity Express编辑器并维护Cisco Unity Express产品中的脚本的管理员。

注意：自定义脚本支持不能通过常规思科技术支持提供。有关自定义脚本的问题、评论和帮助，请发送电子邮件至ask-cue-editor@external.cisco.com。

先决条件

要求

读者需要熟悉Cisco Unity Express通过命令行界面(CLI)或GUI的管理和配置。

Cisco Unity Express脚本编辑器(CUEEditor2.1.1.exe)和本文档使用的示例脚本(CUE-AA-S6-AASample.zip)可从Cisco Unity Express 2.1.1软件下载中心获得。

使用的组件

本文档中的信息基于Cisco Unity Express 2.1.1版。本例包含仅在Cisco Unity Express 2.1.1中可用的步骤。虽然，许多原则对于早期版本是相同的。本文档中明确指出了2.1.1的特定步骤。

本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始（默认）配置。如果您使用的是真实网络，请确保您已经了解所有命令的潜在影响。

规则

有关文件规则的更多信息请参见“ Cisco技术提示规则”。

概述

基本的Cisco Unity Express产品随附语音邮件片段和基本自动总机（在Cisco Unity Express 2.1.1及更高版本中，有两个自动总机脚本）。 许多客户认为标准自动总机太有限。Cisco Unity Express具有脚本编辑器，允许创建自定义脚本。这些自定义脚本可以加载到Cisco Unity Express中，并替换（或除此之外）常规自动总机。

警告：此处显示的示例脚本用于说明目的。它可以以任何方式修改。本文的目的是说明定制脚本的设计和实现过程。它不提供成品制作脚本。但是，如果您确实选择使用此脚本，请至少记录每个提示。您可以收听附加的音频文件，以了解其声音。但是，请使用通过电话(AVT)/问候语管理系统进行管理。

注意：目前，无法获取Cisco Unity Express使用的实际系统脚本的副本。这些脚本包含常规脚本编辑器不支持的步骤。自Cisco Unity Express 2.1.1起的系统脚本为aa.aef、voicebrowser.aef、setmwi.aef、promptmgmt.aef、checkaltgreet.aef、xfermailbox.aef和aasimple.aef。

脚本编辑器是一种工具，允许您在独立于Cisco Unity Express的PC上创建脚本。创建后，脚本将上载并配置在Cisco Unity Express上。

此列表说明一些基本术语，以帮助您了解本文档中的概念。

- 步骤 — 用于创建脚本的基本构建块。每个步骤都是最基本的可执行单元，如"if"语句、"Goto"等。

- 脚本 — 按顺序执行的一个或多个步骤。脚本是扩展名为.aef的文件。

- 变量 — 这些是脚本中的变量。变量可以是不同类型的，如整数、布尔值、字符串等。

- 参数 — 这是变量的属性，以便通过Cisco Unity Express Web界面向管理员显示该变量。例如，如果您有一个OperatorExtension变量，您希望在默认情况下将值1000赋值，则有时需要将其更改为2000。在这种情况下，变量通过Web界面公开，这样，每次需要更改值时，整个脚本都不必再加载到Cisco Unity Express。

- 提示 — 可播放的.wav文件。它可以手动上传到Cisco Unity Express系统，也可以通过电话(AVT)系统通过管理进行记录(在版本2.1.1之前，AVT称为问候语管理系统(GMS))。 上传的所有用户提示都放在同一目录中。它们在GUI中通过Voicemail > Prompts菜单项显示，或在CLI中通过show ccn prompts命令显示。

在脚本中，用户提示被指定为P[<promptname>]。系统提示是预录的，可以使用。它们被指定为SP[<promptname>]。附录1列出了可用的系统提示。

- 应用程序(Application) — 这是包含所有提示和参数的脚本。默认情况下，Cisco Unity Express附带语音邮件、AVT系统和简单的自动总机应用，在安装结束时运行初始化向导时，这些应用均已配置。

- Trigger — 触发器告知Cisco Unity Express需要执行特定应用。例如，当您拨打1000时，电话系统（Cisco CallManager或Cisco CallManager Express）会将呼叫路由到Cisco Unity Express。当Cisco Unity Express看到呼叫被拨到号码1000时，它会查找该分机的触发器。然后启动相应的应用。换句话说，它知道呼叫1000是需要转到语音邮件、自动总机还是其他功能。您可以对同一应用程序使用多个触发器。默认情况下会添加许多触发器，如语音邮件、AVT和罐装自动总机触发器。

当您了解术语时，它使Cisco Unity Express Web管理工具更易于理解。

在Cisco Unity Express网页中，“语音邮件”类别下的“自动总机”选项是指术语中定义的应用。每个条目都包含与应用程序关联的编号、它引用的脚本、与脚本关联的任何参数、应用程序是否启用以及关联端口的数量。

呼叫处理当前仅包含语音邮件、内置自动总机和AVT系统的关联号码。在Cisco Unity Express 2.1及更高版本中，在Administration > Call-in Numbers下，会显示所有触发器(JTAPI（对于Cisco CallManager）和SIP（对于Cisco CallManager Express或SRST模式）)的额外显示。 目前，查看是否配置了指向同一应用的多个触发器的唯一方法是在CLI中发出show ccn trigger命令。

“提示”选项是指系统上存在的音频文件(.wav)。

“脚本”选项是指可在系统上存储的.aef文件。目前，除了系统脚本外，您最多可以上传四个脚本。

在CLI中，使用show ccn命令可轻松获取此信息。此输出表示每个命令输出的部分：

cue-3745-44a> show ccn application

Name:                                   customaa

Description:                            customaa

Script:                                 customaa.aef

ID number:                              4

Enabled:                                yes

Maximum number of sessions:             8

OperatorExtension:                      205

MainMenu:                               MainMenu.wav

ClosedGreeting:                         ClosedGreeting.wav

InvalidExt:                             InvalidExt.wav

MaxRetries:                             3

MaxExtension:                           205

SorryGoodbye:                           SorryGoodbye.wav

EnterExtension:                         EnterExtension.wav

namePrompt:                             namePrompt.wav

MinExtension:                           200

...

cue-3745-44a> show ccn prompts

Name:                         MainMenu.wav

Language:                     de_DE

Last Modified Date:           Wed Dec 22 03:34:57 GMT+00:00 2004

Length in Bytes:              121978

Name:                         EnterExtension.wav

Language:                     de_DE

Last Modified Date:           Wed Dec 22 03:34:26 GMT+00:00 2004

Length in Bytes:              21338

Name:                         SorryGoodbye.wav

Language:                     de_DE

Last Modified Date:           Wed Dec 22 03:34:02 GMT+00:00 2004

Length in Bytes:              17658

Name:                         ClosedGreeting.wav

Language:                     de_DE

Last Modified Date:           Wed Dec 22 03:33:00 GMT+00:00 2004

Length in Bytes:              86138

Name:                         InvalidExt.wav

Language:                     de_DE

Last Modified Date:           Wed Dec 22 03:47:07 GMT+00:00 2004

Length in Bytes:              29818

Name:                         namePrompt.wav

Language:                     de_DE

Last Modified Date:           Wed Dec 22 03:40:28 GMT+00:00 2004

Length in Bytes:              22618

...

cue-3745-44a> show ccn trigger

Name:                         18955

Type:                         SIP

Application:                  customaa

Locale:                       systemDefault

Idle Timeout:                 10000

Enabled:                      yes

Maximum number of sessions:   8

...

show ccn application输出显示应用程序名称、它引用的脚本、它是否启用以及它可以处理的同时调用数，以及所有脚本参数及其值。

show ccn prompts命令列出所有命令、其语言、大小和修改日期。

show ccn触发器信息提供数字（“名称”）及其调用的应用程序、状态（启用/禁用）和会话数。

使用Cisco Unity Express脚本编辑器

使用脚本编辑器(仅注册客户)创建新脚本。它必须安装在单独的PC上。

同一位置有多个示例脚本。这些脚本有助于了解如何在脚本中执行特定操作。思科建议您安装编辑器并下载一些示例脚本，以熟悉编辑器的工作方式。

启动脚本编辑器后，可以打开脚本，如下图所示：

“组件面板”窗格包含具有每个步骤的文件夹，这些文件夹根据其主要功能进行分类。从那里，将步骤拖到“设计”窗格以创建脚本。在变量窗格中，可以创建和编辑变量。将步骤拖到“设计”(Design)窗格后，可以右键单击某个步骤，选择“属性”(Properties)，然后自定义分配给该步骤的步骤和变量。在将脚本上传到Cisco Unity Express之前，始终需要先通过“工具”>“验证”选项来验证脚本。然后，任何错误输出都会显示在调试窗格中。

使用编辑器时，最需要记住的一项功能是帮助功能。可以通过工具栏上的“帮助”菜单直接访问它，也可以在选择特定步骤属性时直接访问它。

创建基本脚本

您可以使用“帮助”菜单熟悉一些步骤。在“脚本编辑器”中，将组件面板中的几个步骤拖到设计窗格中，然后右键单击一个步骤，然后选择“属性”。然后单击“Help(帮助)”按钮，获取有关该特定步骤的帮助。

本文档介绍如何创建示例脚本。本文档还讨论人们在创建自定义自动总机时尝试解决的一些常见问题。此处的目标是创建一个脚本来应答呼叫，检查是否存在紧急候补问候语以及当前时间是否为正常工作时间。如果关闭，请播放自定义问候语并将呼叫发送给话务员。如果打开，请播放一个菜单，该菜单允许主叫方按名称拨1，按分机拨号拨2，或者对话员拨0。按分机拨号选项应仅将呼叫转接到指定范围，而不能输入任何号码。

警告：本文档使用的示例仅用于说明目的。尽管您可以随意使用任何部分，但可能与您公司的情况不完全相符。特别是在错误处理领域，此脚本没有太多用处。

注意：除www.cisco.com上的示例脚本外，Cisco Unity Express CD还包含与此处使用的脚本类似的脚本，称为aa_sample1.aef。它非常类似于定期发货的自动总机（2.1之前）。 如果计划使用扫描脚本作为起点，请使用此脚本，而不是安装脚本编辑器的某些版本时找到的aa.aef文件。

集成方法

Cisco Unity Express目前支持与Cisco CallManager或Cisco CallManager Express集成。虽然脚本本身不会更改，但集成方法可能会产生一些细微的差异。当您执行重定向步骤（从逻辑上将呼叫从Cisco Unity Express转接到外部分机）时，此集成方法至关重要。当与Cisco CallManager Express集成时，信令通过SIP以BYE/Aslo消息的形式完成。这意味着重定向将挂断到Cisco Unity Express的呼叫，并告知Cisco CallManager Express/SRST路由器将呼叫方连接到BYE消息“Aslo：”部分中指定的分机。如果该分机无效或无法访问，则可以丢弃呼叫者。这是因为Cisco Unity Express无法回收该呼叫并收到转接失败的通知。这是真正的盲转接。如果呼叫重定向到未注册的或忙或分机，而无法应答，则适用于该目录号码的常规呼叫转移规则有效。Cisco Unity Express不再是呼叫的一部分。这也意味着，当您编写重定向步骤脚本时，当您添加代码以处理忙/无效/不成功的重定向时，当前没有什么好处，因为重定向本身等同于断开连接。不可能出现故障。

对于Cisco CallManager集成，Cisco Unity Express通过Java电话应用编程接口(JTAPI)进行通信。 这允许发生忙/无效/不成功的重定向步骤。因此，请向脚本添加代码以处理这些情况。当所有Cisco CallManager无法访问且系统进入SRST模式时，将使用本文档前面讨论的SIP信令。因此，本文档中描述的所有限制都适用。

示例Callflow

在开始使用生产脚本之前，必须映射完整的呼叫流。对于本示例，假设所有分机都在200-299范围内（重要的是，它们都以2开头）。 在本例中，您有如下步骤：

1. 应答呼叫。

2. 检查是否有候补问候语。如果有，请播放。

3. 检查是否是假日。如果是，请播放假日问候语并进入主菜单。

4. 检查是在工作时间内还是下班后，并播放相应的（开放/关闭）问候语。继续进入主菜单。

5. 主菜单需要播放提示，并允许用户在知道时随时输入分机。如果他们想在目录中查找用户，可以输入1；如果他们想联系话务员，可以输入0。由于所有有效用户分机都以2开头，因此在按分机拨号部分输入2个分支。

6. 按名称拨号会查找用户并转接到他们。如果输入了零，则将用户转接到操作员。

7. 按分机拨号选项会立即尝试收集另外两个数字。如果输入较少，则返回主菜单。如果收集了两个，则会尝试查找用户。如果用户退出，则用户被转接到该分机，否则用户将转到主菜单。

8. 转接到话务员功能将呼叫转接。如果由于某种原因失败，它将返回主菜单。

9. 针对各种问题（例如多次不成功的传输）的附加错误处理序列，告知用户稍后重试并挂断。

错误处理可以做很多。对于实际实施，可能有助于在流程图中映射出完整的呼叫流程（包括错误处理以及每个用户交互或选择）。

示例脚本

开始

在脚本编辑器中输入脚本。

所有脚本都以开始步骤开头。首先要接受呼叫。然后，播放提示(DP[500])，即0.5秒的暂停。在某些情况下，公共交换电话网络(PSTN)的音频直通不会快速发生。在问候语之前播放内容和“真实”问候语，以避免出现任何对问候语的剪辑。接下来是On Exception Goto步骤。执行该操作时，会查找“UndefinedPromptException”类型的任何异常。当步骤尝试播放不存在的提示时，会发生此特定异常。仅当播放提示的步骤将“Continue On PromptErrors”属性设置为“No”时，才会发生这种情况。如果设置为“Yes”，则不播放任何提示，且不引发任何异常。使用此On Exception Goto步骤可确保如果删除了管理员管理的关键提示（如主菜单），则可以分支到分支到“抱歉”标签的部分，以便告知用户稍后重试。之后，调用子流，选中AltGreet.aef。这是系统脚本，始终存在。它检查AltGreeting.wav文件是否存在。如果它存在，它会播放它。否则，子流将返回。这非常方便，因为您可以将其与GMS（现在称为AVT系统）结合使用，以便在常规消息之前播放某种紧急问候语。有关此功能的详细信息，请参阅配置和使用Unity Express的问候语管理系统和紧急候补问候语。无法判断候补问候语是否实际播放（或检查本地存储库中是否存在文件）。 您不必在脚本的开头使用此功能。例如，根据您的应用，您可以使用紧急候补问候语功能记录假日提示。不要调用此子流，只在节假日时才调用它。这有助于站点管理员通过电话用户界面录制节日问候语，而无需通过浏览器或CLI访问系统（重命名提示或将其分配给脚本变量）。

确定要播放的打开提示。如果是假日，请播放假日问候语。如果是在工作时间（可通过Cisco Unity Express Web管理员的日程安排进行配置），则播放开场问候语（可以是“感谢呼叫思科系统”等简单问候语），否则播放下班时间问候语。无论您播放哪个，您都会直接进入主菜单。

注意：“Is Holiday”和“Business Hours”步骤特定于2.1.1及更高版本。对于早期版本的Cisco Unity Express，唯一的选项是使用“时间”步骤。这不允许您根据日期播放不同的问候语。它只基于时间。

主菜单

输入主菜单部分。由于许多错误处理稍后会将主叫方发回主菜单，因此会添加计数器。计数器“attempts”与“MaxRetries”进行比较，后者是用户可配置的另一个变量（默认情况下为3）。 如果到达该计数器，请道歉并将呼叫者转接给话务员(“很抱歉您遇到问题。请等一位接线员。”)

菜单步骤将显示基本提示(“如果您知道您的参与方的分机号，请随时拨打。按按名称拼写，请按1，接线员按0，重听这些选项，请按9。") 在这种情况下，由于您会播放自己录制的提示，因此您会将此步骤的“最大重试次数”参数更改为0。这在您有选择执行此操作的任何位置都可完成。原因是，如果它不是0，您会听到系统提示“您还在吗？” 每次到达到到期计时器时，它都会分支到超时分支。当有人按1、2、9或0以外的任何值时，即会到达Unsuccessful分支。在这种情况下，您将显示提示“输入的分机无效”，并退出您递增尝试计数器并返回主菜单的步骤。

注意：为确保在媒体步骤（如菜单或播放提示）中输入数字后音频立即停止，必须选中该步骤的“提示”选项卡中的“插入”字段。“可中断”字段（在“常规”选项卡上）用于当前不适用于Cisco Unity Express的其他步骤中断。

添加一个错误处理部分。“Sorry”部分会播放一条消息(“We are unable to transfer this time.”)。请稍后再试。再见。”) 然后呼叫断开。

您始终可以使用系统问候语而不是这些自定义变量。系统提示始终使用SP[]表示法，而用户提示使用P[]表示法。在定义提示变量时，不能将系统提示分配给提示变量（在变量窗格中，因为这些提示是按定义用户值划分的）。 定义后，在脚本中，可以通过设置步骤（或任何创建提示步骤）将系统提示分配给变量。

按名字拨叫

“按名称拨号”的一种方法是从Cisco.com下载示例(S4_DialByName)，将其作为单独的脚本加载到Cisco Unity Express中，然后添加呼叫子流步骤以调用它。在这种情况下，该步骤将直接放入脚本中，并会详细讨论。NameToUser步骤仅允许您配置其提示之一（“拼写要呼叫的人的姓氏，后跟字母Q按7的名字，字母Z按9”）。 无法消除所有系统提示。为了将其最小化，您首先需要禁用Cancel键（默认*）。 如果存在，系统会在录制的提示符末尾添加一条消息“以重新开始，按星号键”。其次，将最大重试次数更改为零，这样“请重试”和“您是否仍在”消息就不会出现。始终使用您添加的单独计数器变量跟踪尝试次数。仍有一个系统提示无法消除。它是多个匹配项的提示符(“找到多个名称。从以下……"中选择。) Name To User步骤始终以Successful、Timeout、Unsuccessful或Operator结尾（如果在步骤属性中选择）。 除了Successful和Operator分支，您将从Menu步骤中退出。这意味着您增加尝试次数计数器并返回主菜单。根据情况，您可以有单独的重试计数器并添加返回DialByName标签的步骤，以便重复已选择的操作。

注：版本2.1.1中需要考虑的一个缺陷是Cisco Bug ID CSCeg81385(仅限注册客户)。 当NameToUser步骤的Maximum Retries设置为零或一时，必须使用终止字符。如果没有终止字符，则不会转到此步骤的“成功”分支。相反，它始终进入“超时”，即使存在匹配。

如果用户未输入可映射到名称的分机，则Unsuccessful分支会根据MaxRetries检查新计数器(SpellByNameAttempts)。假设输入主菜单的相同最大重试次数需要应用到按名称拼写的功能。如果这些变量需要不同，可以添加单独的变量。

成功的NameToUser步骤意味着至少输入一个数字，并且选择Cisco Unity Express中定义的单个用户的姓氏（仅当未输入任何数字时，才会到达超时分支）。 为了确保分机是唯一的，请检查是否可以将分机映射回用户。这可以通过ExtensionToUser步骤完成。此步骤在Cisco Unity Express 2.1.1中添加。以前，没有办法（给定分机）确保它映射到语音邮件系统中的实际用户。您所能做的最好是设置一些要比较的变量，例如添加步骤“If(TransferExt < MinExtension)” ||(TransferExt > MaxExtension)。.." 或者类似的。

在此，您将分机映射回用户后，将看到脚本。如果没有，则播放分机无效的提示。通常由于某种原因没有分机。对于Cisco CallManager Express，这可能意味着如果尝试转接呼叫，您会挂断。由于呼叫方已选择用户，因此这可能会造成轻微混淆。但是，这显然已经是您想要了解的错误情况。如果将分机映射到用户成功，请首先检查他们是否有录音名称（查找该用户时，会填入spokeName变量）。 然后将提示变量设置为Calling加spokedName。否则，请将其设置为呼叫分机加上用户的拼写分机。您也可以拼写名称（在提示符中播放S[name]）。 没有要播放的录音名称。任何系统拼写（如拼写名称或分机）都始终以系统语音完成，无法自定义。隐式确认步骤将播放您刚创建的提示。如果用户未键入任何内容，则继续输入“是”分支并重定向呼叫。如果出现问题，在Cisco CallManager集成的情况下，它将播放问候语，并将呼叫者发送回主菜单。如果主叫方输入某些内容，请生成另一个提示。此时，以spokeName或用户名称的拼写版本开始提示（创建条件提示步骤）。 请按暂停和提示“如果这是您呼叫的人的姓名，请按1”执行此操作。 现在，用户可以按1表示是、2、*或等待。系统会将它们发回按名称拼写部分或发送给操作员。这取决于他们在系统中经历了多少次。

按分机拨号

按分机拨号部分已收集第一个数字（本例中为“2”）。将prefixDigit变量设置为2。您可以根据前导数字（或者如果有多个可能的前导数字）轻松更改此值。 任何前导数字都不能与菜单中的另一个选项相同（例如，在本例中，您按名称拨号时使用的1）。 Get Digit String还收集固定数目的数字（本例中为两位）。 因此，总位数需要固定。如果有效分机以2或3开头，则可以在菜单步骤的选项3中添加“Set prefixDigit = "3"”步骤，然后添加“Goto DialByExtension”步骤。

由于您在此环境中有三位分机，因此“获取数字字符串步骤输入长度”参数为2。没有终止字符，也没有取消键。最大重试次数为0。如果用户未输入有效的分机号，脚本将增加尝试次数并返回主菜单。该步骤不播放任何音频（提示符为P[]），因为用户已处于拨号位中。

成功收集两个数字后，请在已拨打的前缀Digit（本例中为"2"）前加前缀（这允许您从菜单步骤中分支）。 然后，结果的TransferExt将传递到Extension To User步骤，该步骤将验证此用户是否为有效用户。如果是，则创建带拼写扩展名的提示符。在“隐式确认”步骤中，播放“主叫分机”提示，后跟分机。查找用户并播放口述名称，就像您在DialByName中所做的那样。但是，在本例中，不需要。如果没有拨号数字，则假设这是主叫方要拨打的分机号码，然后重定向呼叫。否则，请重新回到主菜单。“播放提示DP[250]”步骤的目的是清除任何其他输入，因为“获取数字字符串”步骤未配置任何终止字符。其思想是，如果有人拨打分机"200"或"200#"，您就希望此功能发挥作用。 如果在运行隐式确认步骤时输入#，则它将转到该步骤的否部分。在某些情况下，可能根本不需要隐式确认步骤，而是立即重定向呼叫。为便于说明，这些步骤保留在中。

操作员转接

播放提示“转接呼叫”，然后将其重定向到已配置的话务员分机。如果由于某种原因失败，则您有一个单独的计数器，您可以递增并返回主菜单。原因是您希望有某种方法给操作员一些时间，让他们下电话或重新注册，以便您能够成功尝试再次转接到他们。在多次尝试（本例中硬编码为3）后，您会转到“Sorry”标签，该标签会丢弃呼叫。

高级错误处理

脚本有很多地方可能会失败。在设计良好的脚本中，一个较为常见的方面是用户提示缺失。当系统尝试播放不存在的提示时，可能会发生许多情况。首先，如果播放提示的步骤将“Continue On Prompt Errors”设置为Yes。它将进入下一步，不播放提示。如果Continue On Prompt Errors（在提示错误时继续）设置为No（否），则生成异常。大多数情况下，这是“UndefinedPromptException”，这表示未找到或从未配置提示符。当您有On Exception Goto步骤时，它允许您捕获此异常并分支到可以播放系统消息或其他音频形式的代码部分。由于“转到异常时”步骤适用于在整个脚本中播放的所有音频（您无法为您播放的每个提示定义单独的“转到异常时”步骤），因此处理此问题的最佳方法是在播放提示前设置错误代码变量。这样，您就可以在某处分支，根据该错误代码执行操作，然后可能再分支回去。

例如，可以使用以下命令修改脚本：

您已添加“最大重试次数”标签。这是用来回到同一地方的。将ErrorCode变量设置为Maxretries。在“播放提示”步骤中，确保“在提示错误时继续”设置为否。现在添加一个可以处理此问题的部分。查看ErrorCode是否与“Maxretries”匹配，然后将SorryProblems变量（您尝试先播放）设置为系统消息“Sorry you are foure”。请继续联系，一些人很快会和你在一起。然后转到Maxretries标签，以便播放。

最后一步是更改On Exception Goto消息以查找UndefinedPromptException错误：

此步骤可位于脚本中的任何位置。但是，它通常处于或接近开始。有许多步骤可以播放提示。系统提示列在本文档底部。

此方法可代替调用checkAltGreet.aef子流。您需要播放AltGreeting.wav文件。如果有错误，请处理。优点是，您知道它何时玩或何时不玩。

虽然不太常见，但其他提示性例外如下：

- UndefinedPromptException

- PromptException

- UndefinedPromptGenerator

- InvalidPromptArgumentException

- UnsupportedPromptExpression

将呼叫直接转接到语音邮件

当前无法将呼叫直接重定向到语音信箱。它必须发送到转发到语音邮件的号码。这可以是Cisco CallManager Express（甚至Cisco CallManager）中的虚设号码，该号码配置为呼叫转移所有设置为语音邮件引导号码的呼叫。使用Cisco Unity Express号码/e.164号码设置将该号码与用户或组匹配。将来电者直接转接到Unity Express邮箱中，说明如何执行此操作。

脚本变量

必须先创建脚本中使用的所有变量，然后才能使用它们。如果使用一个，然后删除，请在脚本编辑器中选择“工具”>“验证”以找到它。对于此示例脚本，这些是使用的变量。注意Name、Type、Value（最初是变量的值）和Attribute。“参数”属性表示变量通过网页向管理员公开。任何您希望Cisco Unity Express管理员自定义的内容都需要具有“参数”属性。

如果不想记录所有这些自定义提示，可以编辑每个提示并取消选中Parameter属性，以便不会通过网页显示该提示。为确保系统仍能正常工作，请在脚本的开头添加几个设置步骤。例如，将“Calling”设置为“SP[AA/AACalling]”。 并非此处显示的所有提示都具有相应的系统脚本。在大多数情况下，自己录下来是有道理的。如果提示不更改，您可以记录一次，确保它们存在于具有给定文件名的Cisco Unity Express系统中，然后从变量中删除“参数”属性。这样，提示符将播放固定文件名。但是，变量不会通过管理员可能意外更改的Web界面公开。

将脚本上传到Cisco Unity Express

通常，向Cisco Unity Express添加新应用和脚本的第一步是上传提示。这非常重要，因为提示必须存在于系统中，才能在脚本参数中配置它们。否则，必须将参数留空，上传提示，然后返回并编辑脚本参数。有关如何记录和上传提示的其他信息，请参阅通过电话(AVT)/问候语管理系统进行管理。

保存脚本并准备试用后，您首先需要将其上传到Cisco Unity Express。最简单的方法是使用GUI，因为这不需要FTP服务器从加载脚本文件。

请完成以下步骤：

1. 使用具有管理权限的帐户登录Cisco Unity Express GUI。

2. 选择Voice Mail > Auto Attendant。

3. 单击 Add。

4. 在“Selected Automated Attendant Script”旁，单击“Upload”按钮。

5. 单击浏览。

6. 查找脚本文件，选择它并按OK。

7. 如果要更改目标文件名，请执行此操作。否则按Upload。

8. 输入应用名称。这可以是小写形式的任意内容，用于引用与此脚本文件关联的应用程序。

9. 单击 Next。

10. 该页面现在显示标记为参数的脚本的所有变量。这意味着可以在此页面上配置它们。如果您尚未上传提示文件，则可以先完成此步骤，然后稍后填写信息。

11. 输入完脚本参数后，单击“下一步”。

12. 确保应用程序被标记为Enabled，配置最大并发呼叫数（默认为许可证允许的最大号码）并输入呼入号码。

这是需要调用此特定应用程序（触发器）的调用号。 这可以是您的主自动总机号码，也可以是临时号码。您也可以跳过此步骤，稍后填写。如果没有呼入号码，则无法测试或启动脚本。

注意：对于与SRST支持的Cisco CallManager集成，您需要输入多个呼入号码。在Cisco Unity Express 2.1.1之前，此信息必须通过CLI输入。在Cisco Unity Express 2.1中，可以从“管理”>“呼入号码”屏幕输入多个呼入号码(触发器)。

13. 单击“Finished（完成）”。

上传脚本并配置应用后，必须确保可以将呼叫路由到应用。这意味着必须配置Cisco CallManager Express或Cisco CallManager。对于CallManager Express，这包括配置指向与Cisco Unity Express中配置的模式（触发器号或呼入号）匹配的Cisco Unity Express的拨号对等体。在Cisco CallManager中，必须添加具有此号码的CTI路由点。不要忘记，您必须将此CTI路由点与Cisco Unity Express登录为的JTAPI用户关联。此配置可能需要重新启动Cisco Unity Express。添加路由点并与用户关联后，您可以根据需要更改脚本，而无需重新启动。

在更新脚本时，如果未添加或更改任何变量参数，则可以进入Cisco Unity Express编辑器，单击Voice Mail > Scripts, Upload，然后选择脚本。它被所有其他配置的参数覆盖，这些参数保持不变。

创建提示时，最简单的操作是使用AVT系统。其记录的文件名包含日期/时间戳。但是，在Cisco Unit Express 2.1.1及更高版本中，可以使用CLI ccn rename prompt命令进行。以前，您必须下载提示，用新名称重新上传，然后删除原始.wav文件。例如：

cue-3745-44a> show ccn prompts

...

Name:                         UserPrompt_01032005170038.wav

Language:                     en_US

Last Modified Date:           Mon Jan 03 17:00:38 EST 2005

Length in Bytes:              35098

cue-3745-44a> ccn rename prompt UserPrompt_01032005170038.wav

MyPrompt.wav language en_US

Warning! Any existing ccn applications that use this prompt will

stop working until they are manually updated with the new prompt name.

Continue? (y/n) y

cue-3745-44a>

故障排除

对脚本进行故障排除时，需要呼入并测试各种场景，包括常规用户输入以及超时和预期错误情况。

在上传脚本之前，请始终访问脚本编辑器中的“工具”>“验证”条目，并确保收到“验证成功”消息。否则，所有错误都会显示在调试窗格中。您可以双击它们，它将显示脚本中存在错误情况的位置。

在大多数情况下，默认跟踪足以排除故障。为简化此过程，请保留默认跟踪并利用过滤功能来显示所需内容。

在进行任何测试之前，请发出clear trace 命令。这会清除跟踪消息的内存缓冲区，以便过滤的信息量仅包括发出命令后的数据。

对于脚本执行，要过滤的最重要项是EXECUTING_STEP。这显示运行时的所有步骤。例如：

cue-3745-44a> clear trace

cue-3745-44a>   /*** NOW THE TEST CALL IS MADE  ***/

cue-3745-44a> show trace buffer long  | include EXECUTING_STEP

3119 12/28 17:05:33.955 ACCN APMG 0 EXECUTING_STEP:Executing a step:

Application=App[name=customaa,type=Cisco Script Application,id=4,

desc=customaa,enabled=true,max=8,valid=true,optional=

[cfgVars=[Lcom.cisco.wfapi.util.WFNameValuePair;@14efaa66,script=customaa21.aef]],

Task id=17,000,000,007,Step id=0,Step Class=com.cisco.wfframework.steps.core.

StepStart,Step Description=Start

...

在本示例中，输出中间删除了一些冗余信息，并裁剪了日期/时间戳的开头。大多数时候，最重要的信息在每行末尾。

注意：由于空间原因，这些输出行中的许多行会降至第二行和第三行。

5:33.956 Step id=529,Step Class=com.cisco.wfframework.steps.core.StepComment,

Step Description=/* Assumptions: User extensions ... */

5:33.957 Step id=3,Step Class=com.cisco.wf.steps.ivr.AcceptStep,Step

Description=Accept (contact: --Triggering Contact--)

5:33.977 Step id=129,Step Class=com.cisco.wf.steps.ivr.OutputStep,Step

Description=Play Prompt (contact: --Triggering Contact--, prompt: DP[500])

5:34.461 Step id=2,190,Step Class=com.cisco.wfframework.steps.core

.StepOnExceptionGoto,Step Description=On Exception(UndefinedPromptException)

Goto Error

5:34.463 Step id=1,649,Step Class=com.cisco.wfframework.steps.core

.StepComment,Step Description=/* Check for Alternate Greeting. ... */

5:34.464 Step id=1,650,Step Class=com.cisco.wfframework.steps.core

.StepCallSubflow,Step Description=Call Subflow -- checkAltGreet.aef

5:34.467 Step id=0,Step Class=com.cisco.wfframework.steps.core.StepStart,

Step Description=Start

5:34.468 Step id=78,Step Class=com.cisco.wf.steps.ivr.GetContactInfoStep,

Step Description=Get Contact Info (contact: --Triggering Contact--)

5:34.469 Step id=79,Step Class=com.cisco.wfframework.steps.core

.StepCreateHost,Step Description=aType = new com.cisco

.aesop.AltGreetType(language)

5:34.473 Step id=56,Step Class=com.cisco.wfframework.steps.core

.StepHost,Step Description=pExist = aType.isEnabled()

5:34.477 Step id=5,Step Class=com.cisco.wfframework.steps.core

.StepIf,Step Description=If ( pExist == true

5:34.478 Step id=3,Step Class=com.cisco.wfframework.steps.core

.StepEnd,Step Description=End

5:34.480 Step id=510,Step Class=com.cisco.wf.steps.ivr.HolidayStep,

Step Description=Is Holiday (Date: --Current Date--)

5:34.487 Step id=512,Step Class=com.cisco.wf.steps.ivr.BusinessHoursStep,

Step Description=Business Hours (date: --Current Date--,

time: --Current Time--, schedule: BusinessSchedule)

5:34.527 Step id=1,659,Step Class=com.cisco.wfframework.steps.core

.StepLabel,Step Description=Office Open:

5:34.529 Step id=1,660,Step Class=com.cisco.wf.steps.ivr.OutputStep,

Step Description=Play Prompt (contact:

--Triggering Contact--, prompt: OpenGreeting)

5:35.722 Step id=1,669,Step Class=com.cisco.wfframework.steps.core

.StepLabel,Step Description=Main Menu:

5:35.723 Step id=732,Step Class=com.cisco.wfframework.steps.core

.StepIf,Step Description=If ( attempts >=  MaxRetries  ) Then

5:35.724 Step id=2,195,Step Class=com.cisco.wfframework.steps.core

.StepAssign,Step Description=Set ErrorCode = "mainmenu"

5:35.726 Step id=2,259,Step Class=com.cisco.wf.steps.ivr.MenuStep,

Step Description=Menu (contact: --Triggering Contact--, prompt: MainMenu)

5:35.730 Step id=2,294,Step Class=com.cisco.wf.steps.ivr.ParseInputStep,

Step Description=Get Digit String(contact:

--Triggering Contact--, result digit string: TransferExt)

5:36.197 Step id=2,295,Step Class=com.cisco.wfframework.steps.core

.StepAssign,Step Description=Set TransferExt = "2" + TransferExt

5:36.198 Step id=2,296,Step Class=com.cisco.wf.steps.ivr.ExtensionToAddressStep,

Step Description=Extension To User (Extension: TransferExt, result user:user)

5:36.214 Step id=2,297,Step Class=com.cisco.prompt.steps.CreateGeneratedPromptStep,

Step Description=Create Generated Prompt( telephone.number type, store in prompt )

5:36.229 Step id=2,298,Step Class=com.cisco.wf.steps.ivr.ImplicitConfirmStep,

Step Description=Implicit Confirmation (contact: --Triggering Contact--)

5:41.971 Step id=2,301,Step Class=com.cisco.wf.steps.ivr.RedirectStep,

Step Description=Call Redirect

(contact: --Triggering Contact--, extension: TransferExt)

现在，您可以看到每个步骤在执行时。您看不到表达式如何计算，也看不到任何用户输入。如果您前面的脚本，您可以按照脚本的分支位置操作，并了解您输入的数字（在本例中，用户拨入、拨打分机和转接）。

使用过滤器查看数字。

cue-3745-44a> show trace buffer long  | include "process digit"

3119 12/28 17:05:35.728 ACCN CMTS 0 process digit 2 tag=2

3119 12/28 17:05:35.943 ACCN CMTS 0 process digit 0

3119 12/28 17:05:36.195 ACCN CMTS 0 process digit 1

从此输出中，您会看到分机201被拨。

如果CUE和CUE脚本编辑器的版本不同，并且您尝试通过GUI或CLI上传AA脚本，上传将失败，并显示“上传失败”错误消息。如果两个版本不同，则需要使用与CUE相同的版本的CUE编辑器重新创建脚本。或者，将CUE升级到CUE脚本编辑器的版本并运行脚本。

Appendix

附录1 — 系统提示

此表显示了可使用的系统提示。

注意：您不能在自定义脚本中重复使用在Cisco Unity Express语音邮件应用中听到的所有提示。某些提示仅通过语音邮件脚本可用，您无法通过Cisco Unity Express脚本编辑器自定义。

系统提示

录制的音频

SP[AA/AAWelcome]

"欢迎使用自动总机"

SP[AA/AAMainMenu]

"要输入您尝试联系的人的电话号码，请按1；要输入您尝试联系的人的姓名，请按2；要转接到接线员，请按0"

SP[AA/AAEnterExtn]

"请输入电话号码并按#键"

SP[AA/AACallingExtn]

"呼叫分机"

SP[AA/AAPhoneReach]

“您尝试联系的电话号码”

SP[AA/AAutOfServicePhone]

"当前服务中断"

SP[AA/AANameDial]

“拼写您要呼叫的人的姓氏，后跟名字。请按Q，按7，按Z，按9”

SP[AA/AACalling]

"主叫"

SP[AA/AASorry]

“抱歉，你遇到了麻烦。请继续在线，一些人很快就会和你在一起。”

SP[AA/AAWant2Call]

"如果这是您正在呼叫的人的姓名，请按1，重新开始，请按星号键"

SP[AA/still_there]

“你还在吗？”

附录2 — 重置默认跟踪

要将系统（Cisco Unity Express 2.1.x及更早版本）重置为通过CLI的默认跟踪，请首先使用no trace all命令禁用所有跟踪，然后将其粘贴到CLI:

trace ccn engine dbug

trace ccn libldap dbug

trace ccn subsystemappl dbug

trace ccn managerappl dbug

trace ccn managerchannel dbug

trace ccn subsystemjtapi dbug

trace ccn subsystemsip dbug

trace ccn stacksip dbug

trace ccn subsystemhttp dbug

trace ccn vbrowsercore dbug

trace ccn subsystemcmt dbug

trace ccn libmedia dbug

trace ccn managercontact dbug

trace ccn stepcall dbug

trace ccn stepmedia dbug

trace config-ccn sip-subsystem debug

trace config-ccn jtapi-subsystem debug

trace config-ccn sip-trigger debug

trace config-ccn jtapi-trigger debug

trace config-ccn http-trigger debug

trace config-ccn group debug

trace config-ccn application debug

trace config-ccn script debug

trace config-ccn prompt debug

trace config-ccn miscellaneous debug

trace voicemail database query

trace voicemail database results

trace voicemail database transaction

trace voicemail database connection

trace voicemail database execute

trace voicemail mailbox login

trace voicemail mailbox logout

trace voicemail mailbox send

trace voicemail mailbox save

trace voicemail mailbox receive

trace voicemail mailbox delete

trace voicemail message create

trace voicemail message dec

trace voicemail message delete

trace voicemail message get

trace voicemail message inc

trace webinterface initwizard inittrace ccn engine dbug

trace ccn libldap dbug

trace ccn subsystemappl dbug

trace ccn managerappl dbug

trace ccn managerchannel dbug

trace ccn subsystemjtapi dbug

trace ccn subsystemsip dbug

trace ccn stacksip dbug

trace ccn subsystemhttp dbug

trace ccn vbrowsercore dbug

trace ccn subsystemcmt dbug

trace ccn libmedia dbug

trace ccn managercontact dbug

trace ccn stepcall dbug

trace ccn stepmedia dbug

trace config-ccn sip-subsystem debug

trace config-ccn jtapi-subsystem debug

trace config-ccn sip-trigger debug

trace config-ccn jtapi-trigger debug

trace config-ccn http-trigger debug

trace config-ccn group debug

trace config-ccn application debug

trace config-ccn script debug

trace config-ccn prompt debug

trace config-ccn miscellaneous debug

trace voicemail database query

trace voicemail database results

trace voicemail database transaction

trace voicemail database connection

trace voicemail database execute

trace voicemail mailbox login

trace voicemail mailbox logout

trace voicemail mailbox send

trace voicemail mailbox save

trace voicemail mailbox receive

trace voicemail mailbox delete

trace voicemail message create

trace voicemail message dec

trace voicemail message delete

trace voicemail message get

trace voicemail message inc

trace webinterface initwizard init

相关信息

- 语音技术支持

- 语音和统一通信产品支持

- Cisco IP 电话故障排除

- 技术支持 - Cisco Systems