Категории:

IT

Asterisk, ARI. Коммутируй как Бог

В этой небольшой статье ничего не будет про план нумерации астериска. Речь пойдет про ARI — гибкий интерфейс управления Астериском.

Как только в астериск приходит инвайт, и вызов уходит в нашу программу (Stasis) мы получаем возможность для низкоуровневого построения звонка.

Взаимодействие с ARI происходит через прием событий по websocket от астериска, обработку и создания новых событий через HTTP REST API в сторону ARI.

StasisStart

Событие, которое получает наша программа, когда канал вошел в стазис контекст. StasisStart может сигнализировать, например о начале исходящего либо входящего звонка, в результате чего мы запускаем низкоуровневую логику по созданию канала в сторону другого абонента, добавлению его в бридж с каналом инициатором и дозвону.

Упрощенная схема обычного звонка

  1. Получили инвайт (StasisStart) событие от ARI, что сигнализирует о созданном канале A
  2. Создали канал B с эндпоинтом в сторону сип пира, либо в локальный прокси. (пример. SIP/MY_PEER/79001231122)
  3. Канал А из п.1 и B из п.2 объядинили в bridge
  4. Сделали дозвон (dial) в канал B
  5. Подождали ARI событие ChannelStateChange для канала B. И в случае если state — ‘Up’, запускаем ответ в канал A и звонок диалог начинается.
  6. При получении события ChannelHangupRequest для канала A либо B разрушаем звонок.

Сессия звонка

Созданных каналов может быть множество и есть необходимость знать, к каким звонкам относятся события по каким каналам. Поэтому при создании каналов в сторону другого абонента, можно записывать в стор для созданного канала указатель на id канала A, а в сторе для канала A хранить все данные, включая CDR и прочую техническую информацию.

В качестве хранилища я бы рекомендовал использовать redis, так как при больших cps и интенсивных запросах в базу данных может образоваться существенная нагрузка на жесткие диски и просесть производительность.

Оптимизация

Для оптимальной работы вашего ARI приложения под большим cps, я бы рекомендовал свести к минимуму запросы в реляционную базу данных. В своей практике я использовал запросы для небольшой ограничительной логики в момент инициализации звонка и для записи CDR после окончания звонка. Все остальные запросы выполняются в рэдис.

Тест производительности

Для тестирования я использовал консольную утилиту baresip, инициировав баш скриптом 200 дозвонов по пулу тестовых номеров, которые отвечают tt-monkeys.

200 параллельно запущенных звонков сумарно потребили около 5% загрузки на CPU. Все звонки завершились успешно, включая записанные CDR.

Дебаг stasis приложения, которое сигнализирует об отвеченных звонках
SIP сигнализация

Пандемия как тест на IQ и нужно ли цензурировать интернет?

Во времена, когда интернет только получил инструменты для коммуникации между обычными пользователями (FIDO, ICQ, веб форумы) мы обсуждали в сети новости, музыкантов, технологии, игры. Компьютер был далеко ни у каждого, а подключенный модем и настроенный клиент для общения — подавно. Поэтому «ламеров» в сети практически не было.

С тех пор интернет очень изменился. Пришла политика и практически каждый человек сегодня имеет коннект с интернетом и возможность изменить мир в несколько нажатий по экрану мобильного телефона.

К сожалению, ситуация с коронавирусом показала, что большинство людей не готовы к свободному распространению информации. Если в телевизоре есть цензура, то в сети информация распространяется свободно и воспринимается за истину. Как правило, люди, получившие информацию, доверяют ей и распространяют даже не проверяя ее достоверность и не анализируя. Да, речь идет о фейках.

Взять хотя бы последний нашумевший и напугавший немало количество людей фейк про вакцину-чип, и удаленное управление им. Интересно, как это можно объяснить технически? Жидкая микросхема, симкарта, батарейка и слот для зарядки? Такое только в фантастике можно увидеть, а люди поверили. Как верят в Битву Экстрасенсов, Кашпировскому с его заряженной водой, в плоскую землю, Вангу и т.п.

В итоге мы имеем два самых влиятельных источника информаци: телевидение и интернет.

Телевидение утверждает что красный это коричневый, а интернет — что красный это черный. И среднего тут не дано. Ибо что там, что там есть люди, кому эта позиция выгодна. В интернете — модно отрицать ТВ, на ТВ модно отрицать интернет и все явления в нем происходящие. А страдают обычные люди, у которых нет способности анализу и проверке фактов.

react-semantic-popup

Мой первый пост опенсорса в npm.

Popup компонент со встроенными стилями и авто-позиционированием. Popup вызывается как по наведению курсора на элемент, так и по клику.

Это легкий react-модуль, который не тащит ничего за собой в проект.

NPM

https://www.npmjs.com/package/react-semantic-popup

Github

https://github.com/icevl/react-semantic-popup

Роснет ТВ

Когда мы дружно уходили из utl.ru я предусмотрительно забэкапил свои проекты, над которыми трудился годами. В их числе был и Rosnet TV, до которого дошли руки и я на днях восстановил вещание в сеть, правда теперь уже не в локальную. 

В планах поднять еще пару наших каналов и запустить сервер для ретрансляции потока в том числе и HLS.

Пока стрим можно смотреть только в видео плеере. Будет время и ресурсы, сделаю ретрансляцию потоков в HLS для веб плеера.

Смотрите прямую трансляцию icevl на www.twitch.tv

MTProto Proxy для Telegram

Пока еще Telegram не анонсировал поддержку MTProto, хотя в IOS и Android версиях она появилась. 

Особенности:

  1. Для подключения вместо логин+пароль, достаточно только пароля
  2. Трафик не отличается от обычного HTTPS/TLS (ну почти)
  3. Пароль не передается до сервера при подключении
  4. Трафик зашифрован
  5. Возможна работа через прокси только Telegram’a (другие приложения работать не будут)
  6. Promoted каналы

Promoted-каналы — это каналы, на которе вы автоматически будете подписаны при подключении к прокси, он будет закреплен наверху списка контактов/чатов и его нельзя удалить пока вы не отключитесь от данного прокси. 

Так что теперь можно будет при помощи прокси раскручивать каналы.

Самый простой способ поднять MTProto Proxy Server:

sudo docker run —name ‘mtproto_proxy’ —restart unless-stopped -p 1984:1984 -dti dotcypress/mtproxy -s ‘proxy secret’

Получить ключ:

docker logs mtproto_proxy

Связисты

«По горам, горам лесистым, По полям родной земли Мы, военные связисты, Много трудных верст прошли.»

Джарвис, включи чайник!

Тут у Redmond оказывается полным ходом развивается концепция «Умного дома».

Чайник, мультиварка, лампочки. Все это теперь можно удаленно запускать, управлять подсветками, температурами и планировать задачи. Проснулся с утра от звука закипающего чайника, или забыл потушить свет и сделал это программно из метро.

Схема тут такая:

Бытовой прибор => любое устройство рядом в зоне действия Bluetooth с установленным приложением R4S Gateway => Интернет => Смартфон (с установленным клиентом Ready For Sky).

На клиенте и шлюзе необходимо авторизоваться под одним аккаунтом, на шлюзе — добавить все бытовые устройства в настройках и готово!

Это чайник, например:

Это цоколь, например:

VPS за даром

Хочу порекомендовать дешевый облачный хостинг. Всего 1 евро в месяц. VPN сервер, прокси, все что пожелаете. Подними сервер сам, раздай доступ друзьям.

https://www.arubacloud.com/