2017-04-06 3 views
0

각 CHANNEL_EXECUTE 이벤트에 대한 트리거 ExecuteApplication 호출을 알고 싶습니다. Managed ESL의 ExecuteAsync 메서드에는이를 지원하는 매개 변수가 없습니다. 서명은 다음과 같습니다 응용 프로그램이 ExecuteAsync FreeSwitch으로 시작ESL에서 실행되는 응용 프로그램의 응용 프로그램 UUID를 설정하는 방법

public ESLevent ExecuteAsync(string app, string arg, string uuid) 

응용 프로그램에 대한 UUID를 생성하고,이 이후의 모든 CHANNEL_EXECUTE 이벤트의 응용 프로그램 UUID 헤더 필드에 presen't됩니다. 문제는 ExecuteAsynch 호출이이 UUID를 반환하지 않는다는 것입니다. 이렇게하면 실행중인 응용 프로그램이 여러 개있는 경우 CHANNEL_EXECUTE 이벤트를 추적하는 것이 까다로울 수 있습니다. ExecuteAsynch 의해 반환 된 이벤트는 다음과 같은 형식을 갖는다 (단, UUID는 존재하지 않는다) Bgapi와

{ 
    "Event-Name": "SOCKET_DATA", 
    "Content-Type": "command/reply", 
    "Reply-Text": "+OK" 
} 

예를 들어, API 호출을 실행은 관련 BACKGROUND_JOB위한 잡 UUID 헤더 필드의 값이 될 것이다 job_uuid 파라미터를 지원 이벤트.

public ESLevent Bgapi(string cmd, string arg, string job_uuid) 

어떻게하면 재생과 같은 다이얼 플랜 응용 프로그램에서도 같은 결과를 얻을 수 있습니까?

가 관리되는 래퍼으로 숨겨져 어쩌면 나도 확인했지만, esl.c에서 esl_execute 기능 (느릅 나무 래퍼의 ExecuteAsync 방법으로 사용됩니다)이 기능을 지원하지 않는 것 중 하나

ESL_DECLARE(esl_status_t) esl_execute(esl_handle_t *handle, const char *app, const char *arg, const char *uuid) 

답변

0

documentation of sendmsg에 따르면 Event-UUID 헤더 값은 이러한 목적으로 설계되었습니다. API의 esl_execute 함수는 esl_send_recv을 사용하여 자체로 구성된 sendmsg 메시지를 보내지 만 불행히도이 필드를 설정하는 방법은 제공하지 않습니다. 한 가지 방법은 메시지를 작성하고 Event-UUID 필드를 포함하고 esl_send_recv을 통해 메시지를 보내는 것입니다. 관리 ESL과 예를 들어

:

public void ExecuteApplication(ESLconnection conn, string application, string appParams, string uiid, string jobid) 
{ 
    var header = new Dictionary<string, string> 
    { 
     {"call-command", "execute"}, 
     {"execute-app-name", application }, 
     {"execute-app-arg", appParams }, 
     {"loops", "1" }, 
     {"Event-UUID", jobid }, 
    }; 
    string newLine = "\n"; 
    var cmd = $"sendmsg {uiid}{newLine}" + string.Join(newLine, header.Select(kvp => $"{kvp.Key}: {kvp.Value}")); 
    var e = conn.SendRecv(cmd); 
    ... 
} 

그래서 메시지는 다음과 같은 형태가됩니다 보낼 :

sendmsg bb2652fa-467c-44a1-a2f0-0f5e4363e2f3 
call-command: execute 
execute-app-name: playback 
execute-app-arg: d:\vox\sample.vox 
loops: 1 
Event-UUID: play command id 369 
관련 문제