IVM - Kit de développement logiciel

Cette page est celle du kit de développement logiciel (SDK) de l'assistant téléphonique IVM. Elle doit être utilisée par les programmeurs qui souhaitent écrire leurs propres plug-ins ou pour utiliser l'API d'IVM.

Ce SDK est un sujet particulièrement avancé. Pour créer la plupart des systèmes IVR ordinaires, aucune programmation n'est nécessaire. Suivez les instructions du manuel d'IVM, comparez les IVR en exemple et, le cas échéant, utilisez l'un des plug-ins préparés.

Avant de tenter d'écrire du code, nous vous conseillons de vous familiariser avec les éléments suivants :

IVM - Rubriques du kit de développement logiciel


À propos des plug-ins

Les plug-ins peuvent être utilisés pour traiter les informations d'un appelant ou pour fournir des informations à un appel (ou les deux). Des exemples typiques peuvent être l'accès à une base de données, les autorisations de carte bancaire ou la détection de matériel, mais les possibilités sont infinies.

Un grand nombre de plug-ins utiles écrits par nos programmeurs sont disponibles en téléchargement gratuit sur cette page : www.nch.com.au/ivm/plugins.html. Pour plus d'informations sur l'utilisation des plug-ins, veuillez consulter la page Utilisation des plug-ins du manuel d'aide d'IVM (Aide ->Sommaire de l'aide).

Écrire des plug-ins pour IVM

Cette documentation est à l'intention des programmeurs souhaitant développer leurs propres plug-ins pour IVM.

Les plug-ins peuvent être écrits dans n'importe quel langage pouvant rendre une ligne de commande 32 bits basé sur commande exécutable pour Windows. Les exemples ci-dessous sont écrits en C++ et Perl mais Delphi, VB et un certain nombre de langages sont acceptés.

Un plug-in est un fichier exécutable de ligne de commande en mode console. Il s'exécute comme un canal anonyme par IVM à l'ouverture d'un message d'appel sortant.

Les variables d'appels sont transmises au plug-in comme arguments de ligne de commande. Par exemple, si vous créez un plug-in appelé "plugin.exe" vous pouvez paramétrer IVM pour ouvrir "plugin.exe %linenumber% %cid% %variable1% %variable2%".

Lorsqu'un fichier exe est exécuté en tant que plug-in, IVM attend que le plug-in retourne (qu'il se ferme). Le fichier exécutable du plug-in doit revenir à la fin de la lecture du message d'appel sortant. Si vous devez effectuer des tâches prenant plus de temps, votre plug-in doit créer/exécuter un autre processus et quitter.

La valeur de retour peut être constituée de tout nombre de variables envoyées (« imprimées ») par le plug-in à STDOUT dans les paires de données de nom dans le format utilisé par HTTP. Par exemple, "numbervariable=101&textvariable=Space+as+plus". Pour plus d'informations, consulter un ouvrage sur les scripts cgi. Le plus souvent, la valeur de retour la plus utile est le nom du message d'appel sortant suivant devant être lu. Cette variable peut être utilisée comme le nom « Aller au message sortant... ».

Exemple C++
Ce petit plug-in retourne un numéro aléatoire. Il peut parfois être utile si vous souhaitez diffuser des messages d'appels sortants différents aux appelants de manière aléatoire.

Le plug-in a deux options d'arguments. Le premier détermine la plage des valeurs de retour. La valeur par défaut est 10, qui produit des résultats possibles compris entre 0 et 9. Le second est le nom de la variable de retour (par défaut : « 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;
}

  Retour vers le haut

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

  Retour vers le haut

Exemple Visual Basic
Remarque : La fonction GetRandomNumber n'est pas présentée ici.
Public Sub Main()
   Dim StdIO As clsStdIO
   Set StdIO = New clsStdIO
   StdIO.StdOut "rand=" & GetRandomNumber
End Sub

  Retour vers le haut

