рддрд╛рд░рд╛рдВрдХрди рдкреНрд░рдмрдВрдзрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (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) рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ?рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ: рдЖрдкрдХреЛ рдпрд╛ рддреЛ рдПрд╕реНрдЯрд░рд┐рд╕реНрдХ рд╕рд░реНрд╡рд░ рдкрд░ рдХреБрдЫ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ рд╕рд░реНрд╡рд░ рдкрд░ рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕реБрдирдирд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рджреЛрдиреЛрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рд╣рдо рдХрд╛рд░реНрдп рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ:
- рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдЦреЛрд▓реЗрдВ;
- рд╣рдо рдХрд╛рдо рдХреЗ рдкрд░рд┐рджреГрд╢реНрдп рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ;
- рд╣рдо рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕реБрдирддреЗ рд╣реИрдВ;
- рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдХрд░реЗрдВред
рддрджрдиреБрд╕рд╛рд░, рдХрдиреЗрдХреНрд╢рди рдХреЛ 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(); } private void init() {
рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рд╣рдореЗрдВ рдХреНрдпрд╛ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдЯреНрд░рдВрдХ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдЯреНрд░рдВрдХ рд╡рд╣ рд╕рдВрдЦреНрдпрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕реЗ рдЖрдк рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЯреНрд░рдВрдХ рдФрд░ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдХреЗ рдмреАрдЪ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдмрд╛рдж рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдФрд░ рдЖрдкрдХреЗ рдЕрдиреНрдп рдХреМрди рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрд╣ рдЙрд╕реА рдХреНрд░рдо рдореЗрдВ рд╣реИред
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) {
рд╣рдордиреЗ рдПрдХ рдХреЙрд▓ рдмрдирд╛рдпрд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдП?
рдЗрд╕рдХреЗ рд▓рд┐рдП рджреЛ рдЪреАрдЬреЗрдВ рдХреА рдЬрд╛рддреА рд╣реИрдВ: рдХреЙрд▓рдмреИрдХ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдУрд░рд┐рдЬрдиреЗрдЯрдПрдВрдбрд╕рд╛рдЗрди рд╡рд┐рдзрд┐ рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рдФрд░ рдПрдХ рд╢реНрд░реЛрддрд╛ рд╕рд░реНрд╡рд░ рдкрд░ рд▓рдЯрдХрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рд╕рд╛рде рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╣рд░ рдЪреАрдЬрд╝ рдХреЛ рдорд░реНрдЬ рдХрд░ рджреЗрдЧрд╛ред
рдПрдХ рд╢реНрд░реЛрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЙрд▓рдмреИрдХ рд╡рд░реНрдЧ рдЖрдкрдХреЛ рдХреЙрд▓ рдХреЗ рдЕрдВрдд рдХреА рд╕реВрдЪрдирд╛ рдирд╣реАрдВ рджреЗрдЧрд╛ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдмрд╛рдд рдХреА рд╣реИ, рдФрд░ рди рд╣реА рдпрд╣ рдЖрдкрдХреЛ рд╕реВрдЪрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрднреА рднреА рдХрд╣реАрдВ рдФрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
public class CallBack implements OriginateCallback { private ChannelState resultCall = ChannelState.PRERING; @Override public void onDialing(AsteriskChannel asteriskChannel) {
рдХрд┐рд╕реА рд╢реНрд░реЛрддрд╛ рдХреЛ рддрд╛рд░рд╛рдВрдХрди рдкрд░ рдХреИрд╕реЗ рд▓рдЯрдХрд╛рдПрдВ?рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рд╡рд░реНрдЧ 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); } 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")) {
рдореИрдВ рдЖрдкрдХреЛ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╣реА рдкреНрд░рддрд┐рдЬреНрдЮрд╛ рдХрд░реЗрдВ, рдЬреЛ рдкреНрд░реЙрдкрд░реНрдЯреАрдЪреЗрдВрдЬ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдФрд░ рдкреНрд░реЙрдкрд░реНрдЯреАрдЪреЗрдВрдЬ рдПрд╡реЗрдВрдЯ рдХреЛ рджреЗрдЦреЗрдВ, рд╡рд╣ рд╕рд░реНрд╡рд░ рдкрд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╣рд░ рдЪреАрдЬ рдХрд╛ рдвреЗрд░ рд╣реЛрдЧрд╛ред рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдирд┐рд╖реНрдХрд░реНрд╖: рд╢реНрд░реЛрддрд╛ рдХреЛ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХрдо рд▓рдЯрдХрд╛рдПрдВред рд╣рд░ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдУрд░рд┐рдЬрд┐рдирд▓ рдХреЙрд▓рдмреИрдХ рд╡рд░реНрдЧ рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореИрдВрдиреЗ рдкрд╛рдпрд╛ред рдпрд╣ рдмреЗрдХрд╛рд░ рд╣реИред рдкреНрд░реЙрдкрд░реНрдЯреА рдЪреЗрдВрдЬрдЗрд╡реЗрдВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЖрддреЗ рд╣реИрдВ, рд╡рд╣рд╛рдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рджреЗрдЦреЗрдВ рдФрд░ рдЖрдкрдХреЛ рдХрд┐рдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдЧрд▓рд╛ - рд╕реВрдЪрдирд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред
рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ред
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)