Вы не авторизованы

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

RSS
Не работает ответ на вызов при входящем в 1С из Asterisk, Настройка или ошибка внешней обработки MIKO в 1С
 
Версия панели телефонии 1.2.22.3.b
АТС: Asterisk 1.8

При попытке ответить на вызов, 1С сообщает: "Автоматический подъем не возможен!".
После повторного и последующих попыток, пишет: "Действие не доступно для текущего вызова!".
В коде это происходит после того, как PickupChan возвращает ложь:
Код
Если PickupChan(СтрочкаЗвонка.CallerID, Channel) Тогда
   Результат = Истина;
   СтрочкаЗвонка.СейчасРазговаривают = Истина;
Иначе
   Сообщить("Автоматический подъем не возможен!");
КонецЕсли;
И истину он вернуть не сможет, потому что в самом начале проверяется
заполненность переменной "НомерПрямойПарковки".
Код
Функция PickupChan(Знач CallerIDЗвонка, Знач Канал)

НомерПользователя = ПолучитьНомерВызываемогоАбонентаИзАтрибутаDialstring(Канал);
 стр_auto_answer = СоответствиеАвтоподъем.Получить(НомерПользователя); 
 стр_auto_answer = ?(ЗначениеЗаполнено(стр_auto_answer), СтрокаАвтоподъема, стр_auto_answer);
 // автоматический подъем трубки возможне ТОЛЬКО на SIP устройствах
 // переданный в функцию канал - должен быть нашим каналом
 // НомерПрямойПарковки - параметр должен быть получен с АТС
 Если НЕ ЭтоНомерТекущегоПользователя(Канал, мСписокНомеровПользователяДляОбработки)
   ИЛИ НЕ ЗначениеЗаполнено(НомерПрямойПарковки)
   ИЛИ НЕ ЗначениеЗаполнено(стр_auto_answer) Тогда
  Возврат Ложь;
 КонецЕсли;
 ....
А значит НомерПрямойПарковки должен быть заполнен хоть чем то. Интересно,
какое значение он содержит при отладке когда обработка работает штатно?

Мы конечно попытались закомментировать проверку в строке:
Код
//   ИЛИ НЕ ЗначениеЗаполнено(НомерПрямойПарковки)
, но в результате Asterisk снова "упал"..

Как исправить эту неполадку?
Изменено: Алексей Юрасов - 06.02.2015 09:39:34
 
В Askozia параметр установлен как "autoanswernumber:*8". Да, действительно, параметр обязателен для функции ответа, но при этом используется только в АТС MyPBX.
Что передается в параметре "Канал"?
Что содержится в переменной "Результат" после выполнения Компонент.Originate(...)?

Обратите внимание - ВСЕ переменные, передаваемые в Компонент.Originate  должны иметь тип "строка".

Смотрите логи на Asterisk в момент "Падения".
 
В Компонент.Originate передаются параметры (все строкой):
Код
Channel = "Local/10000111@miko_ajam"
Variable = "v1=d6073"
"NoCDR"
Асинхронно = ""
КлючУникальности = "d6073"
Результат = ""

После выполнения, в результате устанавливается значение:
Код
Результат = "<ajax-response><response type='object' id='unknown'><generic response='Success' actionid='d6073' message='Originate successfully queued' /></response>
</ajax-response>"
В Канал передается значение:
Код
Channel = "SIP/4001-0000000b"
Из логов АТС коллеги мне передали следующий текст:
Код
php: /var/lib/asterisk/agi-bin/1C_SetStatus.php[84]: Undefined variable: chFeb 6 09:11:07 msk-autodialer php: /var/lib/asterisk/agi-bin/1C_SetStatus.php[89]: Undefined variable: ch
Feb 6 09:11:07 msk-autodialer php: /var/lib/asterisk/agi-bin/1C_SetStatus.php[93]: Undefined variable: date1
Изменено: Алексей Юрасов - 06.02.2015 11:01:46 (Добавлена информация о логах Астериска)
 
Вы не в тот момент сняли показатели ))
Вам нужно смотреть данные "Компонент.Originate" при вызове функции "PickupChan".


Channel = "Local/10000111@miko_ajam"
Это получение настроек с АТС.  
 
Понял)
Но если снимать непосредственно в PickupChan, то до инициализации Результата и передаваемых параметров мы даже не доходим, а вываливаемся из функции когда стало ясно, что НомерПрямойПарковки не заполнен (см. прикрепленное изображение)
Ясно только что до ".Originate( "
Channel = "SIP/4001-0000000b"
MIKO_0.png (74.08 КБ)
 
Закомментируйте эту строчку в 1С или на АТС настройте возврат "*8".
 
Закомментировал возврат. После выполнения Originate:
Результат содержит пустую строку ""
Код
Channel = "SIP/4001"
Variable = "from_1C=true,CTICHANNEL=SIP%2F4001-00000070,SIPADDHEADER%3D%22Call-Info%3A%5C%3Banswer-after%3D0%22"
Application = "PickupChan"
Data = "SIP/4001-00000070"
 
Есть ли ошибки в логе asterisk?
Должно прийти внешнее событие "OriginateRespose" вроде так называется.

Хотя если упал Asterisk то и результат будет пустым и event не придет.
 
После этого Астериск упал, оставив в логах:

ined variable: date1Feb 6 11:37:34 msk-autodialer php: database show UserBuddyStatus
Feb 6 11:37:34 msk-autodialer php: /var/lib/asterisk/agi-bin/1C_SetStatus.php[84]: Undefined variable: ch
Feb 6 11:37:34 msk-autodialer php: /var/lib/asterisk/agi-bin/1C_SetStatus.php[89]: Undefined variable: ch
Feb 6 11:37:34 msk-autodialer php: /var/lib/asterisk/agi-bin/1C_SetStatus.php[93]: Undefined variable: date1
Feb 6 11:38:20 msk-autodialer php: database show UserBuddyStatus
Feb 6 11:38:20 msk-autodialer php: /var/lib/asterisk/agi-bin/1C_SetStatus.php[84]: Undefined variable: ch
Feb 6 11:38:20 msk-autodialer php: /var/lib/asterisk/agi-bin/1C_SetStatus.php[89]: Undefined variable: ch
Feb 6 11:38:20 msk-autodialer php: /var/lib/asterisk/agi-bin/1C_SetStatus.php[93]: Undefined variable: date1
Feb 6 11:38:30 msk-autodialer kernel: asterisk[4914]: segfault at b62cbe20 ip 00b2892a sp b62cbe20 error 6 in res_rtp_asterisk.so[b24000+10000]
Feb 6 11:43:39 msk-autodialer kernel: asterisk[4968]: segfault at b65dc81c ip 0817882b sp b65dc7c0 error 6 in asterisk[8048000+1a4000]
Feb 6 11:44:01 msk-autodialer kernel: asterisk[5002]: segfault at b65f481c ip 0817882b sp b65f47c0 error 6 in asterisk[8048000+1a4000]
Feb 6 11:44:33 msk-autodialer kernel: asterisk[5036]: segfault at b65dc81c ip 0817882b sp b65dc7c0 error 6 in asterisk[8048000+1a4000]
Feb 6 11:45:15 msk-autodialer kernel: asterisk[5097]: segfault at b650081c ip 0817882b sp b65007c0 error 6 in asterisk[8048000+1a4000]
 
проверьте наличие PickupChan
shell~ # asterisk -rx'core show application PickupChan'

segfault at b650081c
Похоже на ошибку при работе с диском.
Возможно ситуация связана с текущей сборкой Asterisk. Вот схожая тема.
Читают тему (гостей: 1)