ارتباط مستقیم 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
-
وارد Google Sheets شوید
-
Extensions > Apps Script
-
کد زیر را قرار دهید:
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);
}
-
از منوی 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 datetime
TEXT = 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 |
مثل همیشه عالی