56 lines
2.3 KiB
Markdown
56 lines
2.3 KiB
Markdown
# Callback AGI
|
|
|
|
این پروژه یک AGI برای Asterisk است که قبل از IVR، آخرین تماس خروجی ناموفق
|
|
به مشتری را در یک ساعت گذشته پیدا میکند. رکورد با مقدار `target = 'pending'`
|
|
بهصورت اتمیک قفل میشود؛ در صورت پاسخ داخلی، مقدار آن به `callback_done`
|
|
تغییر میکند و در غیر این صورت قفل آزاد شده و تماس به IVR میرود.
|
|
|
|
## ساخت و نصب
|
|
|
|
```bash
|
|
./mvnw package
|
|
install -m 0755 scripts/callback-agi /var/lib/asterisk/agi-bin/callback-agi
|
|
```
|
|
|
|
مسیر JAR را با متغیر `CALLBACK_AGI_JAR` تنظیم کنید. اسکریپت باید در نقطه ورود
|
|
تماس ورودی بهعنوان AGI موجود نصب شود؛ خود پروژه نیازی به تغییر dialplan ندارد.
|
|
|
|
برای اجرای محلی از ریشه پروژه، wrapper بهصورت خودکار JAR داخل `target/` را
|
|
پیدا میکند:
|
|
|
|
```bash
|
|
./mvnw clean package
|
|
printf 'agi_callerid: 09121234567\nagi_dnid: 02112345678\n\n' | ./scripts/callback-agi
|
|
```
|
|
|
|
این برنامه یک AGI غیر وب است و بدون آرگومان اجرا میشود. برنامه ورودی AGI را
|
|
از stdin میخواند و تنظیمات آن از `application.properties` خوانده میشوند.
|
|
|
|
```bash
|
|
./mvnw spring-boot:run
|
|
```
|
|
|
|
## تنظیمات
|
|
|
|
تمام تنظیمات در فایل
|
|
[`CALLBACK-CONFIG.md`](CALLBACK-CONFIG.md) مستند شدهاند.
|
|
مقادیر را مستقیماً در `src/main/resources/application.properties` تغییر دهید.
|
|
|
|
مقدار `agi_callerid` نرمال میشود؛ پیشوندهای `+98`، `0098` و صفر ابتدایی،
|
|
فاصله و خط تیره حذف میشوند. `agi_dnid` برای ثبت رکورد لازم نیست و برای
|
|
تطبیق callback عمداً استفاده نمیشود.
|
|
|
|
## نکات دیتابیس
|
|
|
|
برای سرعت lookup، در صورت امکان migration زیر را اجرا کنید:
|
|
|
|
```sql
|
|
CREATE INDEX IF NOT EXISTS idx_callback_lookup
|
|
ON tbl_cdr (real_dst, calldate DESC)
|
|
WHERE direction_call = 'outbound'
|
|
AND disposition IN ('NO ANSWER', 'BUSY', 'FAILED');
|
|
```
|
|
|
|
ستون `target` باید nullable باشد. نام و رمز عبور دیتابیس را در source code
|
|
قرار ندهید.
|