Call center et trunk IAX.

Discussion in 'Elastix 2.x' started by Kanard, Aug 10, 2009.

  1. Kanard

    Joined:
    Aug 10, 2009
    Messages:
    20
    Likes Received:
    0
    Bonjour à tous!

    Je cherche à mettre en place le module Call Center sur une architecture comprenant deux serveurs Elastix :
    - Le premier, appelons le "serveur principal", fait tourner l'interface Asterisk, le module call center, le dialer, et le trunk vers le numéro SIP.
    - Sur le deuxième, "serveur secondaire", sont déclarés les téléphones SIP.


    Le problème est le suivant : les agents sont déclarés sur le serveur principal, et les téléphones sur le serveur secondaire. L'interface Call Center a besoin d'extensions pour la connexion des agents, donc je dois déclarer sur le serveur principal des extensions qui renvoient vers les numéros SIP du serveur secondaire.

    Et c'est là que ça coince!

    L'état actuel de mes recherche :
    - Le module Call Center marche très bien en situation mono serveur.
    - J'ai fait mon trunk IAX2 entre les deux serveurs, en mode peer / user. J'ai déclaré un tel SIP (n°300) sur le serveur principal, un autre (n°100) sur le serv secondaire, j'arrive à joindre l'un depuis l'autre et vice versa (en faisant le 5100 et 5300, configuré dans les oubound routes).
    - De même, je peux joindre des numéros externes depuis l'un et l'autre poste, le trunk fonctionne parfaitement.


    Il ne me reste plus qu'à déclarer sur le serveur principal, une extension qui appelle le téléphone sip/100 du serveur secondaire. J'ai essayé en faisant un téléphone appelant le 5100 en mode custom ou iax2, ça ne marche pas, il le considère comme un tel local et ne prend pas le trunk.
    J'ai tenté de jouer avec les Call IDs, SIP alias, DID... Sans y comprendre grand chose j'avoue, et sans résultat. Dans tous les cas, dès que je déclare le téléphone localement, il ne prend plus en compte le dialplan d'outbound routes, et l'appel n'aboutit pas.

    Donc j'en appelle à vos lumières : comment faire pour déclarer des téléphones sip distant pour l'utilisation du module callcenter?

    Merci d'avance pour vos idées!
     
  2. danardf

    Joined:
    Dec 3, 2007
    Messages:
    8,069
    Likes Received:
    12
    Bonjour et bienvenue sur notre Forum Elastix.

    Dans ton trunk IAX2 tu as mis quoi comme context?
     
  3. Kanard

    Joined:
    Aug 10, 2009
    Messages:
    20
    Likes Received:
    0
    from-internal.

    J'avais en effet pensé à changer de context, mais la gestion de ceux ci dans elastix est assez obscure...
     
  4. danardf

    Joined:
    Dec 3, 2007
    Messages:
    8,069
    Likes Received:
    12
    Je n'ai pas essayé ce genre de config personnellement.
    Par contre si ton plan de num interne pour les postes sont 100 pour un site et 300 pour l'autre site, tu n'es pas obligé de faire un préfixe de prise de faisceau (trunk).
    Tu définies dans les routes que si les digits sont 3xx depuis le serveur 1 il faudra prendre le trunk IAX2 vers le serveur 2.

    De plus, si dans tes trunks respectif tu leurs mets context=from-internal, les choses devraient changer.
    De cette manière, tous les appels prenants ce trunk avec le context donc from-internal, seront considérés comme interne et non comme un appel venant d'un opérateur..Etc
    Ce sera différent de from-pstn ou from-trunk ou encore from-sip-external.

    Après, pourquoi pas jouer avec les DID ..Etc quoi que.... :huh:

    Mais il faudra sert s'appliquer au niveau du plan de num (dial plan) pour que les serveurs sachent ou aller ou quoi faire.
     
  5. Kanard

    Joined:
    Aug 10, 2009
    Messages:
    20
    Likes Received:
    0
    Actuellement, les deux trunks sont en contexte from-internal. En effet avec 3XX et 1XX pas besoin de préfixe pour sortir.

    Le problème c'est vraiment de déclarer les téléphones en 1XX sur le serveur principal. Dès que je crée un téléphone avec un numéro 1XX sur celui ci, il n'arrive pas à sortir par le trunk, et le traite comme si c'était un téléphone local.

    Je vais me renseigner sur les DID, mais le problème me semble venir de la configuration même de l'extension sur le serveur principal.
     
  6. danardf

    Joined:
    Dec 3, 2007
    Messages:
    8,069
    Likes Received:
    12
    Oui, ben là c'est logique en effet.
    Si tu déclares une extension sur le serveur 1 il ne sera pas sur le serveur 2.

    Là... je ne voie pas trop comment faire.

    Dans les fichiers queue_*.conf, n'y aurait-il pas des choses à mettre?
    Je ne sais pas.. peut-être que oui.

    Sinon, essayes toute fois de poster ton problème sur le Forum Général (EN).
    Peut-être qu'il va y avoir quelqu'un qui à de l'expérience là dessus. :blush:
     
  7. Kanard

    Joined:
    Aug 10, 2009
    Messages:
    20
    Likes Received:
    0
    Pour moi la méthode simple aurait été de déclarer une extension custom sur le serveur principal, avec comme numéro un numéro du serveur secondaire. Comme ça quand le dialer du CallCenter appelle l'agent sur cette extension custom, ça passe par trunk, comme le dialplan le demande, et ça arrive sur le tel SIP enregistré sur le 2eme serveur.

    Mais pour une raison inconnue, il ne semble pas prendre en compte les outbound routes dans ce cas.
     
  8. danardf

    Joined:
    Dec 3, 2007
    Messages:
    8,069
    Likes Received:
    12
    Ben oui, je suis bien d'accord avec toi. Mais comme dit le proverbe:
    Pourquoi faire simple quand on peut faire compliqué ? :laugh:

    Essayes sinon de tracer en mode CLI> ce qui se passe lors de ton appel.

    Tu devrais avec le context bloquant ou la route à ne pas emprunter.
     
  9. Kanard

    Joined:
    Aug 10, 2009
    Messages:
    20
    Likes Received:
    0
    Je n'étais pas loin de la solution! Le forum anglais m'a mis sur la piste.

    Il fallait en effet faire une extension custom, en toute logique... Et lui indiquer dans le champ Dial "Local/100@outbound-allroutes" (pour appeler le numéro 100 défini sur le 2eme serveur). Bon c'est aussi à peu près logique, mais ça ne s'invente pas ;-)


    Merci pour ton aide danardf !
     
  10. danardf

    Joined:
    Dec 3, 2007
    Messages:
    8,069
    Likes Received:
    12
    Si ça fonctionne c'est cool alors!

    Si tu pouvais (une fois en route et opérationnel), un petit tuto ou une petite Doc sur la manière de configurer ce que tu viens de faire, avec des exemples, ce serait sympatoche pour la communauté Elastix Francophone. ;)

    En tout cas, je te remercie de tes info.
    Et un Karma pour Kanard. ;)
     
  11. Kanard

    Joined:
    Aug 10, 2009
    Messages:
    20
    Likes Received:
    0
    Je me suis enflammé un peu vite, ça fonctionne... De softphone à softphone.

    Au login de la console agent, il y a bien l'extension, mais quand je me log l'interface n'arrive pas à appeler l'extension.

    Il faudrait que je trouve les logs du CallCenter, voir ou cela coince.
     
  12. danardf

    Joined:
    Dec 3, 2007
    Messages:
    8,069
    Likes Received:
    12
    Tout est dans /var/log/asterisk/full ...full.1 ....full.2 ..Etc
     
  13. Kanard

    Joined:
    Aug 10, 2009
    Messages:
    20
    Likes Received:
    0
    Apparemment il n'arrive même pas à ce point la. Dans asterisk je ne vois qu'une connexion / déconnexion de l'admin (en boucle), ça doit bloquer avant.

    Je vais essayer de ruser en déclarant une extension locale et en redirigeant l'appel via une seconde extension, ou en modifiant un fichier _custom... J'y arriverai bien un jour!
     
  14. danardf

    Joined:
    Dec 3, 2007
    Messages:
    8,069
    Likes Received:
    12
    Ok tiens moi au courant.
     
  15. Kanard

    Joined:
    Aug 10, 2009
    Messages:
    20
    Likes Received:
    0
    Je n'y manquerai pas ;) A bientôt, avec une solution!
     
  16. Kanard

    Joined:
    Aug 10, 2009
    Messages:
    20
    Likes Received:
    0
    Après avoir retourné le problème dans tous les sens, il me semble qu'une résolution type "contournement via bidouille d'Asterisk / FreePBX" est impossible.

    En effet, l'appel est fait via un script php qui envoie une commande AGI (en passant par php-agi). Ce script appelle spécifiquement "SIP/extension". J'ai donc commencé à contourner le problème en modifiant le code source d'Elastix pour qu'il appelle Local/extention@outbound-routes au lieu de SIP/extention. Et ça marche!.. A quelques détails près (il appelle bien l'extention mais n'arrive pas à le logguer.

    J'ai du mettre en pause mes investigations pour régler un autre problème bien embêtant : le fait que quand le client raccroche dans une campagne sortante le formulaire est effacé au bout de 4 secondes max et toutes les données sont perdues. Pour le régler, grosses modifications à prévoir dans /var/www/html/modules/agent_console/libs/paloSantoAgentConsole.class.php . Mais ça marche!... Complètement cette fois ci :p L'agent est mis en pause 'HOLD' a la fin de l'appel, son formulaire est conservé et il peut le remplir et le sauvegarder, jusqu'à ce qu'il fasse "reprendre".

    Je me remettrai sur mes histoires de trunk la semaine prochaine.
     
  17. danardf

    Joined:
    Dec 3, 2007
    Messages:
    8,069
    Likes Received:
    12
    Bien... bon travail Kanard.

    Tu veux que je fasse un petit topo sur le Forum général (EN) ou tu veux le faire?
    Ce que tu as fais, est visiblement intéressant dans la mesure ou ça apporte un + au module, tu comprends?

    C'est une fonction du type Warning normalement ce que tu dis là?
    L'agent ne peut pas recevoir de comm sur une durée de n secondes?
     
  18. Kanard

    Joined:
    Aug 10, 2009
    Messages:
    20
    Likes Received:
    0
    Je ferai le compte rendu et je filerai le code dès que ça sera terminé.

    Pour la pause entre deux appels, c'est en fait pour éviter de perdre le formulaire et toutes ses données.

    Actuellement, pour une campagne sortante, à partir du moment ou le client / le téléopérateur raccroche, le formulaire est effacé (dans un délais < 4 secondes). Même si un temps de wrapup a été mis dans la file d'attente, on paume quand même le formulaire.

    En fait dans le script php qui gère tout le module call center (paloSantoAgentConsole.class.php) il y a une fonction qui est appelée toutes les 4 secondes (notificaLlamada). Cette fonction évalue si un appel est en cours. Si c'est le cas, elle génère les formulaires quand on clique sur l'onglet formulaire, de même pour le script et les infos clients. Quand l'appel est terminé (d'une façon ou d'une autre), la fonction vide les onglets formulaire / script / infos client, et remet l'agent en disponibilité (sauf s'il est en pause).

    Pour contourner l'écrasement du formulaire, j'ai créé une variable qui est mis à "off" si le formulaire peut être effacé, ou à "on" s'il doit être conservé. Cette variable est mise à "on" dès qu'un appel est reçu, et mise à "off" dès que l'agent sort de pause.

    Dans le if de la fonction notificaLlamada j'ai rajouté un 3ème cas : si la variable est sur "on", l'agent est mise en pause (via la fonction pausar_llamadas), et le chrono est arrêté. Ainsi quand l'appel est terminé, l'agent se retrouve en pause (pause HOLD, qui n'est pas logguée dans l'interface). Il peut continuer à remplir le formulaire, ou travailler sur un autre site, sans perdre aucune donnée. A la fin il fait "Sauver" sur son formulaire, et peu cliquer sur "Reprendre" pour sortir de sa pause.

    Voilà dans l'esprit, après ya eu pas mal de merdouilles à gérer (au niveau de la génération / sauvegarde du formulaire, du fonctionnement de la pause...), mais au final ça marche bien, et ça rend enfin ce module utilisable en production.
     
  19. danardf

    Joined:
    Dec 3, 2007
    Messages:
    8,069
    Likes Received:
    12
    Ingénieux comme parade.

    A proposer dans le groupe DEV du module Call Center!
     
  20. danardf

    Joined:
    Dec 3, 2007
    Messages:
    8,069
    Likes Received:
    12
    Le nouveau module Call Center est sorti.

    Par contre, ils n'ont pas pris en compte maes traductions une fois de plus.
    Je leur ai montré mon mécontentement. Vraiment c'est le bordel.
    Je ne comprend pas. :blush:

    Les fichiers Call Center sont tous dans le Wiki et de plus, modifiable par tous. De demander de plus. :blink:

    Bref.
    Je vais remonter le problème.
    En attendant, si quelqu'un peu tester le nouveau module et voir ce qu'il cloche.
     

Share This Page