diff --git a/docs/ats-diffs-for-pasha.md b/docs/ats-diffs-for-pasha.md new file mode 100644 index 0000000..b905e3c --- /dev/null +++ b/docs/ats-diffs-for-pasha.md @@ -0,0 +1,81 @@ +# Дифы для АТС (Asterisk 13.18.5) — автодозвон SuperSam +# Показываются Паше ДО применения. Все правки аддитивные, существующие звонки не трогают. + +===================================================================== +## ПРАВКА 1 — Новый контекст диалплана `[SS-Autocall-Slot]` +===================================================================== +Файл: /etc/asterisk/extensions.conf (добавить в конец, после [mmedia-Incoming]) + +[SS-Autocall-Slot] +; Автодозвон SuperSam: робот (Vivienne) опрашивает клиента по DTMF. +; Вызывается из call-файла планировщика (Context: SS-Autocall-Slot). +; Переменные SCENARIO/CALLTYPE/GROUP_ID/ATTEMPT/API_URL/API_KEY/TEST_MODE +; приходят из call-файла через Setvar. +exten => s,1,NoOp(SS-Autocall-Slot: scenario=${SCENARIO} group=${GROUP_ID} attempt=${ATTEMPT}) + same => n,Answer() + same => n,Wait(1) + same => n,AGI(ss-dialog.agi,${SCENARIO},${CALLTYPE}) + same => n,Hangup() + +; --- конец правки 1 --- + +===================================================================== +## ПРАВКА 2 — curl результата в конец ss-dialog.agi +===================================================================== +Файл: /var/lib/asterisk/agi-bin/ss-dialog.agi +Вставляется ПОСЛЕ строки 160 (после `echo "finished_at=..." >> "$OUT"`), +ПЕРЕД `say "HANGUP"`. Не меняет логику диалога — только отправляет итог в БД. + +# ─── отправка результата в БД (edge function autocall-result) ─────── +# Переменные приходят из call-файла (Setvar). При потере сети звонок не +# валится: curl с таймаутом, результат всё равно остался в $OUT. +if [ -n "$API_URL" ] && [ -n "$API_KEY" ]; then + curl -s --max-time 5 -X POST "$API_URL" \ + -H "Content-Type: application/json" \ + -H "x-webhook-secret: $API_KEY" \ + -d "{ + \"asterisk_uniqueid\":\"$UNIQ\", + \"order_group_id\":\"${GROUP_ID:-}\", + \"campaign_type\":\"autocall_slot\", + \"customer_phone\":\"${CUSTOMER_PHONE:-}\", + \"attempt_no\":${ATTEMPT:-1}, + \"scenario\":\"$SCENARIO\", + \"call_started_at\":\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\", + \"answered_at\":\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\", + \"duration_sec\":0, + \"sip_code\":200, + \"channel_state\":\"Up\", + \"dtmf_day\":${CONF_DAY:-null}, + \"dtmf_half\":${CONF_HALF:-null}, + \"changed\":\"$CHANGED\", + \"outcome\":\"$OUTCOME\", + \"was_test_mode\":${TEST_MODE:-0} + }" >/dev/null 2>&1 || echo "curl result failed (network?)" >> "$LOG" +fi + +; --- конец правки 2 --- + +===================================================================== +## ПРАВКА 3 — Автозагрузка pbx_spool.so и res_agi.so +===================================================================== +Файл: /etc/asterisk/modules.conf (в секцию Core/PBX добавить) + +; --- в секцию "Core/PBX" --- +load = pbx_spool.so +load = res_agi.so + +; --- конец правки 3 --- +; Это чинит ночной reboot 03:33: сейчас autoload=no, pbx_spool грузится +; вручную и после ребута слетает — автодозвон молча умирает. + +===================================================================== +## ПРОВЕРКА ПОСЛЕ ПРИМЕНЕНИЯ (на АТС) +===================================================================== +asterisk -rx "dialplan reload" +asterisk -rx "module load pbx_spool.so" +asterisk -rx "module load res_agi.so" +asterisk -rx "dialplan show SS-Autocall-Slot" # должен показать контекст +asterisk -rx "module show like pbx_spool" # Running +asterisk -rx "module show like res_agi" # Running +# Тестовый звонок: +bash /tmp/ss-testcall3.sh A 09067029953