ارتباط مستقیم Google Gemini و Asterisk با تولید فایل صوتی طبیعی برای تماسهای تلفنی
هدف:
در این آموزش یاد میگیرید چگونه با کمک Google Gemini API یک سیستم تبدیل متن فارسی به گفتار طبیعی راهاندازی کنید که:
-
از Dialplan استریسک (Asterisk) قابل فراخوانی باشد
-
خروجی به صورت فایل WAV در مسیر
/var/lib/asterisk/sounds/
ذخیره شود -
مناسب برای پخش در تماسها، منشی گویا، یا Agentهای هوشمند باشد
معماری کلی:
Asterisk Dialplan
│
└──> اجرای یک اسکریپت Python یا PHP یا AGI
│
└──> ارسال متن به Google Apps Script (Web API)
│
└──> پاسخ: فایل صوتی base64
│
└──> 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
:
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 |