Panoramica della telefonia assistita
Una funzionalità preziosa della telefonia è il piccolo set di funzioni chiamate Telefonia assistita. La telefonia assistita è progettata per rendere disponibile l'istituzione di chiamate vocali e di chiamate multimediali a qualsiasi applicazione, non solo quelle dedicate alla funzionalità di telefonia. In altre parole, la telefonia assistita consente alle applicazioni di effettuare chiamate telefoniche senza dover conoscere i dettagli dei servizi dell'API di telefonia completa. Estende la telefonia ad applicazioni di elaborazione testi, fogli di calcolo, database, responsabili delle informazioni personali e altre applicazioni non telefoniche.
Per un elenco delle funzioni di telefonia assistita TAPI 2.x di Base, vedere Informazioni di riferimento sulle funzioni rapide TAPI. TAPI 3.x supporta la telefonia assistita tramite l'interfaccia ITRequest .
L'utilità della telefonia assistita può essere illustrata nell'esempio seguente. Un'applicazione foglio di calcolo può incorporare funzioni che compongono un numero di telefono per una chiamata vocale. Purché l'applicazione non richieda il controllo dettagliato delle chiamate fornito dall'API di telefonia completa, la telefonia assistita è il modo più semplice ed efficiente per offrire funzionalità di telefonia.
La telefonia assistita e l'API di telefonia completa vengono usate e implementate in modi diversi, pertanto non è consigliabile combinare chiamate di funzione di telefonia assistita e chiamate di funzione API di telefonia all'interno di una singola applicazione.
Uso della telefonia assistita
Le applicazioni che usano i servizi di telefonia assistita avviano solo le richieste di chiamata che vengono accodate temporaneamente da TAPI. L'applicazione destinatario della richiesta recupera queste richieste ed esegue tali richieste per conto dell'applicazione Di telefonia assistita. La funzione tapiRequestMakeCall richiede la creazione di una chiamata vocale. L'applicazione richiedente non controlla la chiamata.
TAPI consente all'utente di stabilire applicazioni per destinatari di richieste diverse o uguali per ognuno di questi servizi. Un'applicazione diventa un destinatario della richiesta registrando con lineRegisterRequestRecipient, in cui TRUE viene specificato come valore per il parametro bEnable. Se si specifica FALSE , viene annullata la registrazione dell'applicazione come destinatario della richiesta, che deve eseguire quando è stato determinato che i compiti del destinatario sono passati per la sessione corrente. L'applicazione seleziona i servizi da gestire nel parametro dwRequestMode di lineRegisterRequestRecipient. Un valore possibile per una richiesta è LINEREQUESTMODE_MAKECALL, per indicare che l'applicazione gestirà le richieste tapiRequestMakeCall . Se più applicazioni eseguono la registrazione per gli stessi servizi, viene usato uno schema di priorità per consentire all'utente di selezionare l'applicazione preferita per la gestione delle richieste. Questo schema di priorità è identico a quello usato per il call handoff e il routing delle chiamate in ingresso in base a un elenco di nomi di file in HandoffPriorities nel Registro di sistema.
Richieste di chiamata
La telefonia assistita offre applicazioni abilitate per la telefonia con un meccanismo facile da usare per effettuare chiamate telefoniche senza richiedere allo sviluppatore di diventare completamente alfabetizzati nella telefonia.
La funzione tapiRequestMakeCall richiede una chiamata vocale tra l'utente e una parte remota specificata dal numero di telefono. La richiesta viene effettuata a TAPI, che la passa a un'applicazione registrata come destinatario di tali richieste. Questo destinatario è un'applicazione di gestione chiamate.
Dopo che l'applicazione ha effettuato la richiesta, la chiamata viene controllata interamente dall'applicazione di gestione chiamate perché le applicazioni di telefonia assistita non possono gestire le chiamate. Poiché gli aspetti più complessi della telefonia e di tutte le operazioni dell'interfaccia utente vengono gestiti dall'applicazione di gestione chiamate, le applicazioni abilitate per la telefonia non devono essere modificate in modo sostanziale. Infatti, le applicazioni che consentono di richiamare questa operazione dal linguaggio di script predefinito potrebbero non dover essere modificate affatto.
La funzione tapiGetLocationInfo torna all'applicazione il codice paese o area geografica e la città (area) che l'utente ha impostato nei parametri di posizione correnti nel Pannello di controllo di telefonia. L'applicazione può usare queste informazioni per aiutare l'utente a formare numeri di telefono canonici appropriati, ad esempio offrendo questi come valori predefiniti quando vengono immessi nuovi numeri in una voce o un record di database della rubrica.
Destinatari della richiesta
Per eseguire la telefonia assistita sono necessari due tipi di applicazioni. I client di telefonia assistita sono applicazioni che usano la telefonia assistita chiamando le funzioni con il prefisso "tapi". Un esempio di tale applicazione client è un foglio di calcolo a cui viene aggiunto un comando di menu Dial o un pulsante della barra degli strumenti.
I server di telefonia assistita sono applicazioni che possono eseguire funzioni API di telefonia che derivano dalla chiamata di un'altra applicazione a una funzione con prefisso "tapi". Per renderlo noto come server di telefonia assistita, tale applicazione viene registrata come una usando la funzione lineRegisterRequestRecipient .
Le funzioni di telefonia assistita (che iniziano con il prefisso "tapi") sono note come funzioni di richiesta. Le applicazioni di telefonia assistita che elaborano queste richieste, ovvero i server di telefonia assistita, sono denominati destinatari della richiesta.
Elaborazione di richieste di telefonia assistita
Il processo con cui le richieste vengono recapitate e gestite è il seguente:
Quando TAPI riceve una richiesta di telefonia assistita, verifica la presenza di un destinatario della richiesta, ovvero un'applicazione attualmente registrata per elaborare tale tipo di richiesta. Se è presente un destinatario della richiesta, la richiesta viene accodata e l'applicazione con priorità più alta registrata per il servizio della richiesta viene inviato un messaggio di LINE_REQUEST . Il messaggio notifica al destinatario della richiesta che è arrivata una nuova richiesta e contiene un'indicazione della modalità della richiesta.
Se TAPI non riesce a trovare un'applicazione attualmente in esecuzione per elaborare tale richiesta, tenta di avviare un'applicazione registrata come in grado di farlo. Queste informazioni di registrazione vengono registrate in HandoffPriorities nel Registro di sistema. TAPI tenta di avviare le applicazioni nell'ordine in cui sono elencate nella sezione HandoffPriorities . Vedere il passaggio seguente.
Se nessuna applicazione è attualmente registrata, TAPI esamina l'elenco delle applicazioni di elaborazione delle richieste nella voce associata in HandoffPriorities. Se la riga associata non è presente nel file, se non sono presenti applicazioni elencate o se nessuna delle applicazioni nell'elenco può essere avviata, la richiesta viene rifiutata con l'errore TAPIERR_NOREQUESTRECIPIENT.
Quando un destinatario della richiesta viene avviato (se è stato avviato o meno da TAPI) è compito di chiamare lineRegisterRequestRecipient durante il processo di avvio e registrarsi come destinatario della richiesta.
Se una o più applicazioni sono elencate nella voce, TAPI inizia con la prima applicazione elencata (priorità più alta) e tenta di avviarla usando la funzione CreateProcess . Se il tentativo di avviare l'applicazione non riesce, TAPI tenta di avviare l'applicazione successiva nell'elenco. Quando un'applicazione viene avviata correttamente, TAPI accoda semplicemente la richiesta e restituisce un'indicazione di esito positivo all'applicazione anche se la richiesta non è ancora stata segnalata al destinatario della richiesta.
Dopo l'avvio dell'applicazione del destinatario della richiesta, chiama lineRegisterRequestRecipient, causando l'invio di un messaggio LINE_REQUEST , segnalando che la richiesta è in coda. Se per qualche motivo l'applicazione avviata non viene mai registrata, la richiesta rimane in coda e rimane in coda per un periodo illimitato fino a quando un'applicazione non esegue la registrazione per tale tipo di richiesta.
Se TAPI trova un'applicazione registrata già in esecuzione o ne avvia correttamente una, accoda la richiesta, invia un messaggio di LINE_REQUEST all'applicazione server e restituisce un'indicazione di esito positivo per la chiamata di funzione all'applicazione telefonia assistita. Questo messaggio di operazione riuscita indica solo che la richiesta è stata accettata e in coda, non che sia stata eseguita correttamente.
Quando l'applicazione server è pronta per elaborare una richiesta, chiama la funzione lineGetRequest . In questo modo è possibile ricevere tutte le informazioni necessarie, ad esempio un indirizzo da comporre. Elabora quindi la richiesta, usando le funzioni TAPI (ad esempio lineMakeCall e lineDrop) che altrimenti verrebbero usate per effettuare la chiamata. La chiamata di lineGetRequest rimuove la richiesta da TAPI e i parametri della richiesta vengono copiati in un buffer delle richieste allocato dall'applicazione. Le dimensioni e l'interpretazione del contenuto del buffer dipendono dalla modalità richiesta.
Il server deve assicurarsi che usi i parametri corretti durante l'esecuzione delle richieste. In questo caso, vengono seguiti questi passaggi:
- Il destinatario della richiesta riceve prima un messaggio di LINE_REQUEST che informa che le richieste possono esistere nella coda delle richieste. Ciò indica all'applicazione di chiamare lineGetRequest e continuare a chiamarlo finché la coda non viene svuotata (se la richiesta è per effettuare una nuova chiamata) o per eliminare una chiamata esistente. Questo messaggio non contiene i parametri per la richiesta, tranne nel caso di una richiesta di eliminazione di una chiamata esistente.
- Se la richiesta consiste nell'effettuare una nuova chiamata, il server di telefonia assistita usa la funzione lineGetRequest per recuperare la richiesta completa, che include i parametri della richiesta. Il server dispone ora di tutte le informazioni necessarie, ad esempio il numero da comporre o l'identificazione del creatore della richiesta. In primo luogo, tuttavia, il server deve allocare la memoria necessaria per archiviare queste informazioni.
- Infine, il server esegue la richiesta richiamando la funzione TAPI o il set di funzioni appropriato.
Se TAPI non è in grado di avviare un'applicazione in grado di fungere da destinatario di una richiesta, la chiamata di telefonia assistita ha esito negativo e restituisce l'errore TAPIERR_NOREQUESTRECIPIENT.
Note sulle operazioni del destinatario della richiesta
Le informazioni seguenti riguardano i sistemi in cui vengono elaborate le richieste di telefonia assistita:
- Il Registro di sistema predefinito deve elencare un'applicazione di gestione chiamate nell'elenco di priorità per tapiRequestMakeCall. Sarebbe utile, ma non essenziale, che l'applicazione di gestione chiamate abbia un'opzione di menu che consenta agli utenti di impostarla sulla priorità più alta.
- Quando un'applicazione destinatario di telefonia assistita viene avviata automaticamente da TAPI e, se è l'unica applicazione TAPI nel sistema, questa azione inizializza TAPI. Se l'applicazione destinatario di telefonia assistita inizializza e arresta il dispositivo linea prima della registrazione per le richieste di telefonia assistita, tapi viene arrestato e la richiesta di telefonia assistita viene persa. Le richieste di telefonia assistita potrebbero anche andare perse quando un'altra applicazione TAPI avviata esegue un'inizializzazione e un arresto.