Признайтесь, было ли у Вас когда-нибудь желание послушать, о чем говорят друзья, жены, мужья и т.д. без Вас? Было бы классно набрать телефонный номер, и чтобы связь сама устанавливалась и не ждать, когда пользователь ответит на звонок. Я уже активно пользуюсь этим функционалом и это, скажу Вам, затягивает. Реализовывая его в рамках одного мобильного приложения, я долго искал готовые решения, но, конечно же, ничего не нашел. В итоге за 2 вечера (6 часов), мне удалось реализовать эту задачу. Но обо всем по порядку…



Сформируем задачу: Реализация возможности принудительных звонков клиентам VoIP-сети. Клиенты работают на мобильных телефонах IOS и Android.

Условно давайте разобьем задачу на северную сторону и клиентскую. В этой части я напишу о сервере. Итак, начнем…

Перед тем как развернуть собственный сервер, я искал какие-то бесплатные аналоги. Мне требовалось чтобы внутри VoIP сети провайдер не брал деньги и предоставлял возможность API регистрации клиентов. Нет, такого нет, или одно, или другое. Ну я не готов платить, даже 0.003$ за минуту, мне бы всё сразу и бесплатно. Выход один, стать самому VoIP провайдером.

Разворачиваем виртуальную машину
Предлагаю сначала определиться, что делает сервер. Я не записывал телефонные разговоры и поэтому решил ограничится обычной виртуальной машиной с маленьким жестким диском, обязательным статическим IP-адресом, CPU:400 MHz и RAM:512 МB.
 Накатил на нее Debian и выполнил ряд стандартных команд

apt-get update && apt-get upgrade — обновляем версии пакетов.

apt-get install asterisk — устанавливаем последнюю версию телефонии из репозитория.

apt-get install asterisk-mysql — возможность хранить пользователей в базе данных и синхронизировать с Asterisk

apt-get install mysql-server5 — устанавливаем сервер баз данных MySQL.

apt-get install mc — устанавливаем midnight commander, для удобства редактирования файлов конфигурации.

Если на этом этапе посыпались ошибки или что-то не получилось, то дальше можете не читать, сначала прочтите об установке пакетов в Debian.

Развертываем и настраиваем Asterisk
    Asterisk из пакета вполне работоспособна, лично мне не было необходимости производить сборку из исходников. Перед настройкой давайте определимся, что мы от него хотим.
Возможность принимать звонки внутри нашей VoiP сети.
Абонент может находитбся где угодно, ему не нужно быть физически в одной подсети, между сервером и клиентом интернет, с его шлюзами, НАТами и еще черт знает чем.
Хранение пользователей в специальной базе данных.
Свое красивое имя (телефонный номер) в моем случае ivan@bestmyfamily.com

С требованиями определились, давайте приступать к конфигурации.
Открываем MC и переходим в каталог /etc/asterisk

Находим файл asterisk.conf, нажимаем f4 и добавляем в конец файла вот такие строки

[compat]
pbx_realtime=1.6
res_agi=1.6
app_set=1.6

Это позволит нам в режиме реального времени синхронизироваться с базой данных. Сразу отвечу на вопрос, почему я вынес хранение пользователей в отдельную базу данных. Все очень просто, добавлять я их буду простым PHP скриптом с другого сервера. Это крайне необходимо, если Ваш сервер, как и мой, принимает по 10 новых пользователей в минуту. Я просто физически не смогу внести их всех в конфигурационный файл.

В начале этого файла в секции [options] Вы можете поставить два параметра:

verbose = 64
debug = 64

теперь в консоли, после запуска команды asterisk -r мы будем видеть все что происходит с нашим сервером, так сказать, в режиме реального времени.

Теперь настроим прием звонков. В нашей папке конфигурационных файлов Asterisk, находим файл extensions.conf и в его конец добавляем

[myfamily]    # Тут можете написать что угодно,
                   # это название Вашего плана звонков,
                   # но он должен совпадать с Вашим полем context в Sip.conf

exten => _[a-z].,1,Dial(SIP/${EXTEN},60)
exten => _[A-Z].,2,Dial(SIP/${EXTEN},60)

Давайте разберем это на примере обычного звонка.
ivan@bestmyfamily.com звонит своей жене по телефону Zaya@bestmyfamily.com

Вызов поступает к серверу и происходит следующее:
_[a-z].  — вот этой записью Астериск ищет, что делать с этим телефонным номером. Сюда он подставит нашу “Zaya”. И так как Zaya у нас с большой буквы, то произойдет переход к следующей строчке. К какой строчке переходить указываете Вы, после запятой порядковым номером. Соответственно, все звонки в моем случае прогоняются через первую строчку с №1 и, если такой номер не найден, тогда направляем его на №2.
В нашем случае Zaya подходит ко второй строчке и мы можем что-то с ней сделать, например, включить ей музыку ожидания, направить в какой-то отдел или еще что-то. Это все можно сделать специальными командами. Самая простая из них — Dial. Она просто пытается дозвониться по заданным каналам пользователю за отведенное время.
Мы указали SIP канал и 60 секунд ожидания. Если перевести вот эту строчку SIP/${EXTEN},60 на русский, получим следующее: направить вызов на этот телефон SIP/Zaya@bestmyfamily.com и подождать 60 секунд.

Нам осталось настроить самый главный файл для SIP телефонии — sip.conf. Тут нужно быть осторожным, мне пришлось попрыгать с бубном пару часов, чтобы всё заработало. И если всё работает из одной подсети, это не значит, что Вы сможете нормально принимать или соединять двух абонентов в разных сетях за НАТ. Я настроил работу следующим образом:

[general]
allowguest=no    
allowoverlap=no         
context=myfamily; контекст по умолчанию для входящих звонков
bindport=5060; порт UDP который "слушает" asterisk
bindaddr=0.0.0.0

pedantic=no
directmedia=no
rtptimeout=10
rtpholdtimeout=300

; для realtime
; они заставляют asterisk кэшировать данные
; и команда sip show peers будет нормально отображать
; всех зарегистрированных realtime пользователей
rtcachefriends = yes
rtcache=yes

; подключение к базе данных, вообще их тут писать не обязательно с версии 1.2
dbhost = 127.0.0.1
dbname = ***
dbuser = ***
dbpass = ***
dbport = 3306

Остальные настройки мы будем уже указывать в базе данных для каждого пользователя.

Нам остался последний файл res_config_mysql.c, тут мы указываем настройки подключения к базе данных.

[general]
dbhost = 127.0.0.1
dbname = ***
dbuser = ***
dbpass = ***
dbport = 3306

Теперь делаем перезагрузку Астериск командой /etc/init.d/asterisk restart если нет ошибок, тогда можете радоваться, сервер настроен и готов к обработке звонков.

Настройка MySQL
Сервер у нас готов для приема звонков, а вот звонящих нет. Нужно  где-то зарегистрировать и хранить новых пользователей. Для этих целей создаем базу данных с таблицей следующего содержания:

CREATE TABLE `sipusers` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`accountcode` VARCHAR(20) NULL DEFAULT NULL,
`disallow` VARCHAR(100) NULL DEFAULT 'all',
`allow` VARCHAR(100) NULL DEFAULT 'g729;ilbc;gsm;ulaw;alaw',
`allowoverlap` ENUM('yes','no') NULL DEFAULT 'yes',
`allowsubscribe` ENUM('yes','no') NULL DEFAULT 'yes',
`allowtransfer` VARCHAR(3) NULL DEFAULT NULL,
`amaflags` VARCHAR(13) NULL DEFAULT NULL,
`autoframing` VARCHAR(3) NULL DEFAULT NULL,
`auth` VARCHAR(40) NULL DEFAULT NULL,
`buggymwi` ENUM('yes','no') NULL DEFAULT 'no',
`callgroup` VARCHAR(10) NULL DEFAULT NULL,
`callerid` VARCHAR(80) NULL DEFAULT NULL,
`cid_number` VARCHAR(40) NULL DEFAULT NULL,
`fullname` VARCHAR(40) NULL DEFAULT NULL,
`call-limit` INT(8) NULL DEFAULT '0',
`callingpres` VARCHAR(80) NULL DEFAULT NULL,
`canreinvite` CHAR(6) NULL DEFAULT 'yes',
`context` VARCHAR(80) NULL DEFAULT NULL,
`defaultip` VARCHAR(15) NULL DEFAULT NULL,
`dtmfmode` VARCHAR(7) NULL DEFAULT NULL,
`fromuser` VARCHAR(80) NULL DEFAULT NULL,
`fromdomain` VARCHAR(80) NULL DEFAULT NULL,
`fullcontact` VARCHAR(80) NULL DEFAULT NULL,
`g726nonstandard` ENUM('yes','no') NULL DEFAULT 'no',
`host` VARCHAR(31) NOT NULL DEFAULT 'dynamic',
`insecure` VARCHAR(20) NULL DEFAULT NULL,
`ipaddr` VARCHAR(15) NOT NULL DEFAULT '',
`language` CHAR(2) NULL DEFAULT NULL,
`lastms` VARCHAR(20) NULL DEFAULT NULL,
`mailbox` VARCHAR(50) NULL DEFAULT NULL,
`maxcallbitrate` INT(8) NULL DEFAULT '384',
`mohsuggest` VARCHAR(80) NULL DEFAULT NULL,
`md5secret` VARCHAR(80) NULL DEFAULT NULL,
`musiconhold` VARCHAR(100) NULL DEFAULT NULL,
`name` VARCHAR(80) NOT NULL DEFAULT '',
`nat` VARCHAR(30) NOT NULL DEFAULT 'no',
`outboundproxy` VARCHAR(80) NULL DEFAULT NULL,
`deny` VARCHAR(95) NULL DEFAULT NULL,
`permit` VARCHAR(95) NULL DEFAULT NULL,
`pickupgroup` VARCHAR(10) NULL DEFAULT NULL,
`port` VARCHAR(5) NOT NULL DEFAULT '',
`progressinband` ENUM('yes','no','never') NULL DEFAULT 'no',
`promiscredir` ENUM('yes','no') NULL DEFAULT 'no',
`qualify` CHAR(3) NULL DEFAULT NULL,
`regexten` VARCHAR(80) NOT NULL DEFAULT '',
`regseconds` INT(11) NOT NULL DEFAULT '0',
`rfc2833compensate` ENUM('yes','no') NULL DEFAULT 'no',
`rtptimeout` CHAR(3) NULL DEFAULT NULL,
`rtpholdtimeout` CHAR(3) NULL DEFAULT NULL,
`secret` VARCHAR(80) NULL DEFAULT NULL,
`sendrpid` ENUM('yes','no') NULL DEFAULT 'yes',
`setvar` VARCHAR(100) NOT NULL DEFAULT '',
`subscribecontext` VARCHAR(80) NULL DEFAULT NULL,
`subscribemwi` VARCHAR(3) NULL DEFAULT NULL,
`t38pt_udptl` ENUM('yes','no') NULL DEFAULT 'no',
`trustrpid` ENUM('yes','no') NULL DEFAULT 'no',
`type` VARCHAR(6) NOT NULL DEFAULT 'friend',
`useclientcode` ENUM('yes','no') NULL DEFAULT 'no',
`defaultuser` VARCHAR(80) NOT NULL DEFAULT '',
`usereqphone` VARCHAR(3) NOT NULL DEFAULT 'no',
`videosupport` ENUM('yes','no') NULL DEFAULT 'yes',
`vmexten` VARCHAR(80) NULL DEFAULT NULL,
`useragent` VARCHAR(80) NULL DEFAULT NULL,
`regserver` VARCHAR(80) NULL DEFAULT NULL,
`callbackextension` VARCHAR(80) NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `name` (`name`),
INDEX `name_2` (`name`)
)
COLLATE='cp1251_general_ci'
ENGINE=MyISAM
ROW_FORMAT=DYNAMIC
AUTO_INCREMENT=1;

И сразу добавим двух наших пользователей. Я добавляю их через специальный PHP скрипт для работы с SIP базой данных:

<?php

 
//
// Менеджер работы с SIP сервером
//
class M_SIP
{
	private static 	$instance; 		// Экземпляр класса.
	
	const host 		= "bestmyfamily.com";
	const user 		= "***";
	const password 	= "***";
	const db 		= "***";
	
	public $dbSIP; // Указатель на базу данных.
	
	//
	// Синглтон.
	//
	public static function Instance()
	{
		if(self::$instance == null)
			self::$instance = new M_SIP();
				
		return self::$instance;
	}
	
	//
	// Подключение
	//
	function __construct()
	{
		// Подключаемся к базе данных
		$this->dbSIP = mysqli_connect(self::host, self::user, self::password) or exit;
		$result = mysqli_select_db($this->dbSIP, self::db) or exit;
		mysqli_query($this->dbSIP, 'SET NAMES utf8');  
	}
	

	
	
	// Зарегистрировать пользователя на сервере
	public function RegUserOnServer($pid, $uid)
	{
		$arr = array(
					'accountcode' 				=> Null, 
					'disallow'    				=> 'all',
					'allow'   	  				=> 'ulaw;alaw',
					'allowoverlap'   	  		=> 'no',
					'allowsubscribe'   	  		=> 'no',
					'allowtransfer'   	  		=> Null,
					'amaflags'   	  			=> Null,
					'autoframing'   	  		=> Null,
					'auth'   	  				=> Null,
					'buggymwi'   	  			=> 'no',
					'callgroup'   	  			=> Null,
					'callerid'   	  			=> Null,
					'cid_number'   	  			=> Null,
					'fullname'   	  			=> Null,
					'call-limit'   	  			=> 0,
					'callingpres'   	  		=> Null,
					'canreinvite'   	  		=> "no",
					'context'   	  			=> 'myfamily',
					'defaultip'   	  			=> Null,
					'dtmfmode'   	  			=> Null,
					'fromuser'   	  			=> Null,
					'fromdomain'   	  			=> Null,
					'fullcontact'   	  		=> Null,
					'g726nonstandard'   	  	=> 'no',
					'host'   	  				=> 'dynamic',
					'insecure'   	  			=> Null,
					'ipaddr'   	  				=> Null,
					'language'   	  			=> 'en',
					'lastms'   	  				=> 0,
					'mailbox'   	  			=> Null,
					'maxcallbitrate'   	  		=> 384,
					'mohsuggest'   	  			=> Null,
					'md5secret'   	  			=> Null,
					'musiconhold'   	  		=> Null,
					'name'   	  				=> "ИМЯ",
					'nat'   	  				=> 'force_rport,comedia',
					'outboundproxy'   	  		=> Null,
					'deny'   	  				=> Null,
					'permit'   	  				=> Null,
					'pickupgroup'   	  		=> Null,
					'port'   	  				=> '',
					'progressinband'   	  		=> 'no',
					'promiscredir'   	  		=> 'no',
					'qualify'   	  			=> Null,
					'regexten'   	  			=> 1000001,
					'regseconds'   	  			=> 0,
					'rfc2833compensate'   	  	=> 'no',
					'rtptimeout'   	  			=> Null,
					'rtpholdtimeout'   	  		=> Null,
					'secret'   	  				=> $uid,
					'sendrpid'   	 		 	=> 'yes',
					'setvar'   	  				=> '',
					'subscribecontext'   	  	=> Null,
					'subscribemwi'   	  		=> Null,
					't38pt_udptl'   	  		=> 'no',
					'trustrpid'   	  			=> 'no',
					'type'   	  				=> 'friend',
					'useclientcode'   	  		=> 'no',
					'defaultuser'   	  		=> "Имя",
					'usereqphone'   	  		=> 'no',
					'videosupport'   	  		=> 'no',
					'vmexten'   	  			=> Null,
					'useragent'   	  			=> Null,
					'regserver'   	  			=> Null,
					'callbackextension'   	  	=> Null
					);
							
					
		return $this->Insert('sipusers', $arr);			
	}
	
	
	
	
	
	
	//
	// Вставка строки
	// $table 		- имя таблицы
	// $object 		- ассоциативный массив с парами вида "имя столбца - значение"
	// результат	- идентификатор новой строки
	//
	private function Insert($table, $object, $isReplace = false)
	{		
		$columns = array();
		$values = array();
	
		foreach ($object as $key => $value)
		{
			$key = mysqli_real_escape_string($this->dbSIP, $key);
			$columns[] = "`" . $key . "`";
			
			if ($value === null)
			{
				$values[] = 'NULL';
			}
			else
			{
				$value = mysqli_real_escape_string($this->dbSIP, $value);							
				$values[] = "'$value'";
			}
		}
		
		$columns_s = implode(',', $columns);
		$values_s = implode(',', $values);
			
			// Если на замену?
		if ($isReplace)	
			$query = "REPLACE INTO $table ($columns_s) VALUES ($values_s)";
		else
			$query = "INSERT IGNORE  INTO $table ($columns_s) VALUES ($values_s)";
	
	
		$result = mysqli_query($this->dbSIP, $query);
		
		if (!$result)
			die($this->SqlError(mysqli_error($this->dbSIP)));

		$id = mysqli_insert_id($this->dbSIP);
		
		return $id;
	}
	
	
	//
	// Обработчик ошибок SQL
	//
	function SqlError($error)
	{
		return json_encode(array(
								 'code' 		=> 99,
								 'error' 		=> $error
								)
						   ); 
	}
}



Последний шаг в настройке — покупка нашего имени и привязка его к ip адресу. Я завел домен третьего уровня для этих целей voip.bestmyfamily.com и привязал к нему ip адрес. Если Вы забудете этот шаг, Ваши телефонные номера не будут столь красивыми ivan@192.168.1.1:5060

Для тестирования можно установить любые SIP телефоны. Конечно, они не такие классные и не будут втихаря поднимать трубку, кому мы звоним. Но обычную телефонную связь Вы настроили. Во второй части мы напишем наши волшебные клиенты на Android и IOS.
Сразу оговорюсь, что у Вас могут быть проблемы с одобрением в яблоке. Мы ооочень долго проходили процесс согласования приложения. Это не стандартные 2 недели, у нас изучали код и тестировали функционал перед размещением приложения. В итоге сошлись на возможности запускать прослушку только с детским режимом.

Комментарии (41)


  1. WeslomPo
    21.04.2016 20:35
    +14

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


    1. IvanK87
      21.04.2016 20:37
      -10

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


      1. WeslomPo
        21.04.2016 20:42
        +11

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


        1. IvanK87
          21.04.2016 20:46
          -11

          Скорее всего у Вас просто нет детей, когда Вы не можете дозвонится до ребенка, он не берет трубку или еще что-то. Крайне важно понимать, что все нормально, а если нет, своевременно принять меры. Я показываю как сделать инструмент, молоток например а для чего Вы его использовать будет зависеть только от Вас. И если Вы скажете что не нужно делать молоток, так как им можно убить, я Вам не поверю.


          1. asm0dey
            22.04.2016 07:32
            +3

            У меня есть дети (две штуки) и я с вами не согласен.


            1. IvanK87
              22.04.2016 08:41
              -1

              Вы серьезно? У меня есть ребенок и я тоже хочу его обезопасить. Это не значит что я включаю каждый день его телефон и на громкой связи с ним разговариваю. Вот Вы сами написали
              («Мы хотим защитить интернет от детской порнографии, для этого принимаем этот закон о внесудебной блокировке сайтов». А на самом деле введена цензура)
              Но разве Вы сейчас не тоже самое сделать хотите? Я уже привел пример что цель это дополнительный инструмент в нестандартной ситуации. Вы только на минуту представьте, если вашего ребенка похитили, Вам крайне важно будет знать где ребенок, и что творится вокруг. А Вы знаете что в России ежедневно пропадает свыше 300 человек?
              Не знаю как Вам а мне спокойнее. У меня жена прочитала комменты и просто в шоке была. Она ниже написала свой комментарий, у нас сын, мы его между собой «кракеном» называем, у него такой характер все сломать.
              Вообщем не знаю как Вам а нам реально спокойнее стало. И помните, что любую технологию можно использовать по разному, а запрещать нельзя.


              1. Michael134096
                22.04.2016 11:23
                -1

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


              1. asm0dey
                22.04.2016 21:14

                Это где же я писал про «Мы хотим защитить интернет от детской порнографии, для этого принимаем этот закон о внесудебной блокировке сайтов»? И уж абсолютно точно я уверен что права человека (даже маленького) выше каких-то моих хотелок.


                1. IvanK87
                  22.04.2016 23:33
                  +1

                  Простите, я спутал Вас с пользователем WeslomPo


                  1. asm0dey
                    23.04.2016 09:27

                    Вы тогда напишите ему, а то он может вашего сообщения-то и не видел.


          1. rader90
            22.04.2016 08:28
            +1

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


            1. HeaTTheatR
              23.04.2016 10:15
              -1

              В любом случае родители должны везде контролировать детей

              Вы никогда не сможете контроллировать своего ребенка! И вобще не понятно, зачем и кому это нужно — контроллировать ребенка? Что у тебя в компьтере? Скрипты? В корзину! Будешь сварщиком!
              Ребенок воспитывается до пяти лет. После этого возраста его уже практически невозможно перевоспитать. И если вы попустилили его до этого до уровня "Фу, не буду есть твою кашу" или таскать животных за хвосты, то подзатыльниками вы ситуацию не исправите.


              Я до 17 лет рос под строгим контролем матери и отца: вежливый способный мальчик, и подает надежды, наверное, будет танцором, и презрение ко всему порочному мы ему привили, и вот повезет какой-то дурочке. В 18 я уже был наркоманом. Возможно, потому, что в детстве под строгим контролем мне привили "презрение ко всему порочному", потому что не давали разбивать колени, потому что не бил соседского Гогочку по морде (а хотелось), а когда я вырос, кроме вашего контроля мне нечего было вспомнить!


              1. rader90
                23.04.2016 14:28
                +1

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


                1. IvanK87
                  23.04.2016 18:56
                  +1

                  Я с Вами полностью согласен, инструменты родителям и каждый пусть сам решает как их использовать… Я не звоню ребенку каждые 5 минут, не ругаю его и не говорю что он сделал что то ни так как мне нужно. Я просто когда пришла мысль в голову, открываю приложение и смотрю его на карте… если он в непонятном мне месте, позвоню ему на «Обычный телефон» и спрошу, ты где, когда домой планируешь? А если он не возьмет трубку и через пару часов не будет брать, вот тогда я включаю прослушку, понять все ли нормально.
                  Уважаемый HeaTTheatR, я против рамок, как и Вы. Но я просто хочу контролировать ситуацию, чувствуете разницу?
                  Например у Вас есть Ферраи, и Вы едите по правилам 80-100км. В этом и есть истинный кайф, жаль что понял это я только в 29 лет)
                  В 20 лет я ездил вот так…
                  https://www.youtube.com/watch?v=EAZu2hbps40&feature=youtu.be
                  и сейчас понимаю что я не то что детей, себя не контролировал.
                  Если итог, то кайф иметь возможность прослушать, но не делать этого напрасно.


          1. HeaTTheatR
            23.04.2016 09:55
            -1

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


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


  1. lizarge
    21.04.2016 20:47
    +5

    Странно что такое вообще пропустили. Это ошибка.


    1. ChALkeRx
      22.04.2016 13:11

      Вы про статью или про приложение, которое (если верить автору) прошло согласование?

      Меня больше второе пугает, если честно.


      1. lizarge
        22.04.2016 13:35

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


  1. mama_Krakena
    21.04.2016 21:33
    -6

    Я бы использовала для своего ребёнка. Мораль не мораль, жизнь и здоровье моего ребёнка мне дороже. Жаль не смогу сама такое реализовать


    1. webmoder
      21.04.2016 21:46
      +19

      я не думаю что у Кракена есть телефон


  1. Michael134096
    22.04.2016 08:02
    +7

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


    1. IvanK87
      22.04.2016 09:05
      -3

      Если ему 6 лет, я думаю это сложно будет сделать.


      1. Lelik13a
        22.04.2016 09:24
        +1

        Надо выстраивать нормальные отношения с детьми. А шпионить — только усугублять запущенное.


  1. LoadRunner
    22.04.2016 09:20
    -1

    Защитить своего ребёнка от опасного мира — это хорошее стремление. Но Вы хоть поговорили со своим ребёнком? Объяснили ему, что это и зачем нужно? Уважаете ли Вы своего ребёнка, доверяете ли ему?
    Да, своих детей у меня нет и я не знаю, каково это — воспитывать и могу рассуждать только с дивана. Но маленький ребёнок — тоже человек и относиться к нему нужно по-человечески, разве не так?


  1. Victor_VM
    22.04.2016 09:37
    -3

    Ханжи и зануды заминусли автора. Честным людям, скрывать нечего.


    1. ApeCoder
      22.04.2016 09:58
      +3

      Не могли бы вы написать здесь ваш пароль от хабра?


      1. ChALkeRx
        22.04.2016 13:22

        Зачем нам его пароль от хабра?
        Лучше камеры в каждую комнату дома (да, в каждую), стрим в интернет, ссылки в профиль. Со звуком, пожалуйста.
        Желательно — чтобы видно было клавиатуру и монитор. Ну или отдельным стримом пустить.

        И да, я боюсь представить, что вырастет из ребёнка {возраст подставьте произвольный}, которому мама позвонит (с автоснятием) в туалет, взволнуется и спросит «ой, а что это у тебя там за звуки такие, чем это ты там занимаешься?»


  1. ChALkeRx
    22.04.2016 13:27
    -2

    Я так чую, что второй части уже не будет, кстати говоря.


    1. IvanK87
      22.04.2016 13:30
      +3

      Будет, так как я оставляю за собой шанс переубедить Вас уважаемый ChALkeRx


  1. Vladusch
    22.04.2016 13:28
    +1

    Кухонным ножом нужно продукты резать, но им, к сожалению, и людей убивают. Есть атомная бомба, но есть и мирный атом, который не только даёт электричество и тепло, но и жизни спасает. Всё можно использовать во вред, но зависит это не от того кто «топор» сделал/изобрёл, а того, кто его на старушек направляет. Такое приложение для детей или пожилых людей, _нуждающихся_ в наблюдении часто может скорее помочь, чем навредить, а так — кто захочет навредить, найдёт всегда как и чем. Своему ребёнку я бы просто так, на всякий случай, это приложение не поставил бы, но при возникновении серьёзных поводов (плохая компания, подозрения на контакт с педофилом и т.д. и т.п.), установил бы.


  1. fpir
    22.04.2016 13:28
    +1

    А мне очень интересно техническое решение, некоторые детали мне пока кажутся спорными, подождём продолжение, попробуем протестировать.
    Однозначно, не вижу продолжения в продакшене. Приложение покушается на личные свободы. Но на техническом ресурсе позволит мне разобрать один из векторов атаки не подбирая инструменты самостоятельно, т.е. походя.
    То, что сделал Калашников-«отвратительно», но любой инженер-машиностроитель должен разобрать его устройства досконально.


  1. abehterev
    22.04.2016 13:50
    -1

    Вы знаете, я не согласен с вашей политикой по отношению к детям…
    Но зачем было изобретать очередной велосипед. Поиск по маркету дал, например, следующее. Там в описании после «А еще:» как раз, то что вы сделали, и даже вроде бы с видео. Это вообще первое, что попалось по ключу «sip контроль удаленно бесплатно», думаю, что есть и более «шпионские» вещи.


    1. IvanK87
      22.04.2016 14:30

      Уберите пожалуйста ссылку какого-то непонятного приложения, не вводите людей в заблуждение.


      1. abehterev
        22.04.2016 17:08
        -1

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


        1. IvanK87
          22.04.2016 17:32
          +1

          Нет, что Вы, я не «агрессирую», просто я в статье четко написал что нам нужно. Указанный вами сервер не может предоставлять API. И не соответствует другим требованиям, которые я ставил см. статью.


          1. abehterev
            22.04.2016 17:38
            -1

            Сформируем задачу: Реализация возможности принудительных звонков клиентам VoIP-сети. Клиенты работают на мобильных телефонах IOS и Android.

            1) Приложение как раз решает эту задачу. Как я понял — бесплатно. Совсем.
            2) Про API, думаю можно им написать — вдруг ответят. Так глубоко я не исследовал вопрос. Да и в вашей постановке задачи это не сказано, лишь в развитии темы.

            Не спорю, что задача решается вашим методом.
            Но
            image


  1. gena_glot
    22.04.2016 14:37

    Идея отличная, только я бы предложил таки GPS передавать все-таки. Parental Control — Раз и телефон ребенка вернул GPS координаты. Подслушать функция хорошая, но информации дает меньше. Скорее сначала GPS, потом подслушать. Великолепное приложение, надо развивать. надеюсь, вы будете стараться и у вас все получиться. Такого не пишут на рынке, надо прям серьезно заняться. Ниша есть. Можно заработать миллионы долларов.


    1. IvanK87
      22.04.2016 14:40

      Собственно GPS у нас и есть основной функционал приложения, а VoIP для чего-то очень критического. Пример с похищением я приводил выше.


  1. Crank
    22.04.2016 16:52

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


  1. Usikoff
    23.04.2016 16:47
    +1

    Я думаю, что столь бурная отрицательная реакция вызвана формой подачи этой статьи. Столь нелицеприятный заголовок и куча технической информации не отражают суть сервиса.
    Увидел статью ночью, списался с автором, скачал приложение и установил себе, жене и сыну. Малой в курсе о том, что он может быть прослушан. Не прошло и суток, как сервис принёс пользу. Отпустил утром его гулять на самокате, сказал ему: будь на связи. Звоню через час-полтора — трубку не берёт. Разумеется я волнуюсь, дорога рядом, всё такое. Я после 5 минут попыток дозвониться, подключился к нему через этот сервис. Слышу гоняет, болтает, играет в общем. Я ему через громкую связь: возьми трубку, паразит! Он перезванивает: Ой, телефон забыл с вибратора снять…
    В общем, автор зря разбил тему на две части. Народ не увидел самого продукта, а он весьма полезен и удобен. А увидел лишь инструмент, который можно использовать в недобросовестных целях.
    Сейчас куча сервисов для отслеживания и контроля за детьми. И этот сервис — один из многих. Показывает местоположение, историю перемещений, ну и, как дополнение, возможность говорить с ребёнком 2 минуты без его согласия.
    Я рад, что наткнулся на эту статью. А по поводу свободы и воспитания детей можно дискутировать бесконечно — у каждого своя ситуация и своя правда. Для одних УК РФ — это тоже ограничение их свобод, но для большинства — это всё же спасение от анархии и беспредела. И никто не будет утверждать, что это неэффективно. Мы же не говорим министру внутренних дел: Надо доверять своему народу! Зачем все эти камеры, патрули, проверки документов? Тоже самое и дома. Безусловно с ребёнком надо выстраивать доверительные отношения, но, родители меня поймут, всегда остаётся очень важная, скрытая часть жизни ребёнка. И, иногда, можно упустить что-то важное. Плохая компания, неадекватное поведение, угроза жизни или здоровью — всё это может ускользнуть от родителей, а пострадает несознательное дитё.
    PS: я понимаю негодующих — сам был возмущён, прочитав статью, но на середине комментариев начал понимать о чём речь.


    1. IvanK87
      23.04.2016 19:04
      +2

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