Exemple PHP
Pour exécuter le plug-in, utilisez :
Fichier exécutable : C:\PHP\php.exe (ou tout emplacement où vous avez installé php - téléchargez-le depuis www.php.net)
Argument 1: -q (empêche l'envoi des en-têtes HTTP)
Argument 2:
Arguments 3+: Arguments à transmettre au script PHP

Pour commencer, un simple script PHP comme celui qui suit doit être utilisé :

<?php

if (argv[1] == 1234)

{

 print NextOGM=CorrectPIN ;

}

else

{

 print NextOGM=IncorrectPIN ;

}


?>

Paramétrez ensuite Argument 3 à %PIN% par exemple (après avoir collecté le code PIN dans cette variable dans un message sortant antérieur) et paramétrez l'option « Aller au message sortant » à %NextOGM%.

  Retour vers le haut

Exemple Java
Il s'agit d'un plug-in similaire à celui utilisé dans C++, mais dans java. Pour utiliser un plug-in java, java doit être le nom de plug-in de la classe compilée du premier argument suivi par d'autres arguments.

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));
 }
}

  Retour vers le haut

Débogage des plug-ins

Si vous avez des problèmes lors des tentatives d'utilisation de votre plug-in :
  • Exécutez le plug-in depuis la ligne de commande et vérifiez qu'il retourne les données comme prévu.
  • Après un échec d'appel avec le simulateur de test d'appel, consultez le journal des appels le plus récent d'IVM. Toutes les données envoyées et retournées par le plug-in sont journalisées dans les journaux des appels les plus récents.

  Retour vers le haut

Services de développement de plug-ins

Si vous ne pouvez pas écrire votre propre plug-in (ou si vous n'avez pas le temps), vous pouvez retenir l'un de nos programmeurs associés pour qu'il le développe pour vous. Les frais commencent autour de 150,00 USD, selon la complexité. Pour demander un devis, veuillez consulter www.nch.com.au/development. Vous pouvez aussi retenir un expert IVM sur la page des connexions des experts d'IVM www.nch.com.au/ivm/fr/experts.html.

  Retour vers le haut

Utilisation de l'API d'IVM

L'API d'IVM est utilisé pour laisser à d'autres programmes contrôler IVM (à la différence d'autres plug-ins (à la différence des plug-ins pour lesquels IVM exécute d'autres programmes).

Il vous faut IVM v 2.30 ou supérieur pour utiliser cet API. Tous les exemples et les démonstrations ci-dessous sont présentés en C++, mais nous espérons que vous n'aurez aucune difficulté à implémenter les mêmes fonctions en utilisant d'autres langages (par exemple, Visual Basic). Les procédures ci-dessous utilisent un certain nombre de fonctions de l'API de Windows (par exemple, FindWindowEx, SendMessage, etc.). Si vous devez en savoir plus sur ces fonctions et sur la manière de les utiliser, référez-vous à la documentation API de Microsoft Windows.

Exécuter IVM
Avant d'appeler toute fonction d'appel présentée ci-dessous, IVM doit être en cours d'exécution. Le moyen le plus facile de procéder est de paramétrer l'exécution automatique d'IVM (voir Paramètres).

Toutefois, si vous souhaitez le lancer depuis votre programme, utilisez WinExec, ShellExecute ou CreateProcess pour ouvrir :
  "C:\Program Files\NCH Swift Sound\IVM\ivm.exe"
Si vous souhaitez l'exécuter de puis la barre d'état système, ajoutez l'argument /logon comme ceci :
  "C:\Program Files\NCH Swift Sound\IVM\ivm.exe" /logon
Si votre programme ne lance pas IVM, vous devrez attendre qu'il crée sa fenêtre avant que FindWindow réussisse (voir ci-dessous).

  Retour vers le haut

Envoyer des commandes à IVM
Les commandes sont envoyées à la fenêtre principale d'IVM. Vous devez d'abord trouver la fenêtre « IVM - Assistant téléphonique  » en utilisant FindWindowEx, puis utiliser ensuite SendMessage pour lui envoyer un message de commande IVM (hex 7fff). Utilisez un code comme ceci :

#define IVMAPI_WINDOWCAPTION "IVM - Assistant téléphonique"

#define WM_IVMAPI_COMMAND 0x7fff

int IVMAPISendCommand(int iIVMCommand, LPARAM ExtraData)
{
  HWND hwndIVM = FindWindowEx(NULL, NULL, NULL, IVMAPI_WINDOWCAPTION);
  if (hwndIVM == NULL) {
    // IVM non exécuté.
    // Essayer d'exécuter IVM 
    // ou produire message d'erreur ici...
    return 0;
  }
  return SendMessage(hwndIVM, WM_IVMAPI_COMMAND, iIVMCommand, ExtraData);
}

La plupart des commandes n'utilisent pas le paramètre ExtraData, nous pouvons donc également définir :

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

Si la commande nécessite une chaîne, vous devez utiliser un objet Windows ATOM pour transmettre la chaîne, comme le montre le code suivant. Il est important de noter que votre code doit supprimer l'ATOM en utilisant GlobalDeleteAtom après que SendMessage soit retourné.

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

  Retour vers le haut

Commandes IVMAPI
À chaque commande correspond un numéro, qui est envoyé à IVM par l'une des fonctions IVMAPISendCommand ci-dessus.

inline int IVMAPIGetVersion() { return IVMAPISendCommandSimple(0); }
// Retourne la version actuelle de l'API, qui est actuellement 1.
// Si 0 est retourné, IVM ou l'API ne sont pas disponibles.
// Si 2 ou plus est retourné, veuillez nous contacter pour une documentation mise à jour.

inline void IVMAPITurnOn() { IVMAPISendCommandSimple(1); }
// Activation d'IVM (pour répondre aux appels).

inline void IVMAPITurnOff() { IVMAPISendCommandSimple(2); }
// Désactivation d'IVM (pour ne pas répondre aux appels).

inline void IVMAPISelectAnswerOGM(const char* szOGMName) 
                { IVMAPISendCommandString(3, szOGMName); }
// Sélectionne le message sortant de réponse par défaut.

inline void IVMAPIAddOutboundNumber(const char* szNumber) 
                 { IVMAPISendCommandString(4, szNumber); }
// Ajoute un autre numéro à appeler à la liste des appels sortants.
// szNumber peut inclure le numéro à appeler
// et des variables supplémentaires à utiliser pendant l'appel.
//    par exemple, 5551234567&msgid=666&customer=999
inline void IVMAPISetGlobalVariable(const char* szVariables) 
                 { IVMAPISendCommandString(5, szVariables); }
// définit les variables IVM Global. Les variables sont codées http au format suivant
// variable=valeur&variable2=valeur2&variable3=valeur3 
//    exemple : site=mainnch&SystemPromptsFolder=c:\defaultIVM

  Retour vers le haut

Modifier les paramètres IVM
Tous les paramètres IVM sont contenus dans le Registre. Exécutez regedit.exe pour afficher les paramètres « bruts ». Pour modifier ces paramètres depuis le programme, utilisez la commande de l'API Windows, RegSetValueEx.

  Retour vers le haut

Ajouter d'autres fonctions à l'API d'IVM
Si vous avez besoin de contrôler d'autres fonctions d'IVM depuis votre programme (qui ne peuvent pas l'être avec un plug-in), vous pouvez nous consulter pour que nous ajoutions la fonctionnalité pour vous. Les frais commencent autour de 300,00 USD, selon la complexité. Pour demander un devis, veuillez consulter www.nch.com.au/development.

  Retour vers le haut

Options de ligne de commande

Les options de ligne de commande sont utilisées pour contrôler l'exécution d'IVM à partir d'un fichier de commandes ou d'une autre application. Les options suivantes sont prises en charge :

-on
active IVM pour commencer à répondre aux appels.

-off
désactive IVM pour cesser de répondre aux appels.

-ogm nommessagesortant
définit le nom du message sortant messagesortant comme message sortant par défaut.

-outbound nnnnnnnn
ajoute le numéro de téléphone nnnnnnn à la liste des appels sortants et commence à composer les numéros de la liste des appels sortants. Veuillez noter que vous devez inclure le numéro de téléphone en guillemets double s'il contient des espaces ou d'autres caractères spéciaux, exemple : -outbound "(01) 555 1234567"

-ogmoutboundanswer nommessagesortant
définit le message sortant qui sera utilisé si un appel sortant obtient une réponse par une personne.

-ogmoutboundmachine nommessagesortant
définit le message sortant qui sera utilisé si un appel sortant obtient une réponse par un répondeur.

-outboundlist nomfichier
remplace la liste des numéros de téléphone des appels sortants par la liste du fichier nomfichier et commence à composer les numéros de la liste. La liste doit avoir le format suivant
numérotéléphone1;numérotéléphone2;numérotéléphone3;numérotéléphone4
exemple : 5551234567;5559876543;5551111111;5552222222;5553333333;(01) 55554444444;(02)5557777777

nomfichier
charge le nom de fichier spécifié comme fichier IVR.

-set variables
définit les variables globales pour les utiliser dans les messages sortants. La chaîne, si elle contient des variables, est codée http et au format
variable=valeur&variable2=valeur2&variable3=valeur3
Veuillez noter que si vous utilisez & pour combiner les variables, vous devez entourer la chaîne en guillemets doubles.
Exemple : -set “site=mainnch&SystemPromptsFolder=c:\defaultIVM”

Exemples :

IVM.exe -ogm OGM1 -on
démarre IVM avec le message sortant OGM1 et commence à répondre immédiatement.

IVM.exe -outbound 5551234567
ajoute le numéro de téléphone 5551234567 à la liste des numéros sortants et commence à composer.

IVM.exe phonesystem.ivr -on
charge le fichier IVR phonesystem.ivr et commence à répondre aux appels à l'aide du message sortant par défaut.

  Retour vers le haut

Autres informations

Si vous avez des problèmes à écrire votre application, veuillez consulter le site www.nch.com.au/support.

Nous entretenons maintenant une liste d'experts IVM sur la nouvelle page IVM - Connexion d'experts www.nch.com.au/ivm/fr/experts.html. Ces experts sont des professionnels de l'informatique qui savent comment programmer IVM et qui peuvent intervenir pour assister des systèmes IVM complexes. Vous pouvez aussi demander à être inclus à la liste si vous êtes l'un de ces professionnels.

Nous proposons également des services de développement logiciel aux sociétés si vous souhaitez que nous nous chargions du développement ou si vous avez besoin de modifications substantielles sur IVM. Les frais commencent autour de 100,00 USD pour une fonction simple, mais peuvent atteindre 10 000 USD et plus pour le développement de la nouvelle version complète d'une application. Demandez à obtenir un devis sur la page www.nch.com.au/development.

Nous pouvons aussi procéder au rebranding d'IVM avec votre logo et vos détails pour une somme modique (voir https://www.nch.com.au/reseller pour plus d'informations).

Vous pouvez distribuer le fichier d'installation d'IVM avec votre logiciel (mais il est rigoureusement interdit, en toute circonstance, de distribuer les clés d'inscription ou de tenter de modifier le système d'inscription). Voir les termes de la licence d'IVM (dans le fichier Aide). Normalement, vos clients achèteraient IVM directement auprès de nous. Nous proposons des termes de licence facilités si vous avez besoin de distribuer des versions enregistrées d'IVM. Veuillez consulter https://www.nch.com.au/reseller sous le titre Licence générale de logiciel.

  Retour vers le haut