рдЬрд╛рд╡рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рддрд╛рд░рд╛рдВрдХрди рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рд╕рд╣рднрд╛рдЧрд┐рддрд╛

рддрд╛рд░рд╛рдВрдХрди рдкреНрд░рдмрдВрдзрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (AMI) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЬрд╛рд╡рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗ рдПрдХ рддрд╛рд░рд╛рдВрдХрди рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд


рдпрджрд┐ рдЖрдк рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЕрднреА рдЕрдиреБрд╕рдВрдзрд╛рди рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдЖрдкрдХреЛ рдХреБрдЫ рднреНрд░рд╛рдордХ рд▓рдЧ рд╕рдХрддреА рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рдмрд╛рд░ рдореБрдЭреЗ рд▓рдЧрд╛ред

рдЙрддреНрддрд░-рдкреНрд░рд╢реНрди рдХреА рд╢реИрд▓реА рдореЗрдВ рдордВрдЪреЛрдВ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЖрд╡рд╢реНрдпрдХ рдмрд┐рдЯреНрд╕ рдХреА рддрд▓рд╛рд╢ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЬрд╛рд╡рд╛ рд╕реЗ рдПрд╕реНрдЯрд░рд┐рд╕реНрдХ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдкрд░ рдПрдХ рдЫреЛрдЯрд╛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╕рдВрд▓рдЧреНрди рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдорд╣рддреНрд╡рдкреВрд░реНрдг: рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рд▓реЗрдЦрди рдХреЛрдб рдХреЗ рдЪрд░рдг рдореЗрдВ рдкрд╣реБрдВрдЪ рдЪреБрдХреЗ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рддрд╛рд░рд╛рдВрдХрди рд╕рд░реНрд╡рд░ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

1) рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЪреБрдирдирд╛ рд╣реИ?

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ - рддрд╛рд░рд╛рдВрдХрди рдкреНрд░рдмрдВрдзрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдПрдПрдордЖрдИ): рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреА рдПрдХ рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ, рд╕рд░реНрд╡рд░ рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕реБрдирдиреЗ, рдХреЙрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЗрд╕реЗ рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред

2) рдХреНрдпрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП?

рдпрд╣ рдПрдХ:

<dependency> <groupId>org.asteriskjava</groupId> <artifactId>asterisk-java</artifactId> <version>2.0.4</version> </dependency> 

3) рд╕рд░реНрд╡рд░ рдкрд░ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реЗ рдХреЙрдиреНрдлрд┐рдЧреНрд░реЗрд╢рди рдХреА рдЬрд░реВрд░рдд рд╣реИ?

Extension.conf - рд╡рд╣ рд╡рд┐рдиреНрдпрд╛рд╕ рдЬреЛ рдбрд╛рдпрдкреНрд▓рд╛рди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдЖрдк рд▓рдЧрд╛рддрд╛рд░ рдЙрд╕рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рддреЗ рд░рд╣реЗрдВрдЧреЗред рдпрджрд┐ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реА рднрд╛рд╖рд╛ рдореЗрдВ, рддреЛ рдЗрд╕рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реЛрддреА рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХреЙрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдкрд░ рдХреНрдпрд╛ рдХрд░реЗрдЧрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрджрд░реНрдн рдХреЛ рдбрд╛рдпрдкреНрд▓рд╛рди рдореЗрдВ рдЦреЛрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдпрд╣ рд╡рд░реНрдЧ рдХреЛрд╖реНрдардХ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЗрд╕ рд╕рдВрджрд░реНрдн рдХреЗ рдЯреИрдЧ рдХреЗ рддрд╣рдд рдПрдХ рдирдВрдмрд░ рдЦреЛрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рдВрдкрд░реНрдХ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

manager.conf - рдЕрдкрдиреЗ Asterisk рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ

рдЗрд╕ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рд╕рд╛рдордЧреНрд░реА рд▓рдЧрднрдЧ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:

 [user_name] secret = password read = all write = all deny=0.0.0.0/0.0.0.0 permit=0.0.0.0/255.255.255.0 

  • user_name - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо
  • secret - рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд╛рд╕рд╡рд░реНрдб
  • рдЗрдирдХрд╛рд░ - рдЖрдИрдкреА рдкрддреЗ рдЬреЛ рдЗрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рддрд╣рдд рдЙрдкрдпреЛрдЧ рд╕реЗ рд╡рдВрдЪрд┐рдд рд╣реИрдВ
  • рдкрд░рдорд┐рдЯ - рдЬрд┐рд╕ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рдЙрд╕ рдЖрдИрдкреА рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдЖрдк рдкрд░рдорд┐рдЯ рдореЗрдВ рд╕рдВрдкрд░реНрдХ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдПрд╕реНрдЯрд░ рдЖрдкрдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рд░рджреНрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

sip.conf - рд╕рднреА рдЪрдбреНрдбреА рдпрд╣рд╛рдБ рдкрдВрдЬреАрдХреГрдд рд╣реИрдВред рдЯреНрд░рдВрдХ рдПрдХ рдлреЛрди рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╣рдо рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗред

4) рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ?

рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ: рдЖрдкрдХреЛ рдпрд╛ рддреЛ рдПрд╕реНрдЯрд░рд┐рд╕реНрдХ рд╕рд░реНрд╡рд░ рдкрд░ рдХреБрдЫ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ рд╕рд░реНрд╡рд░ рдкрд░ рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕реБрдирдирд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рджреЛрдиреЛрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рд╣рдо рдХрд╛рд░реНрдп рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ:

  1. рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдЦреЛрд▓реЗрдВ;
  2. рд╣рдо рдХрд╛рдо рдХреЗ рдкрд░рд┐рджреГрд╢реНрдп рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ;
  3. рд╣рдо рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕реБрдирддреЗ рд╣реИрдВ;
  4. рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдХрд░реЗрдВред

рддрджрдиреБрд╕рд╛рд░, рдХрдиреЗрдХреНрд╢рди рдХреЛ DefaultAsteriskServer рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рджреМрд░рд╛рди рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 import org.asteriskjava.live.AsteriskServer; import org.asteriskjava.live.DefaultAsteriskServer; 

 AsteriskServer asteriskServer = new DefaultAsteriskServer(HOSTNAME, USERNAME, PASSWORD); asteriskServer.initialize(); 

