hata düzeltme 1
This commit is contained in:
88
lib/sms/netgsm.ts
Normal file
88
lib/sms/netgsm.ts
Normal file
@@ -0,0 +1,88 @@
|
||||
export interface NetGsmConfig {
|
||||
username?: string;
|
||||
password?: string;
|
||||
header?: string;
|
||||
apiUrl?: string;
|
||||
}
|
||||
|
||||
export interface SmsResult {
|
||||
success: boolean;
|
||||
jobId?: string;
|
||||
error?: string;
|
||||
code?: string;
|
||||
}
|
||||
|
||||
export class NetGsmService {
|
||||
private config: NetGsmConfig;
|
||||
|
||||
constructor(config: NetGsmConfig) {
|
||||
this.config = config;
|
||||
}
|
||||
|
||||
/**
|
||||
* Send SMS using NetGSM GET API
|
||||
* Refer: https://www.netgsm.com.tr/dokuman/#http-get-servisi
|
||||
*/
|
||||
async sendSms(phone: string, message: string): Promise<SmsResult> {
|
||||
if (!this.config.username || !this.config.password || !this.config.header) {
|
||||
return { success: false, error: "NetGSM konfigürasyonu eksik." };
|
||||
}
|
||||
|
||||
// Clean phone number (remove spaces, parentheses, etc)
|
||||
// NetGSM expects 905xxxxxxxxx or just 5xxxxxxxxx, we'll ensure format
|
||||
let cleanPhone = phone.replace(/\D/g, '');
|
||||
if (cleanPhone.startsWith('90')) {
|
||||
cleanPhone = cleanPhone.substring(0); // keep it
|
||||
} else if (cleanPhone.startsWith('0')) {
|
||||
cleanPhone = '9' + cleanPhone;
|
||||
} else if (cleanPhone.length === 10) {
|
||||
cleanPhone = '90' + cleanPhone;
|
||||
}
|
||||
|
||||
try {
|
||||
// Encode parameters
|
||||
const params = new URLSearchParams({
|
||||
usercode: this.config.username,
|
||||
password: this.config.password,
|
||||
gsmno: cleanPhone,
|
||||
message: message,
|
||||
msgheader: this.config.header,
|
||||
dil: 'TR' // Turkish characters support
|
||||
});
|
||||
|
||||
const url = `${this.config.apiUrl || 'https://api.netgsm.com.tr/sms/send/get'}?${params.toString()}`;
|
||||
|
||||
const response = await fetch(url);
|
||||
const textResponse = await response.text();
|
||||
|
||||
// NetGSM returns a code (e.g. 00 123456789) or error code (e.g. 20)
|
||||
// Codes starting with 00, 01, 02 indicate success
|
||||
const code = textResponse.split(' ')[0];
|
||||
|
||||
if (['00', '01', '02'].includes(code)) {
|
||||
return { success: true, jobId: textResponse.split(' ')[1] || code, code };
|
||||
} else {
|
||||
const errorMap: Record<string, string> = {
|
||||
'20': 'Mesaj metni ya da karakter sınırını (1.000) aştı veya mesaj boş.',
|
||||
'30': 'Geçersiz kullanıcı adı , şifre veya kullanıcınızın API erişim izni yok.',
|
||||
'40': 'Gönderici adı (Başlık) sistemde tanımlı değil.',
|
||||
'70': 'Hatalı sorgu.',
|
||||
'50': 'Kendi numaranıza veya Rehberden SMS gönderiyorsanız; Abone kendi numarasını veya rehberindeki bir numarayı gönderici kimliği (MsgHeader) olarak kullanamaz.',
|
||||
'51': 'Aboneliğinizin süresi dolmuş.',
|
||||
'52': 'Aboneliğiniz bulunmamaktadır.',
|
||||
'60': 'Bakiyeniz yetersiz.',
|
||||
'71': 'Gönderim yapmak istediğiniz gsm numarası/numaraları hatalı.'
|
||||
};
|
||||
|
||||
return {
|
||||
success: false,
|
||||
code,
|
||||
error: errorMap[code] || `Bilinmeyen hata kodu: ${code} - Yanıt: ${textResponse}`
|
||||
};
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
return { success: false, error: (error as Error).message };
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user