ER

emilianodellacasa/ruby-asterisk

Developer tools

このページは AI により自動翻訳されています。技術的な詳細は原文をご確認ください。 原文を見る

76 stars 品質 55 トレンド 18MIT

RubyのAsterisk Managerインターフェイス

概要

3つのインターフェイスをカバーするAsterisk PBXのRubyクライアント: - -ランタイム依存関係:非同期〜> 2.0、ファラデード> 1.0、Websocket-driver〜> 0.8 : Async Fiberスケジューラで必要なIO#timeoutシムは、AGIモジュールがロードされると自動的に適用されます。アクションは必要ありません。 すべての AMI コマンドは、RubyAsterisk::AMI::Promise を即座に返します。 .value(timeout) を呼び出して、レスポンスを待ちます。 disconnect は、すべての保留中の promise を RuntimeError で拒否します。 RubyAsteriskのステータス値:DESCRIPTIVE STATUS:-1 エクステンションが見つかりません・ 0 アイドル・1 利用時・2 忙しい・3 利用不可・4 リング・5 オンホールド DescriptiveStatus は、そのマップのステータスのみに追加されます。他の値が nil を収めます。 構造化されたデータ解析 (PARSE DATA): CoreShowChannels, ParkedCalls, Originate, MeetMeList, ConfbridgeListRooms, ConfbridgeList, Status, ExtensionState, DeviceStateList, SKINNYdevices, SKINNYlines, QueuePause, Pong, Events, SIPshowpeer.

概要(AI 翻訳)

3つのインターフェイスをカバーするAsterisk PBXのRubyクライアント:

| インターフェース | ユースケース | エントリーポイント | 通貨モデル | お問い合わせ |AMI | TCP コマンド/イベントチャンネル | [[T0] | スレッド + 約束(ノンブロッキング) | |ARI HTTP | REST API | [[T1] | 同期(Faraday) | |ARI WebSocket | リアルタイムイベントストリーム | [[RubyAsterisk::ARI::WebSocket | Websocket-driver + スレッド | |AGI / FastAGI | 工程内ダイヤルプランロジック | [[[RubyAsterisk::AGI::Server | Async + Fibers |

要件

  • ルビー≥3.1
  • ランタイム依存関係: [async ~> 2.0], [faraday >= 1.0], [websocket-driver ~> 0.8]]

Ruby 3.1 Note: AGI モジュールがロードされると、Async Fiberスケジューラが必要とする[IO#timeoutのシムが自動的に適用されます。

インストール

AMI — Asterisk マネージャー インターフェイス

初期化と接続

約束モデル

すべての AMI コマンドは [RubyAsterisk::AMI::Promise] を即座に返し、not ブロックを実行します。 [.value(timeout)] を呼び出して、[Response を待ちます。

[[disconnect]]は、すべての保留約束を[[[T12]で拒否します。

ログイン/ログオフ

システムコマンド

チャネルコマンド

このページは AI により自動翻訳されています。技術的な詳細は原文をご確認ください。

README

以下は原文 README の抜粋です。原文を見る。

ruby-asterisk

A Ruby client for Asterisk PBX covering three interfaces:

Interface Use case Entry point Concurrency model
AMI TCP command/event channel RubyAsterisk::AMI::Client Threads + Promise (non-blocking)
ARI HTTP REST control API RubyAsterisk::ARI::Client Synchronous (Faraday)
ARI WebSocket Real-time event stream RubyAsterisk::ARI::WebSocket websocket-driver + Threads
AGI / FastAGI In-process dialplan logic RubyAsterisk::AGI::Server Async + Fibers

Requirements

  • Ruby ≥ 3.1
  • Runtime dependencies: async ~> 2.0, faraday >= 1.0, websocket-driver ~> 0.8

Ruby 3.1 note: the IO#timeout shim required by the Async Fiber scheduler is applied automatically when the AGI module is loaded — no action needed.

Installation

gem 'ruby-asterisk'
bundle install

AMI — Asterisk Manager Interface

Initialize and connect

require 'ruby-asterisk'

ami = RubyAsterisk::AMI::Client.new(host: '192.168.1.1', port: 5038)
ami.connect

The Promise model

Every AMI command returns a RubyAsterisk::AMI::Promise immediately — it does not block. Call .value(timeout) to wait for the Response:

promise  = ami.ping          # returns immediately
response = promise.value     # blocks up to 5 s (default)
response = promise.value(10) # custom timeout in seconds

puts response.success        # => true
puts response.message        # => "Pong"
puts response.action_id      # => "lk3m0p..."
puts response.data           # => structured Hash or Array depending on command
puts response.raw_response   # => raw AMI text

# On timeout:
begin
  response = promise.value(2)
rescue Timeout::Error => e
  puts e.message
end

disconnect rejects all pending promises with a RuntimeError.

Login / Logoff

ami.login(username: 'mark', secret: 'mysecret').value
ami.logoff.value

System commands

ami.ping.value
ami.command('core show channels').value
ami.wait_event(timeout: -1).value     # -1 = wait forever: .value blocks until an event arrives
ami.wait_event(timeout: 30).value     # bounded wait; .value gives up after 30 s
ami.event_mask('on').value            # enable event delivery on this connection
ami.parked_calls.value
ami.device_state_list.value
ami.skinny_devices.value
ami.skinny_lines.value

Channel commands

ami.core_show_channels.value
ami.status.value                      # all channels
ami.status(channel: 'SIP/alice-001').value

# Originate: channel, context, callee, priority
ami.originate('SIP/9100', 'OUTGOING', '123456', '1',
              caller_id: 'Alice',
              variable: 'var1=12,var2=99',
              timeout: 30_000,
GitHub で README 全文を見る

推奨ツール

別のキーワードを試すか、フィルタを外してください。

インストール

npx skillfish add emilianodellacasa/ruby-asterisk
MCP 初心者?mcpskill.org のガイドから始めましょう →