First time here? Check out the FAQ!

Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

Мистика с AGI

0

Есть два срипта на питоне, один выполняется когда совершается входной звонок, один когда исходящий. Суть скриптов простая, астериск выполняя их передает им несколько переменных которые они пишут в БД. И это работает уже год... до недавного времени. Скрипт для исходящих звонков работает, а для входящих почему то нет, при этом астериск пишет

 -- 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, почему такое может быть? Может это как то связано с моей проблемой?

спросил Jul 18 '12

godlike Gravatar godlike flag of Ukraine
814 92 24 62

обновил Jul 20 '12

Comments

а руками запускал из под какого юзера ?

alexcr (Jul 18 '12)edit

из под рута, я думал об этом, но срипт для исходящих звонков имеет такие же права и владельца, и я думаю если бы не хватало прав то аги ругался бы в лог на это

godlike (Jul 18 '12)edit

6 Ответов

1

нуу, начать с 'agi set debug on', и воспоминаний о том, что обновлялось в последнее время.

ссылка удалить спам редактировать

ответил Jul 18 '12

komrad123 Gravatar komrad123
3810 5 3 44

Comments

ваще ниче не обновлялось, это продакшн сервер доступ на который есть только у меня, по поводу дебага щас попробую, спасибо за совет

godlike (Jul 18 '12)edit

дебаг включил, но ничего такого в нем не увидел, сообственно на что мне там в этом случае обратить внимание?

godlike (Jul 18 '12)edit

на диалог между скриптом и астериском. как минимум на то, что хидеры агишные уходят. Если скрипт таки запускается, добавить дебуг в сам скрипт и посмотреть что не так, если нет проверить права и пути.

komrad123 (Jul 18 '12)edit

дебаг добавил

godlike (Jul 18 '12)edit

в сам скрипт отладочных сообщений добавить еще. по логу он ни читает и не ставит ни какие переменные агишные, это нормально ?

komrad123 (Jul 18 '12)edit
1

делайте вот так

1) убедитесь что клиенты не звонят(делать ночью?)

2) остановите астериск.

3)

asterisk -vvvgc
agi
set debug on

4) проверяйте.

так ошибки скрипта будет выдавать вам. по умолчанию - выдает хз куда в зависимости от системы.

ссылка удалить спам редактировать

ответил Jul 18 '12

meral Gravatar meral flag of Ukraine
23347 24 20 177
http://pro-sip.net/

Comments

действительно, выдало такое

<SIP/212.58.166.46-00000000>AGI Rx << verbose "Failed to execute '/etc/asterisk/agi/incoming.py': Permission denied" 1 но я помню что если прав не хватает то такое сыпется прямо в обычный лог, странно.

godlike (Jul 19 '12)edit

но почему при таких правах -rwxrwx--- 1 asterisk asterisk 693 Jul 19 19:10 incoming.py ему недостаточно прав?

godlike (Jul 19 '12)edit

поставил 777 все равно эта ошибка

godlike (Jul 19 '12)edit

ну вот это есть правильный метод отладки. вишь,сразу видно в чем пробелма. selinux отключи

meral (Jul 19 '12)edit

хм, почитал мануалы в инете, везде пишут править /etc/selinux/config а у меня нет такой папки в etc, только в корне есть пустая папка /selinux

godlike (Jul 19 '12)edit

надо по названию ОС искать.

meral (Jul 19 '12)edit

да искал, у меня дебиан, ни одной команды которые нагуглил в системе нет

godlike (Jul 19 '12)edit

а это точно selinux? Потому что судя по всему у меня его нет в системе

godlike (Jul 20 '12)edit

да нет. что угодно может быть. скрипта та нет. а по фотографии я не гадаю.

meral (Jul 20 '12)edit

еще я бы сказал что вам надо все же аздействовать AGI а не аргументы вызова скрипта. чето мне кажется что так работать вообще не будет

meral (Jul 20 '12)edit

так скрипт я еще вчера добавил в вопрос :)

godlike (Jul 20 '12)edit

ну так это НЕ АГИ скрипт. почему он должен работать? а почему он не запускается выяснить можеет только вы.

meral (Jul 20 '12)edit

я бы начал с того, что закоментрировал все и оставил только print "NOOP test"; потом включал по порядку. вот например зачем там import config?

meral (Jul 20 '12)edit

а почему бы ему не работать если он год работал без проблем а тут врдуг перестал :)

godlike (Jul 20 '12)edit

ну. потомучто он неправильно написан. вот со следующим апдейтом астериск теперь не принимает неправильно написанные скрипты. вобщем это разговор ниочем. ваш скрипт не является скриптом AGI. все.

meral (Jul 20 '12)edit
0

Покажите плз текст скриптов!

ссылка удалить спам редактировать

ответил Jul 18 '12

litnimax Gravatar litnimax
1453 11 8 29
http://www.pbxware.ru/

Comments

добавил выше

godlike (Jul 19 '12)edit
0

У меня два предположения:

  1. Скрипт вначале начинает сыпать какие нибудь ворнинги, тем самым ломая аги-протокол

  2. Пути, внимательно пропишите полные пути везде в скрипте

ссылка удалить спам редактировать

ответил Jul 18 '12

um2010 Gravatar um2010
2056 70 13 55

Comments

1 отпадает ибо вон там наверху лог без варнингов. 2 отпадает ибо скрипт запускается.

meral (Jul 18 '12)edit
0

А зачем для такой простой логики использовать AGI скрипты? Вашу задачу с лихвой покроет unixODBC. AGI это гадость которая мастдай!

ссылка удалить спам редактировать

ответил Jul 21 '12

VetaLkrot Gravatar VetaLkrot
101 2 4
http://novatel.biz/

обновил Jul 21 '12

Comments

ну это только один скрипт, а всего их около 5-10 в зависимости от задач

godlike (Jul 21 '12)edit

AGI это фича которая must have. Гадость это писать sql запросы в диалплане. А для топик стартера в этом конкретном случае проще system вызвать.

komrad123 (Jul 21 '12)edit

и права на все директории что ниже скрипта проверьте.

komrad123 (Jul 21 '12)edit

через System() действительно работает, спасибо, а не подскажете как из скрипта на питоне который вызывается через system() установить переменную астериск? Когда я запускал через AGI я писал print "SET VARIABLE CALLERID(name) \"%s\" \n" % name и это работало, сейчас нет, как можно это исправить?

godlike (Jul 21 '12)edit

никак. Чето то Вы мутите. скрипт выше никак неиспользует AGI протокол поэтому проше его запустить через System, Если Вам таки надо AGI то показывайте полный скрипт и дебажте его.

komrad123 (Jul 21 '12)edit

тот что выше нет, но есть скрипт который принимает из астериска переменную преобразовывает и устанавливает обратно, так вот вопрос можно ли вызывая питон скрипт через System() не только передавать скрипту переменные астериска но и из скрипта устанавливать переменные?

godlike (Jul 21 '12)edit

ответ - нельзя. но можно скриптом в какойто файлик писать ответ и оттуда его читать из диалплана. хотя корректнее таки правильно написать скрипт. библиотек для питона полно.

meral (Jul 21 '12)edit

я чета никак не пойму чем например мой скрипт записывающий переменные в БД отличается от "правильного" AGI скрипта, где можно про это почитать?

godlike (Jul 22 '12)edit
0

по вашему скрипту - это не AGI, а обычный скрипт, с передачей аргументов через командную строку. нужно запускать как - same => n,System({путь к скрипту} ${ARGV1} ${ARGV2})

ссылка удалить спам редактировать

ответил Jul 23 '12

brost Gravatar brost flag of Russian Federation
100 12 3 12
http://asterisk-system.ru...

обновил Jul 23 '12

Ваш ответ

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку

подписаться на rss ленту новостей

Статистика

Задан: Jul 18 '12

Просмотрен: 2,444 раз

Обновлен: Jul 23 '12

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.