2017-04-06 38 views
0

各CHANNEL_EXECUTEイベントのトリガーExecuteApplication呼び出しを知りたいと思います。 Managed ESLのExecuteAsyncメソッドには、これをサポートするパラメータはありません。署名は次のとおりESLから実行されるアプリケーションのアプリケーションUUIDを設定する方法

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

アプリはこのExecuteAsync FreeSwitchで開始されるアプリケーションの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メッセージを送信しますが、残念ながらこのフィールドを設定する方法はありません。 行く方法の1つは、メッセージを構成し、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 
関連する問題