From 1b225840c450a42ab255c6484d7243db3a078da5 Mon Sep 17 00:00:00 2001 From: Antonio Fernandez Date: Mon, 25 May 2026 10:45:02 -0400 Subject: [PATCH] Add support for custom transcription prompts in voicemail processing (#7908) --- app/email_queue/resources/jobs/email_send.php | 21 ++++ app/extensions/app_languages.php | 108 ++++++++++++++++++ app/extensions/extension_edit.php | 43 ++++++- app/voicemails/app_config.php | 8 ++ app/voicemails/app_languages.php | 9 ++ .../resources/classes/voicemail.php | 17 +++ app/voicemails/voicemail_edit.php | 40 +++++++ 7 files changed, 245 insertions(+), 1 deletion(-) diff --git a/app/email_queue/resources/jobs/email_send.php b/app/email_queue/resources/jobs/email_send.php index c9c5fe3aa..d276f70ed 100755 --- a/app/email_queue/resources/jobs/email_send.php +++ b/app/email_queue/resources/jobs/email_send.php @@ -170,6 +170,8 @@ //$voicemail_mail_to = $row["voicemail_mail_to"]; //$voicemail_sms_to = $row["voicemail_sms_to "]; $voicemail_transcription_enabled = $row["voicemail_transcription_enabled"]; + $voicemail_transcription_prompt_enabled = $row["voicemail_transcription_prompt_enabled"] ?? false; + $voicemail_transcription_prompt = $row["voicemail_transcription_prompt"] ?? ''; //$voicemail_attach_file = $row["voicemail_attach_file"]; $voicemail_file = $row["voicemail_file"]; //$voicemail_local_after_email = $row["voicemail_local_after_email"]; @@ -246,6 +248,25 @@ echo "transcribe message: ".$transcribe_message."\n"; + $prompt_is_enabled = in_array($voicemail_transcription_prompt_enabled ?? false, [true, 'true', 't'], true); + echo "prompt_enabled raw: ".var_export($voicemail_transcription_prompt_enabled ?? 'NOT SET', true)."\n"; + echo "prompt_is_enabled: ".($prompt_is_enabled ? 'true' : 'false')."\n"; + echo "prompt template length: ".strlen($voicemail_transcription_prompt ?? '')."\n"; + echo "transcribe_prompt class exists: ".(class_exists('transcribe_prompt') ? 'true' : 'false')."\n"; + if (!empty($transcribe_message) + && $prompt_is_enabled + && !empty($voicemail_transcription_prompt) + && class_exists('transcribe_prompt') + ) { + $prompt_processor = new transcribe_prompt($settings); + $prompt_result = $prompt_processor->process($transcribe_message, $voicemail_transcription_prompt); + echo "prompt result length: ".strlen($prompt_result)."\n"; + if (!empty($prompt_result)) { + $transcribe_message = $prompt_result; + } + echo "prompt processed message: ".$transcribe_message."\n"; + } + //prepare the email body $email_body = str_replace('${message_text}', $transcribe_message, $email_body); } diff --git a/app/extensions/app_languages.php b/app/extensions/app_languages.php index eff9e18a5..76a6505ad 100644 --- a/app/extensions/app_languages.php +++ b/app/extensions/app_languages.php @@ -2914,6 +2914,114 @@ $text['description-voicemail_transcription_enabled']['zh-cn'] = "选择是否为 $text['description-voicemail_transcription_enabled']['ja-jp'] = "この内線番号でボイスメールの文字起こしを有効にするかどうかを選択します"; $text['description-voicemail_transcription_enabled']['ko-kr'] = "이 확장 프로그램에 음성 메일 녹음이 활성화되어 있는지 선택하십시오."; +$text['label-voicemail_transcription_prompt_enabled']['en-us'] = "Custom Prompt Processing"; +$text['label-voicemail_transcription_prompt_enabled']['en-gb'] = "Custom Prompt Processing"; +$text['label-voicemail_transcription_prompt_enabled']['ar-eg'] = "معالجة موجه مخصص"; +$text['label-voicemail_transcription_prompt_enabled']['de-at'] = "Benutzerdefinierte Eingabeaufforderungsverarbeitung"; +$text['label-voicemail_transcription_prompt_enabled']['de-ch'] = "Benutzerdefinierte Eingabeaufforderungsverarbeitung"; +$text['label-voicemail_transcription_prompt_enabled']['de-de'] = "Benutzerdefinierte Eingabeaufforderungsverarbeitung"; +$text['label-voicemail_transcription_prompt_enabled']['el-gr'] = "Επεξεργασία Προσαρμοσμένης Προτροπής"; +$text['label-voicemail_transcription_prompt_enabled']['es-cl'] = "Procesamiento de Indicación Personalizada"; +$text['label-voicemail_transcription_prompt_enabled']['es-mx'] = "Procesamiento de Indicación Personalizada"; +$text['label-voicemail_transcription_prompt_enabled']['fr-ca'] = "Traitement d'Invite Personnalisée"; +$text['label-voicemail_transcription_prompt_enabled']['fr-fr'] = "Traitement d'Invite Personnalisée"; +$text['label-voicemail_transcription_prompt_enabled']['he-il'] = "עיבוד פקודה מותאמת אישית"; +$text['label-voicemail_transcription_prompt_enabled']['it-it'] = "Elaborazione Prompt Personalizzato"; +$text['label-voicemail_transcription_prompt_enabled']['ka-ge'] = "მორგებული მოთხოვნის დამუშავება"; +$text['label-voicemail_transcription_prompt_enabled']['nl-nl'] = "Aangepaste Promptverwerking"; +$text['label-voicemail_transcription_prompt_enabled']['pl-pl'] = "Przetwarzanie Niestandardowego Monitu"; +$text['label-voicemail_transcription_prompt_enabled']['pt-br'] = "Processamento de Prompt Personalizado"; +$text['label-voicemail_transcription_prompt_enabled']['pt-pt'] = "Processamento de Prompt Personalizado"; +$text['label-voicemail_transcription_prompt_enabled']['ro-ro'] = "Procesarea Promptului Personalizat"; +$text['label-voicemail_transcription_prompt_enabled']['ru-ru'] = "Обработка пользовательского запроса"; +$text['label-voicemail_transcription_prompt_enabled']['sv-se'] = "Anpassad Promptbehandling"; +$text['label-voicemail_transcription_prompt_enabled']['uk-ua'] = "Обробка користувацького запиту"; +$text['label-voicemail_transcription_prompt_enabled']['tr-tr'] = "Özel İstem İşleme"; +$text['label-voicemail_transcription_prompt_enabled']['zh-cn'] = "自定义提示处理"; +$text['label-voicemail_transcription_prompt_enabled']['ja-jp'] = "カスタムプロンプト処理"; +$text['label-voicemail_transcription_prompt_enabled']['ko-kr'] = "사용자 지정 프롬프트 처리"; + +$text['description-voicemail_transcription_prompt_enabled']['en-us'] = "When enabled, the transcription is sent to the configured AI provider with a custom prompt before being included in the voicemail email."; +$text['description-voicemail_transcription_prompt_enabled']['en-gb'] = "When enabled, the transcription is sent to the configured AI provider with a custom prompt before being included in the voicemail email."; +$text['description-voicemail_transcription_prompt_enabled']['ar-eg'] = "عند التمكين، يتم إرسال النص المكتوب إلى موفر الذكاء الاصطناعي المكوّن مع موجه مخصص قبل تضمينه في البريد الإلكتروني للبريد الصوتي."; +$text['description-voicemail_transcription_prompt_enabled']['de-at'] = "Wenn aktiviert, wird die Transkription mit einer benutzerdefinierten Eingabeaufforderung an den konfigurierten KI-Anbieter gesendet, bevor sie in die Voicemail-E-Mail aufgenommen wird."; +$text['description-voicemail_transcription_prompt_enabled']['de-ch'] = "Wenn aktiviert, wird die Transkription mit einer benutzerdefinierten Eingabeaufforderung an den konfigurierten KI-Anbieter gesendet, bevor sie in die Voicemail-E-Mail aufgenommen wird."; +$text['description-voicemail_transcription_prompt_enabled']['de-de'] = "Wenn aktiviert, wird die Transkription mit einer benutzerdefinierten Eingabeaufforderung an den konfigurierten KI-Anbieter gesendet, bevor sie in die Voicemail-E-Mail aufgenommen wird."; +$text['description-voicemail_transcription_prompt_enabled']['el-gr'] = "Όταν είναι ενεργοποιημένο, η μεταγραφή αποστέλλεται στον διαμορφωμένο πάροχο τεχνητής νοημοσύνης με μια προσαρμοσμένη προτροπή πριν συμπεριληφθεί στο email του τηλεφωνητή."; +$text['description-voicemail_transcription_prompt_enabled']['es-cl'] = "Cuando está habilitado, la transcripción se envía al proveedor de IA configurado con una indicación personalizada antes de incluirse en el correo electrónico del buzón de voz."; +$text['description-voicemail_transcription_prompt_enabled']['es-mx'] = "Cuando está habilitado, la transcripción se envía al proveedor de IA configurado con una indicación personalizada antes de incluirse en el correo electrónico del buzón de voz."; +$text['description-voicemail_transcription_prompt_enabled']['fr-ca'] = "Lorsqu'activé, la transcription est envoyée au fournisseur d'IA configuré avec une invite personnalisée avant d'être incluse dans l'e-mail de messagerie vocale."; +$text['description-voicemail_transcription_prompt_enabled']['fr-fr'] = "Lorsqu'activé, la transcription est envoyée au fournisseur d'IA configuré avec une invite personnalisée avant d'être incluse dans l'e-mail de messagerie vocale."; +$text['description-voicemail_transcription_prompt_enabled']['he-il'] = "כאשר מופעל, התמלול נשלח לספק ה-AI המוגדר עם פקודה מותאמת אישית לפני הכללתו בדואר האלקטרוני של תא הקול."; +$text['description-voicemail_transcription_prompt_enabled']['it-it'] = "Quando abilitato, la trascrizione viene inviata al provider AI configurato con un prompt personalizzato prima di essere inclusa nell'e-mail della segreteria telefonica."; +$text['description-voicemail_transcription_prompt_enabled']['ka-ge'] = "ჩართვისას, ტრანსკრიფცია გაიგზავნება კონფიგურირებულ AI პროვაიდერთან მორგებული მოთხოვნით ვოისმეილის ელ-ფოსტაში ჩართვამდე."; +$text['description-voicemail_transcription_prompt_enabled']['nl-nl'] = "Indien ingeschakeld, wordt de transcriptie met een aangepaste prompt naar de geconfigureerde AI-provider gestuurd voordat deze in de voicemail-e-mail wordt opgenomen."; +$text['description-voicemail_transcription_prompt_enabled']['pl-pl'] = "Po włączeniu transkrypcja jest wysyłana do skonfigurowanego dostawcy AI z niestandardowym monitem przed dołączeniem do wiadomości e-mail poczty głosowej."; +$text['description-voicemail_transcription_prompt_enabled']['pt-br'] = "Quando ativado, a transcrição é enviada ao provedor de IA configurado com um prompt personalizado antes de ser incluída no e-mail do correio de voz."; +$text['description-voicemail_transcription_prompt_enabled']['pt-pt'] = "Quando ativado, a transcrição é enviada ao fornecedor de IA configurado com um prompt personalizado antes de ser incluída no e-mail da caixa de voz."; +$text['description-voicemail_transcription_prompt_enabled']['ro-ro'] = "Când este activat, transcrierea este trimisă furnizorului de AI configurat cu un prompt personalizat înainte de a fi inclusă în e-mailul căsuței vocale."; +$text['description-voicemail_transcription_prompt_enabled']['ru-ru'] = "При включении транскрипция отправляется настроенному AI-провайдеру с пользовательским запросом перед включением в электронное письмо голосовой почты."; +$text['description-voicemail_transcription_prompt_enabled']['sv-se'] = "När aktiverat skickas transkriptionen till den konfigurerade AI-leverantören med en anpassad prompt innan den inkluderas i röstmeddelandets e-post."; +$text['description-voicemail_transcription_prompt_enabled']['uk-ua'] = "При увімкненні транскрипцію надсилають до налаштованого AI-провайдера з користувацьким запитом перед включенням до електронного листа голосової пошти."; +$text['description-voicemail_transcription_prompt_enabled']['tr-tr'] = "Etkinleştirildiğinde, transkript sesli posta e-postasına eklenmeden önce özel bir istemle yapılandırılmış AI sağlayıcısına gönderilir."; +$text['description-voicemail_transcription_prompt_enabled']['zh-cn'] = "启用后,转录文本将连同自定义提示一起发送至已配置的AI提供商,然后再包含在语音邮件电子邮件中。"; +$text['description-voicemail_transcription_prompt_enabled']['ja-jp'] = "有効にすると、文字起こしがボイスメールメールに含まれる前に、カスタムプロンプトと共に設定されたAIプロバイダーに送信されます。"; +$text['description-voicemail_transcription_prompt_enabled']['ko-kr'] = "활성화하면 음성메일 이메일에 포함되기 전에 사용자 지정 프롬프트와 함께 구성된 AI 제공업체로 전사본이 전송됩니다."; + +$text['label-voicemail_transcription_prompt']['en-us'] = "Transcription Prompt"; +$text['label-voicemail_transcription_prompt']['en-gb'] = "Transcription Prompt"; +$text['label-voicemail_transcription_prompt']['ar-eg'] = "موجه النسخ"; +$text['label-voicemail_transcription_prompt']['de-at'] = "Transkriptions-Eingabeaufforderung"; +$text['label-voicemail_transcription_prompt']['de-ch'] = "Transkriptions-Eingabeaufforderung"; +$text['label-voicemail_transcription_prompt']['de-de'] = "Transkriptions-Eingabeaufforderung"; +$text['label-voicemail_transcription_prompt']['el-gr'] = "Προτροπή Μεταγραφής"; +$text['label-voicemail_transcription_prompt']['es-cl'] = "Indicación de Transcripción"; +$text['label-voicemail_transcription_prompt']['es-mx'] = "Indicación de Transcripción"; +$text['label-voicemail_transcription_prompt']['fr-ca'] = "Invite de Transcription"; +$text['label-voicemail_transcription_prompt']['fr-fr'] = "Invite de Transcription"; +$text['label-voicemail_transcription_prompt']['he-il'] = "פקודת תמלול"; +$text['label-voicemail_transcription_prompt']['it-it'] = "Prompt di Trascrizione"; +$text['label-voicemail_transcription_prompt']['ka-ge'] = "ტრანსკრიფციის მოთხოვნა"; +$text['label-voicemail_transcription_prompt']['nl-nl'] = "Transcriptieprompt"; +$text['label-voicemail_transcription_prompt']['pl-pl'] = "Monit Transkrypcji"; +$text['label-voicemail_transcription_prompt']['pt-br'] = "Prompt de Transcrição"; +$text['label-voicemail_transcription_prompt']['pt-pt'] = "Prompt de Transcrição"; +$text['label-voicemail_transcription_prompt']['ro-ro'] = "Promptul de Transcriere"; +$text['label-voicemail_transcription_prompt']['ru-ru'] = "Запрос транскрипции"; +$text['label-voicemail_transcription_prompt']['sv-se'] = "Transkriptionsprompt"; +$text['label-voicemail_transcription_prompt']['uk-ua'] = "Запит транскрипції"; +$text['label-voicemail_transcription_prompt']['tr-tr'] = "Transkripsiyon İstemi"; +$text['label-voicemail_transcription_prompt']['zh-cn'] = "转录提示"; +$text['label-voicemail_transcription_prompt']['ja-jp'] = "文字起こしプロンプト"; +$text['label-voicemail_transcription_prompt']['ko-kr'] = "전사 프롬프트"; + +$text['description-voicemail_transcription_prompt']['en-us'] = "Enter the prompt template. Use \${transcription} as a placeholder for the raw transcription text. If omitted, the transcription is appended after the prompt."; +$text['description-voicemail_transcription_prompt']['en-gb'] = "Enter the prompt template. Use \${transcription} as a placeholder for the raw transcription text. If omitted, the transcription is appended after the prompt."; +$text['description-voicemail_transcription_prompt']['ar-eg'] = "أدخل قالب الموجه. استخدم \${transcription} كعنصر نائب لنص النسخ الخام. إذا تم حذفه، يُضاف النص بعد الموجه."; +$text['description-voicemail_transcription_prompt']['de-at'] = "Geben Sie die Eingabeaufforderungsvorlage ein. Verwenden Sie \${transcription} als Platzhalter für den unbearbeiteten Transkriptionstext. Wenn weggelassen, wird die Transkription nach der Eingabeaufforderung angehängt."; +$text['description-voicemail_transcription_prompt']['de-ch'] = "Geben Sie die Eingabeaufforderungsvorlage ein. Verwenden Sie \${transcription} als Platzhalter für den unbearbeiteten Transkriptionstext. Wenn weggelassen, wird die Transkription nach der Eingabeaufforderung angehängt."; +$text['description-voicemail_transcription_prompt']['de-de'] = "Geben Sie die Eingabeaufforderungsvorlage ein. Verwenden Sie \${transcription} als Platzhalter für den unbearbeiteten Transkriptionstext. Wenn weggelassen, wird die Transkription nach der Eingabeaufforderung angehängt."; +$text['description-voicemail_transcription_prompt']['el-gr'] = "Εισαγάγετε το πρότυπο προτροπής. Χρησιμοποιήστε το \${transcription} ως σύμβολο κράτησης θέσης για το ακατέργαστο κείμενο μεταγραφής. Αν παραλειφθεί, η μεταγραφή προστίθεται μετά την προτροπή."; +$text['description-voicemail_transcription_prompt']['es-cl'] = "Ingrese la plantilla de indicación. Use \${transcription} como marcador de posición para el texto de transcripción sin procesar. Si se omite, la transcripción se agrega después de la indicación."; +$text['description-voicemail_transcription_prompt']['es-mx'] = "Ingrese la plantilla de indicación. Use \${transcription} como marcador de posición para el texto de transcripción sin procesar. Si se omite, la transcripción se agrega después de la indicación."; +$text['description-voicemail_transcription_prompt']['fr-ca'] = "Saisissez le modèle d'invite. Utilisez \${transcription} comme espace réservé pour le texte de transcription brut. S'il est omis, la transcription est ajoutée après l'invite."; +$text['description-voicemail_transcription_prompt']['fr-fr'] = "Saisissez le modèle d'invite. Utilisez \${transcription} comme espace réservé pour le texte de transcription brut. S'il est omis, la transcription est ajoutée après l'invite."; +$text['description-voicemail_transcription_prompt']['he-il'] = "הזן את תבנית הפקודה. השתמש ב-\${transcription} כמציין מיקום עבור טקסט התמלול הגולמי. אם הושמט, התמלול מצורף לאחר הפקודה."; +$text['description-voicemail_transcription_prompt']['it-it'] = "Inserire il modello di prompt. Utilizzare \${transcription} come segnaposto per il testo di trascrizione grezzo. Se omesso, la trascrizione viene aggiunta dopo il prompt."; +$text['description-voicemail_transcription_prompt']['ka-ge'] = "შეიყვანეთ მოთხოვნის შაბლონი. გამოიყენეთ \${transcription} როგორც ადგილმდებარეობის მარკერი ნედლი ტრანსკრიფციის ტექსტისთვის. გამოტოვების შემთხვევაში, ტრანსკრიფცია დაემატება მოთხოვნის შემდეგ."; +$text['description-voicemail_transcription_prompt']['nl-nl'] = "Voer de promptsjabloon in. Gebruik \${transcription} als tijdelijke aanduiding voor de ruwe transcriptietekst. Indien weggelaten, wordt de transcriptie na de prompt toegevoegd."; +$text['description-voicemail_transcription_prompt']['pl-pl'] = "Wprowadź szablon monitu. Użyj \${transcription} jako symbolu zastępczego dla surowego tekstu transkrypcji. Jeśli pominięto, transkrypcja jest dołączana po monicie."; +$text['description-voicemail_transcription_prompt']['pt-br'] = "Insira o modelo de prompt. Use \${transcription} como marcador de posição para o texto de transcrição bruto. Se omitido, a transcrição é adicionada após o prompt."; +$text['description-voicemail_transcription_prompt']['pt-pt'] = "Introduza o modelo de prompt. Use \${transcription} como marcador de posição para o texto de transcrição bruto. Se omitido, a transcrição é anexada após o prompt."; +$text['description-voicemail_transcription_prompt']['ro-ro'] = "Introduceți șablonul de prompt. Utilizați \${transcription} ca marcator pentru textul brut de transcriere. Dacă este omis, transcrierea este adăugată după prompt."; +$text['description-voicemail_transcription_prompt']['ru-ru'] = "Введите шаблон запроса. Используйте \${transcription} в качестве заполнителя для необработанного текста транскрипции. Если опущено, транскрипция добавляется после запроса."; +$text['description-voicemail_transcription_prompt']['sv-se'] = "Ange promptmallen. Använd \${transcription} som platshållare för den råa transkriptionstexten. Om utelämnat läggs transkriptionen till efter prompten."; +$text['description-voicemail_transcription_prompt']['uk-ua'] = "Введіть шаблон запиту. Використовуйте \${transcription} як заповнювач для необробленого тексту транскрипції. Якщо опущено, транскрипцію додають після запиту."; +$text['description-voicemail_transcription_prompt']['tr-tr'] = "İstem şablonunu girin. Ham transkripsiyon metni için yer tutucu olarak \${transcription} kullanın. Atlanırsa, transkripsiyon istemden sonra eklenir."; +$text['description-voicemail_transcription_prompt']['zh-cn'] = "输入提示模板。使用 \${transcription} 作为原始转录文本的占位符。如果省略,转录文本将附加在提示之后。"; +$text['description-voicemail_transcription_prompt']['ja-jp'] = "プロンプトテンプレートを入力してください。生の文字起こしテキストのプレースホルダーとして \${transcription} を使用してください。省略した場合、文字起こしはプロンプトの後に追加されます。"; +$text['description-voicemail_transcription_prompt']['ko-kr'] = "프롬프트 템플릿을 입력하세요. 원시 전사 텍스트의 자리 표시자로 \${transcription}을 사용하세요. 생략하면 전사본이 프롬프트 뒤에 추가됩니다."; + $text['description-voicemail_file']['en-us'] = "Select a listening option to include with the email notification."; $text['description-voicemail_file']['en-gb'] = "Select a listening option to include with the email notification."; $text['description-voicemail_file']['ar-eg'] = "اختاري خياراً للاستماع إلى الإخطار بالبريد الإلكتروني."; diff --git a/app/extensions/extension_edit.php b/app/extensions/extension_edit.php index 6329da88a..e5f22794a 100644 --- a/app/extensions/extension_edit.php +++ b/app/extensions/extension_edit.php @@ -187,6 +187,8 @@ if (!empty($_POST)) { $voicemail_enabled = $_POST["voicemail_enabled"]; $voicemail_mail_to = $_POST["voicemail_mail_to"]; $voicemail_transcription_enabled = $_POST["voicemail_transcription_enabled"]; + $voicemail_transcription_prompt_enabled = $_POST["voicemail_transcription_prompt_enabled"] ?? 'false'; + $voicemail_transcription_prompt = $_POST["voicemail_transcription_prompt"] ?? ''; $voicemail_file = $_POST["voicemail_file"]; $voicemail_local_after_email = $_POST["voicemail_local_after_email"]; $user_context = $_POST["user_context"]; @@ -814,6 +816,10 @@ if (!empty($_POST) && empty($_POST["persistformvar"])) { $array["voicemails"][$i]["voicemail_local_after_email"] = $voicemail_local_after_email; } $array["voicemails"][$i]["voicemail_transcription_enabled"] = $voicemail_transcription_enabled; + if ($transcribe_enabled && permission_exists('voicemail_transcription_enabled')) { + $array["voicemails"][$i]["voicemail_transcription_prompt_enabled"] = $voicemail_transcription_prompt_enabled; + $array["voicemails"][$i]["voicemail_transcription_prompt"] = $voicemail_transcription_prompt; + } $array["voicemails"][$i]["voicemail_tutorial"] = $voicemail_tutorial ?? null; $array["voicemails"][$i]["voicemail_enabled"] = $voicemail_enabled; $array["voicemails"][$i]["voicemail_description"] = $description; @@ -1000,6 +1006,8 @@ if (!empty($_GET) && (empty($_POST["persistformvar"]) || $_POST["persistformvar" $voicemail_password = str_replace("#", "", $row["voicemail_password"] ?? ''); $voicemail_mail_to = str_replace(" ", "", $row["voicemail_mail_to"] ?? ''); $voicemail_transcription_enabled = $row["voicemail_transcription_enabled"]; + $voicemail_transcription_prompt_enabled = $row["voicemail_transcription_prompt_enabled"] ?? false; + $voicemail_transcription_prompt = $row["voicemail_transcription_prompt"] ?? ''; $voicemail_tutorial = $row["voicemail_tutorial"]; $voicemail_file = $row["voicemail_file"]; $voicemail_local_after_email = $row["voicemail_local_after_email"]; @@ -1172,6 +1180,12 @@ if (!isset($voicemail_enabled)) { if (!isset($voicemail_transcription_enabled)) { $voicemail_transcription_enabled = $settings->get('voicemail', 'transcription_enabled_default', false); } +if (!isset($voicemail_transcription_prompt_enabled)) { + $voicemail_transcription_prompt_enabled = false; +} +if (!isset($voicemail_transcription_prompt)) { + $voicemail_transcription_prompt = ''; +} if (!isset($voicemail_tutorial)) { $voicemail_tutorial = false; } @@ -1900,6 +1914,32 @@ if (permission_exists('voicemail_edit') && is_dir(dirname(__DIR__, 2) . '/app/vo echo $text['description-voicemail_transcription_enabled'] . "\n"; echo "\n"; echo "\n"; + + echo "\n"; + echo "\n"; + echo " " . $text['label-voicemail_transcription_prompt_enabled'] . "\n"; + echo "\n"; + echo "\n"; + echo " \n"; + echo "
\n"; + echo $text['description-voicemail_transcription_prompt_enabled'] . "\n"; + echo "\n"; + echo "\n"; + + $prompt_row_style = in_array($voicemail_transcription_prompt_enabled, [true, 'true', 't'], true) ? '' : 'display:none;'; + echo "\n"; + echo "\n"; + echo " " . $text['label-voicemail_transcription_prompt'] . "\n"; + echo "\n"; + echo "\n"; + echo " \n"; + echo "
\n"; + echo $text['description-voicemail_transcription_prompt'] . "\n"; + echo "\n"; + echo "\n"; } if (permission_exists('voicemail_file')) { @@ -1918,8 +1958,9 @@ if (permission_exists('voicemail_edit') && is_dir(dirname(__DIR__, 2) . '/app/vo echo "\n"; echo "\n"; } +} - if (permission_exists('voicemail_local_after_email')) { +if (permission_exists('voicemail_local_after_email')) { echo "\n"; echo "\n"; echo " " . $text['label-voicemail_local_after_email'] . "\n"; diff --git a/app/voicemails/app_config.php b/app/voicemails/app_config.php index eb0d5df5d..645dbf741 100644 --- a/app/voicemails/app_config.php +++ b/app/voicemails/app_config.php @@ -474,6 +474,14 @@ $apps[$x]['db'][$y]['fields'][$z]['type'] = "boolean"; $apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "If voicemail transcription is enabled for this user"; $z++; + $apps[$x]['db'][$y]['fields'][$z]['name'] = "voicemail_transcription_prompt_enabled"; + $apps[$x]['db'][$y]['fields'][$z]['type'] = "boolean"; + $apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "If custom prompt post-processing of transcriptions is enabled"; + $z++; + $apps[$x]['db'][$y]['fields'][$z]['name'] = "voicemail_transcription_prompt"; + $apps[$x]['db'][$y]['fields'][$z]['type'] = "text"; + $apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Custom prompt template; use \${transcription} as placeholder for the raw STT text"; + $z++; $apps[$x]['db'][$y]['fields'][$z]['name'] = "voicemail_attach_file"; $apps[$x]['db'][$y]['fields'][$z]['type'] = "text"; $apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Choose whether to attach the file to the email."; diff --git a/app/voicemails/app_languages.php b/app/voicemails/app_languages.php index f8aaebc7b..8d9f05ede 100644 --- a/app/voicemails/app_languages.php +++ b/app/voicemails/app_languages.php @@ -1701,6 +1701,15 @@ $text['description-voicemail_transcription_enabled']['zh-cn'] = "选择是否为 $text['description-voicemail_transcription_enabled']['ja-jp'] = "この内線番号に対してボイスメールの文字起こしを有効にするかどうかを選択します。"; $text['description-voicemail_transcription_enabled']['ko-kr'] = "이 확장 프로그램에 음성 메일 전사가 활성화되어 있는지 선택하십시오."; +$text['label-voicemail_transcription_prompt_enabled']['en-us'] = "Custom Prompt Processing"; +$text['label-voicemail_transcription_prompt_enabled']['en-gb'] = "Custom Prompt Processing"; +$text['description-voicemail_transcription_prompt_enabled']['en-us'] = "When enabled, the transcription is sent to the configured AI provider with a custom prompt before being included in the voicemail email."; +$text['description-voicemail_transcription_prompt_enabled']['en-gb'] = "When enabled, the transcription is sent to the configured AI provider with a custom prompt before being included in the voicemail email."; +$text['label-voicemail_transcription_prompt']['en-us'] = "Transcription Prompt"; +$text['label-voicemail_transcription_prompt']['en-gb'] = "Transcription Prompt"; +$text['description-voicemail_transcription_prompt']['en-us'] = "Enter the prompt template. Use \${transcription} as a placeholder for the raw transcription text. If omitted, the transcription is appended after the prompt."; +$text['description-voicemail_transcription_prompt']['en-gb'] = "Enter the prompt template. Use \${transcription} as a placeholder for the raw transcription text. If omitted, the transcription is appended after the prompt."; + $text['description-voicemail_message']['en-us'] = "A list of recorded voice messages which shows when the message was created, caller ID information, length, file size and download or delete the message."; $text['description-voicemail_message']['en-gb'] = "A list of recorded voice messages which shows when the message was created, caller ID information, length, file size and download or delete the message."; $text['description-voicemail_message']['ar-eg'] = "قائمة بالرسائل الصوتية المسجلة التي تظهر وقت إنشاء الرسالة ومعلومات هوية المتصل وطولها وحجم الملف وتنزيل الرسالة أو حذفها."; diff --git a/app/voicemails/resources/classes/voicemail.php b/app/voicemails/resources/classes/voicemail.php index 11ce7e364..e3664f60f 100644 --- a/app/voicemails/resources/classes/voicemail.php +++ b/app/voicemails/resources/classes/voicemail.php @@ -1183,6 +1183,23 @@ class voicemail { $transcribe->audio_filename = basename($voicemail_message_file); $message_transcription = $transcribe->transcribe('text'); + if (!empty($message_transcription) && class_exists('transcribe_prompt')) { + $sql = "select voicemail_transcription_prompt_enabled, voicemail_transcription_prompt " + . "from v_voicemails where voicemail_uuid = :voicemail_uuid "; + $parameters['voicemail_uuid'] = $this->voicemail_uuid; + $vm_row = $this->database->select($sql, $parameters, 'row'); + unset($sql, $parameters); + if (in_array($vm_row['voicemail_transcription_prompt_enabled'] ?? null, [true, 'true', 't'], true) + && !empty($vm_row['voicemail_transcription_prompt']) + ) { + $prompt_processor = new transcribe_prompt($settings); + $prompt_result = $prompt_processor->process($message_transcription, $vm_row['voicemail_transcription_prompt']); + if (!empty($prompt_result)) { + $message_transcription = $prompt_result; + } + } + } + //build voicemail message data array if (!empty($message_transcription)) { $array['voicemail_messages'][0]['voicemail_message_uuid'] = $this->voicemail_message_uuid; diff --git a/app/voicemails/voicemail_edit.php b/app/voicemails/voicemail_edit.php index c55916f46..4fa79e34e 100644 --- a/app/voicemails/voicemail_edit.php +++ b/app/voicemails/voicemail_edit.php @@ -127,6 +127,8 @@ $voicemail_mail_to = $_POST["voicemail_mail_to"]; $voicemail_sms_to = $_POST["voicemail_sms_to"] ?? null; $voicemail_transcription_enabled = $_POST["voicemail_transcription_enabled"]; + $voicemail_transcription_prompt_enabled = $_POST["voicemail_transcription_prompt_enabled"] ?? 'false'; + $voicemail_transcription_prompt = $_POST["voicemail_transcription_prompt"] ?? ''; $voicemail_file = $_POST["voicemail_file"]; $voicemail_local_after_email = $_POST["voicemail_local_after_email"]; $voicemail_destination = $_POST["voicemail_destination"]; @@ -204,6 +206,10 @@ $array['voicemails'][0]['voicemail_mail_to'] = $voicemail_mail_to; $array['voicemails'][0]['voicemail_sms_to'] = $voicemail_sms_to; $array['voicemails'][0]['voicemail_transcription_enabled'] = $voicemail_transcription_enabled; + if ($transcribe_enabled && permission_exists('voicemail_transcription_enabled')) { + $array['voicemails'][0]['voicemail_transcription_prompt_enabled'] = $voicemail_transcription_prompt_enabled; + $array['voicemails'][0]['voicemail_transcription_prompt'] = $voicemail_transcription_prompt; + } $array['voicemails'][0]['voicemail_tutorial'] = $voicemail_tutorial; if (permission_exists('voicemail_recording_instructions')) { $array['voicemails'][0]['voicemail_recording_instructions'] = $voicemail_recording_instructions; @@ -370,6 +376,10 @@ $sql .= "voicemail_mail_to, "; $sql .= "voicemail_sms_to, "; $sql .= "voicemail_transcription_enabled, "; + if ($transcribe_enabled && permission_exists('voicemail_transcription_enabled')) { + $sql .= "voicemail_transcription_prompt_enabled, "; + $sql .= "voicemail_transcription_prompt, "; + } $sql .= "voicemail_tutorial, "; $sql .= "voicemail_recording_instructions, "; $sql .= "voicemail_recording_options, "; @@ -393,6 +403,8 @@ $voicemail_mail_to = $row["voicemail_mail_to"]; $voicemail_sms_to = $row["voicemail_sms_to"]; $voicemail_transcription_enabled = $row["voicemail_transcription_enabled"]; + $voicemail_transcription_prompt_enabled = $row["voicemail_transcription_prompt_enabled"] ?? false; + $voicemail_transcription_prompt = $row["voicemail_transcription_prompt"] ?? ''; $voicemail_tutorial = $row["voicemail_tutorial"]; $voicemail_recording_instructions = $row["voicemail_recording_instructions"]; $voicemail_recording_options = $row["voicemail_recording_options"]; @@ -419,6 +431,8 @@ $voicemail_local_after_email = $voicemail_local_after_email ?? true; $voicemail_enabled = $voicemail_enabled ?? $settings->get('voicemail', 'enabled_default', true); $voicemail_transcription_enabled = $voicemail_transcription_enabled ?? $settings->get('voicemail', 'transcription_enabled_default', false); + $voicemail_transcription_prompt_enabled = $voicemail_transcription_prompt_enabled ?? false; + $voicemail_transcription_prompt = $voicemail_transcription_prompt ?? ''; $voicemail_tutorial = $voicemail_tutorial ?? false; $voicemail_recording_instructions = $voicemail_recording_instructions ?? true; $voicemail_recording_options = $voicemail_recording_options ?? true; @@ -923,6 +937,32 @@ echo $text['description-voicemail_transcription_enabled']."\n"; echo "\n"; echo "\n"; + + echo "\n"; + echo "\n"; + echo " ".$text['label-voicemail_transcription_prompt_enabled']."\n"; + echo "\n"; + echo "\n"; + echo " \n"; + echo "
\n"; + echo $text['description-voicemail_transcription_prompt_enabled']."\n"; + echo "\n"; + echo "\n"; + + $prompt_row_style = in_array($voicemail_transcription_prompt_enabled, [true, 'true', 't'], true) ? '' : 'display:none;'; + echo "\n"; + echo "\n"; + echo " ".$text['label-voicemail_transcription_prompt']."\n"; + echo "\n"; + echo "\n"; + echo " \n"; + echo "
\n"; + echo $text['description-voicemail_transcription_prompt']."\n"; + echo "\n"; + echo "\n"; } if (permission_exists('voicemail_file')) {