目錄

簡介

必要條件

需求

採用元件

慣例

概觀

使用Cisco Unity Express指令碼編輯器

建立基本指令碼

整合方法

Callflow示例

示例指令碼

將指令碼上傳到Cisco Unity Express

疑難排解

附錄

附錄1 — 系統提示

附錄2 — 重置預設跟蹤

相關資訊

簡介

本文檔提供有關Cisco Unity Express(CUE)系統的資訊。具體來說，本文檔提供了在產品中建立自定義自動總機應用程式的入門指南。

有關Cisco Unity Express的詳細資訊，請參閱Cisco Unity Express指令碼編輯器指南。本文檔面向需要基本指南以開始使用Cisco Unity Express Editor並在Cisco Unity Express產品中維護指令碼的管理員。

注意：常規思科技術支援無法提供自定義指令碼支援。如有問題、評論和自定義指令碼幫助，請傳送電子郵件至ask-cue-editor@external.cisco.com。

必要條件

需求

閱讀器需要通過命令列介面(CLI)或GUI熟悉Cisco Unity Express管理和配置。

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 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上傳和配置。

此清單說明一些基本術語，以幫助您理解本檔案中的概念。

- Step — 指令碼建立的基本構建塊。每個步驟都是最基本的可執行單元，如「if」語句、「Goto」等等。

- 指令碼 — 按順序執行的一個或多個步驟。指令碼是副檔名為.aef的檔案。

- Variable — 這些是指令碼中的變數。變數可以是不同的型別，例如Integer、Boolean、String等。

- Parameter — 這是變數的屬性，以便通過Cisco Unity Express Web介面將變數提供給管理員。例如，如果您的OperatorExtension變數在預設情況下要將值指定為1000，則有時需要將其更改為2000。在這種情況下，該變數會通過Web介面公開，這樣每次需要更改值時不必將整個指令碼重新載入到Cisco Unity Express中。

- Prompt — 可以播放的.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命令。

Prompts（提示）選項是指系統上存在的音訊檔案(.wav)。

Scripts選項引用可以儲存在系統上的.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 trigger資訊提供編號（「名稱」）、它呼叫的應用程式、狀態（啟用/禁用）和會話數。

使用Cisco Unity Express指令碼編輯器

使用指令碼編輯器(僅供註冊客戶使用)建立新指令碼。它必須安裝在單獨的PC上。

位於同一位置的是幾個示例指令碼。這些指令碼有助於學習如何在指令碼中執行特定操作。思科建議您安裝該編輯器並下載幾個示例指令碼，以便熟悉該編輯器的工作方式。

啟動指令碼編輯器後，可以開啟指令碼，如下圖所示：

「元件面板」窗格包含具有每個步驟的資料夾，並根據其主要功能進行分類。從此處將步驟拖到「設計」窗格以建立指令碼。在[變數]窗格中，可以建立和編輯變數。將步驟拖動到「設計」窗格後，可以按一下右鍵某個步驟，選擇「屬性」，然後自定義該步驟以及分配給該步驟的變數。將指令碼上傳到Cisco Unity Express之前，始終需要首先通過Tools > Validate選項對其進行驗證。然後，任何錯誤輸出都會顯示在「調試」窗格中。

使用編輯器時，要記住的最有用的功能之一是幫助功能。可通過工具欄上的「幫助」選單直接訪問它，或在選擇特定步驟屬性時訪問它。

建立基本指令碼

您可以使用「幫助」選單熟悉某些步驟。在指令碼編輯器中，將幾個步驟從元件面板拖到設計窗格中，然後按一下右鍵其中一個步驟並選擇屬性。然後按一下Help按鈕，獲取該特定步驟的幫助。

本文檔介紹如何建立示例指令碼。本文還討論了人們建立自定義自動總機時嘗試解決的一些常見問題。這裡的目標是建立一個指令碼來應答呼叫，檢查是否存在緊急候補問候語，以及當前時間是否為正常的工作時間。如果已關閉，請播放自定義問候語並將呼叫傳送給接線員。如果開啟，請播放一個選單，該選單允許呼叫者撥打1（按名稱撥號）、2（按分機撥號）或0（操作員）。Dial-by-extension選項應只將呼叫轉接至指定的範圍，而不是您可以輸入的任何號碼。

警告：本檔案使用的範例僅作說明之用。儘管您可以自由使用任何您喜歡的內容，但這可能與貴公司的情形不完全相符。特別是在錯誤處理方面，此指令碼沒有多大用處。

註：除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（當前處於SRST模式的Cisco CallManager整合也是如此）整合時，信令通過SIP以BYE/Also消息的形式完成。這意味著重定向會掛斷對Cisco Unity Express的呼叫，並告知Cisco CallManager Express/SRST路由器將呼叫者連線到BYE消息的「還有：」部分中指定的分機。如果該擴展無效或無法訪問，則可以丟棄呼叫方。這是因為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. Dial-by-extension選項會立即嘗試收集另外兩個數字。如果輸入較少項，則會返回主選單。如果收集到了兩個，它會嘗試查詢使用者。如果使用者退出，則將使用者轉移到該分機，否則使用者轉到主選單。

8. 轉移到操作員函式將轉移呼叫。如果由於某種原因失敗，它會返回主選單。

9. 針對各種問題（例如多次不成功的傳輸）的附加錯誤處理序列，告知使用者稍後重試並掛機。

在錯誤處理方面可以做很多工作。對於真正的實現，在流程圖中對映完整的呼叫流程（包括錯誤處理以及每個使用者互動或選擇）可能有所幫助。

示例指令碼

開始

在指令碼編輯器中輸入指令碼。

所有指令碼都以「開始」步驟開頭。首先要做的就是接受呼叫。播放提示(DP[500])，即0.5秒的暫停。在某些情況下，到公共交換電話網路(PSTN)的音訊直通不會快速發生。在問候語之前播放一些內容和「真實」問候語，以避免任何感知到的對問候語的剪輯。下一步是開啟異常轉至步驟。這樣做是在執行指令碼時查詢型別為「UndefinedPromptException」的任何異常。當步驟嘗試播放不存在的提示時，會發生此特定的異常。僅當播放提示的步驟將「Continue On PromptErrors」屬性設定為「No」時，才會出現這種情況。如果設定為「Yes」，則不會播放提示，也不會引發異常。使用此「發生異常時執行」步驟可確保如果清除可由管理員管理的關鍵提示（如主選單），則您可分支到某一區域，在該區域中，您可分支到「抱歉」標籤，以告訴使用者稍後重試。然後，呼叫子流，checkAltGreet.aef。這是一個系統指令碼，它始終存在。它會檢查AltGreeting.wav檔案是否存在。如果存在，就會播放。如果沒有，則子流返回。這非常方便，因為您可以將其與GMS（現在稱為AVT系統）結合使用，以在普通消息之前播放某種緊急問候語。有關此功能的詳細資訊，請參閱配置和使用Unity Express的問候語管理系統和緊急候補問候語。無法判斷候補問候語是否實際播放（或檢查本地儲存庫中是否存在檔案）。 您不必在指令碼開頭使用此命令。例如，根據您的應用程式，您可以使用緊急候補問候語功能來錄製假日提示。不要呼叫此子流，而應僅在節假日呼叫它。這有助於站點管理員通過電話使用者介面記錄節日問候，而無需通過瀏覽器或CLI訪問系統（重新命名提示或將提示分配給指令碼變數）。

確定要播放的開啟提示。如果是假日，播放假日問候語。如果是在工作時間（可在Cisco Unity Express Web管理員中通過時間表進行配置），則播放開始問候語（其內容可以簡單到「感謝呼叫Cisco Systems」），否則播放結束問候語。不管你彈哪一張，你都可以直接進入主選單。

注意：「Is Holiday」和「Business Hours」步驟特定於2.1.1及更高版本。對於早期版本的Cisco Unity Express，唯一的選擇是使用「一天中的時間」步驟。這不允許您播放基於日期或日期的不同問候語。它只基於時間。

主選單

進入主選單部分。由於稍後許多錯誤處理將呼叫者傳送回主選單，因此會新增一個計數器。計數器「attempts」與「MaxRetries」進行比較，後者是使用者可配置的另一個變數（預設情況下為3）。 如果達到計數器，向使用者道歉，並將呼叫者轉接給操作員(「Sorry you are problems.請稍等片刻，等待接線員。」)。

「選單」步驟將播放一個基本提示(「如果您知道您所在方的分機號，請隨時撥打。按姓名拼寫按1，操作員按0，重複這些選項，按9。」) 在這種情況下，由於您播放的是您自己的錄製提示，因此您將此步驟中的「最大重試次數」引數更改為0。只要您有執行此操作的選項，就會執行此操作。原因是，如果不是0，您會聽到系統提示「Are you still there？」 每次到達到期計時器時，它都會分支到超時分支。當有人按1、2、9或0以外的任何內容時，將到達「未成功」分支。在這種情況下，將播放提示「輸入的分機無效」，並退出增加嘗試計數器的步驟，然後返回主選單。

註：為確保音訊在您在「媒體」步驟（如「選單」或「播放提示」）中輸入數字後立即停止，您必須選中該步驟「提示」頁籤中的「插入」欄位。可中斷欄位（在「常規」頁籤上）用於其他步驟中斷，這些步驟中斷當前不適用於Cisco Unity Express。

新增單個錯誤處理部分。「抱歉」部分將播放一條消息(「我們此時無法轉接呼叫。請稍後再試。再見。」)。 然後呼叫斷開。

您可以始終使用系統問候語而不是這些自定義變數。系統提示始終使用SP[]表示法，而使用者提示使用P[]表示法。在定義提示變數時，不能將系統提示指定給該提示變數（在變數窗格中，因為這些提示變數是根據定義的使用者值）。 定義後，在指令碼中，可以通過Set步驟（或任何Create Prompt步驟）為變數指定系統提示。

按名稱撥號

按名稱撥號的一種方法是從Cisco.com下載示例(S4_DialByName)，將其作為單獨的指令碼載入到Cisco Unity Express中，然後新增呼叫子流步驟以呼叫它。在這種情況下，該步驟將直接放入指令碼中，並將進行詳細討論。NameToUser步驟僅允許您配置其提示之一（「拼寫您要呼叫的人的姓氏，後跟字母Q的名字，按7，字母Z的名字，按9」）。 無法消除所有系統提示。為了最小化這些值，首先需要禁用Cancel鍵（預設*）。 如果存在，系統會在錄製的提示末尾新增一條消息「重新開始，按星號」。其次，將「Maximum Retries（最大重試次數）」更改為零，這樣就不會出現「please try again（請重試）」和「are you still there（您仍然在那裡）」消息。使用您新增的單獨計數器變數始終跟蹤嘗試次數。仍存在一個無法消除的系統提示。它提示輸入多個匹配項(「找到多個名稱。從以下選項中進行選擇……」)。 Name To User步驟始終以Successful、Timeout、Unsuccessful或Operator結尾（如果在步驟屬性中選擇了）。 除「成功」(Successful)和「操作員」(Operator)分支外，您會從「選單」(Menu)步驟中退出。這表示您增加了嘗試計數器並返回主選單。根據具體情況，您可以擁有單獨的重試計數器，並新增一個步驟以返回到DialByName標籤，以便它重複已經選擇的操作。

註：2.1.1版中需要考慮的一個缺陷是Cisco錯誤ID CSCeg81385(僅限註冊客戶)。 當NameToUser步驟的「最大重試次數」設定為零或一時，必須使用終止字元。如果沒有終止字元，則不會轉到此步驟的「成功」分支。相反，即使存在匹配，它始終會轉到「超時」。

如果使用者沒有輸入可以對映到某個名稱的副檔名，則Unsuccessful分支將針對MaxRetries檢查新的計數器(SpellByNameAttempts)。假設需要對spell-by-name函式應用相同的最大主選單輸入重試次數。如果需要不同，可以新增單獨的變數。

