docs(ats): diffs for Pasha — SS-Autocall-Slot context, AGI curl, pbx_spool autoload

This commit is contained in:
Hermes 2026-09-01 21:55:00 +02:00
parent 6435679161
commit d6c3e02f24
1 changed files with 81 additions and 0 deletions

View File

@ -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