рдХрдиреЗрдХреНрд╢рди рдЦреЛрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ рдПрдХреНрд╢рди рдкрд░рд┐рджреГрд╢реНрдп рдХрд╣реЗрдВрдЧреЗред рдкрд░рд┐рджреГрд╢реНрдп рдХрд╛ рд╡рд┐рд╡рд░рдг рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдореЗрдВ рд╣реЛрдЧрд╛:

 /** *    */ public class ScenarioCall extends OriginateAction { private final Logger log = LoggerFactory.getLogger(ScenarioCall.class); private String TRUNK; private final String PHONE_FOR_RINGING; private final String EXTEN_FOR_APP; private final String CONTEXT_FOR_APP; public ScenarioCall(String trunk, String phoneForRinging, String extension, String context) { this.TRUNK = trunk; this.PHONE_FOR_RINGING = phoneForRinging; this.EXTEN_FOR_APP = extension; this.CONTEXT_FOR_APP = context; this.init(); } /** *         OriginateAction */ private void init() { //  String callId = ValidValues.getValidCallId(this.PHONE_FOR_RINGING); //    String channelAsterisk = ValidValues.getValidChannel(this.TRUNK, this.PHONE_FOR_RINGING); this.setContext(CONTEXT_FOR_APP); this.setExten(EXTEN_FOR_APP); this.setPriority(1); this.setAsync(true); this.setCallerId(callId); this.setChannel(channelAsterisk); log.info("Create Scenario Call: phone '{}',chanel '{}',context '{}',extension '{}'", callId, channelAsterisk, CONTEXT_FOR_APP, EXTEN_FOR_APP); } } 

рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рд╣рдореЗрдВ рдХреНрдпрд╛ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдЯреНрд░рдВрдХ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдЯреНрд░рдВрдХ рд╡рд╣ рд╕рдВрдЦреНрдпрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕реЗ рдЖрдк рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЯреНрд░рдВрдХ рдФрд░ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдХреЗ рдмреАрдЪ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдмрд╛рдж рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдФрд░ рдЖрдкрдХреЗ рдЕрдиреНрдп рдХреМрди рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдпрд╣ рдЙрд╕реА рдХреНрд░рдо рдореЗрдВ рд╣реИред

 this.setContext(CONTEXT_FOR_APP) 
рдкреНрд░реЗрд╖рд┐рдд рдореВрд▓реНрдп: рд╡рд╣ рд╕рдВрджрд░реНрдн рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЙрд╕ рдлрд╝реЛрди рдирдВрдмрд░ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВрдЧреЗ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (Extension.conf рд╕реЗ)ред

 this.setExten(EXTEN_FOR_APP) 
рдкреНрд░реЗрд╖рд┐рдд рдореВрд▓реНрдп: рд╡рд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЧреНрд░рд╛рд╣рдХ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреА рдЬрд╛рдПрдЧреА (рдПрдХреНрд╕рдЯреЗрдВрд╢рди.рдХреЙрдиреНрдлрд╝ рд╕реЗ)ред

 this.setCallerId(callId) 
рдкреНрд░реЗрд╖рд┐рдд рдореВрд▓реНрдп: рд╣рдорд╛рд░реЗ рдЧреНрд░рд╛рд╣рдХ рдХреА рд╕рдВрдЦреНрдпрд╛

 this.setChannel(channelAsterisk) 
рд╕рдВрдЪрд░рд┐рдд рдореВрд▓реНрдп: рд╕реНрдерд╛рдкрд┐рдд рд╕рдВрдЪрд╛рд░ рдЪреИрдирд▓, рдЖрдорддреМрд░ рдкрд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ: рдЯреНрд░рдВрдХ_рдирд╛рдо / рдлреЛрди_рдпреВрдЬрд╝рд░ред

рдЯреНрд░рдВрдХ_рдирд╛рдо рдХреЗ рд▓рд┐рдП рдХрд╣рд╛рдВ рджреЗрдЦреЗрдВ? рддрд╛рд░рд╛рдВрдХрди рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ sip.conf рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ - рд╕рднреА рдЪрдбреНрдбреА рд╡рд╣рд╛рдВ рдкрдВрдЬреАрдХреГрдд рд╣реИрдВред

рдПрдХ рдХреЙрд▓ рдмрдирд╛рдПрдВ:

 if (asteriskServer .getManagerConnection().getState().equals(ManagerConnectionState.CONNECTED) || asteriskServer .getManagerConnection().getState().equals(ManagerConnectionState.CONNECTING) || asteriskServer .getManagerConnection().getState().equals(ManagerConnectionState.INITIAL)) { try { ScenarioCall scenarioCall = new ScenarioCall(trank, phone, extension, context); CallBack callBackForScenarioCall = new CallBack(); asteriskServer.originateAsync(scenarioCall, callBackForScenarioCall); } catch (ManagerCommunicationException e) { //   , StateConnection    RECONNECTING,     } } 

рд╣рдордиреЗ рдПрдХ рдХреЙрд▓ рдмрдирд╛рдпрд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдП?

рдЗрд╕рдХреЗ рд▓рд┐рдП рджреЛ рдЪреАрдЬреЗрдВ рдХреА рдЬрд╛рддреА рд╣реИрдВ: рдХреЙрд▓рдмреИрдХ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдУрд░рд┐рдЬрдиреЗрдЯрдПрдВрдбрд╕рд╛рдЗрди рд╡рд┐рдзрд┐ рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рдФрд░ рдПрдХ рд╢реНрд░реЛрддрд╛ рд╕рд░реНрд╡рд░ рдкрд░ рд▓рдЯрдХрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рд╕рд╛рде рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╣рд░ рдЪреАрдЬрд╝ рдХреЛ рдорд░реНрдЬ рдХрд░ рджреЗрдЧрд╛ред

рдПрдХ рд╢реНрд░реЛрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЙрд▓рдмреИрдХ рд╡рд░реНрдЧ рдЖрдкрдХреЛ рдХреЙрд▓ рдХреЗ рдЕрдВрдд рдХреА рд╕реВрдЪрдирд╛ рдирд╣реАрдВ рджреЗрдЧрд╛ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдмрд╛рдд рдХреА рд╣реИ, рдФрд░ рди рд╣реА рдпрд╣ рдЖрдкрдХреЛ рд╕реВрдЪрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрднреА рднреА рдХрд╣реАрдВ рдФрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

 /** *        asteriskConnection.originateAsync  *  CallBack -     ,     *  originateAsync. CallBack      , *       ,    onNoAnswer ,  *     onBusy,     ,  onFailure,  . *        . ,      *      (      ,    ) */ public class CallBack implements OriginateCallback { /** *     PRERING,       * OriginateCallback -    */ private ChannelState resultCall = ChannelState.PRERING; /** *    ,   .         */ @Override public void onDialing(AsteriskChannel asteriskChannel) { //   ,  resultCall, //   asteriskChannel    null, //    resultCall   //   } /** *   .      *      6 - setStatus */ @Override public void onSuccess(AsteriskChannel asteriskChannel) { //   , asteriskChannel   null, // asteriskChannel.getState()      ChannelState.UP //   } /** *      ,    *      7 - setStatus () */ @Override public void onNoAnswer(AsteriskChannel asteriskChannel) { //   , //   asteriskChannel    null, //    resultCall   //   } /** *   *      7 - setStatus () */ @Override public void onBusy(AsteriskChannel asteriskChannel) { //   , //   asteriskChannel    null, //    resultCall   //   } /** *      */ @Override public void onFailure(LiveException e) { //     , //     , // onFailure      } } 

рдХрд┐рд╕реА рд╢реНрд░реЛрддрд╛ рдХреЛ рддрд╛рд░рд╛рдВрдХрди рдкрд░ рдХреИрд╕реЗ рд▓рдЯрдХрд╛рдПрдВ?

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рд╡рд░реНрдЧ AsteriskServerListener, PropertyChangeListener рдмрдирд╛рдПрдБред
AsteriskConnection рд╡рд░реНрдЧ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП, рд╣рдо рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:

  this.asteriskConnection.addAsteriskServerListener(this.callBackEventListener); 

this.callBackEventListener - рд╣рдорд╛рд░реЗ рд╢реНрд░реЛрддрд╛ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг, рдЗрд╕рд╕реЗ рдкреИрджрд╛ рд╣реБрдЖ:

 ** *    Asterisk *  PropertyChangeListener   ,     . *  AsteriskServerListener   ,     AsteriskConnection. */ public class CallBackEventListener implements AsteriskServerListener, PropertyChangeListener { public void onNewAsteriskChannel(AsteriskChannel channel) { channel.addPropertyChangeListener(this); } public void onNewMeetMeUser(MeetMeUser user) { user.addPropertyChangeListener(this); } public void onNewQueueEntry(AsteriskQueueEntry user) { user.addPropertyChangeListener(this); } public void onNewAgent(AsteriskAgent asteriskAgent) { asteriskAgent.addPropertyChangeListener(this); } /** *    .   {@link PropertyChangeEvent} *    , *        , *        CallBack * * @param propertyChangeEvent      */ public void propertyChange(PropertyChangeEvent propertyChangeEvent) { findEventEndCall(propertyChangeEvent); } private void findEventEndCall(PropertyChangeEvent event) { if (event.getSource() instanceof AsteriskChannel) { AsteriskChannel callBackChannel = (AsteriskChannel) event.getSource(); String callId = getStringWithOnlyDigits(callBackChannel.getCallerId().toString()); callId = ValidValues.getValidCallId(callId); if (callBackChannel.getState().toString().equals("HUNGUP") && event.getOldValue().toString().contains("RINGING")) { //      callBackChannel.removePropertyChangeListener(this); //     } else if (callBackChannel.getState().toString().equals("HUNGUP") && event.getOldValue().toString().contains("UP")) { //     callBackChannel.removePropertyChangeListener(this); //     } else if (callBackChannel.getState().toString().equals("HUNGUP")) { //      callBackChannel.removePropertyChangeListener(this); //     } } } private String getStringWithOnlyDigits(String strForParse) { String result = ""; if (strForParse != null && !strForParse.isEmpty()) { CharMatcher ASCII_DIGITS = CharMatcher.anyOf("<>").precomputed(); result = ASCII_DIGITS.removeFrom(strForParse.replaceAll("[^0-9?!]", "")); } return result; } } 

рдореИрдВ рдЖрдкрдХреЛ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╣реА рдкреНрд░рддрд┐рдЬреНрдЮрд╛ рдХрд░реЗрдВ, рдЬреЛ рдкреНрд░реЙрдкрд░реНрдЯреАрдЪреЗрдВрдЬ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдФрд░ рдкреНрд░реЙрдкрд░реНрдЯреАрдЪреЗрдВрдЬ рдПрд╡реЗрдВрдЯ рдХреЛ рджреЗрдЦреЗрдВ, рд╡рд╣ рд╕рд░реНрд╡рд░ рдкрд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╣рд░ рдЪреАрдЬ рдХрд╛ рдвреЗрд░ рд╣реЛрдЧрд╛ред рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдирд┐рд╖реНрдХрд░реНрд╖: рд╢реНрд░реЛрддрд╛ рдХреЛ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХрдо рд▓рдЯрдХрд╛рдПрдВред рд╣рд░ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдУрд░рд┐рдЬрд┐рдирд▓ рдХреЙрд▓рдмреИрдХ рд╡рд░реНрдЧ рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореИрдВрдиреЗ рдкрд╛рдпрд╛ред рдпрд╣ рдмреЗрдХрд╛рд░ рд╣реИред рдкреНрд░реЙрдкрд░реНрдЯреА рдЪреЗрдВрдЬрдЗрд╡реЗрдВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЖрддреЗ рд╣реИрдВ, рд╡рд╣рд╛рдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рджреЗрдЦреЗрдВ рдФрд░ рдЖрдкрдХреЛ рдХрд┐рдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдЧрд▓рд╛ - рд╕реВрдЪрдирд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ред

OriginateAction.setChannel рдореЗрдВ - trunk_name / phone_user рдкрд╛рд╕ рд╣реИ
phone_user - рдпрджрд┐ рдпрд╣ рд░реВрд╕реА рд╣реИ, рддреЛ рдпрд╣ рдЖрда рдХреЗ рдЖрдВрдХрдбрд╝реЗ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдЧрд░ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдп рд╕рдВрдЦреНрдпрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред

OriginateAction.setCallerId рдореЗрдВ - рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдлрд╝реЛрди рдирдВрдмрд░ рдкреНрд░реЗрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ,
рддрдм CallBackEventListener рдореЗрдВ рдпрд╣ callBackChannel.getCallerId () рдореЗрдВ рдЖрдПрдЧрд╛ред

рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд▓реЗрдВрдЧреЗ:

 String callId = getStringWithOnlyDigits(callBackChannel.getCallerId().toString()); 

рдЕрдВрдд рдореЗрдВ, рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛:

 asteriskServer.shutdown(); 

рдпрджрд┐ рдЖрдкрдХреЛ рдХреЛрдИ рдХреЙрд▓ рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдпрд╛ рддреЛ CallBackEventListener рд╡рд░реНрдЧ рдореЗрдВ
рдореМрдЬреВрджрд╛ рд╕рдВрдЪрд╛рд░ рдЪреИрдирд▓ рдореЗрдВ рд╣рдо рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╣реИрдВ:

 callBackChannel.hangup(); 

рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд░рд▓ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдирд┐рдХрд▓рд╛ред рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЬрд╛рдирдХрд╛рд░реА рдЦреЛрдЬрдиреЗ, рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдФрд░ рдХрд╛рдо рдЫреЛрдбрд╝рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред

рдЕрдкрдиреЗ Asterisk рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рд╢реБрднрдХрд╛рдордирд╛рдПрдБ!

рдЖрдЧреЗ рдкрдврд╝рдиреЗ:

1) рддрд╛рд░рд╛рдВрдХрди-рдЬрд╛рд╡рд╛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓

2) рддрд╛рд░рд╛рдВрдХрди рдкреНрд░рдмрдВрдзрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (AMI)

Source: https://habr.com/ru/post/hi469491/


All Articles