Yardımcı Fonksiyonlar
Pi v2'de genel amaçlı yardımcı işlemler için kullanılan fonksiyonlar.
addLog(...args)
Uygulama loglarına mesaj ekler.
Parametreler:
- ...args (any[]) - Loglanacak değerler (değişken sayıda parametre)
Dönüş Değeri:
Promise<void>- İşlem sonucu
Örnek:
// Basit log mesajı
await addLog("Uygulama başlatıldı");
// Birden fazla parametre
await addLog("Kullanıcı girişi:", $arayan, "Zaman:", new Date());
// Değişkenlerle log
const userChoice = "1";
const timestamp = new Date().toISOString();
await addLog("Seçim yapıldı:", userChoice, "Zaman:", timestamp);
// Hata loglama
try {
// Riskli işlem
const result = await get("https://api.example.com/veri");
await addLog("İşlem başarılı:", result);
} catch (error) {
await addLog("Hata oluştu:", error.message, "Kullanıcı:", $arayan);
}
// Debug loglama
const debugMode = await getVariable("DEBUG_MODE");
if (debugMode === "true") {
await addLog("Debug - Kanal:", $kanal, "ID:", $id);
await addLog("Debug - Parametreler:", $uygulamaId);
}
// Obje loglama
const userData = {
caller: $arayan,
called: $aranan,
app: $uygulamaId
};
await addLog("Kullanıcı verisi:", JSON2str(userData));
sleep(ms)
Belirtilen süre kadar bekler.
Parametreler:
- ms (number) - Bekleme süresi (milisaniye)
Dönüş Değeri:
Promise<boolean>- Her zaman true döner
Örnek:
// 2 saniye bekle
await sleep(2000);
await tts("2 saniye beklendi");
// Kademeli mesajlar
await tts("İlk mesaj");
await sleep(1000);
await tts("İkinci mesaj");
await sleep(1500);
await tts("Üçüncü mesaj");
// İşlemler arası bekleme
const digits = await getDigitsWithTTS("Seçiminizi yapın", 5000, 1);
if (!digits.result) {
await tts("Seçim yapılmadı, tekrar deneyiniz");
await sleep(1000); // Kısa bekleme
// Tekrar dene
}
// Sistem yükünü azaltma
for (let i = 0; i < 5; i++) {
await tts(`Sayı: ${i + 1}`);
await sleep(800); // Her sayı arasında bekleme
}
// API istekleri arası bekleme
try {
await post("https://api.example.com/start", data);
await sleep(500); // API'nin işlemesi için bekleme
const status = await get("https://api.example.com/status");
} catch (error) {
await addLog("API hatası:", error.message);
}
sendSMS(credentials, messages)
SMS mesajı gönderir. Tek numaraya veya birden fazla numaraya (blok) gönderim yapılabilir.
Parametreler:
- credentials (object) - SMS servis kimlik bilgileri:
{ username, password, title }. title, gönderici başlığıdır. - messages (array | object) - Blok gönderim için
[{ number, message }, ...]dizisi; tekli gönderim için{ phoneNumber, message }objesi.
Dönüş Değeri:
Promise<object>-{ error: boolean, description?: string }
Örnek:
const smsCredentials = {
username: "sms_kullanici",
password: "sms_sifre",
title: "BASLIK"
};
// Tekli gönderim
const sonuc = await sendSMS(smsCredentials, {
phoneNumber: $arayan,
message: "Aramanız için teşekkürler."
});
if (!sonuc.error) {
await addLog("SMS gönderildi");
} else {
await addLog("SMS hatası:", sonuc.description);
}
// Blok gönderim (birden fazla numara)
const mesajlar = [
{ number: $arayan, message: "Randevunuz onaylandı." },
{ number: "05551234567", message: "Yeni randevu alındı." }
];
const blokSonuc = await sendSMS(smsCredentials, mesajlar);
await addLog("Blok SMS sonucu:", JSON2str(blokSonuc));
sendEmail(credentials, message)
SMTP üzerinden e-posta gönderir.
Parametreler:
- credentials (object) - SMTP bilgileri:
{ host, port?, secure?, username?, password?, from? }. secure true ise SSL (port 465), değilse STARTTLS kullanılır. - message (object) -
{ to, subject, text?, html?, from?, cc?, bcc?, replyTo? }. to/cc/bcc string veya dizi olabilir. text veya html alanlarından en az biri zorunludur.
Dönüş Değeri:
Promise<object>-{ error: boolean, description?: string }
Örnek:
const emailCredentials = {
host: "smtp.example.com",
port: 587,
username: "[email protected]",
password: "smtp_sifre",
from: "[email protected]"
};
const sonuc = await sendEmail(emailCredentials, {
to: "[email protected]",
subject: "Çağrı Özeti",
text: "Aramanız için teşekkürler.",
html: "Aramanız için teşekkürler."
});
if (!sonuc.error) {
await addLog("E-posta gönderildi");
} else {
await addLog("E-posta hatası:", sonuc.description);
}
Yaygın Kullanım Örnekleri
Detaylı Log Sistemi
// Uygulama başlangıcı
await addLog("=== Uygulama Başlatıldı ===");
await addLog("Arayan:", $arayan);
await addLog("Aranan:", $aranan);
await addLog("Uygulama ID:", $uygulamaId);
await addLog("Kanal:", $kanal);
await addLog("Çağrı ID:", $id);
await addLog("Zaman:", new Date().toISOString());
// İşlem adımları
await addLog("Adım 1: Kullanıcı kimlik doğrulama");
const authResult = await authenticateUser($arayan);
await addLog("Kimlik doğrulama sonucu:", authResult ? "Başarılı" : "Başarısız");
if (authResult) {
await addLog("Adım 2: Ana menü gösteriliyor");
const choice = await showMainMenu();
await addLog("Kullanıcı seçimi:", choice);
}
// Uygulama sonu
await addLog("=== Uygulama Sonlandırıldı ===");
Zamanlı İşlemler
// Geri sayım
for (let i = 5; i >= 1; i--) {
await tts(`${i}`);
await sleep(1000);
}
await tts("Başlıyoruz!");
// Aşamalı bilgilendirme
await tts("Lütfen bekleyiniz");
await sleep(2000);
await tts("İşleminiz devam ediyor");
await sleep(3000);
await tts("Neredeyse tamamlandı");
await sleep(2000);
await tts("İşleminiz tamamlandı");
SMS Bildirimi Sistemi
// Çağrı sonrası SMS bildirimi
const callEndTime = new Date().toLocaleString('tr-TR');
const callDuration = "5 dakika 30 saniye"; // Hesaplanmış süre
const callSummaryMessages = [{
number: $arayan,
message: `Çağrı Özeti:\nTarih: ${callEndTime}\nSüre: ${callDuration}\nİşlem: Tamamlandı\n\nTeşekkürler!`
}];
const smsCredentials = {
username: await getVariable("SMS_USERNAME"),
password: await getVariable("SMS_PASSWORD"),
title: "SUPPORT"
};
try {
await sendSMS(smsCredentials, callSummaryMessages);
await addLog("Çağrı özeti SMS'i gönderildi");
} catch (error) {
await addLog("SMS gönderim hatası:", error.message);
}
Hata Yönetimi ve Loglama
async function safeOperation(operationName, operation) {
await addLog(`${operationName} başlatılıyor...`);
const startTime = Date.now();
try {
const result = await operation();
const duration = Date.now() - startTime;
await addLog(`${operationName} başarılı (${duration}ms)`);
return result;
} catch (error) {
const duration = Date.now() - startTime;
await addLog(`${operationName} hatası (${duration}ms):`, error.message);
throw error;
}
}
// Kullanım
const apiData = await safeOperation("API Veri Çekme", async () => {
return await get("https://api.example.com/data");
});
const smsResult = await safeOperation("SMS Gönderimi", async () => {
return await sendSMS(credentials, messages);
});
findCustomer(number)
Sherlock sisteminde mevcut müşteriyi telefon numarası ile arar.
Parametreler:
- number (string) - Aranacak telefon numarası
Dönüş Değeri:
Promise<string>- Müşteri bilgilerini içeren JSON metni (str2JSON ile objeye çevirin)
Örnek:
try {
const yanit = await findCustomer($arayan);
const musteri = str2JSON(yanit);
if (musteri && musteri.name) {
await tts(`Hoş geldiniz ${musteri.name}`);
} else {
await tts("Müşteri kaydınız bulunamadı");
}
} catch (error) {
await addLog("Müşteri arama hatası:", error);
}