成功的NameToUser步驟表示至少輸入了一個數字，並且選擇了在Cisco Unity Express中定義的單個使用者的姓氏（僅當完全沒有輸入數字時才到達超時分支）。 為確保副檔名是唯一的，請檢查是否可以將副檔名對映回使用者。這可以通過ExtensionToUser步驟來實現。此步驟新增在Cisco Unity Express 2.1.1中。以前，在給定分機號的情況下，無法確保它對映到語音郵件系統中的實際使用者。您能做的最佳操作是設定一些變數進行對比，例如新增步驟「If(TransferExt < MinExtension)」 ||(TransferExt > MaxExtension)。.." 或者類似的東西。

在這裡，在將副檔名對映回使用者後可以看到指令碼。如果沒有，則播放副檔名無效的提示。通常由於某種原因沒有延期。對於Cisco CallManager Express，這意味著如果您嘗試轉接呼叫，則掛機。這可能會造成輕微的混亂，因為呼叫者已經選擇了使用者。但是，這顯然已經是一個您無論如何都要瞭解的錯誤情況。如果成功地將擴展對映到使用者，則首先檢查副檔名是否具有錄音名稱（當您查詢該使用者時，會填充notedName變數）。 然後，將提示變數設定為Calling並設定sponedName。否則，請將其設定為Calling Extension加上使用者的拼寫分機。您也可以拼寫名稱（在提示中播放S[name]）。 沒有要播放的錄音名稱。任何系統拼寫（如拼寫名稱或分機）始終以系統的聲音完成，無法自定義。Implicit Confirmation步驟將播放您剛剛建立的提示。如果使用者未鍵入任何內容，則它會進入「是」分支並重定向呼叫。如果Cisco CallManager整合出現問題，它會播放問候語，並將呼叫者傳送回主選單。如果呼叫者輸入了某內容，則生成另一個提示。這一次，提示符以notedName或使用者名稱稱的拼寫版本開頭（建立條件提示步驟）。 然後暫停並提示「如果這是您呼叫的人員的姓名，請按1」。 現在，使用者可以按1選擇「是」、「2」、「*」或等待。系統會將它們傳送回拼寫名稱部分或傳送給操作員。這取決於他們通過系統的次數。

通過分機撥號

按分機撥號部分已經收集了第一個數字（本例中為「2」）。將prefixDigit變數設定為2。您可以根據前導數（或如果可能有多於一個前導數）輕鬆地更改此值。 任何前導數字都不能與選單中的另一個選項相同（例如1，在此示例中用於按名稱撥號）。 Get Digit String也會收集固定數量的數字（本例中為2）。 因此，總位數需要修正。如果有效分機以2或3開頭，則可以向「選單」步驟的選項3新增「Set prefixDigit = "3"」步驟，然後新增「Goto DialByExtension」步驟。

由於在此環境中具有三位副檔名，因此「獲取數字字串」步長輸入長度引數為2。沒有終止字元和取消鍵。最大重試次數為0。如果使用者未輸入有效分機，指令碼將增加嘗試次數並返回主選單。該步驟不播放任何音訊（提示為P[]），因為使用者已經處於撥號數字的中間位置。

成功收集兩位數字後，在已撥號（允許從「選單」步驟進行分支）的字首數字（本例中為「2」）之前加上字首。 結果的TransferExt隨後會傳遞到「分機到使用者」(Extension To User)步驟，該步驟將驗證該使用者是否有效。如果是，則建立具有拼寫副檔名的提示。在Implicit Confirmation步驟中，播放「calling extension」提示，後跟分機。查詢使用者並播放口語名稱，就像您在DialByName中所做的那樣。但是，在這種情況下，不需要進行此操作。如果沒有撥打任何數字，假定這是呼叫者想要到達的分機，然後重定向呼叫。否則，循環返回主選單。「播放提示DP[250]」步驟的作用是清除任何其他輸入，因為「獲取數字字串」步驟未配置任何終止字元。其思路是，如果某人撥打「200」或「200#」分機，則希望此方式有效。 如果在運行隱式確認步驟時輸入#，則進入該步驟的「否」部分。在某些情況下，可能根本不需要隱式確認步驟，而是立即重定向呼叫。為了便於說明，這些步驟將留在中。

操作員轉接

播放提示「Transferring call」（轉接呼叫），然後將其重定向到配置的運營商分機。如果由於某種原因而失敗，則有一個單獨的計數器，您可以遞增該計數器並返回主選單。這是因為您要使用某種方法讓操作員有時間離開電話或重新註冊，以便您可以成功地再次嘗試轉接至他們。經過多次嘗試（在本例中為3進行硬編碼）後，您會轉移到「抱歉」標籤，該標籤將丟棄呼叫。

高級錯誤處理

指令碼可以在許多地方失敗。設計良好的指令碼中一個比較常見的領域是缺少使用者提示。當系統嘗試播放不存在提示時，可能會發生許多情況。首先，如果播放提示的步驟將「Continue On Prompt Errors（提示錯誤時繼續）」設定為「Yes（是）」。它會繼續下一步，而不會播放提示。如果「提示時繼續錯誤」設定為「否」，則會生成異常。在大多數情況下，這是「UndefindedPromptException」，這意味著找不到提示或從未配置提示。當您執行「開啟例外轉至」步驟時，您可以捕獲此例外並轉到代碼部分，此部分可以播放系統消息或另一種形式的音訊。由於「On Exception Goto」步驟適用於整個指令碼中播放的所有音訊（您不能為播放的每個提示定義單獨的「On Exception Goto」步驟），因此處理此步驟的最佳方式是在播放提示之前立即設定錯誤代碼變數。這樣，您就可以在某處進行分支，根據錯誤代碼採取操作，然後可能進行分支迴轉。

例如，可以使用以下內容修改指令碼：

您已新增「Maxretries」標籤。這是用來回到同一個地方的。將ErrorCode變數設定為Maxretries。在「播放提示」步驟中，確保將「在提示錯誤時繼續」設定為否。現在新增一個可以處理此問題的部分。檢視ErrorCode是否與「Maxretries」匹配，然後將SorryProblems變數（您之前嘗試播放該變數）設定為系統消息Sorry you are trouble 。請保持連線，有些會很快與您聯絡。然後轉到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郵箱說明了如何執行此操作。

指令碼變數

必須先建立指令碼中使用的所有變數，然後才能使用它們。如果您使用了一個工具並在以後將其刪除，請在指令碼編輯器中選擇「工具」>「驗證」以找到它。對於此示例指令碼，以下是使用的變數。請注意名稱、型別、值（最初為變數的值）和屬性。「引數」屬性表示該變數通過網頁提供給管理員。任何希望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. 按一下「Browse」。

6. 查詢指令碼檔案，選擇該檔案並按確定。

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，上載，然後選擇指令碼。它被其他所有配置引數覆蓋，這些引數保持不變。

建立提示時，最簡單的方法是使用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>

疑難排解

對指令碼進行故障排除時，您需要呼叫並測試各種場景，包括常規使用者輸入以及超時和預期錯誤情況。

上載指令碼之前，請始終訪問指令碼編輯器中的Tools > Validate條目，並確保收到「Validation succeeded」消息。否則，所有錯誤都會顯示在調試窗格中。您可以按兩下它們，並且它將顯示錯誤條件在指令碼中的位置。

在大多數情況下，預設跟蹤對於故障排除問題來說綽綽有餘。為了簡化此操作，請開啟預設跟蹤並使用過濾功能來顯示所需的內容。

在任何測試之前，發出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指令碼，則上載失敗並顯示Upload failed錯誤消息。如果兩個版本不同，則需要使用與CUE相同的版本的CUE編輯器重新建立指令碼。或者，將CUE升級到CUE指令碼編輯器的版本並運行指令碼。

附錄

附錄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/AAOutOfServicePhone]

"當前不可用"

SP[AA/AANameDial]

拼寫您要呼叫的人員的姓氏，後跟名字。字母Q，按7，字母Z，按9"

SP[AA/AACalling]

"呼叫"

SP[AA/AASorry]

「對不起，你遇到麻煩了。請保持聯絡，有些很快就會與您聯絡。」

SP[AA/AAWant2Call]

如果這是您呼叫的人員的姓名，請按1。重新開始，請按星號鍵。

SP[AA/still_there]

「你還在嗎？」

附錄2 — 重置預設跟蹤

若要通過CLI將系統（Cisco Unity Express 2.1.x及更低版本）重置為預設跟蹤，請先使用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