简体   繁体   中英

asterisk ari calling stuck in ringing with python

I'm quite new with ARI scripting for Asterisk, and I've been trying to make some script to handle a 1 to 1 communication with ari-py in python. I've been following the example that provided in the asterisk wiki and so far so good. But when I try to create a call, the recipient always keep ringing, even if I have answered it. Is there something wrong with how I handle the call? Here's my script

def stasis_start_cb(self, channel, ev):
        """Handler for StasisStart event"""
        chan = channel.get('channel')
        chan.answer()
        print "Channel %s has entered the application" % chan.json.get('name')
        outgoing = client.channels.originate(endpoint="SIP/1002", extension='1002', callerId='Tes', app='channel-dump', appArgs='dialed')

I tried using OOP to simplify the function usage, are there anything wrong with that script? And here's another script trying to make a call by using a bridge:

def outgoing_call(self,channel):
        try:
            outgoing = client.channels.originate(endpoint="SIP/1002", app='channel-dump', appArgs='dialed')
        except requests.HTTPError:
            channel.hangup()
            return

    def outgoing_start(self, bri, channel):
        channel.answer()
        self.addChan(channel, bridge)

    def stasis_start(self, channel, ev):
        chan = channel.get('channel')
        name = chan.json.get('name')
        """ars = ev.get('args')

        if not ars:
            print "Error: {} didn't provide any arguments!".format(name)
            return
        if ars and ars[0] != 'inbound':
            return
        if len(ars) != 2:
            print "Error: {} didn't tell us who to dial".format(name)
            chan.hangup()"""

        print "Channel {} entered the application".format(name)
        chan.ring()

        self.outgoing_call(chan)
        self.outgoing_start(bridge, chan)

Both the client is able to be added in the bridge, and I can make a call, but the problem still persist, the recipient keep saying they are ringing despite I have answered the call

Turns out, the problem is in here

def outgoing_call(self,channel):
    try:
        outgoing = client.channels.originate(endpoint="SIP/1002", app='channel-dump', appArgs='dialed')
    except requests.HTTPError:
        channel.hangup()
        return

As the dialed number answer the call, they uses the same script, so they ended up calling themselves again. A simple if condition to make the dialed number not call to itself again is all that is needed

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM