共用方式為


輔助電話概觀

電話的一個寶貴功能是一組稱為輔助電話的小型功能。 輔助電話語音的設計目的是建立語音通話和媒體通話可供任何應用程式使用,而不只是專用於電話語音功能的應用程式。 換句話說,Assisted Telephony 可讓應用程式撥打電話,而不需要知道完整 Telephony API 服務的詳細數據。 它會將電話功能延伸到文字處理應用程式、電子表格、資料庫、個人資訊管理員和其他非電話相關應用程式。

如需 Basic Telephony 的 TAPI 2.x Assisted Telephony 功能清單,請參閱 TAPI 快速函式參考。 TAPI 3.x 支援透過 ITRequest 介面的協助式電話系統。

下列範例可說明 Assisted Telephony 的實用性。 電子錶格應用程式可以納入撥打語音電話號碼的功能。 只要應用程式不需要完整的 Telephony API 所提供的詳細通話控件,輔助電話語音就是提供電話語音功能的最簡單且最有效率的方式。

透過電子表格應用程式輔助的電話功能

輔助電話語音和完整的 Telephony API 會以不同方式使用並實作,因此不建議在單一應用程式中混合輔助電話語音函式呼叫和 Telephony API 函式呼叫。

使用輔助電話系統

使用輔助電話服務的應用程式只會發起由 TAPI 暫時排入佇列的通話請求。 要求收件者應用程式會擷取這些要求,並代表 Assisted Telephony 應用程式執行這些要求。 tapiRequestMakeCall 函式會要求建立語音通話。 要求的應用程式不會控制呼叫。

TAPI 可讓使用者為每個這些服務建立不同或相同的要求收件者應用程式。 應用程式透過在 lineRegisterRequestRecipient中註冊,成為要求的接收者,並將參數 bEnable設定為 TRUE 。 (指定 FALSE 將應用程式取消註冊為要求接收者,當其判斷在當前會話中已完成所有接收職責時,應進行此操作。應用程式會在 lineRegisterRequestRecipientdwRequestMode 參數中選擇要處理的服務。) 要求的一個可能值為 LINEREQUESTMODE_MAKECALL,以顯示應用程式會處理 tapiRequestMakeCall 要求。 如果多個應用程式註冊相同的服務,則會使用優先順序配置讓用戶選取處理要求的慣用應用程式。 此優先順序配置與用於通話交接的方案相同,同樣適用於根據登錄中的 HandoffPriorities 檔名清單來進行來電路由。

通話要求

輔助電話技術為電話系統應用程式提供簡單易用的機制來撥打電話,但不需要開發人員完全掌握電話系統的技術。

tapiRequestMakeCall 函式會要求使用者與其電話號碼所指定遠端方之間的語音通話。 對 TAPI 提出要求,它會將它傳遞給註冊為這類要求的收件者的應用程式。 此收件者是通話管理員應用程式。

在應用程式提出要求之後,呼叫完全由呼叫管理員應用程式控制,因為輔助電話語音應用程式無法管理通話。 由於電話語音和所有使用者介面作業的較複雜層面是由呼叫管理員應用程式處理,因此不需要以任何實質性的方式修改已啟用電話語音的應用程式。 事實上,允許從其內建腳本語言叫用此作業的應用程式可能完全不需要修改。

tapiGetLocationInfo 函式會傳回使用者在電話語音控制面板中目前位置參數中設定的國家或地區代碼和城市(區域)程序代碼。 應用程式可以使用這項資訊來協助使用者形成適當的標準電話號碼,例如,在電話簿輸入或資料庫記錄中輸入新號碼時提供這些號碼作為預設值。

請求收件者

需要有兩種應用程式才能執行 Assisted Telephony。 輔助電話語音 用戶端 是使用 Assisted Telephony 的應用程式,它透過呼叫前綴為「tapi」的函式來運作。這類用戶端應用程式的一個範例是將 Dial 功能表命令或工具列按鈕新增至其中的電子表格。

輔助電話系統 伺服器 是能夠執行由另一個應用程式呼叫、以 'tapi' 為前綴的函式所產生的電話應用程式接口 (API) 函式的應用程式。 若要將自己稱為 Assisted Telephony 伺服器,這類應用程式會使用 lineRegisterRequestRecipient 函式來註冊。

助理電話技術中的函式(以 "tapi" 作為開頭)被稱為 要求函式。 處理這些要求的輔助通話應用程式與輔助通話伺服器,稱之為 要求收件者

協助通話請求的處理

傳遞和服務要求的程式如下:

  1. 當 TAPI 收到 Assisted Telephony 請求時,它會檢查請求的接收者,也就是目前註冊用於處理此類要求的應用程式。 如果有要求收件者,要求會排入佇列,且已註冊該要求服務的最高優先順序應用程式會傳送 LINE_REQUEST 訊息。 此訊息會通知請求收件者有新請求已送達,並帶有請求方式的說明。

  2. 如果 TAPI 找不到目前正在執行的應用程式來處理這類要求,它會嘗試啟動已註冊為能夠這樣做的應用程式。 此註冊資訊會記錄在登錄檔中的 HandoffPriorities。 TAPI 會嘗試依照應用程式列在 [HandoffPriorities] 區段中的順序啟動應用程式。 (請參閱下列步驟。

    如果目前未註冊任何應用程式,TAPI 會檢查 HandoffPriorities相關聯項目中要求處理的應用程式清單。 如果檔案中遺漏了相關聯的行,如果檔案上沒有列出任何應用程式,或清單中沒有任何應用程式可以啟動,則會拒絕要求,並出現錯誤TAPIERR_NOREQUESTRECIPIENT。

    啟動要求收件者時(不論其是否已由 TAPI 啟動),它有責任在啟動程式期間呼叫 lineRegisterRequestRecipient,並將自己註冊為要求收件者。

  3. 如果專案中列出一或多個應用程式,TAPI 會以第一個列出的應用程式開頭(優先順序最高),並嘗試使用 CreateProcess 函式來啟動它。 如果嘗試啟動應用程式失敗,TAPI 會嘗試啟動清單中的下一個應用程式。 當任何應用程式成功啟動時,TAPI 只會將要求排入佇列,並將成功指示傳回給應用程式,即使要求尚未向要求收件者發出訊號。

    啟動要求收件者應用程式之後,它會呼叫 lineRegisterRequestRecipient,這會導致傳送 LINE_REQUEST 訊息,表示要求已排入佇列。 如果基於某些原因,啟動的應用程式永遠不會註冊,要求會維持佇列,並無限期地保留在佇列中,直到應用程式註冊該類型的要求為止。

  4. 如果 TAPI 發現已執行或成功啟動這類已註冊的應用程式,它會將要求排入佇列,將LINE_REQUEST訊息傳送至伺服器應用程式,並傳回對 Assisted Telephony 應用程式之函式呼叫的成功指示。 此成功訊息僅表示請求已被接受並排入佇列,並不代表該請求已成功執行。

當伺服器應用程式準備好處理要求時,它會呼叫 lineGetRequest 函式。 這可讓它接收所需的任何資訊,例如要撥打的位址。 然後,它會使用 TAPI 函式來處理請求(例如 lineMakeCalllineDrop),這些函式會用於進行電話呼叫。 叫用 lineGetRequest 會從 TAPI 移除要求,而且要求參數會複製到應用程式配置的要求緩衝區中。 緩衝區內容的大小和解譯取決於要求模式。

伺服器必須確定在執行要求時會使用正確的參數。 執行此動作時,會遵循下列步驟:

  1. 要求收件者會先收到 LINE_REQUEST 訊息,通知可能有要求存在於要求佇列中。 這會告訴應用程式呼叫 lineGetRequest,並持續呼叫它,直到佇列清空(如果要求是發出新的呼叫),或卸除現有的呼叫。 此訊息不包含要求的參數,但卸除現有呼叫的要求除外。
  2. 如果要求是進行新的呼叫,Assisted Telephony 伺服器會使用 lineGetRequest 函式來擷取完整的要求,其中包含要求的參數。 伺服器現在具有它所需的所有資訊,例如撥號號碼或請求者的識別。 不過,首先,伺服器必須配置儲存此資訊所需的記憶體。
  3. 最後,伺服器會叫用適當的TAPI函式或一組函式來執行要求。

如果 TAPI 無法啟動能夠做為要求收件者的應用程式,則輔助電話呼叫會失敗,並傳回錯誤TAPIERR_NOREQUESTRECIPIENT。

要求收件者作業的注意事項

下列資訊涉及處理輔助電話語音要求的系統:

  • 默認登錄應該在 tapiRequestMakeCall的優先順序清單中列出呼叫管理員應用程式。 對於呼叫管理員應用程式來說,有一個功能表選項可讓使用者將它設定為最高優先順序,這很有説明,但並非必要。
  • 當 TAPI 自動啟動輔助電話語音收件者應用程式,而且它是系統中唯一的 TAPI 應用程式時,此動作會初始化 TAPI。 如果 Assisted Telephony 收件者應用程式在註冊輔助電話語音要求之前初始化並關閉線路裝置,TAPI 也會關閉,且輔助電話語音要求遺失。 當另一個新啟動的 TAPI 應用程式執行初始化和關閉時,輔助電話請求可能會遺失。