npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

callmanager-voice-sdk

v0.1.18

Published

SDK и серверная часть для осуществления звонков через Asterisk и WebRTC (аналог Twilio Voice SDK).

Readme

Call manager SDK

SDK и серверная часть для осуществления звонков через Asterisk и WebRTC (аналог Twilio Voice SDK).


Термины

  • SDK (software development kit) — библиотека для фронтенда, используется для звонков (аналог twilio-voice-sdk).
  • Asterisk — решение компьютерной телефонии, обрабатывает SIP-звонки.
  • WebRTC — технология передачи аудио/видео из браузера.
  • API — интерфейс взаимодействия с веб-сервером (получение токенов, статусов, постбеков).

Принцип работы

  1. Фронтенд подключает SDK.
  2. При инициализации звонка:
    • SDK обращается к веб-серверу за токеном.
    • Сервер запрашивает у внешнего сервиса XML с данными для звонка.
    • Возвращает готовый объект с кредами.
  3. SDK шифрует номер и инициирует соединение через SIP over WebSocket (JsSIP → Asterisk).
  4. При успешном соединении начинается обмен медиа по WebRTC.
  5. Веб-сервер отслеживает статусы звонка (accept, reject, busy, disconnect и т.д) и пушит их на фронтенд через сокеты.
  6. После завершения звонка сервер рассылает постбеки (error, call_update, record).

SDK

Установка

npm install callmanager-voice-sdk

Использование

Основная работа происходит через 2 доступных класса - Device и Call. Для начала работы необходимо получить токен по роуту https://${BASE_PATH}/generate_token. Далее создаем инстанс Device - new Device(token, deviceParams) и передаем в него полученный токен, а также параметры для конструктора - здесь обязательны следующие поля:

  • asteriskConnection - адрес сокета для подсоединения к Asterisk по Sip over Socket (пример - wss://asterisk.com)
  • callManagerHttpConnection - адрес сервера для отправки http запросов (пример - https://server.com)
  • callManagerWsConnection - адрес для подключения к серверу по сокету (пример - wss://server.com)

У созданного объекта появляется метод для звонка - connect(params), который принимает параметр типом Record<string, string> - в него передаем инфу для звонка. Метод SDK обратится к веб-серверу, получит актуальные данные для соединения, а также запросит xml, зашифрует полученный номер, чтобы он не светился в браузере, и вернет на SDK. Затем через JsSIP по sip over socket запрос пойдет на Asterisk, в случае успешного соединения начнется обмен медиа. Кроме того, поднимается сокет для отслеживания статусов звонка. Статусы отслеживаются на веб-сервере и оповещают об этом клиент. Вызванный метод connect() вернет объект Call, у которого через метод .on можно подписаться на события которые отрабатывают при изменении статуса.

Список доступных событий

  • ringing - начало вызова, идет звонок
  • accept - абонент принял звонок
  • error - ошибка
  • reject - звонок отклонен
  • disconnect - завершение соединения (приходит после того как звонок был принят и завершен одной из сторон)
  • cancel - отменен
  • busy - абонент занят
  • no_answer - нет ответа

Дополнительно

  • метод destroy - доступен у инстанса Device, немедленно завершает звонок
  • метод sendDigits - доступен у инстанса Call, принимает 2 параметра. Первый - тон в виде строки, второй объект опций (опционален)
  • через Call.parameters можно получить CallSid текущего звонка. После завершения звонка подчищаются все открытые соединения и удаляются все ссылки на объекты

Пример использования

import { Device, Call } from "callmanager-voice-sdk";

// 1. Получаем токен
const token = await fetch("https://${BASE_PATH}/generate_token").then(r => r.text());

// 2. Создаем Device
const deviceParams = {
    asteriskConnection: 'wss://asterisk.com',
    callManagerHttpConnection: 'https://server.com',
    callManagerWsConnection: 'wss://server.com'
}
const device = new Device(token, deviceParams);

// 3. Инициируем звонок
const params = {
  manager_id: "1",
  trader_id: "01",
  outgoing_number: "+79000000000",
  encrypted_number: "secret_number"
};

const call = await device.connect(params);

// 4. Подписываемся на события
call.on("accept", (c: Call) => {
  console.log("Call accepted:", c.parameters.CallSid);
});

// 5. Передача тона
call.sendDigits('1', {duration: 1});

// 6. Разрыв соединения
device.destroy();

Веб-сервер

Выполняет функции:

  • генерация и валидация токенов;
  • выдача кредов;
  • мониторинг состояния звонка;
  • рассылка постбеков.

Постбеки рассылаются в несколько попыток после завершения звонка.

Генерация токенов

  • Токены подписываются и проверяются через приватный и публичный ключи.
  • Используемый алгоритм - RS256.
  • При запросах токены приходят в заголовке 'X-Twilio-Signature'

Схема

Call flow