Kit de desarrollo de software IVM

Esta es la página del kit de desarrollo de software (SDK) de IVM, el contestador telefónico automático. Debería ser usado por programadores quienes desean escribir sus propios complementos o usar el API de IVM.

Este tema del SDK es de carácter avanzado. Para crear los sistemas IVR más comunes, no debería necesitar de ningún tipo de programación. Siga las instrucciones en el manual de IVM, compare los ejemplos de IVR y, de ser necesario, use uno de los complementos listos.

Antes de intentar la escritura de un código, debería familiarizarse con:

Temas del kit de desarrollo de software IVM


Acerca de los complementos

Los complementos IVM pueden ser usados para procesar información de una llamada recibida o para proporcionar información a una llamada (o ambos). Los ejemplos típicos son acceso a base de datos, autorización de tarjetas de crédito o detección de hardware pero existe un sinnúmero de posibilidades.

Muchos complementos útiles que han sido creados por nuestros programadores están disponibles para ser descargados gratis en www.nch.com.au/ivm/es/plugins.html. Para más información sobre el uso de los complementos, consulte el manual de ayuda de IVM usando la página de complementos (ayuda->contenidos de ayuda).

Escribir complementos IVM

Esta documentación está dirigida a los programadores que deseen desarrollar sus propios complementos para IVM.

Los complementos pueden ser escritos en cualquier lenguaje que pueda hacer una línea de comandos en consola de 32 bits ejecutable para Windows. Los ejemplos de abajo están escritos en C++ y Perl pero Delphi, VB y muchos otros lenguajes pueden ser adecuados.

Un complemento es un ejecutable de línea de comandos en modo de consola. Se ejecuta como una canal anónimo por IVM cuando se abre un mensaje saliente.

Las variables de llamada se pasan a los complementos como argumentos de línea de comandos. Por ejemplo, si crea un complemento llamado "plugin.exe" puede establecer que IVM abra "plugin.exe %linenumber% %cid% %variable1% %variable2%".

Cuando se ejecuta un exe como un complemento, IVM espera que el complemento retorne (salga). El ejecutable del complemento debería volver cuando el mensaje saliente haya terminado de reproducirse. Si se deben de realizar más tareas que requieran más tiempo, su complemento debe crear/ejecutar otro proceso y salir.

El valor devuelto puede ser cualquier número de variables que son enviadas ("printed") por el complemento a STDOUT en pares de datos de nombre en el formato usado por HTTP. Por ejemplo, "numbervariable=101&textvariable=Space+as+plus". Para más información, consulte los libros sobre secuencia de comandos cgi. Generalmente, el valor devuelto más útil es el nombre del mensaje saliente que debería reproducirse a continuación. Esta variable puede ser usada como el nombre del "ir a MS..."

Ejemplos usando C++
Este pequeño complemento devuelve un número al azar. Puede ser útil si desea que se reproduzcan distintos mensajes salientes a las llamadas entrantes de manera aleatoria.

El complemento tiene dos argumentos opcionales. El primero determina el rango de los valores devueltos. El valor predeterminado es 10 que ofrece los resultados posibles de 0 a 9. El segundo es el nombre de la variable devuelta (predeterminado "rand").

#include <stdlib.h>
#include <iostream>

int main(int argc, char *argv[], char *[])
{
 cout << ((argc > 2) ? argv[2] : "rand");
 cout << "=";
 int RandomModulus = (argc > 1) ? atoi(argv[1]) : 10;
 randomize();
 cout << rand() % RandomModulus;
}

  Volver al principio

Ejemplos usando Perl
print @ARGV > 1 ? $ARGV[1] : "rand";
print  "=";
$RandomModulus = (@ARGV > 0) ? int($ARGV[0]) : 10;
print (int(rand($RandomModulus)));

  Volver al principio

Ejemplos usando Visual Basic
Nota: No se muestra la función GetRandomNumber aquí.
Public Sub Main()
   Dim StdIO As clsStdIO
   Set StdIO = New clsStdIO
   StdIO.StdOut "rand=" & GetRandomNumber
End Sub

  Volver al principio

Ejemplos usando PHP
Para ejecutar el complemento use:
Ejecutable: C:\PHP\php.exe (o donde sea que instaló php - descargar desde www.php.net)
Argumento 1: -q (evita el envío de encabezados HTTP )
Argumento 2:
Argumentos 3+: Argumentos para pasar a una secuencia de comandos PHP

Para comenzar, se puede usar una secuencia de comandos PHP simple como el siguiente:

<?php

if (argv[1] == 1234)

{

 print NextOGM=CorrectPIN ;

}

else

{

 print NextOGM=IncorrectPIN ;

}


?>

Luego establezca Argumento 3 a %PIN% por ejemplo (habiendo recolectado el PIN en esta variable en un mensaje saliente anterior) y establezca la opción para ir a MS& a %NextOGM%.

  Volver al principio

Ejemplos usando Java
Este es un complemento similar al de C++ pero en java. Para usar un complemento java, java debe ser el nombre del complemento que la clase de compilación el primer argumento seguido por otros argumentos.

public class RandNumGen {
  public static void main(String[] args) {
   Calendar cal = Calendar.getInstance(java.util.TimeZone.getDefault());
   Random rand = new Random();
   rand.setSeed(cal.getTimeInMillis());    
   int numberOfOptions = Integer.parseInt(args[0])+1;
   System.out.print("rand=" + rand.nextInt(numberOfOptions));
 }
}

  Volver al principio

Depuración de complementos

Si tiene problemas al intentar el uso de este complemento:
  • Ejecute el complemento desde la línea de comandos y verifique que devuelve los datos como se necesitan.
  • Después de una llamada fallida con el simulador de prueba de llamadas, ver el registro de las llamadas más recientes desde IVM. Todos los datos enviados y devueltos desde el complemento se registran en el registro de las llamadas más recientes.

  Volver al principio

Servicios de desarrollo de complementos

Si no puede escribir sus propio complemento (o no tiene tiempo), puede consultar uno de nuestros programadores asociados para que lo desarrollen por usted. Dependiendo de la complejidad, esto puede costar alrededor de $150 dólares estadounidenses. Para solicitar un presupuesto, visite www.nch.com.au/development/es. Si lo prefiere, puede consultar a un experto en IVM desde la conexión con expertos IVM www.nch.com.au/ivm/es/experts.html.

  Volver al principio

Usar el API de IVM

La API de IVM es usada para permitir que otros programas controlen IVM ( a diferencia de los complementos donde IVM ejecuta otros programas).

Necesita IVM versión 2,30 o superior para usar esta API. Todos los ejemplos y demostraciones de abajo se muestran en C++ pero esperamos que no tenga dificultades implementando las mismas funciones usando otros lenguajes (por ejemplo, Visual Basic). Los procedimientos a continuación usan un número de funciones API de Windows (p. ej., FindWindowEx, SendMessage etc.). Si necesita saber más sobre estas funciones y cómo usarlas, consulte la documentación de API de Microsoft Windows.

Ejecutar IVM
Antes que cualquier función de llamada pueda realizarse, IVM debe estar ejecutándose. La manera más fácil de hacerlo es establecer que IVM se ejecute automáticamente (vea 'configuraciones').

Sin embargo, si por alguna razón necesita abrirlo desde su programa use WinExec, ShellExecute o CreateProcess para abrir:
  "C:\Archivos de programa\NCH Swift Sound\IVM\ivm.exe"
Si desea que se ejecute en la bandeja de la barra de tareas añada el argumento /inicio de sesión así:
  "C:\Archivos de programa\NCH Swift Sound\IVM\ivm.exe"
Si su programa no abre IVM, necesita esperar que este cree su ventana antes que FindWindow tenga éxito (vea abajo).

  Volver al principio

Envío de comandos a IVM
Los comandos son enviados a la ventana principal de IVM. Primero necesita encontrar la ventana "IVM, contestador automático" usando FindWindowEx y luego usar SendMessage para enviarle un mensaje de comando de IVM (hex 7fff). Use un código como este:

#define IVMAPI_WINDOWCAPTION "IVM Answering Attendant"

#define WM_IVMAPI_COMMAND 0x7fff

int IVMAPISendCommand(int iIVMCommand, LPARAM ExtraData)
{
  HWND hwndIVM = FindWindowEx(NULL, NULL, NULL, IVMAPI_WINDOWCAPTION);
  if (hwndIVM == NULL) {
    // IVM not running.
    // Either attempt to run IVM 
    // or spit out error message here...
    return 0;
  }
  return SendMessage(hwndIVM, WM_IVMAPI_COMMAND, iIVMCommand, ExtraData);
}

La mayoría de los comandos no usan parámetos ExtraData, así que también podemos definir:

inline int IVMAPISendCommandSimple(int iIVMCommand) 
             { return IVMAPISendCommand(iIVMCommand, 0); }

Si el comando requiere de una cadena, debe usar un objeto Windows ATOM para pasar la cadena como se muestra en el siguiente código. Es importante resaltar que su código debe eliminar el ATOM usando GlobalDeleteAtom después que SendMessage vuelve.

int IVMAPISendCommandString(int iIVMCommand, const char* szStringToSend)
{
  ATOM atomExtraInfo = GlobalAddAtom(szStringToSend);
  int iReturnValue = IVMAPISendCommand(iIVMCommand, (LPARAM)atomExtraInfo);
  GlobalDeleteAtom(atomExtraInfo);
  return iReturnValue;
}

  Volver al principio

Comandos IVMAPI
Cada comando tiene un número que es enviado a IVM usando uno de las funciones IVMAPISendCommand anteriores.

inline int IVMAPIGetVersion() { return IVMAPISendCommandSimple(0); }
// Devuelve la versión API actual que actualmente es 1.
// Si devuelve 0 el IVM o API no está disponible.
// Si devuelve 2 o más contáctenos por una documentación más actualizada.

inline void IVMAPITurnOn() { IVMAPISendCommandSimple(1); }
// Activa IVM (para que responda llamdas).

inline void IVMAPITurnOff() { IVMAPISendCommandSimple(2); }
// Desactiva IVM (para que no responda llamadas).

inline void IVMAPISelectAnswerOGM(const char* szOGMName) 
                { IVMAPISendCommandString(3, szOGMName); }
// Selecciona la respuesta actual de MS predeterminada.

inline void IVMAPIAddOutboundNumber(const char* szNumber) 
                 { IVMAPISendCommandString(4, szNumber); }
// Añade otro número a llamar en la lista de llamadas salientes.
// szNumber puede incluir el número a llamar
// y variables adicionales para usar durante la llamada.
//    p. ej., 5551234567&msgid=666&customer=999
inline void IVMAPISetGlobalVariable(const char* szVariables) 
                 { IVMAPISendCommandString(5, szVariables); }
// Establece las variables globales de IVM. Las variables están codificadas en el formato
// variable=value&variable2=value2&variable3=value3 
//    p. ej., site=mainnch&SystemPromptsFolder=c:\defaultIVM

  Volver al principio

Cambiar configuraciones de IVM
Todas las configuraciones IVM están contenidas en el registro. Ejecute regedit.exe para ver las configuraciones 'sin procesar'. Para cambiar estas configuraciones desde dentro de su programa use el comando API de Windows RegSetValueEx.

  Volver al principio

Añadiendo otras funciones al API de IVM
Si necesita tener control de otras funciones de IVM desde su programa (que no se puede hacer sin un complemento), puede consultarnos para añadir la funcionalidad que necesita. Dependiendo de la complejidad, esto puede costar alrededor de $300 dólares estadounidenses. Para solicitar un presupuesto, visite www.nch.com.au/development/es.

  Volver al principio

Opciones de la línea de comandos

Las opciones de la línea de comandos son usadas para controlar la ejecución de IVM desde un archivo por lotes u otra aplicación. Son admitidas las siguientes opciones:

-on
enciende IVM para que comience a responder llamadas.

-off
detiene IVM para que no responda llamadas.

-ogm ogmname
establece el mensajes saliente llamado ogmname como el MS predeterminado.

-outbound nnnnnnnn
añade el número de teléfono nnnnnnn a la lista de las llamadas de salientes y comienza a marcar la lista de llamadas salientes. Tenga en cuenta que tal vez necesite colocar el número de teléfono entre comillas dobles si contiene espacios o caracteres especiales, por ejemplo -outbound "(01) 555 1234567"

-ogmoutboundanswer ogmname
establece el MS que será usado si una llamada saliente es contestada por una persona.

-ogmoutboundmachine ogmname
establece el MS que será usado si una llamada saliente es contestada por un contestador automático.

-outboundlist filename
reemplaza la lista de números telefónicos de las llamadas salientes con la lista en el nombre del archivo y comienza a marcar la lista. La lista debería estar en el formato
numerotelefono1;numerotelefono2;numerotelefono3;numerotelefono4
ejemplo: 5551234567;5559876543;5551111111;5552222222;5553333333;(01) 55554444444;(02)5557777777

filename
carga el nombre especificado como un archivo IVR.

-set variables
establece variables globales para su uso en los MS. La cadena si las variables están codificadas http y en el formato
variable=valor&variable2=valor2&variable3=valor3
Tenga en cuenta que si usa & para combinar variables debe encerrar la cadena entre comillas.
ejemplo: -set “site=mainnch&SystemPromptsFolder=c:\defaultIVM”

Ejemplos:

IVM.exe -ogm OGM1 -on
iniciará IVM como el OGM1 (mensaje saliente 1) y empezará a responder inmediatamente.

IVM.exe -outbound 5551234567
añadirá el número de teléfono 5551234567 a la lista de números salientes y comenzará a marcar.

IVM.exe phonesystem.ivr -on
cargará el archivo de IVR phonesystem.ivr y comenzará a responder llamadas usando el mensaje saliente predeterminado.

  Volver al principio

Otra información

Si tiene problemas para escribir una aplicación, visite www.nch.com.au/support/es.

Ahora contamos con una lista de expertos en IVM en la nueva conexión con expertos de IVM www.nch.com.au/ivm/es/experts.html. Estos son profesionales de la informática quienes conocen cómo programar IVM y pueden ser consultados para que lo ayuden a configurar el sistema IVM complejo. Igualmente puede solicitar que sea añadido a la lista si es uno de esos profesionales.

También ofrecemos servicios de desarrollo de software corporativo, si desea que lo hagamos o si necesita cambios más sustanciales en IVM. Los precios van desde $100 dólares estadounidenses por una función simple pero se pueden ver incrementados hasta los $10,000 o más por el desarrollo de una nueva versión completa de la aplicación. Solicite un presupuesto desde www.nch.com.au/development/es.

También podemos personalizar y posicionar su marca en IVM con su logotipo e información por un pequeño cargo adicional (visite https://www.nch.com.au/reseller/es para más información).

Puede distribuir el archivo de instalación de IVM con su software (pero no puede, bajo ninguna circunstancia, distribuir las claves de registro o tratar de perjudicar el sistema de registro). Consulte las condiciones de licencia de IVM (en el archivo de ayuda). Generalmente sus clientes comprarían IVM directamente a través de nosotros. Igualmente, proporcionamos fáciles condiciones de licencia si necesita distribuir versiones registradas de IVM. Visite https://www.nch.com.au/reseller/es bajo el título de licencia de software.

  Volver al principio