• Mise en forme du callerid pour les appels entrants

      Il arrive fréquemment que le numéro d'appelant ne soit pas présenté dans le bon format à votre Asterisk.
      En effet selon le type de ligne, l'opérateur, la provenance de l'appel, le callerid peut être présenté sous différentes formes: 10 chiffres, 9 chiffres, un zéro de trop, préfixe international malgré que l'appel vienne du même pays.
      Ces différences peuvent être gênantes: difficulté de recherche dans les journaux d'appels, multiplication des lignes de dialplan pour gérer les différents formats, etc...

      Ce morceau de dialplan permets d'uniformiser le format du callerid:

      extensions.conf
      Code:
      [appels-entrants]
      exten => _X.,1,noop(appel entrant)
      same =>      n,Gosub(correction-callerid,1,1)
      same =>      n,Dial(SIP/......)
      same =>      n,hangup()
      
      
      [correction-callerid]
      exten => 1,1,noop(Correction du format du callerid)
      
      ; callerid vide
      same  =>   n,GotoIf($[${CALLERID(num)} = ""]?fincorrection)
      
      ; callerid a neuf chiffres (ex: 155779988, le zero est manquant)
      same  =>   n,GotoIf($[${LEN(${CALLERID(num)})} = 9]?neufchiffres)
      
      ; callerid avec le prefixe international (ex: 33155779988)
      same  =>   n,GotoIf($[${CALLERID(num):0:2} = 33]?debut33)
      
      ; callerid avec un zero en trop
      same  =>   n,GotoIf($[$[${LEN(${CALLERID(num)})} = 11 ] & $[${CALLERID(num):0:2} = 00]]?onzechiffresdeuxzero)
      
      ; callerid deja au bon format, ou autre cas non-pris en charge
      same  =>   n,goto(fincorrection)
      
      ; les corrections associees
      same  =>   n(neufchiffres),Set(CALLERID(num)=0${CALLERID(num)})
      same  =>   n(neufchiffres),goto(fincorrection)
      same  =>   n(debut33),Set(CALLERID(num)=0${CALLERID(num):2})
      same  =>   n(debut33),goto(fincorrection)
      same  =>   n(onzechiffresdeuxzero),Set(CALLERID(num)=${CALLERID(num):1})
      same  =>   n(onzechiffresdeuxzero),goto(fincorrection)
      
      
      ; affichage du callerid corrige dans la CLI
      same  =>   n(fincorrection),NoOP(CALLERID->${CALLERID(num)})
      same  =>   n,Return()
      L'intérêt de cette solution réside dans sa conception modulaire et les avantages qui en découlent:
      - facilité à ajouter des nouvelles corrections dans le contexte [correction-callerid]
      - légèreté pour votre dialplan: une simple ligne "gosub..." suffit en début d'appel, pas de redondance de code si vous avez plusieurs contextes entrants.

      A vous de rajouter les formats que vous souhaiteriez uniformiser.

      Florent
      Commentaires 4 Commentaires
      1. Avatar de YBDOMO
        YBDOMO -
        C'est un bon script.Cependant avec callerid vide il faut faire attention
        car par ex le ST2030 de Thomson repond "Got SIP response 400 "Bad Request" back from X.X.X.X"
        il faut peu être forcer callerid vide en faisant
        par ex
        ; callerid vide

        same => n,GotoIf($[${CALLERID(num)} != ""]?Suite)
        same => n,Set(CALLERID(num)=0000000000); ou autre

        ; callerid a neuf chiffres (ex: 155779988, le zero est manquant)
        same => n(Suite),GotoIf($[${LEN(${CALLERID(num)})} = 9]?neufchiffres)

        Je me permets de faire cette remarque car j'ai été confronté à ce probleme sur une install que j'ai faite avec des ST2030 de Thomson.( a moins le firmeware ait été modifié pour resoudre ce probleme)

        Yves
      1. Avatar de Domilo
        Domilo -
        Merci,

        C'est très intéressant pour comprendre comment manipuler certaines variables (je suis débutant Asterisk).

        Mais ce code marche pour la France métropolitaine... Pas pour l'outre mer comme la Nouvelle-Calédonie .
        En N.Calédonie : Code international 687 + Numéro à 6 chiffres local => 9 chiffres.
        C'est alors mal interprété par la fonction...

        C'est surprenant que les intermédiaires ne formate pas rigoureusement les numéros... Dommage.

        @+
        Dom.
      1. Avatar de ffossard
        ffossard -
        La fonction est facilement adaptable, les corrections sont plutôt modulaires, facile d'en rajouter/modifier
      1. Avatar de hb22
        hb22 -
        ; callerid avec le prefixe international (ex: 33155779988)
        same => n,GotoIf($[${CALLERID(num):0:2} = 33]?debut33)
        Ici tu traites pour la france.
        Comment faire pour tous les pays sans mettre une ligne par pays ?
    • A propos d'Asterisk

      Asterisk

      Asterisk est un IPBX open source (logiciel libre) pour Linux originellement créé en 1999 par Mark Spencer, fondateur de la société Digium.

      logo asterisk
    • Downloads populaires

    • Articles récents

    • Utilisateurs actuellement connectésUtilisateurs actuellement connectés

      0 membre(s) et 301 invité(s)

      Le record de connectés est de 2 678, 22/07/2022 à 11h34.

    • Ils nous soutiennent

      logo digium
      logo alter-it
      logo avencall
      logo beronet
      logo celya
      logo cnsi
      logo dolmen
      logo easypyro
      logo eyepea
      logo keyyo
      logo opcom
      logo openip
      logo ovh
      logo qualigaz
      qualistream
      logo voip-asterisk
      logo voxity
      logo yealink