рд╣рд╛рдп% рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо%!
рддрд╛рд░рд╛рдВрдХрди рдЪрд┐рд╣реНрди рдкреАрдмреАрдПрдХреНрд╕ рдХреЛ рдкреНрд░рд╢рд╛рд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдЬрд▓реНрджреА рдпрд╛ рдмрд╛рдж рдореЗрдВ рдЧрдВрддрд╡реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рд░реВрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдпрд╣ рд╣реЛрддрд╛ рд╣реИ: рд╢рд╣рд░, рдПрдордПрди, рдЗрдВрдЯреНрд░рд╛-рдПрд░рд┐рдпрд╛ рд╕рдВрдЪрд╛рд░, рдПрдордЬреАред рдкрд╣рд▓реЗ рджреЛ рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИред рд▓реЗрдХрд┐рди рдкрд┐рдЫрд▓реЗ рджреЛ ... рдЦреИрд░, рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдмрдбрд╝реА рдмрд╛рдд рд╣реИ, рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ? рдбреЗрдл рдФрд░ рдПрдмреАрд╕реА рдХреЛрдб рдХреЗ рд▓рд┐рдП рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЧрд╛рдбрд╝реА рдФрд░ рд▓реЗрдЦ рдФрд░ рд▓рд┐рдкрд┐рдпреЛрдВ рдХреА рдПрдХ рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА рд▓рд┐рдЦреА рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрди рд╕рднреА рдирд┐рдпрдорд┐рдд рдХреЛ рд╕рдордп-рд╕рдордп рдкрд░ рдЕрджреНрдпрддрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдлрд┐рд░ рдПрдХ рд╡рд┐рдЪрд╛рд░ рдЙрддреНрдкрдиреНрди рд╣реБрдЖ, рдФрд░ рдХреНрдпрд╛ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реИ, рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрдкрдиреА рдмрд╛рдЗрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рдордЬрдмреВрдд рдХрд░реЗрдВрдЧреЗред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- рддрд╛рд░рд╛рдВрдХрди рдЪрд┐рд╣реНрди рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
- рдбреАрдИрдПрдл рдФрд░ рдПрдмреАрд╕реА рдХреНрд╖реЗрддреНрд░ рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдВ рдФрд░ рдЖрдмрд╛рдж рдХрд░реЗрдВ
- рддрд╛рд░рд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ
- рд╣рдореЗрдВ рдЬрд┐рди рджрд┐рд╢рд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрдирдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рд▓рд┐рдЦреЗрдВ
рдЪрд░рдг 1. рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рддрд╛рд░рд╛рдВрдХрди рдХрдиреЗрдХреНрд╢рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдореИрдВрдиреЗ рд░реАрдпрд▓рдЯрд╛рдЗрдо рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдкреЛрд╕реНрдЯрдЧреНрд░реИрд╕реНрдХрд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд╕рднреА рд╡рд░реНрдгрд┐рдд рдЖрдЧреЗ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдкреЛрд╕реНрдЯрдЧреНрд░реИрдХреНрд╕реНрд▓ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рд╣реЛрдЧреА, рдЕрдиреНрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП, рдорд╛рдореВрд▓реА рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред
рддрд╛рд░рд╛рдВрдХрди рдЪрд┐рд╣реНрди рд╡рд╛рд▓реЗ рд╕рд░реНрд╡рд░ рдкрд░, рдпреВрдирд┐рдХреНрд╕рдмреЗрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ, рд╕рд╛рде рд╣реА рд╕рднреА рдЖрд╢реНрд░рд┐рддреЛрдВ рдХреЗ рд╕рд╛рде рдУрдбреАрдмреАрд╕реА рдХреЗ рд▓рд┐рдП рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬреЗрдХ рдЪрд╛рд▓рдХред рдбреЗрдмрд┐рдпрди / рдЙрдмрдВрдЯреВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
#apt-get install unixodbc odbc-postgresql
рд╣рдо рдирд┐рдореНрди рд░реВрдк рдореЗрдВ odbc рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреА рд╡рд┐рд╡рд░рдг рдлрд╝рд╛рдЗрд▓ рд▓рд╛рддреЗ рд╣реИрдВ:
32-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП, рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд░рд╛рд╕реНрддрд╛ рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред
рдкрд╣рд▓реЗ рдирд┐рд░реНрдорд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдПрдБ:
рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:
isql config
рдпрджрд┐ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрдХреЗрдд рджреЗрдЦреЗрдВ:
+---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL>
рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ рдХрдиреЗрдХреНрд╢рди рдареАрдХ рдЪрд▓ рд░рд╣рд╛ рд╣реИред
рд╣рдо рдЗрд╕ рд╕рдВрдмрдВрдз рдХреЛ /etc/asterisk/res_odbc.conf рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ:
[asterisk] enabled => yes dsn => config username => asterisk password => Uidj$5tuYF pre-connect => yes
рдЪрд░рдг 2. рдбреАрдИрдПрдл рдФрд░ рдПрдмреАрд╕реА рдХреНрд╖реЗрддреНрд░ рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдВ рдФрд░ рдЖрдмрд╛рдж рдХрд░реЗрдВ
рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡рд░ рдкрд░, рдЕрдВрджрд░ рддрд╛рд░рд╛рдВрдХрд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдПрдБ, рдЬрд┐рд╕реЗ рд╣рдо рд▓рдЧрднрдЧ рдирд┐рдореНрди рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ (рдХреЙрд▓рдо рдХреА рдиреНрдпреВрдирддрдо рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреА рдЧрдИ рд╣реИ):
CREATE TABLE zones ( def smallint NOT NULL, start integer NOT NULL, finish integer NOT NULL) WITHOUT OIDS;
рд╣рдо рдирд┐рдореНрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдХрд░ рдмрдирд╛рдИ рдЧрдИ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рднрд░рддреЗ рд╣реИрдВ:
рдЪрд░рдг 3. рддрд╛рд░рд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ
рд╣рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬрд┐рд╕рдХрд╛ рд╡рд░реНрдгрди рд╣рдо /etc/asterisk/func_odbc.conf рдореЗрдВ рдХрд░реЗрдВрдЧреЗ
[ZONES] prefix=CHECK dsn=asterisk readhandle=asterisk readsql=SELECT count(*) from zones where def='${ARG1:1:3}' and start<='${ARG1:4}' and finish>='${ARG1:4}'
рдЪрд░рдг 4: рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рджрд┐рд╢рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рд▓рд┐рдЦреЗрдВ
рдЕрдВрддрд┐рдо рдЪрд░рдг: рд╕рдВрджрд░реНрднреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВред
рдкрд╣рд▓рд╛ рд╕рдВрджрд░реНрдн рдЙрди рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдЗрдВрдЯреНрд░рд╛-рдЬрд╝реЛрди рдХреЙрд▓ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ:
[zones] include => template
рд▓рдВрдмреА рджреВрд░реА рдХреА рдХреЙрд▓ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░рд╛:
[meggorod] include => template
рд╣рд╛рдВ, рд╡реЗ рд╕рдорд╛рди рд╣реИрдВ:
[template] exten => _8XXXXXXXXXX,1,GotoIf($["${CHECK_ZONES(${EXTEN})}" = "1"]?4) same => 2,GotoIf($["${CONTEXT}" = "meggorod"]?6:error,1) same => 3,Hangup() same => 4,Dial(SIP/prov1/${EXTEN},30,tTS(3600)gxX) same => 5,Hangup() same => 6,Dial(SIP/prov2/${EXTEN},30,tTS(3600)gxX) exten => error,1,Playback(an-error-has-occured) exten => error,n,Hangup()
рдЦреИрд░, рдпрд╣ рд╕рдм рд▓рдЧрддрд╛ рд╣реИред рд╡рд┐рдХрд▓реНрдк рдЖрджрд░реНрд╢ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред