Asterisk. Dan lagi AMI Originate

Sebelumnya saya menulis " AMI. Versatile Originate. Aplikasi dalam aplikasi CTI ". Pada saat itu, bagi saya topik itu terpecahkan, habis. Tapi ternyata masih ada ruang untuk perbaikan.





Klasik Originate

Action: Originate
Channel: PJSIP/201
Context: all-peers
Exten: 203
Priority: 1
Callerid: 201
      
      



Contoh konteks semua rekan





[all-peers]
exten => _X!,1,Dial(${PJSIP_DIAL_CONTACTS(${EXTEN})},30,Tt)
	same => n,Hangup()
      
      



  • 201 akan menelepon 203





  • callerid di 201 akan ditampilkan sebagai 201 (nilai parameter " Callerid " di perintah Originate )





  • callerid di 203 untuk ditampilkan sebagai 201 - semuanya indah









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 .





Tetap hanya menambahkan NoCDR untuk menghapus catatan cdr saluran Lokal.





Opsi terakhir

Perintah AMI akan berbentuk:





Action: Originate
Channel: Local/201@internal-orig
Context: all-peers
Exten: 203
Priority: 1
Callerid: 201
Variable: origCid=203
      
      



Dialplan terakhir, perhatikan dua panggilan NoCDR di dalamnya :





[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()
	
      
      



Satu catatan akan disimpan di 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
      
      



Apa yang kau butuhkan! :)





Hasil

Saya tidak menyarankan bahwa ini adalah satu-satunya solusi. Juga, saya tidak mengklaim bahwa itu dapat diterima oleh semua orang dan benar. Saya suka implementasinya, saya senang dengan pengalaman dan hasilnya.





Kami berhasil menerapkan teknik yang dijelaskan dalam PBX MikoPBX open source gratis kami .





Sumber Daya Berguna

  • AMI. Serbaguna Asal. Aplikasi dalam aplikasi CTI





  • ManagerAction_Originate





  • Application_ChannelRedirect





  • MikoPBX








All Articles