# راهنمای تنظیمات Callback AGI تمام تنظیمات اجرای برنامه در فایل [`src/main/resources/application.properties`](src/main/resources/application.properties) قرار دارد. این AGI به هیچ پارامتر خط فرمانی نیاز ندارد. ## تنظیمات اصلی برنامه | پارامتر | توضیح | |---|---| | `spring.application.name` | نام برنامه Spring است. | | `spring.main.web-application-type` | برنامه را در حالت غیر وب اجرا می‌کند، چون این پروژه یک AGI برای Asterisk است. | | `debug` | حالت debug مربوط به Spring Boot را فعال یا غیرفعال می‌کند. | ## تنظیمات لاگ | پارامتر | توضیح | |---|---| | `logging.level.root` | سطح پیش‌فرض لاگ‌های برنامه. | | `logging.level.org.springframework` | سطح لاگ Spring Framework و Spring Boot. | | `logging.level.org.hibernate` | سطح لاگ Hibernate و JPA. | | `logging.level.com.zaxxer.hikari` | سطح لاگ connection pool مربوط به HikariCP. | ## تنظیمات دیتابیس و JPA | پارامتر | توضیح | |---|---| | `spring.datasource.url` | آدرس اتصال JDBC به PostgreSQL. | | `spring.datasource.username` | نام کاربری PostgreSQL. | | `spring.datasource.password` | رمز عبور PostgreSQL. | | `spring.datasource.hikari.maximum-pool-size` | حداکثر تعداد connectionهای موجود در pool. | | `spring.datasource.hikari.connection-timeout` | حداکثر زمان انتظار برای گرفتن connection از pool، برحسب میلی‌ثانیه. | | `spring.jpa.hibernate.ddl-auto` | نحوه مدیریت schema دیتابیس. مقدار `none` مانع تغییر schema موجود توسط Hibernate می‌شود. | | `spring.jpa.open-in-view` | باز نگه داشتن EntityManager در لایه وب. برای این پروژه غیرفعال است، چون برنامه وب نیست. | | `spring.jpa.properties.hibernate.jdbc.time_zone` | منطقه زمانی مورد استفاده JDBC و Hibernate برای timestampها. | ## تنظیمات Asterisk و IVR | پارامتر | توضیح | |---|---| | `callback.agi.dial-prefix` | پیشوند کانال برای تماس با داخلی کارمند؛ مانند `PJSIP/` یا `SIP/`. | | `callback.agi.dial-timeout-seconds` | مدت زمان زنگ خوردن داخلی برحسب ثانیه. | | `callback.agi.ivr-context` | نام context مربوط به IVR اصلی در dialplan. | | `callback.agi.ivr-extension` | extension مقصد در context مربوط به IVR. برای تماس ورودی معمولاً `s` است. | | `callback.agi.ivr-priority` | priorityای که اجرای IVR از آن شروع می‌شود. | در شرایط زیر تماس به IVR منتقل می‌شود: - قابلیت callback غیرفعال باشد. - callback مناسبی برای مشتری پیدا نشود. - داخلی پاسخ ندهد. - در جست‌وجو یا اتصال به دیتابیس خطایی رخ دهد. مقصد IVR از ترکیب سه مقدار زیر ساخته می‌شود: ```text callback.agi.ivr-context,callback.agi.ivr-extension,callback.agi.ivr-priority ``` با تنظیمات فعلی، مقصد تماس این است: ```text from-trunk,s,1 ``` اگر context شما مثلاً `company-ivr` است، مقدار زیر را تغییر دهید: ```properties callback.agi.ivr-context=company-ivr ``` ## تنظیمات رفتار Callback | پارامتر | توضیح | |---|---| | `callback.agi.enabled` | فعال یا غیرفعال بودن callback. اگر `false` باشد، همه تماس‌ها مستقیماً به IVR می‌روند و جدول `tbl_cdr` بررسی یا تغییر داده نمی‌شود. | | `callback.agi.lookback-minutes` | بازه جست‌وجوی تماس‌های خروجی ناموفق برحسب دقیقه. مقدار `60` یعنی یک ساعت. | | `callback.agi.claim-value` | مقدار موقت ستون `tbl_cdr.target` هنگام شروع callback. این مقدار برای قفل هم‌زمانی استفاده می‌شود. | | `callback.agi.done-value` | مقدار نهایی ستون `tbl_cdr.target` بعد از پاسخ داخلی. پس از آن، تماس بعدی همان مشتری به IVR می‌رود. | ## نمونه تنظیمات ### فعال بودن Callback برای یک ساعت گذشته ```properties callback.agi.enabled=true callback.agi.lookback-minutes=60 ``` ### غیرفعال کردن کامل Callback ```properties callback.agi.enabled=false ``` در این حالت تمام تماس‌ها بدون جست‌وجوی callback به IVR می‌روند. ### استفاده از IVR متفاوت ```properties callback.agi.ivr-context=my-ivr callback.agi.ivr-extension=s callback.agi.ivr-priority=1 ``` ### تغییر بازه جست‌وجو به ۳۰ دقیقه ```properties callback.agi.lookback-minutes=30 ```