2011-12-23 7 views
3

나는 Asterisk에 대해 Flash Operator Pannel의 종류를 개발 중이지만, Flash에 의존하지 않고 Node.js와 Socket.io를 사용하고 있습니다.node.js에서 bash로 명령 보내기 및 수행

노드 서버와 프런트 엔드를 광택 처리했습니다. BUT Asterisk에서 노드 서버로 이벤트를 보내고 소켓을 통해 보내지는 작업을 어떻게 수행 할 수 있는지 잘 모릅니다.

우리 회사의 요구에 맞게 Asterisk를 많이 조정했기 때문에 AMI 또는 Asterisk 소켓에 연결하면 실제 확장 기능으로 작업하지 않기 때문에 문제가 해결됩니다.

그래서, 별표 부분에도 불구하고, 나는 떠들썩한 파티 또는 컬이든

을 통해 내가 서버에 컬을 사용하는 방법에 대한 생각 노드에 정보를 보낼 수있는 방법을 알고 싶어하지만이 사람이 누가 명령을 알고 원인이 될 수 (매우있을 법하지 않음) 언리얼 데이터로 애플리케이션 흐름을 변경할 수 있습니다.

EDIT : 그것에 대해 다시 생각해 보면, 나는 소켓/서버를 통해 요청을받을 수 있기를 원할 것입니다. ??? socket.io를 통해 방출 될 동작을 수행 할 수 있어야합니다.

그게 가능합니까?

+0

이 프로젝트를 완료하면 알고 싶습니다. Google에 연락하여 연락하는 방법을 알려줍니다. – Mbrevda

답변

1

정말 대답은 특정 데이터를 당신이 노드를 얻으려고 애 쓰고있는에 따라 달라집니다. Flash Operator Panel을 교체하려고하지만 실제 확장 기능이 없습니다. 나는 별표를 SBC/일종의 프록시로 사용하고 있다고 생각합니다.

진정한 이벤트 위주의 접근 방식을 원한다면 언제든지 원하는 데이터로 Node에 연결할 수 있도록 다이얼 플랜을 수정하는 것이 좋습니다. 이것은 HTTP POST, 소켓 또는 기타를 통해 Node에 연결하는 몇 가지 인수 (언어로 작성된)를 가진 AGI 스크립트를 호출하여 가장 쉽게 얻을 수 있습니다.

좀 더 수동적 인 접근 방법을 원한다면 노드가 데이터에 대한 별표 로그 파일을 읽거나 이미 제안 된대로 Asterisk 관리자 인터페이스 (Asterisk Manager Interface)에 연결하고 거기에서 스트림을 보낼 수 있습니다. 이전에 언급 한 것과는 달리, 나는 이것이 매우 어려운 일이라고 생각하지 않는다.

0

당신은 별표의 AMI (별표 관리자 인터페이스)에 노드에서 소켓을 열고 자. 나는 노드를 사용한 적이 있지만 코드는 대략 다음과 같을 것입니다 상상 : 가장 잘 유지 AMI 라이브러리의

var astman = new net.socket().connect(5038);//connect to port 5039 on localhost 
astman.on('data', function(data) { 
    //do something with received data 
}); 

은 FreePBX의 php-astmanager이다. 그것은 PHP로 작성된 동안, 당신에게 당신의 필요가 무엇인지 꽤 좋은 생각을 제공해야합니다.

+0

안녕하세요 @Mbrevda 문제는 당신이 Asterisk를 제한적으로 커스터마이징하고 Dialplan에서 호출을 다시 라우팅하기 위해 필요한 정보를 검색하는 작업을 수행 할 때 발생합니다. 그래서 소켓에 연결하면 필요하지도 않고 사용할 수있는 많은 정보를 받게됩니다. 그래서, 기본적으로 나는 Asterisk에서하지만 노드에서하는 것과 똑같이 할 것입니다. –

+0

@AntonioLaguna - 불행히도, 이것이 Asterisk의 작동 방식입니다. 별표의 아름다움은 외부 서비스와 함께 작동하는 방식입니다. 사용자가 원하는 것을 정확히 얻을 수 있도록 항목을 개발, 구현 및 실행하는주기를 굽는 대신, 별표는 "Firehose"에 대한 액세스 권한을 제공합니다. 당신은 모든 것을 얻습니다 *. 이제 원하는 필터 만 필터링하십시오. 내가 연결된 라이브러리를 보았 니? js로 이식하면 대부분의 작업이 생략됩니다. * 별표 관리자는 일부 COARSE 필터를 적용 할 수 있습니다. 자세한 내용은 manager permissions/manager.conf를 참조하십시오. – Mbrevda

+0

주요 문제는 실제 확장 기능을 사용하지 않고 있으며 MySQL에서 가져온 다이나믹 대기열을 사용합니다. 에이전트와 대기열은 모두 데이터베이스에서 가져옵니다. 그 유연성은 Asterisk 그대로 존재하지 않습니다. 그래서 우리는 이러한 방식으로 이것을 관리했습니다. –

0

확실하게 node.js 프로그램을 설정하여 Asterisk의 메시지를 소켓에서 수신 할 수 있습니다. 그러나 자신의 연결 관리 체계, 인증 체계, 메시지 지속성 (가능할 수도 있음) 등을 롤업해야합니다.

- 특히 노드 서버와 별표 서버가 동일한 시스템에없는 경우 - RabbitMQ와 같은 메시지 대기열 프로그램을 사용할 수 있습니다. 이는 프로세스 간 통신과 관련된 많은 중요한 세부 사항을 처리합니다. 그것도 꽤 쉽습니다. 노드 측에서 체크 아웃 https://github.com/postwait/node-amqp