
emilianodellacasa/ruby-asterisk
Developer toolsこのページは AI により自動翻訳されています。技術的な詳細は原文をご確認ください。 原文を見る
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#timeoutshim 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,
推奨ツール
別のキーワードを試すか、フィルタを外してください。
インストール
npx skillfish add emilianodellacasa/ruby-asterisk