2026-09-12 00:19:44 +03:30
2026-09-12 00:19:44 +03:30
2026-09-12 00:19:44 +03:30
2026-09-12 00:19:44 +03:30
2026-09-12 00:19:44 +03:30
2026-09-12 00:19:44 +03:30
2026-09-12 00:19:44 +03:30
2026-09-12 00:19:44 +03:30
2026-09-12 00:19:44 +03:30
2026-09-12 00:19:44 +03:30
2026-09-12 00:19:44 +03:30

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 قرار ندهید.

Description
No description provided
Readme 42 KiB
Languages
Java 97.1%
Shell 2.9%