Add option to email the call transcript

This commit is contained in:
FusionPBX
2026-01-16 18:33:02 -07:00
committed by GitHub
parent 5e55771b21
commit 4276c4f053
3 changed files with 239 additions and 32 deletions

View File

@@ -69,4 +69,19 @@
$apps[$x]['default_settings'][$y]['default_setting_value'] = "true";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "false";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Call recordings set to auto transcribe. Options: true, false";
$y++;
$y++;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "2bbdb343-4e95-4d9b-886a-33bc5918a4c0";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "call_recordings";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "email_address";
$apps[$x]['default_settings'][$y]['default_setting_name'] = "text";
$apps[$x]['default_settings'][$y]['default_setting_value'] = "";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "false";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Call recordings email address.";
$y++;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "43ce24ca-fc5e-48ca-a0c4-88fb7b7ce679";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "call_recordings";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "email_template";
$apps[$x]['default_settings'][$y]['default_setting_name'] = "text";
$apps[$x]['default_settings'][$y]['default_setting_value'] = "transcription";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "false";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Call recordings used to select the email template.";

View File

@@ -1,31 +1,81 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2022-2024
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
if ($domains_processed == 1) {
}
//build the array
$x = 0;
$array['email_templates'][$x]['email_template_uuid'] = 'e591db34-0f35-47a5-aaa0-23e7285a0d7e';
$array['email_templates'][$x]['template_language'] = 'en-us';
$array['email_templates'][$x]['template_category'] = 'call_recordings';
$array['email_templates'][$x]['template_subcategory'] = 'transcription';
$array['email_templates'][$x]['template_subject'] = "Caller ID \${caller_id_name} <\${caller_id_number}> \${call_duration}";
$array['email_templates'][$x]['template_body'] .= "<html>\n";
$array['email_templates'][$x]['template_body'] .= " <body>\n";
$array['email_templates'][$x]['template_body'] .= " Caller ID \${caller_id_name} <a href=\"tel:\${caller_id_number}\">\${caller_id_number}</a><br />\n";
$array['email_templates'][$x]['template_body'] .= " <br />\n";
$array['email_templates'][$x]['template_body'] .= " Date \${start_date}<br />\n";
$array['email_templates'][$x]['template_body'] .= " Time \${start_time} \${end_time}<br />\n";
$array['email_templates'][$x]['template_body'] .= " Length \${length}<br />\n";
$array['email_templates'][$x]['template_body'] .= " <br />\n";
$array['email_templates'][$x]['template_body'] .= " Transcription<br />\n";
$array['email_templates'][$x]['template_body'] .= " \${transcript}\n";
$array['email_templates'][$x]['template_body'] .= " <br />\n";
$array['email_templates'][$x]['template_body'] .= " <br />\n";
$array['email_templates'][$x]['template_body'] .= " </body>\n";
$array['email_templates'][$x]['template_body'] .= "</html>\n";
$array['email_templates'][$x]['template_type'] = 'html';
$array['email_templates'][$x]['template_enabled'] = 'true';
$array['email_templates'][$x]['template_description'] = '';
?>
//build array of email template uuids
foreach ($array['email_templates'] as $row) {
if (is_uuid($row['email_template_uuid'])) {
$uuids[] = $row['email_template_uuid'];
}
}
//add the email templates to the database
if (is_array($uuids) && @sizeof($uuids) != 0) {
$sql = "select * from v_email_templates where ";
foreach ($uuids as $index => $uuid) {
$sql_where[] = "email_template_uuid = :email_template_uuid_".$index;
$parameters['email_template_uuid_'.$index] = $uuid;
}
$sql .= implode(' or ', $sql_where);
$database = new database;
$email_templates = $database->select($sql, $parameters, 'all');
unset($sql, $sql_where, $parameters);
//remove templates that already exist from the array
foreach ($array['email_templates'] as $index => $row) {
if (is_array($email_templates) && @sizeof($email_templates) != 0) {
foreach($email_templates as $email_template) {
if ($row['email_template_uuid'] == $email_template['email_template_uuid']) {
unset($array['email_templates'][$index]);
}
}
}
}
unset($email_templates, $index);
}
//add the missing email templates
if (is_array($array['email_templates']) && @sizeof($array['email_templates']) != 0) {
//add the temporary permission
$p = new permissions;
$p->add("email_template_add", 'temp');
$p->add("email_template_edit", 'temp');
//save the data
$database->save($array);
//$message = $database->message;
//remove the temporary permission
$p->delete("email_template_add", 'temp');
$p->delete("email_template_edit", 'temp');
}
//remove the array
unset($array);
}

View File

@@ -17,7 +17,7 @@
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2018 - 2023
Portions created by the Initial Developer are Copyright (C) 2018 - 2026
the Initial Developer. All Rights Reserved.
Contributor(s):
@@ -113,7 +113,6 @@ class call_recordings {
$this->table = 'call_recordings';
$this->description_field = 'call_recording_description';
$this->location = 'call_recordings.php';
}
/**
@@ -225,12 +224,155 @@ class call_recordings {
//save the call recording transcript
$result = $this->database->save($array, false);
$result = $this->database->message;
unset($array);
//remove the temporary permissions
$p->delete('xml_cdr_transcript_add', 'temp');
$p->delete('xml_cdr_transcript_edit', 'temp');
//get the email settings
$email_address = $this->settings('call_recordings', 'email_address');
$email_template = $this->settings('call_recordings', 'email_template');
//set default language - need to have a way to set the language
if (!empty($setting->get('domain', 'language'))) {
$template_language = $setting->get('domain', 'language');
}
else {
$template_language = 'en-us';
}
//set the variables
$hostname = system('hostname');
$email_queue_uuid = uuid();
$email_from = $setting->get('email', 'smtp_from');
if (isset($record_name)) {
$email_attachment_type = substr($record_name, -3);
}
//send the email
if (isset($email_address) && !empty($params['transcribe_message'])) {
//format the transcription variables for text and html
$transcribe_html = transcribe::conversation_format($params['transcribe_message'], 'html');
//get the email template
$sql = "SELECT * FROM v_xml_cdr ";
$sql .= "WHERE domain_uuid = :domain_uuid ";
$sql .= "AND template_language = :template_language ";
$sql .= "AND template_category = 'call_recordings' ";
$sql .= "AND template_subcategory = 'transcription' ";
$sql .= "AND template_enabled = 'true' ";
$sql .= "ORDER BY domain_uuid DESC ";
$parameters['domain_uuid'] = $params['domain_uuid'];
$parameters['xml_cdr_uuid'] = $params['xml_cdr_uuid'];
$row = $this->database->select($sql, $parameters, 'row');
$domain_name = $row["domain_name"];
$caller_id_name = $row["caller_id_name"];
$caller_id_number = $row["caller_id_number"];
$account_code = $row["account_code"];
$start_date = $row["start_date"];
$start_time = $row["start_time"];
$end_date = $row["end_date"];
$end_time = $row["end_time"];
$time = $row["time"];
unset($parameters);
//get the email template
$sql = "SELECT * FROM v_email_templates ";
$sql .= "WHERE (domain_uuid = :domain_uuid or domain_uuid is null) ";
$sql .= "AND template_language = :template_language ";
$sql .= "AND template_category = 'call_recordings' ";
$sql .= "AND template_subcategory = 'transcription' ";
$sql .= "AND template_enabled = 'true' ";
$sql .= "ORDER BY domain_uuid DESC ";
$parameters['domain_uuid'] = $domain_uuid;
$parameters['template_language'] = $template_language;
$row = $this->database->select($sql, $parameters, 'row');
$email_subject = $row["template_subject"];
$email_body = $row["template_body"];
unset($parameters);
//replace variables in email subject
$email_subject = str_replace('${domain_name}', $domain_name, $email_subject);
$email_subject = str_replace('${email_address}', $email_address, $email_subject);
$email_subject = str_replace('${caller_id_name}', $caller_id_name, $email_subject);
$email_subject = str_replace('${caller_id_number}', $caller_id_name, $email_subject);
$email_subject = str_replace('${call_duration}', $call_duration, $email_subject);
$email_subject = str_replace('${account_code}', $account_code, $email_subject);
$email_subject = str_replace('${start_date}', $start_date, $email_subject);
$email_subject = str_replace('${start_time}', $start_time, $email_subject);
$email_subject = str_replace('${end_date}', $end_date, $email_subject);
$email_subject = str_replace('${end_time}', $end_time, $email_subject);
$email_subject = str_replace('${time}', $time, $email_subject);
//replace variables in email body
$email_body = str_replace('${domain_name}', $domain_name, $email_body);
$email_body = str_replace('${email_address}', $email_address, $email_body);
$email_body = str_replace('${caller_id_name}', $caller_id_name, $email_body);
$email_body = str_replace('${caller_id_number}', $caller_id_name, $email_body);
$email_body = str_replace('${call_duration}', $call_duration, $email_body);
$email_body = str_replace('${account_code}', $account_code, $email_body);
$email_body = str_replace('${start_date}', $start_date, $email_body);
$email_body = str_replace('${start_time}', $start_time, $email_body);
$email_body = str_replace('${end_date}', $end_date, $email_body);
$email_body = str_replace('${end_time}', $end_time, $email_body);
$email_body = str_replace('${time}', $time, $email_body);
$email_body = str_replace('${transcript}', $transcribe_html, $email_body);
//send email - standard
//echo "send_email($email_address, $email_subject, $email_body, $email_error, null, null, 3, 3, $attachments);\n";
//debug information
// echo "email from: ".$email_from."\n";
// echo "email_address: ".$email_address."\n";
// echo "email_subject: ".$email_subject."\n";
// echo "file name: ".$file."\n";
//send email with the email_queue
$array['email_queue'][0]['email_queue_uuid'] = $email_queue_uuid;
$array['email_queue'][0]['domain_uuid'] = $domain_uuid;
$array['email_queue'][0]['hostname'] = $hostname;
$array['email_queue'][0]['email_date'] = 'now()';
$array['email_queue'][0]['email_from'] = $email_from;
$array['email_queue'][0]['email_to'] = $email_address;
$array['email_queue'][0]['email_subject'] = $email_subject;
$array['email_queue'][0]['email_body'] = $email_body;
$array['email_queue'][0]['email_status'] = 'waiting';
$array['email_queue'][0]['email_uuid'] = null;
$array['email_queue'][0]['email_action_after'] = null;
//unset the variables
unset($email_address, $email_subject, $email_body);
unset($domain_name, $account_code);
//add the attachment
// if (is_array($attachments) && @sizeof($attachments) != 0) {
// //build the attachment array
// $array['email_queue_attachments'][0]['email_queue_attachment_uuid'] = uuid();
// $array['email_queue_attachments'][0]['email_queue_uuid'] = $email_queue_uuid;
// $array['email_queue_attachments'][0]['domain_uuid'] = $domain_uuid;
// $array['email_queue_attachments'][0]['email_attachment_type'] = $email_attachment_type;
// $array['email_queue_attachments'][0]['email_attachment_path'] = $record_path;
// $array['email_queue_attachments'][0]['email_attachment_name'] = $record_name;
// $array['email_queue_attachments'][0]['email_attachment_base64'] = null;
// //unset the variables
// unset($email_attachment_type, $record_path, $record_name);
// }
//add temporary permissions
$p = permissions::new();
$p->add('email_queue_add', 'temp');
$p->add('email_queue_edit', 'temp');
//save the call recording transcript
$result = $this->database->save($array, false);
unset($array);
//remove the temporary permissions
$p->delete('email_queue_add', 'temp');
$p->delete('email_queue_edit', 'temp');
} // isset($email_address)
}
/**
@@ -280,13 +422,13 @@ class call_recordings {
file_exists($field['call_recording_path'] . '/' . $field['call_recording_name'])
) {
//prepare the paramaters
$params['domain_uuid'] = $_SESSION['domain_uuid'];
$params['domain_uuid'] = $this->domain_uuid;
$params['xml_cdr_uuid'] = $record['uuid'];
$params['call_direction'] = $field['call_direction'];
//add the recording to the transcribe queue
$array['transcribe_queue'][$x]['transcribe_queue_uuid'] = $record['uuid'];
$array['transcribe_queue'][$x]['domain_uuid'] = $_SESSION['domain_uuid'];
$array['transcribe_queue'][$x]['domain_uuid'] = $this->domain_uuid;
$array['transcribe_queue'][$x]['hostname'] = gethostname();
$array['transcribe_queue'][$x]['transcribe_status'] = 'pending';
$array['transcribe_queue'][$x]['transcribe_app_class'] = 'call_recordings';