Voicemail - Messages: Option to manually submit audio to AI for transcription, if enabled.

This commit is contained in:
fusionate 2024-05-28 13:08:41 -06:00
parent e128bdd850
commit c27f287651
No known key found for this signature in database
2 changed files with 140 additions and 10 deletions

View File

@ -711,6 +711,71 @@
$this->message_waiting();
}
public function message_transcribe() {
//get the voicemail id
$this->get_voicemail_id();
//check if for valid input
if (!is_numeric($this->voicemail_id)
|| !is_uuid($this->voicemail_uuid)
|| !is_uuid($this->domain_uuid)
|| !is_uuid($this->voicemail_message_uuid)
) {
return false;
}
//add the settings object
$settings = new settings(["domain_uuid" => $_SESSION['domain_uuid'], "user_uuid" => $_SESSION['user_uuid']]);
$transcribe_enabled = $settings->get('transcribe', 'enabled', 'false');
$transcribe_engine = $settings->get('transcribe', 'engine', '');
//transcribe multiple recordings
if ($transcribe_enabled == 'true' && !empty($transcribe_engine)) {
//add the transcribe object
$transcribe = new transcribe($settings);
//get each voicemail message file
$file_path = $_SESSION['switch']['voicemail']['dir']."/default/".$_SESSION['domain_name']."/".$this->voicemail_id;
foreach (glob($file_path."/msg_".$this->voicemail_message_uuid.".*") as $file_name) {
//audio to text - get the transcription from the audio file
$transcribe->audio_path = $file_path;
$transcribe->audio_filename = basename($file_name);
$message_transcription = $transcribe->transcribe();
//build voicemail message data array
if (!empty($message_transcription)) {
$array['voicemail_messages'][0]['voicemail_message_uuid'] = $this->voicemail_message_uuid;
$array['voicemail_messages'][0]['message_transcription'] = $message_transcription;
break;
}
}
//update the checked rows
if (is_array($array) && @sizeof($array) != 0) {
//grant temporary permissions
$p = new permissions;
$p->add('voicemail_message_edit', 'temp');
//execute update
$database = new database;
$database->app_name = $this->app_name;
$database->app_name = $this->app_uuid;
$database->save($array);
unset($array);
//revoke temporary permissions
$p->delete('voicemail_message_edit', 'temp');
}
return !empty($message_transcription) ? true : false;
}
}
public function message_saved() {
//check if for valid input

View File

@ -85,6 +85,11 @@
exit;
}
//add the settings object
$settings = new settings(["domain_uuid" => $_SESSION['domain_uuid'], "user_uuid" => $_SESSION['user_uuid']]);
$transcribe_enabled = $settings->get('transcribe', 'enabled', 'false');
$transcribe_engine = $settings->get('transcribe', 'engine', '');
//set the back button url
$_SESSION['back'][$_SERVER['PHP_SELF']] = !empty($_GET['back']) ? urldecode($_GET['back']) : ($_SESSION['back'][$_SERVER['PHP_SELF']] ?? PROJECT_PATH.'/app/voicemails/voicemails.php');
@ -125,12 +130,45 @@
//handle action
switch ($action) {
case 'mark_saved':
//transcribe voicemail message
$voicemail = new voicemail;
$voicemail->domain_uuid = $_SESSION['domain_uuid'];
$voicemail->voicemail_uuid = $voicemail_messages[0]['voicemail_uuid'];
$voicemail->voicemail_message_uuid = $voicemail_messages[0]['uuid'];
$voicemail->message_saved();
// no return, exit
exit;
case 'transcribe':
if ($transcribe_enabled == 'true' && !empty($transcribe_engine) && is_array($voicemail_messages) && @sizeof($voicemail_messages) != 0) {
$messages_transcribed = 0;
foreach ($voicemail_messages as $voicemail_message) {
if (!empty($voicemail_message['checked']) && $voicemail_message['checked'] == 'true' && is_uuid($voicemail_message['uuid']) && is_uuid($voicemail_message['voicemail_uuid'])) {
//transcribe voicemail message
$voicemail = new voicemail;
$voicemail->domain_uuid = $_SESSION['domain_uuid'];
$voicemail->voicemail_uuid = $voicemail_message['voicemail_uuid'];
$voicemail->voicemail_message_uuid = $voicemail_message['uuid'];
$result = $voicemail->message_transcribe();
unset($voicemail);
//increment counter
if ($result == true) {
$messages_transcribed++;
}
}
}
//set message
if ($messages_transcribed != 0) {
message::add($text['message-audio_transcribed'].': '.$messages_transcribed);
}
}
break;
case 'toggle':
if (is_array($voicemail_messages) && @sizeof($voicemail_messages) != 0) {
$messages_toggled = 0;
foreach ($voicemail_messages as $voicemail_message) {
if (!empty($voicemail_message['checked']) && $voicemail_message['checked'] == 'true' && is_uuid($voicemail_message['uuid']) && is_uuid($voicemail_message['voicemail_uuid'])) {
//delete voicemail message
//toggle voicemail message
$voicemail = new voicemail;
$voicemail->domain_uuid = $_SESSION['domain_uuid'];
$voicemail->voicemail_uuid = $voicemail_message['voicemail_uuid'];
@ -204,16 +242,20 @@
$vm->order = $order;
$voicemails = $vm->messages();
//count messages
//count messages and detect if any transcriptions available
$new_messages = $num_rows = 0;
if (is_array($voicemails) && @sizeof($voicemails) != 0) {
$transcriptions_exists = false;
if (!empty($voicemails) && is_array($voicemails)) {
foreach ($voicemails as $voicemail) {
if (is_array($voicemail['messages'])) {
if (!empty($voicemail['messages']) && is_array($voicemail['messages'])) {
$num_rows += sizeof($voicemail['messages']);
foreach ($voicemail['messages'] as $message) {
if ($message['message_status'] != 'saved') {
$new_messages++;
}
if ($transcribe_enabled == 'true' && !empty($transcribe_engine) && !empty($message['message_transcription'])) {
$transcriptions_exists = true;
}
}
}
}
@ -232,11 +274,17 @@
echo " <div class='heading'><b>".$text['title-voicemail_messages']." (".$num_rows.")</b></div>\n";
echo " <div class='actions'>\n";
echo button::create(['type'=>'button','label'=>$text['button-back'],'icon'=>$_SESSION['theme']['button_icon_back'],'id'=>'btn_back','link'=>$_SESSION['back'][$_SERVER['PHP_SELF']]]);
$margin_left = false;
if ($transcribe_enabled == 'true' && !empty($transcribe_engine) && $num_rows) {
echo button::create(['type'=>'button','label'=>$text['button-transcribe'],'icon'=>'quote-right','id'=>'btn_transcribe','name'=>'btn_transcribe','collapse'=>'hide-xs','style'=>'display: none; margin-left: 15px;','onclick'=>"list_action_set('transcribe'); list_form_submit('form_list');"]);
$margin_left = true;
}
if ($num_rows) {
echo button::create(['type'=>'button','label'=>$text['button-toggle'],'icon'=>$_SESSION['theme']['button_icon_toggle'],'id'=>'btn_toggle','name'=>'btn_toggle','collapse'=>'hide-xs','style'=>'margin-left: 15px; display: none;','onclick'=>"modal_open('modal-toggle','btn_toggle');"]);
echo button::create(['type'=>'button','label'=>$text['button-toggle'],'icon'=>$_SESSION['theme']['button_icon_toggle'],'id'=>'btn_toggle','name'=>'btn_toggle','collapse'=>'hide-xs','style'=>'display: none;'.(!$margin_left ? 'margin-left: 15px;' : null),'onclick'=>"modal_open('modal-toggle','btn_toggle');"]);
$margin_left = true;
}
if (permission_exists('voicemail_message_delete') && $num_rows) {
echo button::create(['type'=>'button','label'=>$text['button-delete'],'icon'=>$_SESSION['theme']['button_icon_delete'],'id'=>'btn_delete','name'=>'btn_delete','collapse'=>'hide-xs','style'=>'display: none;','onclick'=>"modal_open('modal-delete','btn_delete');"]);
echo button::create(['type'=>'button','label'=>$text['button-delete'],'icon'=>$_SESSION['theme']['button_icon_delete'],'id'=>'btn_delete','name'=>'btn_delete','collapse'=>'hide-xs','style'=>'display: none;'.(!$margin_left ? 'margin-left: 15px;' : null),'onclick'=>"modal_open('modal-delete','btn_delete');"]);
}
echo " </div>\n";
echo " <div style='clear: both;'></div>\n";
@ -337,8 +385,11 @@
echo "<audio id='recording_audio_".escape($row['voicemail_message_uuid'])."' style='display: none;' preload='none' ontimeupdate=\"update_progress('".escape($row['voicemail_message_uuid'])."')\" onended=\"recording_reset('".escape($row['voicemail_message_uuid'])."');\" src='voicemail_messages.php?action=download&id=".urlencode($row['voicemail_id'])."&voicemail_uuid=".urlencode($row['voicemail_uuid'])."&uuid=".urlencode($row['voicemail_message_uuid'])."&r=".uuid()."'></audio>";
echo button::create(['type'=>'button','title'=>$text['label-play'].' / '.$text['label-pause'],'icon'=>$_SESSION['theme']['button_icon_play'],'id'=>'recording_button_'.escape($row['voicemail_message_uuid']),'onclick'=>"recording_play('".escape($row['voicemail_message_uuid'])."','".$row['voicemail_id'].'|'.$row['voicemail_uuid']."','message');"]);
echo button::create(['type'=>'button','title'=>$text['label-download'],'icon'=>$_SESSION['theme']['button_icon_download'],'link'=>"voicemail_messages.php?action=download&id=".urlencode($row['voicemail_id'])."&voicemail_uuid=".escape($row['voicemail_uuid'])."&uuid=".escape($row['voicemail_message_uuid'])."&t=bin&r=".uuid(),'onclick'=>"$(this).closest('tr').children('td').css('font-weight','normal');"]);
if (!empty($_SESSION['voicemail']['transcribe_enabled']['boolean']) && $_SESSION['voicemail']['transcribe_enabled']['boolean'] == 'true' && $row['message_transcription'] != '') {
echo button::create(['type'=>'button','title'=>$text['label-transcription'],'icon'=>'quote-right','onclick'=>"document.getElementById('transcription_".$row['voicemail_message_uuid']."').style.display = document.getElementById('transcription_".$row['voicemail_message_uuid']."').style.display == 'none' ? 'table-row' : 'none'; this.blur(); return false;"]);
if (
(!empty($_SESSION['voicemail']['transcribe_enabled']['boolean']) && $_SESSION['voicemail']['transcribe_enabled']['boolean'] == 'true' && !empty($row['message_transcription'])) ||
($transcribe_enabled == 'true' && !empty($transcribe_engine) && $transcriptions_exists === true)
) {
echo button::create(['type'=>'button','title'=>$text['label-transcription'],'icon'=>'quote-right','style'=>(empty($row['message_transcription']) ? 'visibility:hidden;' : null),'onclick'=>(!empty($bold) ? "mark_saved('".$row['voicemail_message_uuid']."', '".$row['voicemail_uuid']."');" : null)."document.getElementById('transcription_".$row['voicemail_message_uuid']."').style.display = document.getElementById('transcription_".$row['voicemail_message_uuid']."').style.display == 'none' ? 'table-row' : 'none'; this.blur(); return false;"]);
}
echo " </td>\n";
echo " <td class='right no-wrap hide-xs' style='".$bold."'>".escape($row['message_length_label'])."</td>\n";
@ -346,7 +397,10 @@
echo " <td class='right no-wrap hide-sm-dn' style='".$bold."'>".escape($row['file_size_label'])."</td>\n";
}
echo "</tr>\n";
if (!empty($_SESSION['voicemail']['transcribe_enabled']['boolean']) && $_SESSION['voicemail']['transcribe_enabled']['boolean'] == 'true' && !empty($row['message_transcription'])) {
if (
(!empty($_SESSION['voicemail']['transcribe_enabled']['boolean']) && $_SESSION['voicemail']['transcribe_enabled']['boolean'] == 'true' && !empty($row['message_transcription'])) ||
($transcribe_enabled == 'true' && !empty($transcribe_engine) && $transcriptions_exists === true)
) {
echo "<tr style='display: none;'><td></td></tr>\n"; // dummy row to maintain same background color for transcription row
echo "<tr id='transcription_".$row['voicemail_message_uuid']."' class='list-row' style='display: none;'>\n";
echo " <td style='padding: 10px 20px 15px 20px;' colspan='".$col_count."'>\n";
@ -395,7 +449,18 @@
echo " });\n";
echo "</script>\n";
//if viewing transcription, mark message as read/saved
if ($transcriptions_exists) {
echo "<script>\n";
echo " function mark_saved(voicemail_message_uuid, voicemail_uuid) {\n";
echo " const url = '".basename($_SERVER['PHP_SELF'])."';\n";
echo " const params = { action: 'mark_saved', voicemail_messages: { 0: { uuid: voicemail_message_uuid, voicemail_uuid: voicemail_uuid, }, }, '".$token['name']."': '".$token['hash']."', };\n";
echo " $.post(url, params);\n";
echo " }\n";
echo "</script>\n";
}
//include the footer
require_once "resources/footer.php";
?>
?>