Ana içeriğe geç

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);
}