[Asterisk] Auto fallthrough, “channel sip/xxxxxxxxx” status is ‘UNKNOWN’

Asterisk 연동 테스트를 진행 중, 다음의 에러가 발생했다.

[2014-06-11 09:59:30.319]     -- Executing [s@SetCalledIDNum:15] Set("SIP/200-ipvstk-softphone-1-000000f7", "ChannelB=") in new stack
[2014-06-11 09:59:30.319]     -- Executing [s@SetCalledIDNum:16] Return("SIP/200-ipvstk-softphone-1-000000f7", "") in new stack
[2014-06-11 09:59:30.320]     -- Executing [s@app_dial_gosub_virtual_context:1] NoOp("SIP/200-ipvstk-softphone-1-000000f7", "") in new stack
[2014-06-11 09:59:30.320]     -- Auto fallthrough, channel 'SIP/200-ipvstk-softphone-1-000000f7' status is 'UNKNOWN'
[2014-06-11 09:59:30.322]     -- Local/200-ipvstk-softphone-1@DialLine-5336;1 answered Local/200@DialAccount-d00c;2
[2014-06-11 09:59:30.328] WARNING[11975]: res_rtp_asterisk.c:2142 ast_rtp_read: RTP Read too short
[2014-06-11 09:59:30.328]     -- Local/200@DialAccount-d00c;1 answered Local/200@DuetNumber-ee9e;2
[2014-06-11 09:59:30.330]     -- Local/200@DuetNumber-ee9e;1 answered SIP/voicemail01-000000f6
[2014-06-11 09:59:40.670]   == Spawn extension (VoiceMailMain, s, 14) exited non-zero on 'SIP/201-ipvstk-softphone-2-000000f4'

Asterisk 서버로 Make Call 을 시도하여 이미 연결되어 있는 기존의 콜과 새로 생성한 콜을 서로 Bridge 시키는 간단한 연동작업이었는데… Make call 시도시, 위의 에러가 발생한 것이다.
문제의 라인은

[2014-06-11 09:59:30.320]     -- Auto fallthrough, channel 'SIP/200-ipvstk-softphone-1-000000f7' status is 'UNKNOWN'

부분으로, Status 를 확인할 수 없다는 내용이다.
이후, 새로 생성한 콜과  기존의 콜은 Bridge 가 정상적으로 되는 것 처럼 보이나, 10 초 뒤, 갑자기 콜이 Hangup 되는 현상이 발생한다.

구글 검색 후, Auto fallthrough 는 더이상 해당 Extension 에 대한 Dailplan 이 없을 때, 자동으로 실행되는 Context 라는 것을 확인했다.

 

참조: http://forums.whirlpool.net.au/archive/885099

[Freeswitch] python-originate

Freeswitch 에서 python 으로 dialplan 작성시,.. originate 를 해야 하는 경우.

from freeswitch import *

new_session = Session(sofia/profile_name/call_to@host_ip)

만약 콜 생성을 하면서 (INVITE) 시, 특정 옵션 값들을 입력하고 싶다면..

{sip_h_TestOpt=test}sofia/internal/200@pchero21.com

과 같이 sofia 앞부분에 “{}” 를 넣어서 입력하고자 하는 값들을 입력하면 된다.

 

출처 : http://lists.freeswitch.org/pipermail/freeswitch-users/2011-March/070126.html

[Freeswitch] Originate

새로운 콜을 생성할 때 사용하는 모듈이다.

기본 메뉴얼. https://wiki.freeswitch.org/wiki/Mod_commands#originate

freeswitch@internal> originate
-USAGE: <call url> <exten>|&<application_name>(<app_args>) [<dialplan>] [<context>] [<cid_name>] [<cid_num>] [<timeout_sec>]

Parameters:

<call_url> : 전화를 걸고자 하는 URL 을 입력한다. PBX 서버의 IP 주소 혹은 Freeswitch 내부에 설정된 설정값의 항목을 입력한다.

목적지 주소(즉 전화를 걸고자하는 번호)는 다음 중 하나가 되어야 한다 :

<exten> Dailplan 에 입력된 Extension 번호.

&<application_name>(<app_args>) :

“&” 은 다음에 뒤따라 오는 값이 Application 속성인지/Exten 속성인지를 결정한다. 즉, “&” 가 없으면 Extension, 있으면 Application 으로 인식한다.

(<app_args>) 은 옵션이며 Application 에서 요구하는 항목에 따라 달라진다. 예를 들어 Park() Application 의 경우, 별도의 인자값을 요구하지 않는다.

사용가능한 Application 리스트: park, bridge, javascript/lua/perl, playback (remove mod_native_file), and many others.

Note: Use single quotes to pass arguments with spaces, e.g. ‘&lua(test.lua arg1 arg2)’

Note: There is no space between & and the application name

<dialplan> : 사용하고하는 Dailplan. 비어있을 경우, 기본값으로 ‘XML’를 사용한다.

<context> : 사용하고자 하는 Context. 비어있을 경우, 기본값으로 ‘default’를 사용한다.

<cid_name> : CallerID name

<cid_num> : CallerID number

<timeout_sec> : Timeout in seconds

 

Options:

이 Option 설정들은 ‘{ }’로 싸여져서 사용된다.
ex. “originate {ignore_early_media=true}sofia/example/user 8334”

또한, Option 설정들은 반드시 ‘,’ 로 구분되어야 한다.
ex. “originate {ignore_early_meida=true,originate_timeout=2}sofia/example/user 8334”

group_confirm_key

group_confirm_file

forked_dial

fail_on_single_reject

ignore_early_media

return_ring_ready

originate_retries

originate_retry_sleep_ms

originate_caller_id_name

originate_caller_id_number

originate_timeout

sip_auto_answer

[Asterisk] Section ‘test-01’ lacks type

Asterisk sip reload 중… 다음과 같은 오류가 나타났다.

[Jun  2 04:45:56] WARNING[19371]: chan_sip.c:28964 reload_config: Section ‘test-01’ lacks type
[Jun  2 04:45:56] WARNING[19371]: chan_sip.c:28964 reload_config: Section ‘test-02’ lacks type

Asterisk SIP 설정 중, type 설정이 빠져있어서 발생하는 오류였다.

type=friend

추가 후, 해결!

Asterisk-12.2.0 compile error in FreeBSD-10

아래 내용들은 GCC49 버전으로 컴파일 했을 때 발생한 에러들이다.

GCC46 버전으로 컴파일 시, 다른 에러들이 발생할 수 있다. 가급적 최신의 컴파일러를 사용하자.

Asterisk 컴파일 에러.
컴파일 중 발생한 에러로서, 참조 에러이다. 파일 수정이 필요하다.

creating config.h
[LD] abstract_jb.o acl.o adsi.o alaw.o aoc.o app.o ast_expr2.o ast_expr2f.o asterisk.o astfd.o astmm.o astobj2.o audiohook.o autochan.o autoservice.o backtrace.o bridge.o bridge_after.o bridge_basic.o bridge_channel.o bridge_roles.o bucket.o callerid.o ccss.o cdr.o cel.o channel.o channel_internal_api.o chanvars.o cli.o config.o config_options.o core_local.o core_unreal.o crypt.o data.o datastore.o db.o devicestate.o dial.o dns.o dnsmgr.o dsp.o endpoints.o enum.o event.o features.o features_config.o file.o fixedjitterbuf.o format.o format_cap.o format_pref.o frame.o framehook.o fskmodem.o global_datastores.o hashtab.o heap.o http.o image.o indications.o io.o jitterbuf.o json.o loader.o lock.o logger.o manager.o manager_bridges.o manager_channels.o manager_endpoints.o manager_mwi.o manager_system.o md5.o media_index.o message.o mixmonitor.o named_acl.o netsock.o netsock2.o optional_api.o parking.o pbx.o pickup.o plc.o poll.o presencestate.o privacy.o rtp_engine.o say.o sched.o sdp_srtp.o security_events.o sem.o sha1.o sip_api.o slinfactory.o sorcery.o sounds_index.o srv.o stasis.o stasis_bridges.o stasis_cache.o stasis_cache_pattern.o stasis_channels.o stasis_endpoints.o stasis_message.o stasis_message_router.o stasis_system.o stdtime/localtime.o strcompat.o strings.o stun.o syslog.o taskprocessor.o tcptls.o tdd.o term.o test.o threadpool.o threadstorage.o timing.o translate.o udptl.o ulaw.o utils.o uuid.o version.o xml.o xmldoc.o editline/libedit.a  -> asterisk
ast_expr2.o: In function `op_func’:
/usr/local/src/asterisk-12.2.0/main/ast_expr2.y:884: warning: powl has lower than advertised precision
/usr/local/bin/ld: asterisk: local symbol `__progname’ in /usr/lib/crt1.o is referenced by DSO
/usr/local/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
gmake[2]: *** [asterisk] Error 1
gmake[1]: *** [main] Error 2
gmake[1]: Leaving directory `/usr/local/src/asterisk-12.2.0′
*** Error code 2

Stop.
make: stopped in /usr/local/src/asterisk-12.2.0

해결책은 해당 에러가 난 후에, main/asterisk.exports 파일에 다음의 패치 내용을 적용해주면 된다.

--- /usr/ports/net/asterisk/work/asterisk-1.8.11.0/main/asterisk.exports        2012-04-01 11:19:50.532808549 -0700
+++ /root/asterisk.exports      2012-04-01 10:43:28.258979089 -0700
@@ -44,6 +44,8 @@
res_srtp;
res_srtp_policy;
secure_call_info;
+               __progname;
+               environ;
local:
*;
};

 

 

spandsp 모듈 에러.
spandsp 모듈은 FAX 관련 모듈로 설치시 다음과 같은 오류가 발생했다.

   [CC] res_speech.c -> res_speech.o
[LD] res_speech.o -> res_speech.so
[CC] res_fax_spandsp.c -> res_fax_spandsp.o
res_fax_spandsp.c: In function ‘spandsp_v21_new’:
res_fax_spandsp.c:470:52: error: ‘MODEM_CONNECT_TONES_FAX_CED_OR_PREAMBLE’ undeclared (first use in this function)
p->tone_state = modem_connect_tones_rx_init(NULL, MODEM_CONNECT_TONES_FAX_CED_OR_PREAMBLE, spandsp_v21_tone, p);
^

문제의 원인은 낮은 버전의 라이브러리를 설치했기 때문이었다. 내가 설치했던 spandsp 패키지에서 제공하는 헤더파일에는 “MODEM_CONNECT_TONES_FAX_CED_OR_PREAMBLE” 선언이 없었던 것.
이미 Asterisk 를 설치한 다른 시스템에서 해당 헤더파일을 비교한 후에야 문제를 해결할 수 있었다.
해당 선언이 들어있는 패키지는 spandsp-devel 패키지이다.
그냥 설치하려고 하면 의존성 문제가 발생하므로 이전에 설치한 패키지를 지우고 새로 설치하도록 하자.

pkg delete spandsp
pkg install spandsp-devel

 

참조 : http://forums.asterisk.org/viewtopic.php?f=1&t=81017

————————————————————————–

 

하지만 make install 과정에서 asterisk.h 파일을 찾을 수 없다는 에러만 계속 나왔다.

결국 적당한 시점에서 타협을 해야 했는데.. 그냥 pkg 에 올려져 있는 asterisk 를 사용하기로 했다.

설치한 asterisk 버전은 11.8.1 이다.