FreeSwitch запрашивает DTFM и выполняет запрос CURL. Затем подключитесь к конференции - PullRequest
0 голосов
/ 05 августа 2020

У меня следующий диалплан:

       <extension name="public_did">
            <condition field="destination_number" expression="^({{ $externalNumber }})$">
                <action application="sleep" data="1000"/>
                <action application="play_and_get_digits" data="9 9 3 5000 # welcome.wav error.wav ${confid}" />
                <action application="event" data="Event-App-Type=READ-EXECUTED,Read-Result=${read_result}"/>
                <action application="log" data="Read-Result=${read_result}"/>
                <action application="play_and_get_digits" data="5 5 3 5000 # pin.wav pin-error.wav ${pin}" />
                <action application="curl" data="https://example.com/do-freeswitch-dialin?id=${confid}&pin=${pin}" inline="true"/>
                <condition field="${curl_response_code}" expression="500">
                    <anti-action application="set" data="conf=${curl_response_data}"/>
                    <action application="speak" data="There was an error! Please try again later!" />
                    <action application="hangup" data="500"/>
                </condition>
                <action application="conference" data="${conf}{{ '@' }}default"/>
            </condition>
        </extension>

Проблема в том, что curl выполняется до того, как пользователь вводит свои учетные данные через DTFM. Как правильно это делать? В этом решении важно выполнить запрос cURL перед присоединением.

1 Ответ

0 голосов
/ 05 августа 2020

Мне удалось это сделать к LUA. Вот моя XML config:

<extension name="public_did">
    <condition field="destination_number" expression="^(12345)$">
        <action application="answer" />
        <action application="set" data="dtmf_type=rfc2833"/>
        <action application="start_dtmf" />
        <action application="lua" data="basic.lua"/>
    </condition>
</extension>

И в /usr/share/freeswitch/scripts/basic.lua

session:sleep(500)
session:execute("playback", "ivr/ivr-douche_telecom.wav");

digits = session:playAndGetDigits(4, 10, 3, 3000, "#", "ivr/ivr-please_enter_the_number_where_we_can_reach_you.wav", "ivr/ivr-invalid_extension_try_again.wav", "\\d+", "digits_received", 1000,
"5000 XML default");

session:execute("playback", "ivr/ivr-thank_you.wav");

api = freeswitch.API();
get_response = api:execute("curl", "https://example/freeswitch-dialin?id=" .. digits);
api:execute("log", get_response);
api:execute("log", digits);

У меня работает. Важно было установить dtmf_type так, чтобы на входящие вызовы из магистрали SIP также приходилось отвечать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...