2012-10-22 11 views
1

이것은 정말 어리석은 문제로 느껴지지만 그 사실을 알 수는 없습니다. 나는 Asterisk::AGI을 사용하여 Perl에 AGI 스크립트를 작성하고 있는데, 호출자에게 텍스트를 읽으려면 Festival을 호출해야한다. 나는 dialplan을에 내가별표 (Asterisk) AGI 스크립트의 축제 사용

Festival('Hello caller','any') 

말할 수 있다는 사실을 알고 있으며 '안녕하세요 발신자를'말을하고 키를 중단하실 수 있습니다. 트릭은 AGI 스크립트에서 그렇게합니다. 이렇게하면 :

$agi->exec('Festival', '"Hello caller"') 

'Hello caller'라고 말합니다. 문제 없어. 그러나 핵심 중단의 잠재성에 대처할 수는 없습니다. 그것은 두 번째 매개 변수와 비슷하지만, 비슷하지는 않습니다. 시도 했어

$agi->exec('Festival', '"Hello caller"', 'any') 

그리고 그것은 완전히 무시된다 (키 중단이 발생하지 않음) 또한

$agi->exec('Festival', q{"Hello caller",'any'}) 

을 시도하고 저를 인도하는 '모든'비트, 나는 그것이보다 더 많은 일을 얻을 수있는 유일한 방법이었다 통과 문자열 내부의 인용 (따옴표에 대해 심각하게 혼동 말한다 첫 번째 단어를 말하십시오).

$agi->exec('Festival', q{"Hello caller", 'any'}) 

"모든"비트를 완전히 무시합니다.

AGI 스크립트에서 Festival을 사용하여 언급하는 유일한 온라인 리소스는 모두 임시로 파일에 저장 한 다음 다시 재생하는 방법에 대해 설명합니다. 나는 정말로 그 길로 가야만 하는가? 내가 AGI에서 좋아하는 논쟁으로 다이얼 플랜 어플리케이션을 실행할 수 없어야합니까?

답변

3

예, 다이얼 플랜과 마찬가지로 AGI exec과 같은 응용 프로그램을 실행할 수 있습니다. 파이프 (|) 문자로 인수를 구분해야합니다.

예는 다음과 같이 작동합니다

축제
if ($option) { 
    $option .= '|' . $DEFAULTTIMEOUT if ($DEFAULTTIMEOUT); 
    $AGI->verbose("Executing Dial $option\n",3); 
    $res = $AGI->exec('Dial', $option); 
} 

, 옵션 (예/AGI-enum.agi)와 exec 전화 :

$agi->exec('Festival', '"Hello caller"|"any"'); 

또는

$agi->exec('FESTIVAL "Hello caller"|"any"'); 
+0

브릴리언트, 고맙습니다. 구문을 설명하는 곳을 어디에서도 보지 못했습니다. AGI 모듈을 사용한다는 것은 이전에 신경 쓸 필요가 없다는 것을 의미합니다. '$ agi-> exec ('Festival', 'Hello caller'| any ')'를 호출하면 인터럽트를 허용하고 평상시와 같이 누른 키의 ASCII 코드를 반환합니다. 완전한. –