Plus tôt, j'ai écrit " AMI. Versatile Originate. Application in CTI application ". À ce moment-là, il me semblait que le sujet était résolu, épuisé. Mais il s'est avéré qu'il y avait place à amélioration.
Origine classique
Action: Originate
Channel: PJSIP/201
Context: all-peers
Exten: 203
Priority: 1
Callerid: 201
Exemple de contexte pour tous les pairs
[all-peers]
exten => _X!,1,Dial(${PJSIP_DIAL_CONTACTS(${EXTEN})},30,Tt)
same => n,Hangup()
201 appellera 203
callerid à 201 sera affiché comme 201 (la valeur du paramètre " Callerid " dans la commande Originate )
callerid 203 201 -
2021-05-17 16:34:17|2021-05-17 16:34:20|2021-05-17 16:34:32|201|PJSIP/201-0000000a|203|PJSIP/203-0000000b
.
:
201 , , ,
, 201 contact. , 201
extensions.conf
[internal-orig]
exten => _X!,1,Set(DST_CONTACT=${PJSIP_DIAL_CONTACTS(${EXTEN})})
same => n,ExecIf($["${DST_CONTACT}x" != "x"]?Dial(${DST_CONTACT},30,Tt))
Originate :
Action: Originate
Channel: Local/201@internal-orig
Context: all-peers
Exten: 203
Priority: 1
Callerid: 201
, . , CDR :
2021-05-17 17:01:09|2021-05-17 17:01:12|2021-05-17 17:01:17|203|Local/201@internal-orig-00000006;2|201|PJSIP/201-00000012
2021-05-17 17:01:09|2021-05-17 17:01:12|2021-05-17 17:01:17|201|Local/201@internal-orig-00000006;1|203|PJSIP/203-00000013
Local
, .
CallerID
AMI origCid=203:
Action: Originate
Channel: Local/201@internal-orig
Context: all-peers
Exten: 203
Priority: 1
Callerid: 201
Variable: origCid=203
"Exten" AMI.
dialplan:
[internal-orig]
exten => _X!,1,Set(D_CONT=${PJSIP_DIAL_CONTACTS(${EXTEN})})
same => n,Set(CALLERID(num)=${origCid})
same => n,ExecIf($["${D_CONT}x" != "x"]?Dial(${D_CONT},${ringlength},Tt))
callerid.
CDR
. .
:
Local (hangup)
Local CDR
.
" " ( Local) U(orig-answer-channel) Dial
orig-answer-channel :
[orig-answer-channel]
exten => s,1,Set(MASTER_CHANNEL(O_SRC_CHAN)=${CHANNEL})
same => n,return
- .
. Local " " :
[all-peers]
exten => _X!,1,ExecIf($[ "${O_SRC_CHAN}x" != "x" ]?ChannelRedirect(${O_SRC_CHAN},${CONTEXT},${EXTEN},1))
same => n,ExecIf($[ "${O_SRC_CHAN}x" != "x" ]?Hangup())
same => n,Dial(${PJSIP_DIAL_CONTACTS(${EXTEN})},30,Tt)
same => n,Hangup()
"all-peers" Local . verbose :
Executing [203@all-peers:1] ExecIf("Local/201@internal-orig-00000009;1", "1?NoCDR()")
Executing [203@all-peers:2] ExecIf("Local/201@internal-orig-00000009;1", "1?ChannelRedirect(PJSIP/201-00000016,all-peers,203,1)")
Executing [203@all-peers:3] ExecIf("Local/201@internal-orig-00000009;1", "1?Hangup()")
"ChannelRedirect" , Local .
Executing [203@all-peers:1] ExecIf("PJSIP/201-00000016", "0?NoCDR()")
Executing [203@all-peers:2] ExecIf("PJSIP/201-00000016", "0?ChannelRedirect(,all-peers,203,1)")
Executing [203@all-peers:3] ExecIf("PJSIP/201-00000016", "0?Hangup()")
Executing [203@all-peers:4] Dial("PJSIP/201-00000016", "PJSIP/203/sip:203@172.16.156.1:59442;ob,30,Tt")
"all-peers" , sip , Originate .
NoCDR, cdr Local .
AMI :
Action: Originate
Channel: Local/201@internal-orig
Context: all-peers
Exten: 203
Priority: 1
Callerid: 201
Variable: origCid=203
dialplan, NoCDR:
[internal-orig]
exten => _X!,1,NoCDR()
same => n,Set(MASTER_CHANNEL(O_DST_CHAN)=${origCid})
same => n,Set(CALLERID(num)=${origCid})
same => n,Set(DST_CONTACT=${PJSIP_DIAL_CONTACTS(${EXTEN})})
same => n,ExecIf($["${DST_CONTACT}x" != "x"]?Dial(${DST_CONTACT},${ringlength},TtU(orig-answer-channel),s,1)))
[orig-answer-channel]
exten => s,1,Set(MASTER_CHANNEL(O_SRC_CHAN)=${CHANNEL})
same => n,return
[all-peers]
exten => _X!,1,ExecIf($[ "${O_SRC_CHAN}x" != "x" ]?NoCDR())
same => n,ExecIf($[ "${O_SRC_CHAN}x" != "x" ]?ChannelRedirect(${O_SRC_CHAN},${CONTEXT},${O_DST_CHAN},1))
same => n,ExecIf($[ "${O_SRC_CHAN}x" != "x" ]?Hangup())
same => n,Dial(${PJSIP_DIAL_CONTACTS(${EXTEN})},30,Tt)
same => n,Hangup()
CDR
2021-05-17 17:29:07|2021-05-17 17:29:10|2021-05-17 17:29:14|201|PJSIP/201-00000018|203|PJSIP/203-00000019
, ! :)
, . , . , .
Nous avons appliqué avec succès la technique décrite dans notre PBX open source gratuit MikoPBX .