ER

emilianodellacasa/ruby-asterisk

Developer tools

Эта страница переведена автоматически. Технические детали смотрите в оригинале. Открыть оригинал

76 stars Качество 55 Тренд 18MIT

Интерфейс 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#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,
Открыть полный README на GitHub

Рекомендуемые инструменты

Попробуйте другой запрос или уберите фильтр.

Установка

npx skillfish add emilianodellacasa/ruby-asterisk
Новичок в MCP? Начните с руководства на mcpskill.org →