Introducción a la telefonía asistida
Una característica valiosa de la telefonía es el pequeño conjunto de funciones denominada Telefonía asistida. La telefonía asistida está diseñada para hacer que el establecimiento de llamadas de voz y de llamadas multimedia esté disponible para cualquier aplicación, no solo las dedicadas a la funcionalidad telefónica. En otras palabras, la telefonía asistida permite a las aplicaciones realizar llamadas telefónicas sin necesidad de tener en cuenta los detalles de los servicios de la API de telefonía completa. Amplía la telefonía a aplicaciones de procesamiento de texto, hojas de cálculo, bases de datos, administradores de información personal y otras aplicaciones que no son de telefonía.
Para obtener una lista de las funciones de telefonía asistida de TAPI 2.x de telefonía básica, consulte Referencia de funciones rápidas de TAPI. TAPI 3.x admite telefonía asistida a través de la interfaz ITRequest .
La utilidad de la telefonía asistida se puede ilustrar en el ejemplo siguiente. Una aplicación de hoja de cálculo puede incorporar funciones que marcan un número de teléfono para una llamada de voz. Siempre que la aplicación no necesite ningún control de llamadas detallado proporcionado por la API de telefonía completa, la telefonía asistida es la manera más fácil y eficaz de darle funcionalidad telefónica.
La telefonía asistida y la API de telefonía completa se usan e implementan de maneras diferentes, por lo que no se recomienda mezclar llamadas de función de telefonía asistida y llamadas a funciones de API de telefonía dentro de una sola aplicación.
Uso de telefonía asistida
Las aplicaciones que usan servicios de telefonía asistida solo inician solicitudes de llamada que TAPI pone temporalmente en cola. La aplicación del destinatario de la solicitud recupera estas solicitudes y las ejecuta en nombre de la aplicación de telefonía asistida. La función tapiRequestMakeCall solicita el establecimiento de una llamada de voz. La aplicación solicitante no controla la llamada.
TAPI permite al usuario establecer aplicaciones de destinatarios diferentes o iguales para cada uno de estos servicios. Una aplicación se convierte en un destinatario de la solicitud mediante el registro con lineRegisterRequestRecipient, en el que TRUE se especifica como el valor del parámetro bEnable. (Al especificar FALSE , se anula el registro de la aplicación como destinatario de la solicitud, que debe hacer cuando se ha determinado que sus tareas de destinatario son a través de para la sesión actual). La aplicación selecciona los servicios que quiere controlar en el parámetro dwRequestMode de lineRegisterRequestRecipient. Se LINEREQUESTMODE_MAKECALL un valor posible para una solicitud, para mostrar que la aplicación controlará las solicitudes tapiRequestMakeCall . Si varias aplicaciones se registran para los mismos servicios, se usa un esquema de prioridad para permitir al usuario seleccionar qué aplicación se prefiere para controlar las solicitudes. Este esquema de prioridad es idéntico al que se usa para la entrega de llamadas y el enrutamiento de las llamadas entrantes en función de una lista de nombres de archivo en HandoffPriorities del registro.
Solicitudes de llamadas
La telefonía asistida proporciona aplicaciones habilitadas para telefonía con un mecanismo fácil de usar para realizar llamadas telefónicas sin necesidad de que el desarrollador se vuelva totalmente letrado en la telefonía.
La función tapiRequestMakeCall solicita una llamada de voz entre el usuario y una entidad remota especificada por su número de teléfono. La solicitud se realiza a TAPI, que la pasa a una aplicación registrada como destinatario de dichas solicitudes. Este destinatario es una aplicación de administrador de llamadas.
Después de que la aplicación haya realizado la solicitud, la llamada se controla completamente desde la aplicación de administrador de llamadas porque las aplicaciones de telefonía asistida no pueden administrar llamadas. Dado que los aspectos más complejos de la telefonía y todas las operaciones de interfaz de usuario se controlan mediante la aplicación de administrador de llamadas, las aplicaciones habilitadas para telefonía no se deben modificar de ninguna manera sustancial. De hecho, es posible que las aplicaciones que permiten invocar esta operación desde su lenguaje de script integrado no tengan que modificarse en absoluto.
La función tapiGetLocationInfo vuelve a la aplicación el código de país o región y el código de ciudad (área) que el usuario ha establecido en los parámetros de ubicación actuales en el Panel de control de telefonía. La aplicación puede usar esta información para ayudar al usuario a formar números de teléfono canónicos adecuados, como ofrecerlos como valores predeterminados cuando se escriben números nuevos en una entrada de la libreta de teléfonos o en un registro de base de datos.
Destinatarios de la solicitud
Se necesitan dos tipos de aplicaciones para ejecutar telefonía asistida. Los clientes de telefonía asistida son aplicaciones que usan telefonía asistida llamando a las funciones que tienen el prefijo "tapi". Un ejemplo de esta aplicación cliente sería una hoja de cálculo a la que se agrega un comando de menú marcado o un botón de barra de herramientas.
Los servidores de telefonía asistida son aplicaciones que pueden ejecutar funciones de API de telefonía resultantes de la llamada de otra aplicación a una función con prefijo "tapi". Para hacerse conocido como un servidor de telefonía asistida, esta aplicación se registra como una mediante la función lineRegisterRequestRecipient .
Las funciones de telefonía asistida (que comienzan con el prefijo "tapi") se conocen como funciones de solicitud. Las aplicaciones de telefonía asistida que procesan estas solicitudes (servidores de telefonía asistida) se denominan destinatarios de la solicitud.
Procesamiento de solicitudes de telefonía asistida
El proceso con el que se entregan las solicitudes y se presta servicio es el siguiente:
Cuando TAPI recibe una solicitud de telefonía asistida, comprueba si hay un destinatario de la solicitud, es decir, una aplicación registrada actualmente para procesar ese tipo de solicitud. Si hay un destinatario de la solicitud, la solicitud se pone en cola y la aplicación de prioridad más alta que se ha registrado para el servicio de esa solicitud se envía un mensaje de LINE_REQUEST . El mensaje notifica al destinatario de la solicitud que ha llegado una nueva solicitud y contiene una indicación del modo de la solicitud.
Si TAPI no encuentra una aplicación actualmente en ejecución para procesar dicha solicitud, intenta iniciar una aplicación que se ha registrado como capaz de hacerlo. Esta información de registro se registra en HandoffPriorities en el registro. TAPI intenta iniciar aplicaciones en el orden en que se enumeran en la sección HandoffPriorities . (Consulte el paso siguiente).
Si no hay ninguna aplicación registrada actualmente, TAPI examina la lista de aplicaciones de procesamiento de solicitudes en la entrada asociada en HandoffPriorities. Si falta la línea asociada del archivo, si no hay ninguna aplicación enumerada en él o si no se puede iniciar ninguna de las aplicaciones de la lista, la solicitud se rechaza con el error TAPIERR_NOREQUESTRECIPIENT.
Cuando se inicia un destinatario de la solicitud (si tapi lo ha iniciado o no), es su deber llamar a lineRegisterRequestRecipient durante el proceso de inicio y registrarse como destinatario de la solicitud.
Si una o varias aplicaciones aparecen en la entrada, TAPI comienza con la primera aplicación enumerada (prioridad más alta) e intenta iniciarla mediante la función CreateProcess . Si se produce un error en el intento de iniciar la aplicación, TAPI intenta iniciar la siguiente aplicación en la lista. Cuando cualquier aplicación se inicia correctamente, TAPI simplemente pone en cola la solicitud y devuelve una indicación correcta a la aplicación aunque la solicitud aún no se haya señalado al destinatario de la solicitud.
Una vez iniciada la aplicación del destinatario de la solicitud, llama a lineRegisterRequestRecipient, lo que hace que se envíe un mensaje LINE_REQUEST , lo que indica que la solicitud se pone en cola. Si por alguna razón la aplicación iniciada nunca se registra, la solicitud permanece en cola y permanece en la cola indefinidamente hasta que una aplicación se registra para ese tipo de solicitud.
Si TAPI encuentra tal aplicación registrada que ya se está ejecutando o inicia correctamente una, pone en cola la solicitud, envía un mensaje de LINE_REQUEST a la aplicación de servidor y devuelve una indicación correcta de la llamada de función a la aplicación de telefonía asistida. Este mensaje de operación correcta indica solo que la solicitud se ha aceptado y en cola, no que se ha ejecutado correctamente.
Cuando la aplicación de servidor está lista para procesar una solicitud, llama a la función lineGetRequest . Esto le permite recibir cualquier información que necesite, como una dirección para marcar. A continuación, procesa la solicitud mediante las funciones TAPI (como lineMakeCall y lineDrop) que, de lo contrario, se usarían para realizar la llamada. La invocación de lineGetRequest quita la solicitud de TAPI y los parámetros de solicitud se copian en un búfer de solicitud asignado a la aplicación. El tamaño y la interpretación del contenido del búfer dependen del modo de solicitud.
El servidor debe asegurarse de que usa los parámetros correctos al ejecutar solicitudes. Al hacerlo, se siguen estos pasos:
- El destinatario de la solicitud recibe primero un mensaje de LINE_REQUEST que le informa de que las solicitudes pueden existir para él en la cola de solicitudes. Esto indica a la aplicación que llame a lineGetRequest y siga llamándola hasta que se agote la cola (si la solicitud es para realizar una llamada nueva) o para quitar una llamada existente. Este mensaje no contiene los parámetros de la solicitud, excepto en el caso de una solicitud para quitar una llamada existente.
- Si la solicitud es realizar una nueva llamada, el servidor de telefonía asistida usa la función lineGetRequest para recuperar la solicitud completa, que incluye los parámetros de la solicitud. El servidor ahora tiene toda la información que necesita, como el número para marcar o la identificación del creador de la solicitud. En primer lugar, el servidor debe asignar la memoria necesaria para almacenar esta información.
- Por último, el servidor ejecuta la solicitud invocando la función o conjunto de funciones TAPI adecuadas.
Si TAPI no puede iniciar una aplicación capaz de servir como destinatario de la solicitud, se produce un error en la llamada de telefonía asistida y devuelve el error TAPIERR_NOREQUESTRECIPIENT.
Notas sobre las operaciones del destinatario de la solicitud
La siguiente información se refiere a los sistemas en los que se procesan las solicitudes de telefonía asistida:
- El registro predeterminado debe enumerar una aplicación de administrador de llamadas en la lista de prioridades de tapiRequestMakeCall. Sería útil, pero no esencial, que la aplicación de administrador de llamadas tenga una opción de menú que permita a los usuarios establecerla en la prioridad más alta.
- Cuando TAPI inicia automáticamente una aplicación de destinatario de telefonía asistida y, si es la única aplicación TAPI en el sistema, esta acción inicializa TAPI. Si la aplicación destinatario de telefonía asistida inicializa y cierra el dispositivo de línea antes de registrarse para solicitudes de telefonía asistida, TAPI también se apaga y se pierde la solicitud de telefonía asistida. Es posible que las solicitudes de telefonía asistida también se pierdan cuando otra aplicación TAPI que se inicia realiza una inicialización y apagado.