Advertisement
Guest User

Untitled

a guest
Jul 6th, 2021
272
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.31 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. import logging
  4. import requests
  5. import ari
  6.  
  7. logging.basicConfig(level=logging.ERROR)
  8.  
  9. client = ari.connect('http://localhost:8088', 'user', 'secret')
  10.  
  11.  
  12. def safe_hangup(channel):
  13.     """Safely hang up the specified channel"""
  14.     try:
  15.         channel.hangup()
  16.         print "Hung up {}".format(channel.json.get('name'))
  17.     except requests.HTTPError as e:
  18.         if e.response.status_code != requests.codes.not_found:
  19.             raise e
  20.  
  21.  
  22. def safe_bridge_destroy(bridge):
  23.     """Safely destroy the specified bridge"""
  24.     try:
  25.         bridge.destroy()
  26.     except requests.HTTPError as e:
  27.         if e.response.status_code != requests.codes.not_found:
  28.             raise e
  29.  
  30.  
  31. def stasis_start_cb(channel_obj, ev):
  32.     """Handler for StasisStart"""
  33.  
  34.     channel = channel_obj.get('channel')
  35.     channel_name = channel.json.get('name')
  36.     args = ev.get('args')
  37.  
  38.     if not args:
  39.         print "Error: {} didn't provide any arguments!".format(channel_name)
  40.         return
  41.  
  42.     if args and args[0] != 'inbound':
  43.         # Only handle inbound channels here
  44.         return
  45.  
  46.     if len(args) != 3:
  47.         print "Error: {} didn't tell us who to dial".format(channel_name)
  48.         channel.hangup()
  49.         return
  50.  
  51.     print "{} entered our application".format(channel_name)
  52.     channel.ring()
  53.  
  54.     try:
  55.         print "Starting video channel {}".format(args[2])
  56.         video = client.channels.originate(endpoint=args[2],
  57.                                              app='doorbell-bridge-dial',
  58.                                              appArgs='dialed',
  59.                                              formats='g722,h264')
  60.     except requests.HTTPError:
  61.         print "Whoops, couldn't add %s for video" % args[2]
  62.         channel.hangup()
  63.         return
  64.  
  65.     video.on_event('StasisEnd', lambda *args: safe_hangup(channel))
  66.     channel.on_event('StasisEnd', lambda *args: safe_hangup(video))
  67.  
  68.     bridge = client.bridges.create(type='mixing')
  69.     channel.on_event('StasisEnd', lambda *args: safe_bridge_destroy(bridge))
  70.  
  71.     try:
  72.         print "Dialing {}".format(args[1])
  73.         outgoing = client.channels.originate(endpoint=args[1],
  74.                                              app='doorbell-bridge-dial',
  75.                                              appArgs='dialed',
  76.                                              callerId=channel.json.get('caller').get('name'),
  77.                                              originator=video.id)
  78.     except requests.HTTPError:
  79.         print "Whoops, pretty sure %s wasn't valid" % args[1]
  80.         channel.hangup()
  81.         return
  82.  
  83.     channel.on_event('StasisEnd', lambda *args: safe_hangup(outgoing))
  84.     outgoing.on_event('StasisEnd', lambda *args: safe_hangup(channel))
  85.  
  86.     def outgoing_start_cb(channel_obj, ev):
  87.         """StasisStart handler for our dialed channel"""
  88.  
  89.         print "{} answered; bridging with {}".format(outgoing.json.get('name'),
  90.                                                      channel.json.get('name'))
  91.         channel.answer()
  92.  
  93.         bridge.addChannel(channel=[channel.id, outgoing.id, video.id])
  94.         bridge.setVideoSource(channelId=video.id)
  95.  
  96.     outgoing.on_event('StasisStart', outgoing_start_cb)
  97.  
  98. client.on_channel_event('StasisStart', stasis_start_cb)
  99.  
  100. client.run(apps='doorbell-bridge-dial')
  101.  
  102.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement