Gestion des messages vocaux d’information dans Asterisk et installation de cette Mise à jour

Oussama Hammami, 2010-07-19

Switzernet

 

 

 

Gestion des messages vocaux d’information dans Asterisk. 1

H323-return-code. 1

Le channel-variable ${HANGUPCAUSE} 2

Le channel-variable ${DIALSTATUS} 5

Extensions.conf 5

Personnaliser les messages vocaux d’Asterisk. 14

Enregistrement des clients sur Asterisk. 15

PortaSip. 15

Asterisk. 17

Mise en œuvre du Patch d’Astrad. 17

Installation. 17

Configurer Log Rotate pour le log du script Liste-Asterisk.pl 19

Vérification de fonctionnement du Patch : 19

Référence. 21

 

Gestion des messages vocaux d’information dans Asterisk

H323-return-code

Le serveur RADIUS doit utiliser le H323-return-code pour fournir la raison pour laquelle l'autorisation à été rejeté. Cette VSA (Very Small Application) doit être présent dans tous les serveurs d'authentification RADIUS y compris PortaBilling. Le tableau ci-dessous donne la liste des valeurs valides H323-return-code, leur description, le prompt à jouer et l'action à exécuter par l’Asterisk.

 

Return Code

Description

Prompt Played

Action

Asterisk Prompt

0

Authorization succeeded

Service dependent prompt

Continue the call

free-calls or beep

1

Invalid account

Invalid

Retry one more time

invalid_account

2

Invalid PIN

Invalid

Retry one more time

wrong_passwd

3

Account in use

Account In Use

Hang up

in_use

4

Zero balance

Zero Balance

Hang up

zero_balance

5

Card Expired

Account Expired

Hang up

account_expired

6

Credit limit in post-paid accounts

Credit Limit

Hang up

credit_limit

7

User deny

Account blocked

Hang up

user_denied

8

Service not available

Technical Problem

Hang up

not_avail

9

Destination number blocked

Destination block

Hang up

no-route-exists-to-dest

10

Number of retries exceeded

Goodbye

Hang up

retries

11

Invalid RADIUS argument

Technical Problem

Hang up

cannot-complete-temp-error

12

Insufficient balance

Insufficient Fund

Hang up

insufficient_balance

13

Toll-free call

No prompts

Continue the Call

cannot-complete-temp-error

14

Invalid card number

Invalid

Hang up

cannot-complete-temp-error

21

Invalid destination number

Invalid

Hang up

cannot-complete-temp-error

95,98,99

Database related errors

Technical Problem

Hang up

cannot-complete-temp-error

101~105

ANI related errors

Technical Problem

Hang up

cannot-complete-temp-error

111~115

Account related errors

Technical Problem

Hang up

cannot-complete-temp-error

< 0

Invalid return code

Technical Problem

Hang up

cannot-complete-temp-error

Absent

Missing return code

Technical Problem

Hang up

cannot-complete-temp-error

Le channel-variable ${HANGUPCAUSE}

Les causes de raccrochage d’Asterisk sont livrés par le dialplan dans le channel-variable  ${HANGUPCAUSE} après l'exécution du la commande "dial" dans extensions.conf.

En SIP, nous avons une table de conversion qui converti les codes de retour SIP et Q.931 dans les deux sens. Il s'agit d'amélioration de la compatibilité de SIP/ISDN.

Ci dessous les codes actuels disponible dans l’Asterisk basés sur la spécification Q.850/Q.931:

 

ISUP Cause value

SIP response

1

unallocated number

404

Not Found

2

no route to network

404

Not found

3

no route to destination

404

Not found

16

normal call clearing

----

BYE or CANCEL

17

user busy

486

Busy here

18

no user responding

408

Request Timeout

19

no answer from the user

480

Temporarily unavailable

20

subscriber absent

480

Temporarily unavailable

21

call rejected

403

Forbidden

22

number changed (w/o diagnostic)

410

Gone

22

number changed (w/ diagnostic)

301

Moved Permanently

23

redirection to new destination

410

Gone

26

non-selected user clearing

404

Not Found

27

destination out of order

502

Bad Gateway

28

address incomplete

484

Address incomplete

29

facility rejected

501

Not implemented

31

normal unspecified

480

Temporarily unavailable

34

no circuit available

503

Service unavailable

38

network out of order

503

Service unavailable

41

temporary failure

503

Service unavailable

42

switching equipment congestion

503

Service unavailable

47

resource unavailable

503

Service unavailable

55

incoming calls barred within CUG

403

Forbidden

57

bearer capability not authorized

403

Forbidden

58

bearer capability not presently available

503

Service unavailable

65

bearer capability not implemented

488

Not Acceptable Here

70

only restricted digital avail

488

Not Acceptable Here

79

service or option not implemented

501

Not implemented

87

user not member of CUG

403

Forbidden

88

incompatible destination

503

Service unavailable

10

2 recovery of timer expiry

504

Gateway timeout

11

1 protocol error

500

Server internal error

12

7 interworking unspecified

500

Server internal error

 

Idem à H323, il ya des cas où un protocole d'initiation de session (SIP) d'appel peut échouer en raison d'un événement de défaillance interne.

La réponse d’Asterisk doit être analogue à la Leg IP (H.323)

 

Q.931 Cause Code

Description

SIP Event

Description

Asterisk Prompt

0

Uninitialized.

500

Internal server error.

----

1

Unassigned number.

410

Gone.

Not-Found

2

No route to the transit network.

500

Internal server error.

----

3

No route to the destination.

404

Not found.

Not-Found

4

Send information tone.

500

Internal server error.

----

5

Misdialed trunk prefix.

500

Internal server error.

----

6

Unacceptable channel.

500

Internal server error.

----

7

Call awarded.

500

Internal server error.

----

8

Preemption.

500

Internal server error.

----

9

Preemption reserved.

500

Internal server error.

----

16

Normal.

BYE

Bye.

----

17

Busy.

486

Busy here.

----

18

No response from the user.

480

Temporarily unavailable.

----

19

No answer from the user.

480

Temporarily unavailable.

----

20

Subscriber is absent.

500

Internal server error.

----

21

Call rejected.

603

Decline.

----

22

Number has changed.

480

Temporarily unavailable.

----

26

Selected user is clearing.

500

Internal server error.

----

27

Destination is out of order.

404

Not found.

Not-Found

28

Invalid number.

484

Address incomplete.

ISUP28

29

Facility rejected.

501

Not implemented.

----

30

Response to status inquiry.

500

Internal server error.

----

31

Normal unspecified.

404

Not found.

Not-Found

34

No circuit available.

503

Service unavailable.

all-outgoing-lines-unavailable

35

Requested VPCI VCI is not available.

500

Internal server error.

----

36

VPCI VCI assignment failure.

500

Internal server error.

----

37

Cell rate is not available.

500

Internal server error.

----

38

Network is out of order.

503

Service unavailable.

all-outgoing-lines-unavailable

39

Permanent frame mode is out of service.

500

Internal server error.

----

40

Permanent frame mode is operational.

500

Internal server error.

----

41

Temporary failure.

503

Service unavailable.

all-outgoing-lines-unavailable

42

Switch is congested.

503

Service unavailable.

all-outgoing-lines-unavailable

43

Access information has been discarded.

500

Internal server error.

----

44

No required circuit.

503

Service unavailable.

----

45

No VPCI VCI is available.

500

Internal server error.

----

46

Precedence call blocked.

500

Internal server error.

----

47

No resource available.

503

Service unavailable.

all-outgoing-lines-unavailable

48

DSP error.

500

Internal server error.

----

49

QoS is not available.

500

Internal server error.

----

50

Facility is not subscribed.

500

Internal server error.

----

53

Outgoing calls barred.

500

Internal server error.

----

55

Incoming calls barred.

603

Decline.

----

57

Bearer capability is not authorized.

501

Not implemented.

----

58

Bearer capability is not available.

501

Not implemented.

----

62

Inconsistency in the information and class.

500

Internal server error.

----

63

Service or option not available.

503

Service unavailable.

----

65

Bearer capability is not implemented.

501

Not implemented.

----

66

Change type is not implemented.

500

Internal server error.

----

69

Facility is not implemented.

500

Internal server error.

----

70

Restricted digital information only.

500

Internal server error.

----

79

Service is not implemented.

501

Not implemented.

----

81

Invalid call reference value.

500

Internal server error.

----

82

Channel does not exist.

500

Internal server error.

----

83

Call exists and call ID in use.

500

Internal server error.

----

84

Call ID in use.

500

Internal server error.

----

85

No call suspended.

500

Internal server error.

----

86

Call cleared.

500

Internal server error.

----

87

User is not in CUG.

603

Decline.

----

88

Incompatible destination.

404

Bad request.

Not-Found

90

CUG does not exist.

500

Internal server error.

cannot-complete-temp-error

91

Invalid transit network.

500

Internal server error.

cannot-complete-temp-error

93

AAL parameters not supported.

500

Internal server error.

cannot-complete-temp-error

95

Invalid message.

404

Bad request.

Not-Found

96

Mandatory Information Element (IE) is missing.

500

Internal server error.

cannot-complete-temp-error

97

Message type is not implemented.

500

Internal server error.

cannot-complete-temp-error

98

Message type is not compatible.

500

Internal server error.

cannot-complete-temp-error

99

IE is not implemented.

500

Internal server error.

cannot-complete-temp-error

100

Invalid IE contents.

500

Internal server error.

cannot-complete-temp-error

101

Message in incomplete call state.

500

Internal server error.

cannot-complete-temp-error

102

Recovery on timer expiration.

408

Request timeout.

cannot-complete-temp-error

103

Non-implemented parameter was passed on.

500

Internal server error.

cannot-complete-temp-error

110

Unrecognized parameter message discarded.

500

Internal server error.

cannot-complete-temp-error

111

Protocol error.

404

Bad request.

Not-Found

127

Internetworking error.

500

Internal server error.

cannot-complete-temp-error

Le channel-variable ${DIALSTATUS}

Contient une chaîne de texte signifiant le résultat de la dernière tentative de connexion :

 

DIALSTATUS

Description

Asterisk Prompt

ANSWER

 en cas du succès. L'appelant a atteint l'appelé.

----

BUSY

 numéro est occupé.

----

NOANSWER

 Pas de réponse. L’appel a atteint son time-out de sonnerie.

----

CANCEL

 appel est annulé.

cancelled

CONGESTION

 congestion. Ce statut est généralement un signe que le numéro composé n'est pas reconnu

cannot-complete-otherend-error

CHANUNAVAIL

 Channel indisponible.

an-error-has-occured

DONTCALL

 le mode de confidentialité, l'appelé a rejeté l'appel

----

TORTURE

 le mode de confidentialité, l'appelé a choisi d'envoyer l'appelant à sa liste noire

----

INVALIDARGS

 Erreur d'analyse des arguments de commande Dial

----

Extensions.conf

La configuration des messages vocaux d’informations dans l’Asterisk se fait a travers le fichier /etc/asterisk/extensions.conf:

 

[globals]

RADIUS_Server=IP_Radius_Server(PortaBilling)

RADIUS_Secret=Password

RADIUS_Auth_Port=1812

RAIUS_Acct_Port=1813

Acct_Update_Timeout=60

NAS_IP_Address=IP_Asterisk_Server

II=0

max_duration=7200

 

[general]

static=yes

autofallthrough=yes

 

[forbidden]

exten => _X.,1,NoOp(-- No context for host ${SIPCHANINFO(recvip)} --)

exten => _X.,n,Hangup(21)

 

[h323-id]

exten => _X.,1,NoOp(-- H323 ID --)

exten => _X.,n,Set(ID=${SIP_HEADER(h323-conf-id)})

exten => _X.,n,ExecIf($[ "${ID}" = "" ],Set,ID=${RAND(300000000,2000000000)}-${RAND(300000000,2000000000)}-${RAND(300000000,2000000000)}-${RAND(300000000,2000000000)})

exten => _X.,n,Set(H323_ID=${ID})

exten => _X.,n,Set(H323_ID_HEX=${MATH(${CUT(ID,,1)}+0,hex)} ${MATH(${CUT(ID,,2)}+0,hex)} ${MATH(${CUT(ID,,3)}+0,hex)} ${MATH(${CUT(ID,,4)}+0,hex)})

exten => _X.,n,SIPAddHeader(h323-conf-id: ${H323_ID})

exten => _X.,n,Set(CDR(h323id)=${H323_ID_HEX})

exten => _X.,n,Return()

 

[auth-ip]

exten => _X.,1,NoOp(-- Inbound Authentication for cusromer IP --)

exten => _X.,n,Gosub(h323-id,${EXTEN},1)

exten => _X.,n,Set(CDR(accountcode)=${SIPCHANINFO(recvip)})

exten => _X.,n,Set(MYCALLID=${SIPCALLID})

exten => _X.,n,Set(CDR(CustomerType)=IpAuth)

exten => _X.,n,agi,agi-rad-auth-2.pl|Routing=SIP&AuthorizeBy=Account&Password=cisco&H323_ID=${H323_ID}&CustomerType=IpAuth

exten => _X.,n,Set(CDR(disconnect-reason)=${h323-return-code})

exten => _X.,n,Goto(rad-auth,${EXTEN},1)

;exten => _X.,n,Goto(routing,${EXTEN},1)

 

[auth-inbound]

exten => _X.,1,NoOp(-- Inbound Authentication --)

exten => _X.,n,Gosub(h323-id,${EXTEN},1)

exten => _X.,n,Set(CDR(accountcode)=${SIPCHANINFO(recvip)})

exten => _X.,n,Set(MYCALLID=${SIPCALLID})

exten => _X.,n,Set(CDR(CustomerType)=PeerAuth)

exten => _X.,n,agi,agi-rad-auth-2.pl|Routing=SIP&AuthorizeBy=Account&Password=cisco&H323_ID=${H323_ID}&CustomerType=PeerAuth

exten => _X.,n,Set(CDR(disconnect-reason)=${h323-return-code})

exten => _X.,n,Goto(rad-auth,${EXTEN},1)

;exten => _X.,n,Goto(routing,${EXTEN},1)

 

[sip-auth]

exten => _X.,1,NoOp(-- SIP Authentication --)

exten => _X.,n,Gosub(h323-id,${EXTEN},1)

exten => _X.,n,Set(SIP_Authorization=${SIP_HEADER(Proxy-Authorization)})

exten => _X.,n,Set(CDR(CustomerType)=SipAuth)

exten => _X.,n,agi,agi-rad-auth-2.pl|Routing=SIP&AuthorizeBy=SIP&IfFailed=DoNotHangup&H323_ID=${H323_ID}&CustomerType=SipAuth

exten => _X.,n,Set(CDR(accountcode)=${SIP_Username})

exten => _X.,n,Set(CDR(disconnect-reason)=${h323-return-code})

exten => _X.,n,Goto(rad-auth,${EXTEN},1)

 

 

le contexte [rad-auth] analyse la réponse du serveur Radius (RADIUS_Server).

Cette réponse est communiqué entre l’Asterisk et le script agi-rad-auth-2.pl a travers le variable ${h323-return-code}

 

 

[rad-auth]

exten => _X.,1,NoOp()

exten => _X.,n,GotoIf($[ ${h323-return-code} = 1 ]?invalid_account,${EXTEN},1)

exten => _X.,n,GotoIf($[ ${h323-return-code} = 2 ]?wrong_passwd,${EXTEN},1)

exten => _X.,n,GotoIf($[ ${h323-return-code} = 3 ]?in_use,${EXTEN},1)

exten => _X.,n,GotoIf($[ ${h323-return-code} = 4 ]?zero_balance,${EXTEN},1)

exten => _X.,n,GotoIf($[ ${h323-return-code} = 5 ]?account_expired,${EXTEN},1)

exten => _X.,n,GotoIf($[ ${h323-return-code} = 6 ]?credit_limit,${EXTEN},1)

exten => _X.,n,GotoIf($[ ${h323-return-code} = 7 ]?user_denied,${EXTEN},1)

exten => _X.,n,GotoIf($[ ${h323-return-code} = 8 ]?not_avail,${EXTEN},1)

exten => _X.,n,GotoIf($[ ${h323-return-code} = 9 ]?no-route-exists-to-dest,${EXTEN},1)

exten => _X.,n,GotoIf($[ ${h323-return-code} = 10 ]?retries,${EXTEN},1)

exten => _X.,n,GotoIf($[ ${h323-return-code} = 12 ]?insufficient_balance,${EXTEN},1)

exten => _X.,n,GotoIf($[ ${h323-return-code} = 0 | ${h323-return-code} = 13 ]?welcome-msg,${EXTEN},1)

exten => _X.,n,Goto(cannot-complete-temp-error,${EXTEN},1)

 

 

Dans le contexte [welcome-msg] on joue le message free-call si l’appel est gratuit (${h323-return-code} = 0) sinon une simple beep (${h323-return-code} = 13).

Pour éviter les problèmes causés par la succession du paquet SIP ‘ringing’ par le paquet ‘session progress’, on a limité ce message aux appels dont le ‘user_Agent’ est Linksys puisqu’il gère cette situation.

 

 

[welcome-msg]

exten => _X.,1,NoOp()

exten => _X.,n,GotoIf($[ ${XTOT} < 1 ]?telephone-number-temp-disconnected,${EXTEN},1)

exten => _X.,n,Set(User_Agent=${SIP_HEADER(User-Agent)})

exten => _X.,n,Set(CDR(User-Agent)=User-Agent:${User_Agent})

exten => _X.,n,GotoIf($[ "${User_Agent:0:7}" = "Linksys" ]?:nomsg)

exten => _X.,n,GotoIf($[ ${h323-return-code} = 13 ]?free-call,${EXTEN},1)

exten => _X.,n,GotoIf($[ ${h323-return-code} = 0 ]?normal-call,${EXTEN},1)

exten => _X.,n(nomsg),Goto(routing,${EXTEN},1)

[free-call]

exten => _X.,1,NoOp()

exten => _X.,n,Playback(free-calls-en,noanswer)

exten => _X.,n,Playback(free-calls-fr,noanswer)

exten => _X.,n,Goto(routing,${EXTEN},1)

[normal-call]

exten => _X.,1,NoOp()

exten => _X.,n,Playback(beep,noanswer)

exten => _X.,n,Goto(routing,${EXTEN},1)

 

 

Dans ce contexte [routing], on applique la liste de routage envoyée par le Billing via radius et analysé par le script agi-rad-auth-2.pl qui la transforme en une simulation d’une table à deux dimensions présentées par un ensemble des variables Asterisk ${XROUTE_${II}_${KK}}. http://switzernet.com/public/100427-follow-me-asterisk/

Le variable ${XTOT} est strictement supérieur à 1 seulement s’il s’agit d’un appel déviée (Follow Me est activé), dans cette cas en joue le message ‘next’ au moment de changement de la destination.

Le routage se fait à l’aide de deux boucles ‘loop’ imbriquées, en cas d’erreur on quitte le deuxième boucle ce qui implique la sortie du boucle supérieur si c’est un appel simple ou le passage à la destination suivante si c’est un appel déviée.    

 

 

[routing]

exten => _X.,1,NoOp()

exten => _X.,n,Set(II=1)

exten => _X.,n(loop),NoOp()

exten => _X.,n,GotoIf($[ ${II} = 1 ]?SingleRoute)

exten => _X.,n,Playback(the-next,noanswer)

exten => _X.,n(SingleRoute),Set(KK=0)

exten => _X.,n,Set(SUM_ROUTE=${XSUM_${II}})

exten => _X.,n(loop1),NoOp()

exten => _X.,n,Set(TARGET_ROUTE=${XROUTE_${II}_${KK}})

exten => _X.,n,Set(TARGET_EXPIRE=${XEXP_${II}_${KK}})

exten => _X.,n,Set(TARGET_CLI=${XCLI_${II}_${KK}})

exten => _X.,n,Set(CALLERID(all)=${TARGET_CLI} <${TARGET_CLI}>)

exten => _X.,n,Set(MYDNID=${CUT(TARGET_ROUTE,@,1)})

exten => _X.,n,Set(VDNID=${CUT(MYDNID,/,2)})

exten => _X.,n,Dial(${IF($[ ${CUT(TARGET_ROUTE,@,2)} = ${NAS_IP_Address}]?${MYDNID}:${TARGET_ROUTE})},${TARGET_EXPIRE})

exten => _X.,n,Set(CDR(Hangupcause)=Hangupcause:${HANGUPCAUSE})

exten => _X.,n,Set(KK=$[${KK}+1])

exten => _X.,n,GotoIf($[ ${HANGUPCAUSE} = 1 | ${HANGUPCAUSE} = 3 | ${HANGUPCAUSE} = 27 | ${HANGUPCAUSE} = 28 | ${HANGUPCAUSE} = 31 | ${HANGUPCAUSE} = 88 | ${HANGUPCAUSE} >= 90 | "${DIALSTATUS}" = "BUSY" | "${DIALSTATUS}" = "NOANSWER" | "${DIALSTATUS}" = "CANCEL" ]?end1)

exten => _X.,n,GotoIf($[${KK} < ${SUM_ROUTE} ]?loop1:end1)

exten => _X.,n(end1),NoOp()

exten => _X.,n,Set(II=$[${II}+1])

exten => _X.,n,GotoIf($[${II} <= ${XTOT} ]?loop:end)

exten => _X.,n(end),NoOp()

exten => _X.,n,Goto(Error-Info,${EXTEN},1)

 

 

Dans ce contexte [Error-onfo], on joue les messages vocaux qui correspond à la valeur du retour du résultat de la dernière tentative de connexion (${HANGUPCAUSE} et ${DIALSTATUS}).

Ce contexte sera ignoré dans le cas d’un appel dévié.

 

 

[Error-Info]

exten => _X.,1,NoOp()

exten => _X.,n,GotoIf($[ ${XTOT} > 1 ]?Ter)

exten => _X.,n,GotoIf($[ ${HANGUPCAUSE} = 28 ]?ISUP28,${EXTEN},1)

exten => _X.,n,GotoIf($[ ${HANGUPCAUSE} = 1 | ${HANGUPCAUSE} = 3 | ${HANGUPCAUSE} = 27 | ${HANGUPCAUSE} = 31 | ${HANGUPCAUSE} = 88 | ${HANGUPCAUSE} = 95 | ${HANGUPCAUSE} = 111 ]?Not-Found,${EXTEN},1)

exten => _X.,n,GotoIf($[ ${HANGUPCAUSE} >= 90 ]?cannot-complete-temp-error,${EXTEN},1)

exten => _X.,n,GotoIf($[ "${DIALSTATUS}" = "CANCEL" ]?cancelled,${EXTEN},1)

exten => _X.,n,GotoIf($[ ${HANGUPCAUSE} = 34 | ${HANGUPCAUSE} = 38 | ${HANGUPCAUSE} = 41 | ${HANGUPCAUSE} = 42 | ${HANGUPCAUSE} = 47 ]?all-outgoing-lines-unavailable,${EXTEN},1)

exten => _X.,n,GotoIf($[ "${DIALSTATUS}" = "CHANUNAVAIL" ]?an-error-has-occured,${EXTEN},1)

exten => _X.,n,GotoIf($[ "${DIALSTATUS}" = "CONGESTION" ]?cannot-complete-otherend-error,${EXTEN},1)

;exten => _X.,n(Ter),SayNumber(${HANGUPCAUSE},c)

;exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n(Ter),Hangup(${HANGUPCAUSE})

 

[ISUP28]

exten => _X.,1,NoOp()

exten => _X.,1,wait(1)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(incomplete-num-en,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(incomplete-num-fr,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(incomplete-num-en,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(incomplete-num-fr,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(incomplete-num-en,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(incomplete-num-fr,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Hangup(${HANGUPCAUSE})

 

[user_denied]

exten => _X.,1,NoOp()

exten => _X.,n,wait(1)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(user_denied,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Hangup(${HANGUPCAUSE})

 

[cannot-complete-otherend-error]

exten => _X.,1,NoOp()

exten => _X.,n,wait(1)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(cannot-complete-otherend-error,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(cannot-complete-otherend-error,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(cannot-complete-otherend-error,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Hangup(${HANGUPCAUSE})

 

[cancelled]

exten => _X.,1,NoOp()

exten => _X.,n,wait(1)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(cancelled,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(cancelled,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(cancelled,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Hangup(${HANGUPCAUSE})

 

[not_avail]

exten => _X.,1,NoOp()

exten => _X.,n,wait(1)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(not_avail,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Hangup(${HANGUPCAUSE})

 

[invalid_account]

exten => _X.,1,NoOp()

exten => _X.,n,wait(1)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(invalid_account,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Hangup(${HANGUPCAUSE})

 

[wrong_passwd]

exten => _X.,1,NoOp()

exten => _X.,n,wait(1)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(wrong_passwd,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Hangup(${HANGUPCAUSE})

 

[account_expired]

exten => _X.,1,NoOp()

exten => _X.,n,wait(1)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(account_expired,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Hangup(${HANGUPCAUSE})

 

[credit_limit]

exten => _X.,1,NoOp()

exten => _X.,n,wait(1)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(credit_limit,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Hangup(${HANGUPCAUSE})

 

[zero_balance]

exten => _X.,1,NoOp()

exten => _X.,n,wait(3)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(zero_balance,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Hangup(${HANGUPCAUSE})

 

[in_use]

exten => _X.,1,NoOp()

exten => _X.,n,wait(1)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(simul-call-limit-reached,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(simul-call-limit-reached,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(in_use,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(simul-call-limit-reached,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Hangup(${HANGUPCAUSE})

 

[insufficient_balance]

exten => _X.,1,NoOp()

exten => _X.,n,wait(1)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(insufficient_balance,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(insufficient_balance,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(insufficient_balance,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Hangup(${HANGUPCAUSE})

 

[retries]

exten => _X.,1,NoOp()

exten => _X.,n,wait(1)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(retries,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(retries,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(retries,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Hangup(${HANGUPCAUSE})

 

[cannot-complete-temp-error]

exten => _X.,1,NoOp()

exten => _X.,n,wait(1)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(cannot-complete-temp-error,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(cannot-complete-temp-error,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(cannot-complete-temp-error,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Hangup(${HANGUPCAUSE})

 

[no-route-exists-to-dest]

exten => _X.,1,NoOp()

exten => _X.,n,wait(1)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(no-route-exists-to-dest,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(no-route-exists-to-dest,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(no-route-exists-to-dest,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(cld_blocked,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Hangup(${HANGUPCAUSE})

 

[Not-Found]

exten => _X.,1,NoOp()

exten => _X.,n,Set(NotFoundContext=Not-Found-${IF($[ ${CUT(TARGET_ROUTE,@,2)} = ${NAS_IP_Address}]?1:2)})

exten => _X.,n,Goto(${NotFoundContext},${EXTEN},1)

[Not-Found-1]

exten => _X.,1,NoOp()

exten => _X.,n,wait(1)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(not-found-en,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(not-found-fr,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(not-found-en,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(not-found-fr,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(not-found-en,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(not-found-fr,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Hangup(${HANGUPCAUSE})

[Not-Found-2]

exten => _X.,1,NoOp()

exten => _X.,n,wait(1)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(you-dialed-wrong-number,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(you-dialed-wrong-number,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(you-dialed-wrong-number,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Hangup(${HANGUPCAUSE})

 

[telephone-number-temp-disconnected]

exten => _X.,1,NoOp()

exten => _X.,n,wait(1)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(the-number-u-dialed,noanswer)

exten => _X.,n,Playback(temp-disconnected,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(the-number-u-dialed,noanswer)

exten => _X.,n,Playback(temp-disconnected,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(the-number-u-dialed,noanswer)

exten => _X.,n,Playback(temp-disconnected,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Hangup(${HANGUPCAUSE})

 

[all-outgoing-lines-unavailable]

exten => _X.,1,NoOp()

exten => _X.,n,wait(1)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(all-outgoing-lines-unavailable,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(all-outgoing-lines-unavailable,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(all-outgoing-lines-unavailable,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Hangup(${HANGUPCAUSE})

 

[an-error-has-occured]

exten => _X.,1,NoOp()

exten => _X.,n,wait(1)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(an-error-has-occured,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(an-error-has-occured,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Playback(an-error-has-occured,noanswer)

exten => _X.,n,Playback(beeperr,noanswer)

exten => _X.,n,Hangup(${HANGUPCAUSE})

Personnaliser les messages vocaux d’Asterisk

Vous pouvez créer vos propres messages vocaux d’Asterisk:

1- Enregistrer le message dans un fichier WAV (PCM sans compression),

2- Uploader ce dernier dans votre serveur Asterisk

3- Exécuter les commandes suivantes :

 

astrad# sox my_sound.wav -r 8000 -c 1 -s -w /root/prompt2astrad/my_sound.wav resample –ql

astrad# asterisk –r

> file convert  /root/prompt2astrad/my_sound.wav wav  /root/prompt2astrad/my_sound.sln

> file convert  /root/prompt2astrad/my_sound.wav wav  /root/prompt2astrad/my_sound.alaw

> file convert  /root/prompt2astrad/my_sound.wav wav  /root/prompt2astrad/my_sound.ulaw

> file convert  /root/prompt2astrad/my_sound.wav wav  /root/prompt2astrad/my_sound.gsm

> quit

astrad# cp my_sound.* /usr/share/asterisk/sounds/

astrad# chmod a+r /usr/share/asterisk/sounds/*

 

Pour écouter ou télécharger les messages vocaux cliquer ICI

Enregistrement des clients sur Asterisk

PortaSip

L’échange d’information concernant l’enregistrement des clients entre le PortaBilling et PortaSip se fait via Radius, En effet pour que ce dernier puisse jouer les messages d’erreur indiquant au client que son mot de passe est incorrecte ou que le compte utilisé est inexistant, il accepte tous les demande d’enregistrement sauf qu’il ne met pas à jour la table ‘porta-sip.location’ dans le Master (PortaBilling), sa réponse SIP peut être ‘200 Auth Failed.’ ou ‘200 Ok’ mais c’est toujours 200 ce qui veut dire autorisée.

 

 

U 85.1.188.121:52128 -> 91.999.999.999:5060

REGISTER sip:fr2.youroute.net SIP/2.0.

Via: SIP/2.0/UDP 192.168.1.121:5060;branch=z9hG4bKc6e6ccef565035cd1e0c90f1f09a0a17;rport.

From: "41215500329" <sip:41215500329@fr2.youroute.net>;tag=155248053.

To: "41215500329" <sip:41215500329@fr2.youroute.net>.

Call-ID: 4257033876@192_168_1_121.

CSeq: 1033 REGISTER.

Contact: "41215500329" <sip:41215500329@192.168.1.121:5060>.

Max-Forwards: 70.

User-Agent: C450 IP010720000000.

Expires: 180.

Allow: INVITE, ACK, CANCEL, BYE, OPTIONS, INFO.

Content-Length: 0.

.

 

 

U 91.999.999.999:5060 -> 85.1.188.121:52128

SIP/2.0 401 Unauthorized.

Via: SIP/2.0/UDP 192.168.1.121:5060;branch=z9hG4bKc6e6ccef565035cd1e0c90f1f09a0a17;rport=52128;received=85.1.188.121.

From: "41215500329" <sip:41215500329@fr2.youroute.net>;tag=155248053.

To: "41215500329" <sip:41215500329@fr2.youroute.net>;tag=1759cd33c30ac90f1252a7b3a6bd2b65-c940.

Call-ID: 4257033876@192_168_1_121.

CSeq: 1033 REGISTER.

WWW-Authenticate: Digest realm="fr2.youroute.net", nonce="4c46b70455103276dfcfa96403b662009c8dce2f".

Server: Sip EXpress router (0.9.6 (i386/freebsd)).

Content-Length: 0.

.

 

 

U 85.1.188.121:52128 -> 91.999.999.999:5060

REGISTER sip:fr2.youroute.net SIP/2.0.

Via: SIP/2.0/UDP 192.168.1.121:5060;branch=z9hG4bK9ff87d568e0582fb249768b4b741769a;rport.

From: "41215500329" <sip:41215500329@fr2.youroute.net>;tag=155248053.

To: "41215500329" <sip:41215500329@fr2.youroute.net>.

Call-ID: 4257033876@192_168_1_121.

CSeq: 1034 REGISTER.

Contact: "41215500329" <sip:41215500329@192.168.1.121:5060>.

Authorization: Digest username="41215500329", realm="fr2.youroute.net", uri="sip:fr2.youroute.net", nonce="4c46b70455103276dfcfa96403b662009c8dce2f", response="15a0902a71c14c0e200c74ab47eddaf3".

Max-Forwards: 70.

User-Agent: C450 IP010720000000.

Expires: 180.

Allow: INVITE, ACK, CANCEL, BYE, OPTIONS, INFO.

Content-Length: 0.

.

 

---> RADIUS port 1812 <---

U 91.999.999.999:56008 -> 66.999.999.999:1812

.x...D......#...-.....41215500329..41215500329..

.41215500329....fr2.youroute.net.,.*4c46b70455103276dfcfa96403b662009c8dce2f....sip:fr2.youroute.net...

REGISTER....MD5."15a0902a71c14c0e200c74ab47eddaf3.......(....."call-id=4257033876@192_168_1_121..[y........

 

U 91.999.999.999:5060 -> 85.1.188.121:52128

SIP/2.0 200 OK.

Via: SIP/2.0/UDP 192.168.1.121:5060;branch=z9hG4bK9ff87d568e0582fb249768b4b741769a;rport=52128;received=85.1.188.121.

From: "41215500329" <sip:41215500329@fr2.youroute.net>;tag=155248053.

To: "41215500329" <sip:41215500329@fr2.youroute.net>;tag=1759cd33c30ac90f1252a7b3a6bd2b65-e6be.

Call-ID: 4257033876@192_168_1_121.

CSeq: 1034 REGISTER.

PortaBilling: available-funds:173.06 currency:CHF.

Contact: <sip:41215500329@85.1.188.121:52128>;expires=295.

Server: Sip EXpress router (0.9.6 (i386/freebsd)).

Content-Length: 0.

.

 

---> MySQL port 3306 <---

T 91.999.999.999:61902 -> 66.999.999.999:3306 [AP]

.....insert into location (username,contact,expires,q,callid,cseq,flags,user_agent,received,i_env,domain ) values ('41215500329','sip:41215500329@85.1.188.121:52128','2010-07-21 10:59:49',-1.00     ,'4257033876@192_168_1_121',1034,1,'C450 IP010720000000',NULL,1,'91.999.999.999')

 

Asterisk

Pour le moment on n’utilise pas Radius pour l’enregistrement mais c’est prévu pour la prochaine version.

Dans l’Asterisk chaque client doit être déclaré dans le fichier de configuration ‘db-friends,conf’ qui été crée par le script Liste-Asterisk.pl

Ce script télécharge la liste des clients crypté depuis le serveur Web spécifié dans le variable $http_file, le décryptage se fait en se basant sur la clé indiquée dans le fichier KeyAstr qui a la même valeur que le variable $KEY dans le fichier  KeyAstr.php

Afin de garder la liste à jour, ce script doit être lancé par le cron chaque 10 minute.

 

Pour installer cette solution vous devez télécharge 100716-php-asterisk.zip

Editer les paramètres de connexion dans le fichier connection.php

Modifier la clé de cryptage dans les deux fichiers KeyAstr et KeyAstr.php.

Uploader le répertoire ‘Web Server’ dans votre serveur Web.

Le variable $http_file_1 dans le script Liste-Asterisk.pl doit contenir le lien de script PHP uploadé, si vous avez un deuxième serveur vous pouvez l’indique dans $http_file_2

Mise en œuvre du Patch d’Astrad

Installation

Pour installer cette mise à jour d’Asterisk en commence par la création d’un répertoire de travaille qui on le nomme par exemple ‘100719-astrad-update’.

Téléchargez depuis ce dernier le ZIP qui contient les fichiers nécessaires pour ce patch :

 

astrad# mkdir /root/100719-astrad-update

astrad# cd /root/100719-astrad-update/

astrad:/100719-astrad-update# wget -q http://switzernet.com/2/public/100719-asterisk-update/data/100719-astrad-update.tar.gz

astrad:/100719-astrad-update# ls

100719-astrad-update.tar.gz

astrad:/100719-astrad-update# tar xzf 100719-astrad-update.tar.gz

astrad:/100719-astrad-update# ls

100719-astrad-update.tar.gz  agi-rad-auth-2.pl  astrad-prompt  cdr_custom.conf  extensions.conf  KeyAstr  Liste-Asterisk.pl

 

Editer les fichiers suivants en ajoutant les informations de connexion nécessaires :

 

extensions.conf

astrad:/100719-astrad-update# vi extensions.conf

[globals]

RADIUS_Server=IP_Radius_Server(PortaBilling)

RADIUS_Secret=Password

RADIUS_Auth_Port=1812

RAIUS_Acct_Port=1813

Acct_Update_Timeout=60

NAS_IP_Address=IP_Asterisk_Server

 

. . .

 

Liste-Asterisk.pl

astrad:/100719-astrad-update# vi Liste-Asterisk.pl

#! /usr/bin/perl -w

use strict;

use warnings;

use POSIX;

 

use Digest::MD5;

use Crypt::Rijndael;

 

my $http_user="Username";

my $http_passwd="Password";

my $http_file_1="http://switzernet.com/folders/100716-php-asterisk";

my $http_file_2="http://unappel.ch/folders/100716-php-asterisk";

 

Exécutez les commandes suivantes :

 

astrad:/100719-astrad-update# cp ./astrad-prompt/* /usr/share/asterisk/sounds/

astrad:/100719-astrad-update# mv /etc/asterisk/extensions.conf /etc/asterisk/old-extensions.conf

astrad:/100719-astrad-update# mv /etc/asterisk/cdr_custom.conf /etc/asterisk/old-cdr_custom.conf

astrad:/100719-astrad-update# cp cdr_custom.conf /etc/asterisk/cdr_custom.conf

astrad:/100719-astrad-update# cp extensions.conf /etc/asterisk/extensions.conf

astrad:/100719-astrad-update# mv /usr/share/asterisk/agi-bin/agi-rad-auth-2.pl  /usr/share/asterisk/agi-bin/old-agi-rad-auth-2.pl

astrad:/100719-astrad-update# cp agi-rad-auth-2.pl /usr/share/asterisk/agi-bin/

astrad:/100719-astrad-update# mv /root/100105-asterisk-list/Liste-Asterisk.pl /root/100105-asterisk-list/old-Liste-Asterisk.pl

astrad:/100719-astrad-update# cp Liste-Asterisk.pl /root/100105-asterisk-list/

astrad:/100719-astrad-update# chmod +r /usr/share/asterisk/sounds/*

astrad:/100719-astrad-update# chown -R asterisk:asterisk /etc/asterisk/*.conf

astrad:/100719-astrad-update# /etc/init.d/asterisk stop ; /root/myasterisk/croncheck.sh

 

Configurer Log Rotate pour le log du script Liste-Asterisk.pl

Editez le fichier ‘/etc/logrotate.d/asterisk’ et ajouter les lignes suivantes à la fin :

 

/etc/logrotate.d/asterisk

 

"/root/100105-asterisk-list/AsteriskPerl.log" {

  daily

  rotate 15

  dateext

}

Vérification de fonctionnement du Patch :

On commence par la confirmation qu’Asterisk tourne en exécutant la commande suivante, vous devez avoir la même sorti dans votre console :

 

astrad# ps aux | grep ast

root      3551  0.0  0.0   5608   712 pts/0    S+   09:34   0:00 grep --color=auto ast

asterisk  4223  3.0  3.3 671016 133844 ?       Ssl  Jul19  27:26 /usr/sbin/asterisk -p -U asterisk

asterisk  4230  0.0  0.3  65356 12444 ?        S    Jul19   0:45 /usr/bin/perl /root/myasterisk/ast-rad-acc.pl

asterisk  4233  0.1  0.2  61340 10328 ?        S    Jul19   1:29 /usr/bin/perl /root/myasterisk/ast-reg-switz.pl

asterisk  4236  0.0  5.2 472100 210388 ?       S    Jul19   0:22 /usr/bin/perl /root/myasterisk/ast-resend-lost.pl

root      4732  0.0  0.0  31248  3028 ?        S    Jul19   0:28 /usr/bin/perl /root/myasterisk/ast-ngrep.pl

 

Vous devez vérifier que les fichiers extensions.conf et cdr_custom.conf appartient à l’utilisateur Asterisk et que la taille du fichier ‘db-friends.conf’ est strictement supérieur à 0 :

 

astrad# ls -l /etc/asterisk/

total 608

-rw-r----- 1 asterisk asterisk    336 2010-05-08 17:45 asterisk.conf

-rw-r----- 1 asterisk asterisk    107 2010-07-08 14:10 billing.conf

-rw-r--r-- 1 asterisk asterisk     90 2010-01-27 17:12 cdr.conf

-rw-r--r-- 1 asterisk asterisk    777 2010-07-15 11:47 cdr_custom.conf

-rw-r--r-- 1 asterisk asterisk    502 2010-04-19 11:25 db-customer-ip.conf

-rw-r--r-- 1 asterisk asterisk    527 2010-07-16 10:49 db-deny-node.conf

-rw-r--r-- 1 asterisk asterisk 500825 2010-07-19 18:10 db-friends.conf

-rw-r--r-- 1 asterisk asterisk   1867 2010-07-16 10:49 db-peers.conf

-rw-r--r-- 1 asterisk asterisk  15029 2010-07-15 19:40 extensions.conf

-rw-r--r-- 1 asterisk asterisk   4158 2010-03-01 15:59 extensions_old.conf

-rw-r----- 1 asterisk asterisk    402 2010-05-10 19:47 manager.conf

-rw-r----- 1 asterisk asterisk   2100 2010-05-08 15:41 modules.conf

-rw-r----- 1 asterisk asterisk    750 2010-07-15 15:01 sip.conf

 

Pour vérifier la configuration du CDR d’Asterisk, il suffit de chercher les détailles d’un appel de test effectué après la mise à jours dans le contenu du fichier Master.csv, on doit trouver  deux nouveaux champs (Hangupcause, User-Agent)

 

astrad# tail -f /var/log/asterisk/cdr-custom/Master.csv

 

"5c5a2876 611cbf59 441a80ce 1aba594b","0900000085","02155009999","","2010-07-19 19:21:44","0","2010-07-19 19:21:35","FAILED","13","SipAuth","Hangupcause:1","User-Agent:C450 IP010720000000"

 

Le champ ‘Hangupcause’ apparaitra seulement en cas d’erreur (appel non effectuée)

 

Vérifiez le contenu du log du script ‘/root/100105-asterisk-list/Liste-Asterisk.pl’, on doit voir une date supérieur à la date de mise à jour

 

astrad:/etc/asterisk# tail -16 /root/100105-asterisk-list/AsteriskPerl.log

 

2010-07-19 19:20:01

0: Reply 486 Busy Here

0: Sleep 57 s

1: Reply 200 Ok

Total Customer skipped = 0

Total Customer decrypted = 7705

Total Error in Decryption account file = 0

md5 decrypted Accounts file is equal to md5 of existing file

md5 decrypted Node file is equal to md5 of existing file

md5 decrypted IP customers file is equal to md5 of existing file

Reloading Asterisk is not necessary

-----------------------------------------------------------------------------------------------------------------

 

Changer le mot de passe de votre compte depuis le Billing, essayez d’appeler un numéro avant même de changer le mot de passe dans la configuration du téléphone, vous devez écouter un message qui vous informe que le mot de passe est incorrect.

Changer le mot de passe dans la configuration du votre téléphone, l’Asterisk doit autoriser cet enregistrement après 10 minutes au maximum et la date de modification du fichier ‘/etc/asterisk/db-friends.conf’ sera changer.

Référence

http://switzernet.com/public/100427-follow-me-asterisk/

http://www.cisco.com/en/US/docs/voice_ip_comm/bts/3.5/command/reference/992M.html

http://www.voip-info.org/wiki/view/Asterisk+variable+DIALSTATUS

http://www.voip-info.org/wiki/index.php?page=Asterisk+variable+hangupcause

http://www.asterisk.org/doxygen/trunk/AstCauses.html

 

http://www.voip-info.org/wiki/view/sox

http://www.voip-info.org/tiki-index.php?page=Convert+WAV+audio+files+for+use+in+Asterisk

http://www.linux-tutorial.info/modules.php?name=ManPage&sec=1&manpage=sox

http://www.thegeekstuff.com/2009/05/sound-exchange-sox-15-examples-to-manipulate-audio-files/

http://www.voip-info.org/tiki-index.php?page=Convert+WAV+audio+files+for+use+in+Asterisk