Astérisque. Et encore une fois AMI Originate

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 .





Ressources utiles

  • SUIS-JE. Origine polyvalente. Application dans l'application CTI





  • ManagerAction_Originate





  • Application_ChannelRedirect





  • MikoPBX








All Articles