...

تبدیل متن به گفتار فارسی با Google Gemini API از طریق Asterisk و Issabel

فهرست مطالب

زمان مطالعه: 3 دقیقه

ارتباط مستقیم Google Gemini و Asterisk با تولید فایل صوتی طبیعی برای تماس‌های تلفنی

در دنیای امروز سیستم‌های تلفنی هوشمند، داشتن صدای انسانی، طبیعی و قابل فهم نقش بسیار مهمی در تجربه کاربری ایفا می‌کند. اگر از Asterisk یا Issabel برای راه‌اندازی مرکز تماس استفاده می‌کنید، حتماً تا به‌حال با چالش‌هایی مثل تولید فایل صوتی برای منشی‌گویا یا Agentهای پاسخ‌گوی خودکار روبه‌رو شده‌اید.

در این مقاله، روشی کاملاً نوین و جذاب را بررسی می‌کنیم که با استفاده از Google Gemini API و یک پیاده‌سازی ساده و رایگان، می‌توان متون فارسی را به‌صورت صدای طبیعی (WAV) تبدیل کرد و مستقیماً در تماس‌های VoIP روی ایزابل یا استریسک پخش کرد.

این راهکار:

  • رایگان است (بدون نیاز به سرویس پولی Google Cloud TTS)

  • خروجی با کیفیت و صدای طبیعی تولید می‌کند

  • به سادگی از طریق Dialplan قابل اجراست

  • قابل استفاده برای منشی‌گویا، Agentهای هوشمند، پاسخ خودکار و حتی تماس‌های تبلیغاتی هوشمند است

در ادامه، به‌صورت گام‌به‌گام، نحوه ساخت این سیستم را آموزش می‌دهیم و به شما کمک می‌کنیم آن را روی سرور Issabel 5 با Asterisk 18 و سیستم‌عامل Rocky Linux پیاده‌سازی کنید.


 هدف:

در این آموزش یاد می‌گیرید چگونه با کمک Google Gemini API یک سیستم تبدیل متن فارسی به گفتار طبیعی راه‌اندازی کنید که:

  • از Dialplan استریسک (Asterisk) قابل فراخوانی باشد

  • خروجی به صورت فایل WAV در مسیر /var/lib/asterisk/sounds/ ذخیره شود

  • مناسب برای پخش در تماس‌ها، منشی گویا، یا Agentهای هوشمند باشد


 معماری کلی:

Asterisk Dialplan

└──> اجرای یک اسکریپت Python یا PHP یا AGI

└──> ارسال متن به Google Apps Script (Web API)

└──> پاسخ: فایل صوتی <span class="hljs-built_in">base64</span>

└──> Decode + ذخیره در مسیر Asterisk

 چه چیزهایی نیاز دارید؟

مورد توضیح
اکانت Google + Gemini API Key دریافت از AI Studio
Google Apps Script منتشر شده به صورت Web App تا درخواست‌های HTTP بپذیرد
اسکریپت Python روی سرور Asterisk برای فراخوانی Gemini و ذخیره فایل
دسترسی به اینترنت از سرور برای تماس با Google Apps Script
مسیر دسترسی‌پذیر Asterisk به فایل‌های صوتی /var/lib/asterisk/sounds/custom/

 مرحله ۱ – ساخت Google Apps Script به صورت Web API

  1. وارد Google Sheets شوید

  2. Extensions > Apps Script

  3. کد زیر را قرار دهید:

const GEMINI_API_KEY = 'YOUR_GEMINI_API_KEY';

function doPost(e) {
const data = JSON.parse(e.postData.contents);
const text = data.text;

const prompt = `
تو یک گوینده حرفه‌ای فارسی هستی. لطفاً متن زیر را به صورت صدای طبیعی (WAV base64) بازگردان:
"${text}"
`;

const response = UrlFetchApp.fetch("https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=" + GEMINI_API_KEY, {
method: "POST",
contentType: "application/json",
payload: JSON.stringify({
contents: [{
parts: [{ text: prompt }]
}]
})
});

const json = JSON.parse(response.getContentText());
const base64Audio = json.candidates?.[0]?.content?.parts?.[0]?.text?.replace(/^data:audio\/wav;base64,/, '');

return ContentService.createTextOutput(base64Audio);
}

  1. از منوی Deploy > Deploy as Web App را انتخاب کنید:

    • اجرا به عنوان: Me

    • دسترسی: Anyone (حتی بدون لاگین)

    • آدرس Web App ذخیره شود (مثلاً https://script.google.com/macros/s/xxx/exec)


 مرحله ۲ – ساخت اسکریپت Python برای سرور Asterisk

فایل saytext.py:

<code class="whitespace-pre! language-python">import sys
import base64
import requests
from datetime import datetimeTEXT = sys.argv[1]
URL = "https://script.google.com/macros/s/YOUR_SCRIPT_ID/exec"output_filename = f"/var/lib/asterisk/sounds/custom/tts_{int(datetime.now().timestamp())}.wav"

response = requests.post(URL, json={"text": TEXT})
if response.status_code == 200:
audio_data = base64.b64decode(response.text)
with open(output_filename, "wb") as f:
f.write(audio_data)
print(output_filename)
else:
print("ERROR")
sys.exit(1)

🔐 دسترسی فایل: chmod +x saytext.py


 مرحله ۳ – اضافه کردن به Dialplan Asterisk

در extensions_custom.conf:

[voipiran]
exten => 800,1,Answer()
exten => 800,n,Set(TEXT=سلام، خوش آمدید به سیستم هوشمند ویپ ایران)
exten => 800,n,System(/usr/bin/python3 /root/saytext.py "${TEXT}")
exten => 800,n,Playback(custom/tts_${EPOCH}) ; اگر نام فایل را ذخیره کردید بر اساس زمان
exten => 800,n,Hangup()

یا می‌تونید نام فایل را توسط SystemOutput بخونید و با Playback(${FILENAME}) اجرا کنید.


 مزایای این روش

مورد مزیت
پشتیبانی از فارسی با خروجی صدای طبیعی
بدون نیاز به Google Cloud Billing فقط Gemini API Key رایگان کافی است
اجرای مستقیم از Asterisk بدون نیاز به رابط کاربری یا دستی
استفاده در Agentهای هوشمند همراه با Vosk یا Node-RED در Issabel
5 2 رای ها
امتیازدهی به مقاله
اشتراک در
اطلاع از

1 دیدگاه
قدیمی‌ترین
تازه‌ترین بیشترین رأی
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها
ایمان قربانعلی
6 روز قبل

مثل همیشه عالی