Asterisk рд╕рдВрд╕реНрдХрд░рдг 12 рдиреЗ REST рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (Asterisk REST рдЗрдВрдЯрд░рдлрд╝реЗрд╕ - ARI) рдкреЗрд╢ рдХрд┐рдпрд╛ред
рд╣рд╛рдВ, рдпрд╣ рдПрдХ рддрд░рд╣ рд╕реЗ RESTful API рд╣реИред
рдЕрдм рддрдХ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд╕рд╛рдзрди рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:
- рддрд╛рд░рд╛рдВрдХрди
- рдкреБрд▓
- рдЪреИрдирд▓
- endpoints
- рдШрдЯрдирд╛рдХреНрд░рдо
- рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ
- рдзреНрд╡рдирд┐
- рдЖрд╡реЗрджрди
- рдкреНрд▓реЗрдмреИрдХ
- Devicestates
- рдореЗрд▓рдмреЙрдХреНрд╕
рдпрд╛, рдЪреИрдирд▓, рдбрд┐рд╡рд╛рдЗрд╕реЗрд╕, рдмреНрд░рд┐рдЬ, рд░рд┐рдХреЙрд░реНрдбреНрд╕, рд╕рд╛рдЙрдВрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлреЗрд╕ред рд╕рдВрднрд╡рддрдГ рдХреНрд╖рдорддрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╣реЛрдЧреА :-)
рдЦреИрд░, рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ WebSocket рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ / ari / рдШрдЯрдирд╛рдУрдВ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдФрд░ рдирд┐рд░рдВрддрд░ рдХрдиреЗрдХреНрд╢рди рдореЛрдб рдореЗрдВ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред
AMI рдХреЗ рд╡рд┐рдкрд░реАрдд, JSON рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдпрд╣рд╛рдВ рдЪрд▓рддреЗ рд╣реИрдВ, рдФрд░ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдмреЗрд╣рдж рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
ARI рдкрд░ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдкрд┐:
import ari client = ari.connect('http://localhost:8088/', 'hey', 'peekaboo') def on_dtmf(channel, event): """Callback for DTMF events. When DTMF is received, play the digit back to the channel. # hangs up, * plays a special message. :param channel: Channel DTMF was received from. :param event: Event. """ digit = event['digit'] if digit == '#': channel.play(media='sound:goodbye') channel.continueInDialplan() elif digit == '*': channel.play(media='sound:asterisk-friend') else: channel.play(media='sound:digits/%s' % digit) def on_start(channel, event): """Callback for StasisStart events. On new channels, register the on_dtmf callback, answer the channel and play "Hello, world" :param channel: Channel DTMF was received from. :param event: Event. """ channel.on_event('ChannelDtmfReceived', on_dtmf) channel.answer() channel.play(media='sound:hello-world') client.on_channel_event('StasisStart', on_start)
рдШрдЯрдирд╛рдПрдБ рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЖрдк GET рджреНрд╡рд╛рд░рд╛ рдПрдХ рдИрд╡реЗрдВрдЯ рдЬрдирд░реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдк рдЗрд╕реЗ рдЦреБрдж рдХреЛ WebSocket рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ UserEvent рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддреЛ рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рддрд╛рд░рд╛рдВрдХрди рдбреЗрдЯрд╛ рдмрд╕ рдХреА рддрд░рд╣ рд╣реИ: - {P
рд╡реЗрдмрд╕реЙрдХреЗрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЙрд▓ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╕реНрдЯреИрд╕рд┐рд╕ рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рдбрд╛рдпрд▓рдкреНрд▓рд╛рди рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдбрд╛рдпрд▓рдкреИрди рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
exten => 1,1,Wait(1.5) same => n,Stasis(dialer) ; dialer is the name of the application same => n,Wait(2) same => n,Hangup()
рдЖрдк / рдЪреИрдирд▓ / {ChannelId} / рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ WebSocket рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ WebSocket рд╕реЗ рдирд┐рдпрдВрддреНрд░рдг Asterisk dialplan рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдЧрд╛ред
рдпрд╣ рдПрдХ рдмреЛрддрд▓ рдореЗрдВ рдПрдПрдордЖрдИ рдФрд░ рдПрдЬреАрдЖрдИ рдХреА рддрд░рд╣ рд╣реИред
рд╡реИрд╕реЗ, рдПрдкреАрдЖрдИ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ рд░реЛрдЯреА рд╣реИред
рдпрд╣рд╛рдБ рдПрдХ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд╣реИ:
рдЦреИрд░, рдПрдкреАрдЖрдИ рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ UseCases рдХрд╛ рдПрдХ рдкреИрдХреЗрдЯ рд▓реЗрдХрд░ рдЖрдпрд╛:
- рдирд┐рдЧрд░рд╛рдиреА рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ
- рдЬрд╛рд╕реВрд╕ рдХреЛ рдмреБрд▓рд╛рдУ
- рд╕рдореНрдореЗрд▓рди рдкреНрд░рдмрдВрдзрдХ
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдирд┐рдЧрд░рд╛рдиреА
- рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдкреНрд░рдмрдВрдзрдХ
рдореЙрдирд┐рдЯрд░ ^ рдЬрд╛рд╕реВрд╕ ^ рд░рд┐рдХреЙрд░реНрдб ^ рд╕рдореНрдореЗрд▓рди ^ рдбрд╛рдпрд▓рд░
рдпрд╣ рджреВрд╕рд░реЗ рд╕реНрддрд░ рдкрд░ рдПрдХ рд╕рдВрдХреНрд░рдордг рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред
Asterisk12, рдкреНрд░рд╢рд╛рд╕рдХ рдХреЗ рд▓рд┐рдП рдЯреЗрд▓реАрдлреЛрди рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реБрдП, рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ FreeSWITCH рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред IMHOред XML рд╣реИ, рдпрд╣рд╛рдБ JSON рд╣реИред
рдФрд░ рдЕрдЧрд░ рдЖрдк CURL рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдбрд╛рдпрд▓рдкреНрд▓рд╛рди рдРрд╕реЗ рд╣рд╛рдереЛрдВ рдХреЛ рдмрдврд╝рддрд╛ рд╣реИ :-)
*CLI> core show function CURL -= Info about function 'CURL' =- [Synopsis] Retrieves the contents of a URL [Description] url - URL to retrieve post-data - Optional data to send as a POST (GET is default action) [Syntax] CURL(url[,post-data])
рдЕрдЪреНрдЫрд╛ рдХрд┐рдпрд╛, рдХреНрдпрд╛ рдХрд╣рдирд╛ рд╣реИ :-)
рдореБрдЦреНрдп рд▓рд┐рдВрдХ: