Search code examples
perlasteriskagi

Asterisk::AGI perl - check if SIP channel is online?


I'm writing asterisk agi script for 1.8 asterisk. Before dial, I want to check if desired SIP channel is available. But I cant find a way to check if SIP channel is online using Asterisk::AGI

trying $AGI->channel_status('SIP/1001');

but it always returns -1

I was thinking to use AMI, but it doesn't work from AGI script (only in debug asterisk -vvvvc)


Solution

  • You can get result of function SIP_PEER or function CHANNEL

    pro-sip*CLI> core show function SIPPEER 
    
      -= Info about function 'SIPPEER' =- 
    
    [Synopsis]
    Gets SIP peer information. 
    
    [Description]
    Not available
    
    [Syntax]
    SIPPEER(peername[,item])
    
    [Arguments]
    item
        ip - (default) The ip address.
        port - The port number.
        mailbox - The configured mailbox.
        context - The configured context.
        expire - The epoch time of the next expire.
        dynamic - Is it dynamic? (yes/no).
        callerid_name - The configured Caller ID name.
        callerid_num - The configured Caller ID number.
        callgroup - The configured Callgroup.
        pickupgroup - The configured Pickupgroup.
        codecs - The configured codecs.
        status - Status (if qualify=yes).
        regexten - Registration extension.
        limit - Call limit (call-limit).
        busylevel - Configured call level for signalling busy.
        curcalls - Current amount of calls. Only available if call-limit
        is set.
        language - Default language for peer.
        accountcode - Account code for this peer.
        useragent - Current user agent id for peer.
        maxforwards - The value used for SIP loop prevention in outbound
        requests
        chanvar[name] - A channel variable configured with setvar for this
        peer.
        codec[x] - Preferred codec index number <x> (beginning with
        zero).
    
    [See Also]
    Not available
    pro-sip*CLI> 
    
    
    pro-sip*CLI> core show function CHANNEL
    
      -= Info about function 'CHANNEL' =- 
    
    [Synopsis]
    Gets/sets various pieces of information about the channel. 
    
    [Description]
    Gets/sets various pieces of information about the channel, additional <item>
    may be available from the channel driver; see its documentation for details.
    Any <item> requested that is not available on the current channel will return
    an empty string.
    
    [Syntax]
    CHANNEL(item)
    
    [Arguments]
    item
        Standard items (provided by all channel technologies) are:
        amaflags - R/W the Automatic Message Accounting (AMA) flags on the
        channel. When read from a channel, the integer value will always be
        returned. When written to a channel, both the string format or integer
        value is accepted.
            1 - 'OMIT'
            2 - 'BILLING'
            3 - 'DOCUMENTATION'
        accountcode - R/W the channel's account code.
        audioreadformat - R/O format currently being read.
        audionativeformat - R/O format used natively for audio.
        audiowriteformat - R/O format currently being written.
        callgroup - R/W call groups for call pickup.
        channeltype - R/O technology used for channel.
        checkhangup - R/O Whether the channel is hanging up (1/0)
        language - R/W language for sounds played.
        musicclass - R/W class (from musiconhold.conf) for hold music.
        name - The name of the channel
        parkinglot - R/W parkinglot for parking.
        rxgain - R/W set rxgain level on channel drivers that support it.
        secure_bridge_signaling - Whether or not channels bridged to this
        channel require secure signaling
        secure_bridge_media - Whether or not channels bridged to this channel
        require secure media
        state - R/O state for channel
        tonezone - R/W zone for indications played
        transfercapability - R/W ISDN Transfer Capability, one of:
            SPEECH
            DIGITAL
            RESTRICTED_DIGITAL
            3K1AUDIO
            DIGITAL_W_TONES
            VIDEO
        txgain - R/W set txgain level on channel drivers that support it.
        videonativeformat - R/O format used natively for video
        trace - R/W whether or not context tracing is enabled, only available
        *if CHANNEL_TRACE is defined*.
        *chan_sip* provides the following additional options:
        peerip - R/O Get the IP address of the peer.
        recvip - R/O Get the source IP address of the peer.
        from - R/O Get the URI from the From: header.
        uri - R/O Get the URI from the Contact: header.
        useragent - R/O Get the useragent.
        peername - R/O Get the name of the peer.
        t38passthrough - R/O '1' if T38 is offered or enabled in this channel,
        otherwise '0'
        rtpqos - R/O Get QOS information about the RTP stream
            This option takes two additional arguments:
            Argument 1:
             'audio'             Get data about the audio stream
             'video'             Get data about the video stream
             'text'              Get data about the text stream
            Argument 2:
             'local_ssrc'        Local SSRC (stream ID)
             'local_lostpackets' Local lost packets
             'local_jitter'      Local calculated jitter
             'local_maxjitter'   Local calculated jitter (maximum)
             'local_minjitter'   Local calculated jitter (minimum)
             'local_normdevjitter'Local calculated jitter (normal
             deviation)
             'local_stdevjitter' Local calculated jitter (standard
             deviation)
             'local_count'       Number of received packets
             'remote_ssrc'       Remote SSRC (stream ID)
             'remote_lostpackets'Remote lost packets
             'remote_jitter'     Remote reported jitter
             'remote_maxjitter'  Remote calculated jitter (maximum)
             'remote_minjitter'  Remote calculated jitter (minimum)
             'remote_normdevjitter'Remote calculated jitter (normal
             deviation)
             'remote_stdevjitter'Remote calculated jitter (standard
             deviation)
             'remote_count'      Number of transmitted packets
             'rtt'               Round trip time
             'maxrtt'            Round trip time (maximum)
             'minrtt'            Round trip time (minimum)
             'normdevrtt'        Round trip time (normal deviation)
             'stdevrtt'          Round trip time (standard deviation)
             'all'               All statistics (in a form suited to
             logging, but not for parsing)
        rtpdest - R/O Get remote RTP destination information.
           This option takes one additional argument:
            Argument 1:
             'audio'             Get audio destination
             'video'             Get video destination
             'text'              Get text destination
           Defaults to 'audio' if unspecified.
        rtpsource - R/O Get source RTP destination information.
           This option takes one additional argument:
            Argument 1:
             'audio'             Get audio destination
             'video'             Get video destination
             'text'              Get text destination
           Defaults to 'audio' if unspecified.
        *chan_iax2* provides the following additional options:
        osptoken - R/O Get the peer's osptoken.
        peerip - R/O Get the peer's ip address.
        peername - R/O Get the peer's username.
        secure_signaling - R/O Get the if the IAX channel is secured.
        secure_media - R/O Get the if the IAX channel is secured.
        *chan_dahdi* provides the following additional options:
        dahdi_channel - R/O DAHDI channel related to this channel.
        dahdi_span - R/O DAHDI span related to this channel.
        dahdi_type - R/O DAHDI channel type, one of:
            analog
            mfc/r2
            pri
            pseudo
            ss7
        keypad_digits - R/O PRI Keypad digits that came in with the SETUP
        message.
        reversecharge - R/O PRI Reverse Charging Indication, one of:
            -1 - None
             1 - Reverse Charging Requested
        no_media_path - R/O PRI Nonzero if the channel has no B channel.
        The channel is either on hold or a call waiting call.
        buffers - W/O Change the channel's buffer policy (for the current
        call only)
        This option takes two arguments:
            Number of buffers,
            Buffer policy being one of:
                'full'
                'immediate'
                'half'
        echocan_mode - W/O Change the configuration of the active echo
        canceller on the channel (if any), for the current call only.
        Possible values are:
            'on'    Normal mode (the echo canceller is actually reinitalized)
            'off'   Disabled
            'fax'   FAX/data mode (NLP disabled if possible, otherwise co
            mpletely disabled)
            'voice' Voice mode (returns from FAX mode, reverting the changes
            that were made)
    
    [See Also]
    Not available