VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

AEL. При ошибке не переходит в 'e' экстеншен.

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

Модераторы: april22, Zavr2008

Ответить
GoG
Сообщения: 12
Зарегистрирован: 07 фев 2017, 16:59
Откуда: Киев

AEL. При ошибке не переходит в 'e' экстеншен.

Сообщение GoG »

Доброго времени.

Есть диалплан на AEL:

Код: Выделить всё

context from-pstn-custom{
	_X.=> {	
	//  Get 1C
		Set(HASH(GETMANAGER_1C)=${ONES_GET_MANAGER_1C_2(${CALLERID(num)})});
		Log(NOTICE, GETMANAGER_1C(${CALLERID(num)})  = ${HASHKEYS(GETMANAGER_1C)},  ExistsManager?: ${HASH(GETMANAGER_1C,managername)}, ${HASH(GETMANAGER_1C,firmkod)}, ${HASH(GETMANAGER_1C,ContactInfo)}, ${HASH(GETMANAGER_1C,ContactInfo2)});
		Set(HASH(GETMANAGER,firmkod)=${HASH(GETMANAGER_1C,firmkod)});
	
	GetCBX:
	  // Get CBX info:
		Agi(agi://127.0.0.1/cbx?to=${DST}&from=${CALLERID(num)}&name=${HASH(GETMANAGER_1C,ContactInfo)}&firmkod=${HASH(GETMANAGER_1C,firmkod)}&comment=${HASH(GETMANAGER_1C,ContactInfo2)}&isCompany=${IF($EXISTS(${HASH(GETMANAGER_1C,firmkod)})?true)}&manager=${HASH(GETMANAGER_1C,managername)});

		&locatemanager();

	}
       e => {
		NoOp(------------------> ERROR!!! <------------------);
		NoOp(------------------> $EXCEPTION(reason) <------------------);
		NoOp(------------------> $EXCEPTION(context) <------------------);
		NoOp(------------------> $EXCEPTION(exten) <------------------);
		NoOp(------------------> $EXCEPTION(priority) <------------------);

		jump ${CALLERID(num)},GetCBX;
       }
};
${ONES_GET_MANAGER_1C_2(${CALLERID(num)})}) выполняется с ошибкой: - например у сервера с БД поменялся IP:

Код: Выделить всё

[2018-08-08 14:53:37] WARNING[16379][C-0000068e]: res_odbc.c:958 odbc_obj_connect: res_odbc: Error SQLConnect=-1 errno=0 [unixODBC][Microsoft][ODBC Driver 11 for SQL Server]Login timeout expired
[2018-08-08 14:53:37] WARNING[16379][C-0000068e]: res_odbc.c:958 odbc_obj_connect: res_odbc: Error SQLConnect=-1 errno=0 [unixODBC][Microsoft][ODBC Driver 11 for SQL Server]Login timeout expired
[2018-08-08 14:53:37] ERROR[16379][C-0000068e]: func_odbc.c:835 acf_odbc_read: Unable to execute query [SELECT TOP 1 '1C' as 'datasource', f.[FirmKod] as firmkod, cast(f.[FirmName]as varchar(200)) as ContactInfo, f.[Manager] as managername, cast(f.[Text] as varchar(100)) as ContactInfo2 FROM [OdinC_Connection_test].[dbo].[Mirror_1C_Firm] f inner join [OdinC_Connection_test].[dbo].[Mirror_1C_Tel] t on t.[FirmKod] = f.FirmKod and t.[Tel]='xxxxxx']
[2018-08-08 14:53:37] ERROR[16379][C-0000068e]: func_odbc.c:835 acf_odbc_read: Unable to execute query [SELECT TOP 1 '1C' as 'datasource', f.[FirmKod] as firmkod, cast(f.[FirmName]as varchar(200)) as ContactInfo, f.[Manager] as managername, cast(f.[Text] as varchar(100)) as ContactInfo2 FROM [OdinC_Connection_test].[dbo].[Mirror_1C_Firm] f inner join [OdinC_Connection_test].[dbo].[Mirror_1C_Tel] t on t.[FirmKod] = f.FirmKod and t.[Tel]='xxxxxx']
    -- Executing [xxxxxx@from-pstn:6] Set("PJSIP/VEGA-00001ec1", "HASH(GETMANAGER_1C)=") in new stack
    -- Executing [h@from-pstn:1] NoOp("PJSIP/VEGA-00001ec1", "------------------> ERROR!!! <------------------") in new stack
Я хочу обойти проблемный участок при возникновении ошибки. Моя проблема в том, что при ошибке обработка переходит в екстеншен 'h', а я надеялся на то, что перейдет в 'e'.
Что я делаю не так?
virus_net
Сообщения: 2337
Зарегистрирован: 05 июн 2013, 08:12
Откуда: Москва

Re: AEL. При ошибке не переходит в 'e' экстеншен.

Сообщение virus_net »

Подобные вещи надо выполнять через AGI, где можно и нужно сделать человеческий обработчик ошибок.
мой SIP URI sip:virus_net@asterisk.ru
bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin)

ENUMER - звони бесплатно и напрямую.
GoG
Сообщения: 12
Зарегистрирован: 07 фев 2017, 16:59
Откуда: Киев

Re: AEL. При ошибке не переходит в 'e' экстеншен.

Сообщение GoG »

virus_net писал(а):Подобные вещи надо выполнять через AGI, где можно и нужно сделать человеческий обработчик ошибок.
Спасибо за внимание к теме, но это не ответ на мой вопрос.
Еще раз вопрос: - почему при возникновении ошибки обработка передается экстеншену 'h' а не 'e'?
Repz
Сообщения: 169
Зарегистрирован: 04 мар 2015, 11:35

Re: AEL. При ошибке не переходит в 'e' экстеншен.

Сообщение Repz »

потому что ловите hangup, вот и попадаете в h
вангую что hangap прилетает из &locatemanager();
GoG
Сообщения: 12
Зарегистрирован: 07 фев 2017, 16:59
Откуда: Киев

Re: AEL. При ошибке не переходит в 'e' экстеншен.

Сообщение GoG »

Ванговать нет необходимости - есть логи в которых видно что до макроса дело не дошло. В том макросе hangap нет, он тут вообще не при чем.
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH