Как я могу знать состояние вызова - Звездочка и PHP?

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

Заранее спасибо.

5
задан Harph 24 February 2010 в 15:00
поделиться

2 ответа

Какой API вы используете для написания этой программы? AMI? AGI? FastAGI? ДедАГИ? Вызвать файлы? Есть много способов получить эту информацию.

ПРИМЕЧАНИЕ : вы не можете определить, был ли канал завис, если вы не используете файлы вызовов и / или доступ к CDR.

С AMI вы можете использовать команду Status (описано здесь: http://www.voip-info.org/wiki/view/Asterisk+Manager+API+Action+Status ).

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

Если вы используете файлы вызовов и для атрибута Archive установлено значение «yes», то после завершения вызова вы можете проверить свой каталог outoing_done (обычно / var / lib / asterisk / outgoing_done /) для вашего вызова. файл. Когда вы читаете файл вызовов, вы заметите, что Asterisk добавила статус в конец файла вызовов, который сообщит вам окончательный статус вызова.

ЛУЧШИЙ способ получить эту информацию - это прочитать ваш PHP-скрипт из записей CDR на вашем сервере Asterisk. Пусть ваши записи CDR записываются в базу данных MySQL, а затем извлекают записи для вашего звонка из базы данных.

4
ответ дан 14 December 2019 в 08:49
поделиться

Harph,

Вы можете создать демон AMI для прослушивания событий AMI, передаваемых из Asterisk. Я делал это много раз, в том числе для графического интерфейса Asterisk. Если вы создаете таблицу для статуса в своей базе данных, вы можете создать демон для прослушивания событий AMI и обновления статуса по мере их возникновения. Тогда вашей веб-странице вообще не придется взаимодействовать с Asterisk, ей просто нужно будет считывать статус из базы данных.

Следующая ссылка взята из проекта графического интерфейса пользователя Asterisk. Он написан на javascript, поэтому ваш php будет немного другим, но это даст вам хорошую основу для начала. Начните со строки 574.

http://svn.asterisk.org/view/asterisk-gui/branches/2.0/config/js/welcome.js? view = markup

Одно из ключевых отличий javascript от php заключается в том, что javascript должен использовать демон Asterisk http вместо прямого подключения сокета к AMI. Из-за этого он должен использовать материал «waitevent». Но поскольку вы будете использовать соединение через TCP-сокет, просто продолжайте зацикливать инструкцию чтения.

Надеюсь, это поможет! Этот метод кажется наиболее надежным при попытке получить информацию от Asterisk.

2
ответ дан 14 December 2019 в 08:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: