Есть два срипта на питоне, один выполняется когда совершается входной звонок, один когда исходящий. Суть скриптов простая, астериск выполняя их передает им несколько переменных которые они пишут в БД. И это работает уже год... до недавного времени. Скрипт для исходящих звонков работает, а для входящих почему то нет, при этом астериск пишет
-- Executing [s@IVR-ru:10] AGI("SIP/XX.XX.XX.XX-00000004", "incoming.py,1342622667.4,93XXXXXXX,SIP/XX.XX.XX.XX-00000004,400,'093XXXXXXX'") in new stack
-- Launched AGI Script /etc/asterisk/agi/incoming.py
-- <SIP/XX.XX.XX.XX-00000004>AGI Script incoming.py completed, returning 0
то есть скрипт типа выполнился нормально и все ок, но БД при этом пустая.
я пытался в него написать даже 1/0 все равно completed, returning 0 При этом если вызвать его вручную в консоли и передать теже параметры то все ок, БД наполняется, а в случае с 1/0 вываливается эксепшн.
Как так то, уже сломал голову, что ж это такое то может быть?
PS AGI DEBUG
-- Executing [s@IVR-ru:10] AGI("SIP/XX.XX.XX.XX-00000012", "incoming.py,1342624313.18,93XXXXXXX,
SIP/XX.XX.XX.XX-00000012,400,'093XXXXXXX'") in new stack
-- Launched AGI Script /etc/asterisk/agi/incoming.py
<SIP/212.58.166.46-00000012>AGI Tx >> agi_request: incoming.py
<SIP/212.58.166.46-00000012>AGI Tx >> agi_channel: SIP/XX.XX.XX.XX-00000012
<SIP/212.58.166.46-00000012>AGI Tx >> agi_language: en
<SIP/212.58.166.46-00000012>AGI Tx >> agi_type: SIP
<SIP/212.58.166.46-00000012>AGI Tx >> agi_uniqueid: 1342624313.18
<SIP/212.58.166.46-00000012>AGI Tx >> agi_version: 1.8.8.0~rc4-1digium0+1~squeeze
<SIP/212.58.166.46-00000012>AGI Tx >> agi_callerid: 93XXXXXXX
<SIP/212.58.166.46-00000012>AGI Tx >> agi_calleridname: admin
<SIP/212.58.166.46-00000012>AGI Tx >> agi_callingpres: 0
<SIP/212.58.166.46-00000012>AGI Tx >> agi_callingani2: 0
<SIP/212.58.166.46-00000012>AGI Tx >> agi_callington: 0
<SIP/212.58.166.46-00000012>AGI Tx >> agi_callingtns: 0
<SIP/212.58.166.46-00000012>AGI Tx >> agi_dnid: 093XXXXXXX
<SIP/212.58.166.46-00000012>AGI Tx >> agi_rdnis: unknown
<SIP/212.58.166.46-00000012>AGI Tx >> agi_context: IVR-ru
<SIP/212.58.166.46-00000012>AGI Tx >> agi_extension: s
<SIP/212.58.166.46-00000012>AGI Tx >> agi_priority: 10
<SIP/212.58.166.46-00000012>AGI Tx >> agi_enhanced: 0.0
<SIP/212.58.166.46-00000012>AGI Tx >> agi_accountcode:
<SIP/212.58.166.46-00000012>AGI Tx >> agi_threadid: 140445567637248
<SIP/212.58.166.46-00000012>AGI Tx >> agi_arg_1: 1342624313.18
<SIP/212.58.166.46-00000012>AGI Tx >> agi_arg_2: 93XXXXXXX
<SIP/212.58.166.46-00000012>AGI Tx >> agi_arg_3: SIP/XX.XX.XX.XX-00000012
<SIP/212.58.166.46-00000012>AGI Tx >> agi_arg_4: 400
<SIP/212.58.166.46-00000012>AGI Tx >> agi_arg_5: '093XXXXXXX'
<SIP/212.58.166.46-00000012>AGI Tx >>
-- <SIP/XX.XX.XX.XX-00000012>AGI Script incoming.py completed, returning 0
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from time import time
import config
import dbase
try: uniqueid = str(sys.argv[1])
except: uniqueid = False
try: callerid = str(sys.argv[2])
except: callerid = False
try: channel = str(sys.argv[3])
except: channel = False
try: did = str(sys.argv[4])
except: did = False
try: provider_number = str(sys.argv[5])
except: provider_number = False
time_start = time()
dbase.query('INSERT INTO `aster_calls` (`callerid`, `channel`, `did`, `uniqueid`, `time_start`, `provider_number`, `type`) VALUES(\'%s\',\'%s\',\'%s\',\'%s\',\'%f\',\'%s\',\'incoming\')' % (callerid, channel, did, uniqueid, time_start, provider_number))
Происходит вообще что то непонятное, добавил скрипт test.py перезагрузил астериск но при выполнении диалплана вываливается
Failed to execute '/etc/asterisk/agi/test.py': No such file or directory
хотя этот файл есть и у него права 777, почему такое может быть? Может это как то связано с моей проблемой?
нуу, начать с 'agi set debug on', и воспоминаний о том, что обновлялось в последнее время.
делайте вот так
1) убедитесь что клиенты не звонят(делать ночью?)
2) остановите астериск.
3)
asterisk -vvvgc
agi set debug on
4) проверяйте.
так ошибки скрипта будет выдавать вам. по умолчанию - выдает хз куда в зависимости от системы.
Покажите плз текст скриптов!
У меня два предположения:
Скрипт вначале начинает сыпать какие нибудь ворнинги, тем самым ломая аги-протокол
Пути, внимательно пропишите полные пути везде в скрипте
А зачем для такой простой логики использовать AGI скрипты? Вашу задачу с лихвой покроет unixODBC. AGI это гадость которая мастдай!
через System() действительно работает, спасибо, а не подскажете как из скрипта на питоне который вызывается через system() установить переменную астериск? Когда я запускал через AGI я писал print "SET VARIABLE CALLERID(name) \"%s\" \n" % name и это работало, сейчас нет, как можно это исправить?
godlike (Jul 21 '12)editпо вашему скрипту - это не AGI, а обычный скрипт, с передачей аргументов через командную строку. нужно запускать как - same => n,System({путь к скрипту} ${ARGV1} ${ARGV2})
Задан: Jul 18 '12
Просмотрен: 2,444 раз
Обновлен: Jul 23 '12
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.
а руками запускал из под какого юзера ?
alexcr (Jul 18 '12)editиз под рута, я думал об этом, но срипт для исходящих звонков имеет такие же права и владельца, и я думаю если бы не хватало прав то аги ругался бы в лог на это
godlike (Jul 18 '12)edit