2.3 KiB
Callback AGI
این پروژه یک AGI برای Asterisk است که قبل از IVR، آخرین تماس خروجی ناموفق
به مشتری را در یک ساعت گذشته پیدا میکند. رکورد با مقدار target = 'pending'
بهصورت اتمیک قفل میشود؛ در صورت پاسخ داخلی، مقدار آن به callback_done
تغییر میکند و در غیر این صورت قفل آزاد شده و تماس به IVR میرود.
ساخت و نصب
./mvnw package
install -m 0755 scripts/callback-agi /var/lib/asterisk/agi-bin/callback-agi
مسیر JAR را با متغیر CALLBACK_AGI_JAR تنظیم کنید. اسکریپت باید در نقطه ورود
تماس ورودی بهعنوان AGI موجود نصب شود؛ خود پروژه نیازی به تغییر dialplan ندارد.
برای اجرای محلی از ریشه پروژه، wrapper بهصورت خودکار JAR داخل target/ را
پیدا میکند:
./mvnw clean package
printf 'agi_callerid: 09121234567\nagi_dnid: 02112345678\n\n' | ./scripts/callback-agi
این برنامه یک AGI غیر وب است و بدون آرگومان اجرا میشود. برنامه ورودی AGI را
از stdin میخواند و تنظیمات آن از application.properties خوانده میشوند.
./mvnw spring-boot:run
تنظیمات
تمام تنظیمات در فایل
CALLBACK-CONFIG.md مستند شدهاند.
مقادیر را مستقیماً در src/main/resources/application.properties تغییر دهید.
مقدار agi_callerid نرمال میشود؛ پیشوندهای +98، 0098 و صفر ابتدایی،
فاصله و خط تیره حذف میشوند. agi_dnid برای ثبت رکورد لازم نیست و برای
تطبیق callback عمداً استفاده نمیشود.
نکات دیتابیس
برای سرعت lookup، در صورت امکان migration زیر را اجرا کنید:
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
قرار ندهید.