Page 1 sur 2 12 DernièreDernière
Affichage des résultats 1 à 10 sur 15

Discussion: Solution pour alternance trunk "smart"

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Asterisk Fan Avatar de fastm3
    Date d'inscription
    août 2010
    Localisation
    Corbeil Essonnes (91)
    Messages
    1 302
    Downloads
    1
    Uploads
    1

    Solution pour alternance trunk "smart"

    Pas toujours évident de trouver des idées de tutoriel "utiles" et en meme temps ni trop simples , ni trop complexes.
    Le but ici est de décrire une intégration complète d'un AGI un peu "intelligent" avec Freepbx mais ca ne reste qu'un bout de dialplan intégrable avec d'autres solutions comme xivo par exemple.

    Il y a quelques temps, on avait décrit la manière d'alterner différents trunks pour une meme destination. Cela peut etre utile pour ceux disposant de plusieurs lignes avec un certain quota pour utiliser au mieux leur forfait.
    L'approche LCR ( least cost routing ) n'est pas suffisante pour ces cas ou 2 fournisseurs ont des couts identiques. De plus, les forfaits "illimité" sont apparus. Illimité mais pas sans limite...L'illimité n'est valide que pour un certains nombre de numéros.

    Imaginons donc le cas ou on désire gérer au mieux ce type de fournisseurs. Les besoins sont assez simples en fait:
    - Il faut essayer d'utiliser toujours la même ligne illimité pour un même numéro appelé.
    - If faut répartir les appels sortants sur les lignes "illimitées' disponibles afin d'optimiser les usages.

    Avec 10 lignes à 100 numéros illimités, si on gère très mal et en fonction de l'usage. On risque très vite de faire du hors forfait avec pas beaucoup plus de 100 numéros distincts appelés. L'idée est d'optimiser au maximum et automatiquement pour atteindre les 1000 numeros illimités possible sans aucun hors forfait ( dépassement de 100 numéros sur une ligne "illimitée" )


    Je joins un agi "exemple" pour optimiser n lignes limitées à 100 numéros tels que les lignes chez OVH par exemple. Cela pourrait être utiliser également avec des gateways de mobiles ou les opérateurs ont le même type de limitation pour l'illimité.

    J'ai essayé de commenter le code de l'agi en perl qui initialement était fait pour du LCR classique.
    Je l'ai mis en ligne ici : https://github.com/fastm3/distributed-trunk-agi

    Les étapes de l'intégration sont les suivantes:
    1- Copie du contexte [ovh-versfixes-trunks] dans le fichier de conf ( extension_custom.conf pour freepbx ).
    2- Création d'une table mysql qui stockera les données nécessaires. On pourra utiliser la base asterisk deja utilisé par freepbx par exemple.

    Voici le sql à exécuter:
    Code:
    CREATE TABLE IF NOT EXISTS `ovhcalls` (
      `number` bigint(20) unsigned NOT NULL,
      `trunk` int(10) unsigned NOT NULL,
      `lastchanged` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
      PRIMARY KEY  (`number`,`trunk`),
      UNIQUE KEY `numero` (`number`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    On stocke juste l'association numéro/ligne avec un petit timestamp.

    3- mettre a jour dans le script nom de la base/user/password pour l'accés avec vos valeurs.
    my $db_base="asteriskcdrdb";
    my $db_login="asteriskuser";
    my $db_password="????";

    4- donner/indiquer au scripts les numeros de trunks qu'il doit utiliser pour le dial. Les trunks seront juste l'id dans freepbx pour une intégration facile.

    5- Créer un custom trunk qui pourra etre utiliser dans le gui de Freepbx pour les outbounds routes. Le custom trunk aura cette définition: local/$OUTNUM$@ovh-versfixes-trunks
    Voir le précédent article sur les customs trunks avec Freepbx.

    Dorenavant, chaque appel utilisant ce custom trunk "intelligent" utilisera automatiquement la même ligne que précédemment. Le script veillera en même temps a ce que toutes les lignes "illimités" soient uniformément utilisées pour eviter tout hors forfait sur une ligne en particulier. Tout est resetté tous les mois, il n'y a donc pas de maintenance particulière à faire.

    Avant de le "brancher" en prod , on pourra tester l'agi en ligne de commande de cette manière:
    Code:
    /var/lib/asterisk/agi-bin# ./ovh-versfixes-trunks.pl test 0102030405
    On doit avoir en retour les numéros de trunks dans l'ordre le plus optimisé. On pourra vérifier qu'un même numéro retourne par exemple toujours le même trunk en position 1. Les positions 2 et 3 sont dans le cas ou le "meilleur" trunk est déjà occupé.


    Ce script est utilisé en prod depuis de nombreuses années. Il est fonctionnel mais il nécessite d'avoir quelques connaissances pour son installation. ;-)

    Bon tests.
    Francois.
    Dernière modification par fastm3 ; 25/07/2014 à 18h11.

  2. #2
    Membre Association
    Date d'inscription
    août 2010
    Localisation
    région parisienne
    Messages
    386
    Downloads
    0
    Uploads
    0
    Très joli post!
    Un tuto effectivement intéressant, pas trop compliqué mais qui aurait demandé pas mal de travail pour mettre la même chose en place.
    Pour ma part je n'en ai pas l'utilité mais c'est une très belle contribution.
    Si d'autres se sentent de faire des contributions de ce niveau, ce serai top!

  3. #3
    Membre Junior
    Date d'inscription
    avril 2015
    Messages
    7
    Downloads
    0
    Uploads
    0

    Intégrable avec XIVO ?

    La première fois que j'ai vu ce post je me suis dit "YES !, Voila une approche intelligente pour optimiser mes abonnements". Du très bon boulot!

    J'ai essayé de suivre les conseils afin de l'intégrer sur XIVO:
    - En premier, il a fallu modifier un peu le code de l'AGI car XIVO utilise PostgreSQL par défaut. Il faut modifier la structure de la base, installer le module PostgreSQL DBD driver, rajouter Asterisk::AGI et Data :: Dump qui ne sont pas utilisé par XIVO ... après avoir modifié le code Perl et testé en console: OUF, il marche comme souhaité.

    Maintenant, j'ai des doutes qu'il marche une fois lié avec mon installation, notamment concernant les id des trunks. Sous FreePBX, il est indiqué qu'il faut récupérer les id dans l'interface, section trunks (si url finie par OUT_4 , l'id est 4).Sous XIVO, j'ai bien un id pour mes trunk mais fonctionnera t'il de la même façon ?

    - Je me retrouve surtout coincé avec la configuration du contexte [ovh-versfixes-trunks] et le custom trunk:
    Pour le contexte, j'imagine 2 possibilités; éditer le fichier /etc/asterisk/extensions_extra.d/ovh-versfixes-trunks.conf en conservant les directives du tutoriel (mais j'ai pas l'impression que "dialout-trunk" soit disponible sous XIVO)... ou éditer directement depuis l'interface WEB de XIVO, en utilisant le menu des Appels sortants.
    Pour le custom trunk, même galère. Il y a bien une définition "personnalisée" des trunks (Interconnexion personalisée) mais la documentation officielle XIVO est limitée à ce sujet.

    Bref, si quelqu'un à déjà intégrée cette solution sur XIVO, PLEASE PLEASE, partagez votre expérience!
    Si vous avez le moindre conseil à donner, n'hésitez pas, je rapporterai les résultats au mieux de mes faibles compétences en la matière.

    Dans tous les cas, Merci "fastm3" d'avoir publié ce tuto !

  4. #4
    Asterisk Fan Avatar de fastm3
    Date d'inscription
    août 2010
    Localisation
    Corbeil Essonnes (91)
    Messages
    1 302
    Downloads
    1
    Uploads
    1
    Au moins , tu es motivé. Ca donne forcement plus envie de t'aider. Et tu as deja fait pas mal de chose.
    Je n'ai pas le temps de remonter un xivo et je suis probablement encore moins a l'aise sur celui-ci que toi.
    Je pense que tu as la bonne approche. Voila ce a quoi je pense meme si pas testé.

    Le premier "probleme" est de balancer le dial vers notre "smart" trunk avec xivo.
    Les customs trunks de Freepbx ne sont pas magiques, il faut juste regarder le dialplan généré. Avec Xivo il faut faire regarder dans le cli. Avec Freepbx , c'est dans les fichiers.

    En fait le custom trunk de freepbx dans ce cas , c'est juste un dial de local/<EXTEN>@ovh-versfixes-trunks

    Donc avec xivo, les custom interconnections devraient pouvoir le faire ( d'apres la doc , pas testé )
    Interface , tu mets local et suffixe @ovh-versfixes-trunks. Ca devrait le faire.
    On prends la methode des routes de xivo et on redirige vers cette interconnexion les appels 0XXXXXXXXX ( les fixes )

    La on arrive a se retrouver avec l'id du trunk ( interconnexion qu'on va reellement utilisé ) en fin du contexte ovh-versfixes-trunks
    Ensuite , il faut donc juste lancer le dial sur l'interconnexion qu'on aura selectionnée.

    Avec FreePbx, je connais la macro dialout-trunk qui a besoin de l'id, c'est plus sympa de reutiliser les trunks definis dans 'interface graphique meme si on pourrait ecrire en direct le dial.
    Je suis sur qu'il doit y avoir une macro ou subroutine qui fait ca dans xivo. Faut juste la trouver. Si tu as un xivo , en examinant le dialplan sur une de tes routes, tu devrais trouver je pense.
    Note que tu peux aussi directement lancer le dial dans l'agi plutot que de setter une variable et faire ca dans le dialplan si cela est plus simple par exemple de mettre tout en dur.
    Un peu moins "propre" neanmoins.
    Curieusement , je n'ai trouver aucun article associant LCR et xivo pouvant aider, ca serait pas mal d'avoir ce tuto complet aussi sur xivo.

    Bref , il te manque a priori juste comment refaire le dial d'une interconnection identifiée/crée dans le gui xivo dans un dialplan externe/ecrit par toi à xivo. ( equivalent de la macro dialout-trunk de freepbx ).
    Quuuuiiiiinnnnnntaaaaanaaaaaa......
    Francois.

  5. #5
    Membre Junior
    Date d'inscription
    avril 2015
    Messages
    7
    Downloads
    0
    Uploads
    0
    Hey hey hey! Merci infiniment fastm3!

    Plus d'excuse alors ! Je ressors mon petit XIVO ce Week end et j'essaye toutes ces pistes pour trouver une solution.
    J'avoue avoir craqué, un peu, et essayé une install de FreePBX... juste pour voir le script fonctionner!

    Et oui, si Quintana traîne par ci et surtout par là, je suis ouvert à toute sagesse d'un Guru de XIVO.

    Merci pour toutes ces précisions. Je ferai remonter la démarche (si je la trouve). Cela pourra certainement profiter à quelqu'un...

  6. #6
    Membre Association Avatar de quintana
    Date d'inscription
    août 2010
    Localisation
    Québec
    Messages
    1 084
    Downloads
    0
    Uploads
    0
    Salut,

    Ok je vais essayer de tester la semaine prochaine et je vous ferez un retour de comment faire.

    ++
    Découvrez Wazo sous licence GPLv3 et accessible pour tous : http://www.wazo.community
    Blog Wazo : http://blog.wazo.community
    Wazo est un fork de XiVO.
    Suivez moi sur Twitter !

  7. #7
    Membre Junior
    Date d'inscription
    avril 2015
    Messages
    7
    Downloads
    0
    Uploads
    0
    C'est la "magie du Libre" et des passionnés de leur art !

    Question posée il y a 2 jours, et fastm3, son auteur, vient à mon secours dans l'instant ! Et voici que "quintana", Guru ès XIVO, accours également !.

    Si un jour j'erre dans les ténèbres, nul besoin d'appeler mon maître, je vous appelle direct les gars (désolé pour la familiarité).

    J'espère pouvoir apporter ma petite contribution.
    Quintana, puis je te contacter sur le #xivo (IRC) ou mp pour t'envoyer (ou discuter) le script modifié de fastm3 pour coller à postgreeSQL ?

    ++ Merci ++

  8. #8
    Membre Association Avatar de quintana
    Date d'inscription
    août 2010
    Localisation
    Québec
    Messages
    1 084
    Downloads
    0
    Uploads
    0
    Salut,

    Oui avec plaisir, sur freenode #xivo, par contre j'y suis pas en permanence ;-)
    Mais au pire y en a aussi qui pourront te répondre ou alors ils me diront que tu me cherches.

    ++
    Découvrez Wazo sous licence GPLv3 et accessible pour tous : http://www.wazo.community
    Blog Wazo : http://blog.wazo.community
    Wazo est un fork de XiVO.
    Suivez moi sur Twitter !

  9. #9
    Membre Junior
    Date d'inscription
    novembre 2015
    Messages
    8
    Downloads
    0
    Uploads
    0
    Bonjour,
    avec une ligne analogique FT, une box SFR et une box OVH, ce tuto m’intéresse également pour choisir les forfaits dispos.
    C'est finalement envisageable cette utilisation sous Xivo ?
    Cordialement,
    David.

  10. #10
    Membre Junior
    Date d'inscription
    avril 2015
    Messages
    7
    Downloads
    0
    Uploads
    0
    Salut Dav57,

    J'ai du abandonner ce projet dans les derniers mois donc je n'ai pas plus avancé...Je me suis épuisé à jongler entre l'interface graphique de XIVO et le bon vieux code ... sans succès.

    Je me suis libéré un peu de temps cette semaine pour m'y replonger dedans. Je ferai un retour ici.

    Le mieux pour nous aiguiller serait le maître Quintana ! Il est tellement sollicité qu'il faudrait lancer un crow funding pour demander son clonage

    Help Quintana !

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •