
emilianodellacasa/ruby-asterisk
Developer toolsЭта страница переведена автоматически. Технические детали смотрите в оригинале. Открыть оригинал
Интерфейс Asterisk Manager в Ruby
Обзор
Клиент Ruby для Asterisk PBX, охватывающий три интерфейса: Зависимости от времени выполнения: async ~> 2.0, faraday >= 1.0, websocket-driver ~> 0.8 Шайм IO#timeout, требуемый планировщиком Async Fiber, применяется автоматически при загрузке модуля AGI — никаких действий не требуется. Каждая команда AMI возвращает RubyAsterisk::AMI::Promise немедленно — он блокирует. Вызовите .value(timeout) для ожидания ответа: Отключение отклоняет все ожидающие обещания с ошибкой Runtime. Значения статуса от RubyAsterisk::DESCRIPTIVE STATUS:-1 Расширение не найдено · 0 Idle · 1 В использовании · 2 Занято · 3 Недоступно · 4 Звонок · 5 На выдержке Описательный статус добавляется только для статусов на этой карте; любое другое значение дает nil. Команды со структурированным анализом данных (PARSE DATA): CoreShowChannels, ParkedCalls, Originate, MeetMeList, ConfbridgeList, ConfbridgeList, Status, ExtensionState, DeviceStateList, SKINNYdevices, SKINNYlines, QueuePause, Pong, Events, SIPpeers, SIPshowpeer.
Обзор (машинный перевод)
Клиент Ruby для Asterisk PBX, охватывающий три интерфейса:
| Интерфейс | Случай использования | Точка входа | Модель параллелизма |
[скрыто] [скрыто] [скрыто] [скрыто]
| AMI | TCP Command/event channel | RubyAsterisk::AMI::Client | Threads + Promise (неблокирующий) |
| ARI HTTP | REST control API | RubyAsterisk::ARI::Client | Синхронный (Faraday) |
| ARI WebSocket | Поток событий в реальном времени | RubyAsterisk::ARI::WebSocket | websocket-driver + Threads |
| AGI/FastAGI | В процессе диалплан-логика | RubyAsterisk::AGI::Server | Async + Fibers |
Требования
Рубин ≥ 3.1
Зависимости времени выполнения: async ~> 2.0, faraday >= 1.0, websocket-driver ~> 0.8
Примечание 3.1 к Руби: шим IO#timeout, требуемый планировщиком Async Fiber, применяется автоматически при загрузке модуля AGI — никаких действий не требуется.
##Установка
AMI - Asterisk Manager Interface
Инициировать и подключать
Модель Обещания
Каждая команда AMI немедленно возвращает RubyAsterisk::AMI::Promise — она не блокирует. Призывайте [9] ждать [10]:
[11] отвергает все невыполненные обещания [12].
Логин/Логотип
Системные команды
###Команды каналов
Эта страница переведена автоматически. Технические детали смотрите в оригинале.
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