Added Wait Announcements to Ring Groups (#7919)

This commit is contained in:
Antonio Fernandez
2026-04-27 11:06:57 -04:00
committed by GitHub
parent 0ddb7c1164
commit 04a9893130
5 changed files with 315 additions and 3 deletions
+8
View File
@@ -403,6 +403,14 @@
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text"; $apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Toll Allow for Ring Group Forward."; $apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Toll Allow for Ring Group Forward.";
$z++; $z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "ring_group_wait_announcement";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Select the wait announcement audio file.";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "ring_group_wait_interval";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "numeric";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Enter the interval in seconds between announcements.";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "insert_date"; $apps[$x]['db'][$y]['fields'][$z]['name'] = "insert_date";
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = 'timestamptz'; $apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = 'timestamptz';
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = 'date'; $apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = 'date';
+110 -2
View File
@@ -729,6 +729,60 @@ $text['label-strategy']['zh-cn'] = "战略";
$text['label-strategy']['ja-jp'] = "ストラテジー"; $text['label-strategy']['ja-jp'] = "ストラテジー";
$text['label-strategy']['ko-kr'] = "전략"; $text['label-strategy']['ko-kr'] = "전략";
$text['label-wait_announcement']['en-us'] = "Wait Announcement";
$text['label-wait_announcement']['en-gb'] = "Wait Announcement";
$text['label-wait_announcement']['ar-eg'] = "إعلان الانتظار";
$text['label-wait_announcement']['de-at'] = "Warteansage";
$text['label-wait_announcement']['de-ch'] = "Warteansage";
$text['label-wait_announcement']['de-de'] = "Warteansage";
$text['label-wait_announcement']['el-gr'] = "Αναγγελία αναμονής";
$text['label-wait_announcement']['es-cl'] = "Anuncio de espera";
$text['label-wait_announcement']['es-mx'] = "Anuncio de espera";
$text['label-wait_announcement']['fr-ca'] = "Annonce d'attente";
$text['label-wait_announcement']['fr-fr'] = "Annonce d'attente";
$text['label-wait_announcement']['he-il'] = "הודעת המתנה";
$text['label-wait_announcement']['it-it'] = "Annuncio di attesa";
$text['label-wait_announcement']['ka-ge'] = "ლოდინის განცხადება";
$text['label-wait_announcement']['nl-nl'] = "Wachtmelding";
$text['label-wait_announcement']['pl-pl'] = "Komunikat oczekiwania";
$text['label-wait_announcement']['pt-br'] = "Anúncio de espera";
$text['label-wait_announcement']['pt-pt'] = "Anúncio de espera";
$text['label-wait_announcement']['ro-ro'] = "Anunț de așteptare";
$text['label-wait_announcement']['ru-ru'] = "Объявление ожидания";
$text['label-wait_announcement']['sv-se'] = "Väntmeddelande";
$text['label-wait_announcement']['uk-ua'] = "Оголошення очікування";
$text['label-wait_announcement']['tr-tr'] = "Bekleme Anonsu";
$text['label-wait_announcement']['zh-cn'] = "等待公告";
$text['label-wait_announcement']['ja-jp'] = "待機アナウンス";
$text['label-wait_announcement']['ko-kr'] = "대기 안내";
$text['label-wait_interval']['en-us'] = "Wait Interval";
$text['label-wait_interval']['en-gb'] = "Wait Interval";
$text['label-wait_interval']['ar-eg'] = "فاصل الانتظار";
$text['label-wait_interval']['de-at'] = "Warteintervall";
$text['label-wait_interval']['de-ch'] = "Warteintervall";
$text['label-wait_interval']['de-de'] = "Warteintervall";
$text['label-wait_interval']['el-gr'] = "Διάστημα αναμονής";
$text['label-wait_interval']['es-cl'] = "Intervalo de espera";
$text['label-wait_interval']['es-mx'] = "Intervalo de espera";
$text['label-wait_interval']['fr-ca'] = "Intervalle d'attente";
$text['label-wait_interval']['fr-fr'] = "Intervalle d'attente";
$text['label-wait_interval']['he-il'] = "מרווח המתנה";
$text['label-wait_interval']['it-it'] = "Intervallo di attesa";
$text['label-wait_interval']['ka-ge'] = "ლოდინის ინტერვალი";
$text['label-wait_interval']['nl-nl'] = "Wachtinterval";
$text['label-wait_interval']['pl-pl'] = "Interwał oczekiwania";
$text['label-wait_interval']['pt-br'] = "Intervalo de espera";
$text['label-wait_interval']['pt-pt'] = "Intervalo de espera";
$text['label-wait_interval']['ro-ro'] = "Interval de așteptare";
$text['label-wait_interval']['ru-ru'] = "Интервал ожидания";
$text['label-wait_interval']['sv-se'] = "Väntintervall";
$text['label-wait_interval']['uk-ua'] = "Інтервал очікування";
$text['label-wait_interval']['tr-tr'] = "Bekleme Aralığı";
$text['label-wait_interval']['zh-cn'] = "等待间隔";
$text['label-wait_interval']['ja-jp'] = "待機間隔";
$text['label-wait_interval']['ko-kr'] = "대기 간격";
$text['label-ringback']['en-us'] = "Ring Back"; $text['label-ringback']['en-us'] = "Ring Back";
$text['label-ringback']['en-gb'] = "Ring Back"; $text['label-ringback']['en-gb'] = "Ring Back";
$text['label-ringback']['ar-eg'] = "العودة"; $text['label-ringback']['ar-eg'] = "العودة";
@@ -1804,8 +1858,62 @@ $text['description-strategy']['sv-se'] = "Välj strategi för ringflöde.";
$text['description-strategy']['uk-ua'] = "Виберіть стратегію кільця."; $text['description-strategy']['uk-ua'] = "Виберіть стратегію кільця.";
$text['description-strategy']['tr-tr'] = "Zil stratejisini seçin."; $text['description-strategy']['tr-tr'] = "Zil stratejisini seçin.";
$text['description-strategy']['zh-cn'] = "选择响铃策略。"; $text['description-strategy']['zh-cn'] = "选择响铃策略。";
$text['description-strategy']['ja-jp'] = "リング戦略を選択します。"; $text['description-strategy']['ja-jp'] = "リング戦略を選択します。";
$text['description-strategy']['ko-kr'] = "링 전략을 선택합니다."; $text['description-strategy']['ko-kr'] = "링 전략을 선택합니다.";
$text['description-wait_announcement']['en-us'] = "Select an audio file to play as an announcement while waiting.";
$text['description-wait_announcement']['en-gb'] = "Select an audio file to play as an announcement while waiting.";
$text['description-wait_announcement']['ar-eg'] = "حدد ملفًا صوتيًا ليتم تشغيله كإعلان أثناء الانتظار.";
$text['description-wait_announcement']['de-at'] = "Wählen Sie eine Audiodatei aus, die während der Wartezeit als Ansage abgespielt wird.";
$text['description-wait_announcement']['de-ch'] = "Wählen Sie eine Audiodatei aus, die während der Wartezeit als Ansage abgespielt wird.";
$text['description-wait_announcement']['de-de'] = "Wählen Sie eine Audiodatei aus, die während der Wartezeit als Ansage abgespielt wird.";
$text['description-wait_announcement']['el-gr'] = "Επιλέξτε ένα αρχείο ήχου για αναπαραγωγή ως ανακοίνωση κατά την αναμονή.";
$text['description-wait_announcement']['es-cl'] = "Seleccione un archivo de audio para reproducirlo como anuncio mientras espera.";
$text['description-wait_announcement']['es-mx'] = "Seleccione un archivo de audio para reproducirlo como anuncio mientras espera.";
$text['description-wait_announcement']['fr-ca'] = "Sélectionnez un fichier audio à lire comme annonce pendant l'attente.";
$text['description-wait_announcement']['fr-fr'] = "Sélectionnez un fichier audio à lire comme annonce pendant l'attente.";
$text['description-wait_announcement']['he-il'] = "בחר קובץ שמע שיושמע כהודעה בזמן ההמתנה.";
$text['description-wait_announcement']['it-it'] = "Seleziona un file audio da riprodurre come annuncio durante l'attesa.";
$text['description-wait_announcement']['ka-ge'] = "აირჩიეთ აუდიო ფაილი, რომელიც ლოდინის დროს გამოცხადებად დაკვრდება.";
$text['description-wait_announcement']['nl-nl'] = "Selecteer een audiobestand dat tijdens het wachten als aankondiging wordt afgespeeld.";
$text['description-wait_announcement']['pl-pl'] = "Wybierz plik audio, który ma być odtwarzany jako komunikat podczas oczekiwania.";
$text['description-wait_announcement']['pt-br'] = "Selecione um arquivo de áudio para ser reproduzido como anúncio durante a espera.";
$text['description-wait_announcement']['pt-pt'] = "Selecione um ficheiro de áudio para ser reproduzido como anúncio durante a espera.";
$text['description-wait_announcement']['ro-ro'] = "Selectați un fișier audio care să fie redat ca anunț în timpul așteptării.";
$text['description-wait_announcement']['ru-ru'] = "Выберите аудиофайл, который будет воспроизводиться как объявление во время ожидания.";
$text['description-wait_announcement']['sv-se'] = "Välj en ljudfil som ska spelas upp som meddelande under väntetiden.";
$text['description-wait_announcement']['uk-ua'] = "Виберіть аудіофайл, який відтворюватиметься як оголошення під час очікування.";
$text['description-wait_announcement']['tr-tr'] = "Bekleme sırasında anons olarak çalınacak bir ses dosyası seçin.";
$text['description-wait_announcement']['zh-cn'] = "选择一个音频文件,在等待时作为公告播放。";
$text['description-wait_announcement']['ja-jp'] = "待機中にアナウンスとして再生する音声ファイルを選択します。";
$text['description-wait_announcement']['ko-kr'] = "대기 중 안내 방송으로 재생할 오디오 파일을 선택하세요.";
$text['description-wait_interval']['en-us'] = "Interval in seconds between announcement plays. If blank, 30 will be used.";
$text['description-wait_interval']['en-gb'] = "Interval in seconds between announcement plays. If blank, 30 will be used.";
$text['description-wait_interval']['ar-eg'] = "الفاصل الزمني بالثواني بين تشغيل الإعلانات.";
$text['description-wait_interval']['de-at'] = "Intervall in Sekunden zwischen den Ansagen.";
$text['description-wait_interval']['de-ch'] = "Intervall in Sekunden zwischen den Ansagen.";
$text['description-wait_interval']['de-de'] = "Intervall in Sekunden zwischen den Ansagen.";
$text['description-wait_interval']['el-gr'] = "Διάστημα σε δευτερόλεπτα μεταξύ των αναπαραγωγών της ανακοίνωσης.";
$text['description-wait_interval']['es-cl'] = "Intervalo en segundos entre cada reproducción del anuncio.";
$text['description-wait_interval']['es-mx'] = "Intervalo en segundos entre cada reproducción del anuncio.";
$text['description-wait_interval']['fr-ca'] = "Intervalle en secondes entre les lectures de l'annonce.";
$text['description-wait_interval']['fr-fr'] = "Intervalle en secondes entre les lectures de l'annonce.";
$text['description-wait_interval']['he-il'] = "המרווח בשניות בין השמעות ההודעה.";
$text['description-wait_interval']['it-it'] = "Intervallo in secondi tra le riproduzioni dell'annuncio.";
$text['description-wait_interval']['ka-ge'] = "ინტერვალი წამებში განცხადებების დაკვრებს შორის.";
$text['description-wait_interval']['nl-nl'] = "Interval in seconden tussen het afspelen van de aankondiging.";
$text['description-wait_interval']['pl-pl'] = "Odstęp w sekundach między odtworzeniami komunikatu.";
$text['description-wait_interval']['pt-br'] = "Intervalo em segundos entre as reproduções do anúncio.";
$text['description-wait_interval']['pt-pt'] = "Intervalo em segundos entre as reproduções do anúncio.";
$text['description-wait_interval']['ro-ro'] = "Intervalul în secunde dintre redările anunțului.";
$text['description-wait_interval']['ru-ru'] = "Интервал в секундах между воспроизведениями объявления.";
$text['description-wait_interval']['sv-se'] = "Intervall i sekunder mellan uppspelningarna av meddelandet.";
$text['description-wait_interval']['uk-ua'] = "Інтервал у секундах між відтвореннями оголошення.";
$text['description-wait_interval']['tr-tr'] = "Anons çalmaları arasındaki saniye cinsinden aralık.";
$text['description-wait_interval']['zh-cn'] = "公告播放之间的间隔秒数。";
$text['description-wait_interval']['ja-jp'] = "アナウンス再生間の秒数です。";
$text['description-wait_interval']['ko-kr'] = "안내 방송 재생 사이의 간격(초)입니다.";
$text['description-skip_active']['en-us'] = "Skip destinations with active calls."; $text['description-skip_active']['en-us'] = "Skip destinations with active calls.";
$text['description-skip_active']['en-gb'] = "Skip destinations with active calls."; $text['description-skip_active']['en-gb'] = "Skip destinations with active calls.";
+104
View File
@@ -58,6 +58,8 @@
$ring_group_forward_destination = ''; $ring_group_forward_destination = '';
$ring_group_forward_toll_allow = ''; $ring_group_forward_toll_allow = '';
$ring_group_description = ''; $ring_group_description = '';
$ring_group_wait_announcement = '';
$ring_group_wait_interval = '';
$onkeyup = ''; $onkeyup = '';
$total_ring_groups = '0'; $total_ring_groups = '0';
$ring_group_ringback = $settings->get('ring_group', 'default_ringback', ''); $ring_group_ringback = $settings->get('ring_group', 'default_ringback', '');
@@ -209,6 +211,8 @@
$ring_group_name = $_POST["ring_group_name"]; $ring_group_name = $_POST["ring_group_name"];
$ring_group_extension = $_POST["ring_group_extension"]; $ring_group_extension = $_POST["ring_group_extension"];
$ring_group_greeting = $_POST["ring_group_greeting"]; $ring_group_greeting = $_POST["ring_group_greeting"];
$ring_group_wait_announcement = $_POST["ring_group_wait_announcement"];
$ring_group_wait_interval = $_POST["ring_group_wait_interval"];
$ring_group_strategy = $_POST["ring_group_strategy"]; $ring_group_strategy = $_POST["ring_group_strategy"];
$ring_group_destinations = $_POST["ring_group_destinations"]; $ring_group_destinations = $_POST["ring_group_destinations"];
$ring_group_timeout_action = $_POST["ring_group_timeout_action"]; $ring_group_timeout_action = $_POST["ring_group_timeout_action"];
@@ -392,6 +396,8 @@
$array['ring_groups'][0]["ring_group_name"] = $ring_group_name; $array['ring_groups'][0]["ring_group_name"] = $ring_group_name;
$array['ring_groups'][0]["ring_group_extension"] = $ring_group_extension; $array['ring_groups'][0]["ring_group_extension"] = $ring_group_extension;
$array['ring_groups'][0]["ring_group_greeting"] = $ring_group_greeting; $array['ring_groups'][0]["ring_group_greeting"] = $ring_group_greeting;
$array['ring_groups'][0]["ring_group_wait_announcement"] = $ring_group_wait_announcement;
$array['ring_groups'][0]["ring_group_wait_interval"] = $ring_group_wait_interval;
$array['ring_groups'][0]["ring_group_strategy"] = $ring_group_strategy; $array['ring_groups'][0]["ring_group_strategy"] = $ring_group_strategy;
$array["ring_groups"][0]["ring_group_exit_key"] = $ring_group_exit_key; $array["ring_groups"][0]["ring_group_exit_key"] = $ring_group_exit_key;
$array["ring_groups"][0]["ring_group_call_timeout"] = $ring_group_call_timeout; $array["ring_groups"][0]["ring_group_call_timeout"] = $ring_group_call_timeout;
@@ -586,6 +592,8 @@
$ring_group_name = $row["ring_group_name"]; $ring_group_name = $row["ring_group_name"];
$ring_group_extension = $row["ring_group_extension"]; $ring_group_extension = $row["ring_group_extension"];
$ring_group_greeting = $row["ring_group_greeting"]; $ring_group_greeting = $row["ring_group_greeting"];
$ring_group_wait_announcement = $row["ring_group_wait_announcement"];
$ring_group_wait_interval = $row["ring_group_wait_interval"];
$ring_group_strategy = $row["ring_group_strategy"]; $ring_group_strategy = $row["ring_group_strategy"];
$ring_group_timeout_app = $row["ring_group_timeout_app"]; $ring_group_timeout_app = $row["ring_group_timeout_app"];
$ring_group_timeout_data = $row["ring_group_timeout_data"]; $ring_group_timeout_data = $row["ring_group_timeout_data"];
@@ -620,6 +628,8 @@
$ring_group_exit_key = $ring_group_exit_key ?? ''; $ring_group_exit_key = $ring_group_exit_key ?? '';
$ring_group_call_timeout = $ring_group_call_timeout ?? '30'; $ring_group_call_timeout = $ring_group_call_timeout ?? '30';
$ring_group_greeting = $ring_group_greeting ?? ''; $ring_group_greeting = $ring_group_greeting ?? '';
$ring_group_wait_announcement = $ring_group_wait_announcement ?? '';
$ring_group_wait_interval = $ring_group_wait_interval ?? '';
$ring_group_forward_enabled = $ring_group_forward_enabled ?? false; $ring_group_forward_enabled = $ring_group_forward_enabled ?? false;
$ring_group_context = $ring_group_context ?? $domain_name; $ring_group_context = $ring_group_context ?? $domain_name;
$ring_group_enabled = $ring_group_enabled ?? true; $ring_group_enabled = $ring_group_enabled ?? true;
@@ -910,6 +920,100 @@
echo "</td>\n"; echo "</td>\n";
echo "</tr>\n"; echo "</tr>\n";
$instance_id = 'ring_group_wait_announcement';
$instance_label = 'wait_announcement';
$instance_value = $ring_group_wait_announcement;
echo "<tr>\n";
echo "<td class='vncell' rowspan='2' valign='top' align='left' nowrap='nowrap'>\n";
echo " ".$text['label-wait_announcement']."\n";
echo "</td>\n";
echo "<td class='vtable playback_progress_bar_background' id='recording_progress_bar_".$instance_id."' onclick=\"recording_play('".$instance_id."', document.getElementById('".$instance_id."').value, document.getElementById('".$instance_id."').options[document.getElementById('".$instance_id."').selectedIndex].parentNode.getAttribute('data-type'));\" style='display: none; border-bottom: none; padding-top: 0 !important; padding-bottom: 0 !important;' align='left'><span class='playback_progress_bar' id='recording_progress_".$instance_id."'></span></td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vtable' align='left'>\n";
echo "<select name='".$instance_id."' id='".$instance_id."' class='formfld' ".(permission_exists('recording_play') || permission_exists('recording_download') ? "onchange=\"recording_reset('".$instance_id."'); set_playable('".$instance_id."', this.value, this.options[this.selectedIndex].parentNode.getAttribute('data-type'));\"" : null).">\n";
echo " <option value=''></option>\n";
$found = $playable = false;
if (!empty($audio_files) && is_array($audio_files) && @sizeof($audio_files) != 0) {
foreach ($audio_files as $key => $value) {
echo "<optgroup label=".$text['label-'.$key]." data-type='".$key."'>\n";
foreach ($value as $row) {
if ($key == 'recordings') {
if (
!empty($instance_value) &&
($instance_value == $row["value"] || $instance_value == $settings->get('switch', 'recordings', '')."/".$domain_name.'/'.$row["value"]) &&
file_exists($settings->get('switch', 'recordings', '')."/".$domain_name.'/'.pathinfo($row["value"], PATHINFO_BASENAME))
) {
$selected = "selected='selected'";
$playable = '../recordings/recordings.php?action=download&type=rec&filename='.pathinfo($row["value"], PATHINFO_BASENAME);
$found = true;
}
else {
unset($selected);
}
}
else if ($key == 'sounds') {
if (!empty($instance_value) && $instance_value == $row["value"]) {
$selected = "selected='selected'";
$playable = '../switch/sounds.php?action=download&filename='.$row["value"];
$found = true;
}
else {
unset($selected);
}
}
else if ($key == 'phrases') {
if (!empty($instance_value) && $instance_value == $row["value"]) {
$selected = "selected='selected'";
$playable = '';
$found = true;
}
else {
unset($selected);
}
}
else {
unset($selected);
}
echo " <option value='".escape($row["value"])."' ".($selected ?? '').">".escape($row["name"])."</option>\n";
}
echo "</optgroup>\n";
}
}
if (if_group("superadmin") && !empty($instance_value) && !$found) {
echo " <option value='".escape($instance_value)."' selected='selected'>".escape($instance_value)."</option>\n";
}
unset($selected);
echo " </select>\n";
if (if_group("superadmin")) {
echo "<input type='button' id='btn_select_to_input_".$instance_id."' class='btn' name='' alt='back' onclick='toggle_select_input(document.getElementById(\"".$instance_id."\"), \"".$instance_id."\"); this.style.visibility=\"hidden\";' value='&#9665;'>";
}
if ((permission_exists('recording_play') || permission_exists('recording_download')) && (!empty($playable) || empty($instance_value))) {
switch (pathinfo($playable, PATHINFO_EXTENSION)) {
case 'wav' : $mime_type = 'audio/wav'; break;
case 'mp3' : $mime_type = 'audio/mpeg'; break;
case 'ogg' : $mime_type = 'audio/ogg'; break;
}
echo "<audio id='recording_audio_".$instance_id."' style='display: none;' preload='none' ontimeupdate=\"update_progress('".$instance_id."')\" onended=\"recording_reset('".$instance_id."');\" src='".($playable ?? '')."' type='".($mime_type ?? '')."'></audio>";
echo button::create(['type'=>'button','title'=>$text['label-play'].' / '.$text['label-pause'],'icon'=>$settings->get('theme', 'button_icon_play'),'id'=>'recording_button_'.$instance_id,'style'=>'display: '.(!empty($mime_type) ? 'inline' : 'none'),'onclick'=>"recording_play('".$instance_id."', document.getElementById('".$instance_id."').value, document.getElementById('".$instance_id."').options[document.getElementById('".$instance_id."').selectedIndex].parentNode.getAttribute('data-type'))"]);
unset($playable, $mime_type);
}
echo "<br />\n";
echo $text['description-wait_announcement']."\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap='nowrap'>\n";
echo " ".$text['label-wait_interval']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='number' name='ring_group_wait_interval' maxlength='255' value=\"".escape($ring_group_wait_interval)."\" min='1' max='300'>\n";
echo "<br />\n";
echo $text['description-wait_interval']."\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n"; echo "<tr>\n";
echo "<td class='vncellreq' valign='top' align='left' nowrap='nowrap'>\n"; echo "<td class='vncellreq' valign='top' align='left' nowrap='nowrap'>\n";
echo " ".$text['label-strategy']."\n"; echo " ".$text['label-strategy']."\n";
@@ -250,7 +250,9 @@
sql = sql .. "cast(r.ring_group_call_forward_enabled as text), "; sql = sql .. "cast(r.ring_group_call_forward_enabled as text), ";
sql = sql .. "cast(r.ring_group_follow_me_enabled as text), "; sql = sql .. "cast(r.ring_group_follow_me_enabled as text), ";
sql = sql .. "r.ring_group_missed_call_app, "; sql = sql .. "r.ring_group_missed_call_app, ";
sql = sql .. "r.ring_group_missed_call_data "; sql = sql .. "r.ring_group_missed_call_data, ";
sql = sql .. "r.ring_group_wait_announcement, ";
sql = sql .. "r.ring_group_wait_interval ";
sql = sql .. "FROM v_ring_groups as r, v_domains as d "; sql = sql .. "FROM v_ring_groups as r, v_domains as d ";
sql = sql .. "WHERE r.ring_group_uuid = :ring_group_uuid "; sql = sql .. "WHERE r.ring_group_uuid = :ring_group_uuid ";
sql = sql .. "AND r.domain_uuid = d.domain_uuid "; sql = sql .. "AND r.domain_uuid = d.domain_uuid ";
@@ -277,6 +279,8 @@
ring_group_follow_me_enabled = row["ring_group_follow_me_enabled"]; ring_group_follow_me_enabled = row["ring_group_follow_me_enabled"];
missed_call_app = row["ring_group_missed_call_app"]; missed_call_app = row["ring_group_missed_call_app"];
missed_call_data = row["ring_group_missed_call_data"]; missed_call_data = row["ring_group_missed_call_data"];
ring_group_wait_announcement = row["ring_group_wait_announcement"];
ring_group_wait_interval = row["ring_group_wait_interval"];
end); end);
--create the settings object --create the settings object
@@ -346,6 +350,24 @@
end end
end end
--answer the call if not answered and there is wait announcement
if (ring_group_wait_announcement and #ring_group_wait_announcement > 0 and not session_answer) then
session:answer();
session_answer = true;
end
--schedule wait announcements
if (ring_group_wait_announcement and #ring_group_wait_announcement > 0) then
local interval = ring_group_wait_interval or 30;
session:setVariable("ring_group_wait_announcement", ring_group_wait_announcement);
session:setVariable("ring_group_wait_interval", tostring(interval));
session:setVariable("ring_group_wait_domain_name", domain_name);
session:setVariable("ring_group_wait_domain_uuid", domain_uuid);
local wait_announcement_script = scripts_dir:gsub('\\','/') .. "/app/ring_groups/resources/scripts/wait_announcement.lua";
local command = "sched_api +" .. interval .. " " .. uuid .. " lua " .. wait_announcement_script .. " " .. uuid;
api:executeString(command);
end
--call screen enabled --call screen enabled
if (ring_group_call_screen_enabled == 'true') then if (ring_group_call_screen_enabled == 'true') then
@@ -0,0 +1,70 @@
--include config.lua
require "resources.functions.config";
--prepare the api
api = freeswitch.API();
--define the trim function
require "resources.functions.trim";
require "resources.functions.file_exists";
--include functions
local basename = require "resources.functions.basename";
--get the argv values
script_name = argv[0];
uuid = argv[1];
announcement = (trim(api:executeString("uuid_getvar " .. uuid .. " ring_group_wait_announcement")));
interval = tonumber((trim(api:executeString("uuid_getvar " .. uuid .. " ring_group_wait_interval")))) or 30;
domain_name = (trim(api:executeString("uuid_getvar " .. uuid .. " ring_group_wait_domain_name")));
domain_uuid = (trim(api:executeString("uuid_getvar " .. uuid .. " ring_group_wait_domain_uuid")));
--resolve the announcement to something uuid_broadcast can play
local function resolve_announcement(file_name)
if not file_name or #file_name == 0 then
return nil
end
if string.sub(file_name, 1, 1) == "/" or string.match(file_name, "^[a-z]+:") then
return file_name
end
if basename(file_name) == file_name then
local recording_path = recordings_dir .. "/" .. domain_name .. "/" .. file_name;
if file_exists(recording_path) then
return recording_path
end
local sounds_dir = (trim(api:executeString("uuid_getvar " .. uuid .. " sounds_dir")));
local default_language = (trim(api:executeString("uuid_getvar " .. uuid .. " default_language")));
local default_dialect = (trim(api:executeString("uuid_getvar " .. uuid .. " default_dialect")));
local default_voice = (trim(api:executeString("uuid_getvar " .. uuid .. " default_voice")));
if not default_language or #default_language == 0 then default_language = 'en'; end
if not default_dialect or #default_dialect == 0 then default_dialect = 'us'; end
if not default_voice or #default_voice == 0 then default_voice = 'callie'; end
if sounds_dir and #sounds_dir > 0 then
local sound_path = sounds_dir .. "/" .. default_language .. "/" .. default_dialect .. "/" .. default_voice .. "/" .. file_name;
if file_exists(sound_path) then
return sound_path
end
end
end
return file_name
end
--play the wait announcement and reschedule while the call is still active
if trim(api:executeString("uuid_exists " .. uuid)) == "true" then
local media_path = resolve_announcement(announcement);
if media_path and #media_path > 0 then
api:executeString("uuid_setvar " .. uuid .. " ringback ");
api:executeString("uuid_setvar " .. uuid .. " transfer_ringback ");
api:executeString("uuid_broadcast " .. uuid .. " " .. media_path .. " aleg");
end
wait_announcement_script = scripts_dir:gsub('\\','/') .. "/app/ring_groups/resources/scripts/wait_announcement.lua";
command = "sched_api +" .. interval .. " " .. uuid .. " lua " .. wait_announcement_script .. " " .. uuid;
api:executeString(command);
end