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

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

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

спросил 2012-07-18 18:54:49 +0400

godlike Gravatar godlike flag of Ukraine
814 91 20 54

обновил 2012-07-21 01:48:29 +0400

Comments

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

alexcr ( 2012-07-18 19:20:32 +0400 )редактировать

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

godlike ( 2012-07-18 19:32:52 +0400 )редактировать

6 Ответов

1

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

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

ответил 2012-07-18 19:04:43 +0400

komrad123 Gravatar komrad123
3780 5 3 42

Comments

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

godlike ( 2012-07-18 19:10:13 +0400 )редактировать

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

godlike ( 2012-07-18 19:13:21 +0400 )редактировать

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

komrad123 ( 2012-07-18 19:17:36 +0400 )редактировать

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

godlike ( 2012-07-18 19:36:22 +0400 )редактировать

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

komrad123 ( 2012-07-18 19:54:46 +0400 )редактировать
1

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

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

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

3)

asterisk -vvvgc
agi set debug on

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

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

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

ответил 2012-07-18 21:14:57 +0400

meral Gravatar meral flag of Ukraine
21228 23 18 169
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 ( 2012-07-19 20:39:09 +0400 )редактировать

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

godlike ( 2012-07-19 20:40:48 +0400 )редактировать

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

godlike ( 2012-07-19 20:43:20 +0400 )редактировать

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

meral ( 2012-07-19 22:31:06 +0400 )редактировать

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

godlike ( 2012-07-19 23:15:05 +0400 )редактировать

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

meral ( 2012-07-19 23:54:59 +0400 )редактировать

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

godlike ( 2012-07-20 00:46:34 +0400 )редактировать

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

godlike ( 2012-07-20 18:03:57 +0400 )редактировать

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

meral ( 2012-07-20 18:42:19 +0400 )редактировать

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

meral ( 2012-07-20 18:43:56 +0400 )редактировать

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

godlike ( 2012-07-20 19:11:15 +0400 )редактировать

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

meral ( 2012-07-20 19:53:07 +0400 )редактировать

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

meral ( 2012-07-20 19:55:49 +0400 )редактировать

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

godlike ( 2012-07-20 22:18:35 +0400 )редактировать

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

meral ( 2012-07-20 22:34:24 +0400 )редактировать
0

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

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

ответил 2012-07-19 00:06:11 +0400

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

Comments

добавил выше

godlike ( 2012-07-19 20:54:06 +0400 )редактировать
0

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

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

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

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

ответил 2012-07-18 21:27:38 +0400

um2010 Gravatar um2010
2056 69 11 52

Comments

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

meral ( 2012-07-19 02:56:04 +0400 )редактировать
0

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

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

ответил 2012-07-21 12:05:09 +0400

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

обновил 2012-07-21 12:05:38 +0400

Comments

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

godlike ( 2012-07-21 12:45:32 +0400 )редактировать

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

komrad123 ( 2012-07-21 12:49:04 +0400 )редактировать

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

komrad123 ( 2012-07-21 12:50:34 +0400 )редактировать

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

godlike ( 2012-07-21 15:31:25 +0400 )редактировать

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

komrad123 ( 2012-07-21 15:37:19 +0400 )редактировать

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

godlike ( 2012-07-21 15:52:05 +0400 )редактировать

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

meral ( 2012-07-21 19:05:47 +0400 )редактировать

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

godlike ( 2012-07-22 09:57:35 +0400 )редактировать
0

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

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

ответил 2012-07-23 11:09:00 +0400

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

обновил 2012-07-23 11:10:37 +0400

Ваш ответ

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 ленту новостей

Статистика

Задан: 2012-07-18 18:54:49 +0400

Просмотрен: 1,353 раз

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

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