Asterisk::AGI perl - 检查 SIP 通道是否在线?

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

我正在为 1.8 asterisk 编写 asterisk agi 脚本。拨号前,我想检查是否有所需的 SIP 通道可用。 但是我找不到使用 Asterisk::AGI

检查 SIP 通道是否在线的方法

正在尝试 $AGI->channel_status('SIP/1001');

但总是returns-1

我想使用 AMI,但它在 AGI 脚本中不起作用(仅在调试中 asterisk -vvvvc

您可以获得函数 SIP_PEER 或函数 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

根据 arheops 的回答,这是测试 SIP 通道状态的工作 AGI:

$AGI->exec("EXEC Set(TESTVAR=${SIPPEER(8880101,status)})");
my $testvar = $AGI->get_variable('TESTVAR'); 
$AGI->verbose("testvar $testvar");

客户端日志:

AGI.agi: testvar OK (170 ms)

当然qualify=yes应该设置为对端或全局