FreeBSD 환경에서 Asterisk와 STT/AEAP 연동 및 REGEX() 파싱을 구성할 때 고려해야 하는 설정 파일 경로, 모듈 로드, 시스템 차이점 및 구체적인 설정법 입니다. 1. FreeBSD 환경에서의 Asterisk 파일 경로 차이 Linux(CentOS/Ubuntu)와 달리 FreeBSD의 Ports/Packages 패키지 관리 체계에서는 설정 파일 위치가 /usr/local/etc/ 하위로 지정됩니다. 설정 파일 경로: /usr/local/etc/asterisk/ aeap.conf → /usr/local/etc/asterisk/aeap.conf res_speech.conf → /usr/local/etc/asterisk/res_speech.conf extensions.conf → /usr/local/etc/asterisk/extensions.conf AGI 스크립트 경로: /usr/local/share/asterisk/agi-bin/ (또는 /var/lib/asterisk/agi-bin ) 2. aeap.conf 및 res_speech.conf 설정 방법 (FreeBSD) Asterisk 18.12+ / 19.4+ / 20+ 버전 이상이 FreeBSD에 설치되어 있다면 AEAP WebSocket 모듈을 사용할 수 있습니다. ① /usr/local/etc/asterisk/aeap.conf 외부 STT 서비스 중계 서버(예: Node.js/Python으로 띄운 Google Speech/Clova/Vosk WebSocket 게이트웨이)의 엔드포인트를 지정합니다. Ini, TOML [general] ; [stt-engine] 세션 정의 (extensions.conf의 SpeechCreate(stt-engine)과 일치) [stt-engine] type=client url=ws://127.0.0.1:8088/stt-websocket ; 또는 external STT WebSocket URL codecs=ulaw,alaw ② /usr/local/etc/asterisk/res_speech.conf res_speech 엔진 모듈이 AEAP를 사용하도록 바인딩합니다. Ini, TOML [general] default_engine=stt-engine ③ FreeBSD 모듈 확인 ( modules.conf ) /usr/local/etc/asterisk/modules.conf 에서 다음 모듈들이 로드되어 있는지 확인합니다: Ini, TOML load => res_aeap.so load => res_speech.so load => res_speech_aeap.so 3. FreeBSD 환경에서의 REGEX() 패턴 사용 시 주의사항 Asterisk의 ${REGEX("pattern" ${VAR})} 함수는 내부적으로 OS의 POSIX Extended Regular Expressions ( regcomp ) 라이브러리를 사용합니다. FreeBSD의 libc regex는 UTF-8 한글 처리 시 한글 음절 단위 바이트 매칭 특성 에 따라 Linux(glibc)와 약간 다른 동작을 보일 수 있으므로, 정규식 파이프( | ) 사용 시 괄호 표기를 더 엄격하게 처리 하는 것이 안전합니다. 🔧 보완된 다이얼플랜 정규식 파싱 예시 단순히 REGEX("5|다섯|오" ...) 형태로 쓰면 FreeBSD 계열에서 OR 연산 매칭이 누락되는 경우가 발생하므로, Grouping (( ... )) 구조를 명확히 해주는 것이 좋습니다. Ini, TOML ; ========================================== ; [시(Hour) 선택 STT 텍스트 정규식 정규화 - FreeBSD 보완] ; ========================================== exten => s,n,Set(REQ_HOUR="") exten => s,n,GotoIf($["${REGEX("^(.*)(5|오|다섯)(.*)$" ${STT_HOUR_RAW})}" = "1"]?set_h05) exten => s,n,GotoIf($["${REGEX("^(.*)(6|육|여섯)(.*)$" ${STT_HOUR_RAW})}" = "1"]?set_h06) exten => s,n,GotoIf($["${REGEX("^(.*)(7|칠|일곱)(.*)$" ${STT_HOUR_RAW})}" = "1"]?set_h07) exten => s,n,GotoIf($["${REGEX("^(.*)(8|팔|여덟)(.*)$" ${STT_HOUR_RAW})}" = "1"]?set_h08) exten => s,n,GotoIf($["${REGEX("^(.*)(9|구|아홉)(.*)$" ${STT_HOUR_RAW})}" = "1"]?set_h09) exten => s,n,GotoIf($["${REGEX("^(.*)(10|십|열)(.*)$" ${STT_HOUR_RAW})}" = "1"]?set_h10:invalid_hour) ; ========================================== ; [분(Minute) 선택 STT 텍스트 정규식 정규화 - FreeBSD 보완] ; ========================================== exten => s,n,Set(REQ_MIN="") ; 정각 / 00분 인식 exten => s,n,GotoIf($["${REGEX("^(.*)(정각|영영|0분|00분|영 분)(.*)$" ${STT_MIN_RAW})}" = "1"]?set_m00) ; 20분 / 이십분 인식 exten => s,n,GotoIf($["${REGEX("^(.*)(20|이십)(.*)$" ${STT_MIN_RAW})}" = "1"]?set_m20) ; 40분 / 사십분 인식 exten => s,n,GotoIf($["${REGEX("^(.*)(40|사십)(.*)$" ${STT_MIN_RAW})}" = "1"]?set_m40:invalid_min) 4. FreeBSD 다이얼플랜 동작 테스트 CLI FreeBSD 전용 CLI에서 설정 반영 및 정규식 동작을 테스트하는 방법입니다. 설정 재로드: Bash asterisk -rx "module reload res_aeap.so" asterisk -rx "module reload res_speech.so" asterisk -rx "dialplan reload" Asterisk CLI 내에서 REGEX() 함수 직접 변수 테스트: Plaintext # asterisk -r x1a*CLI> eval dialplan ${REGEX("^(.*)(5|오|다섯)(.*)$" "다섯시요")} 1 <-- (1이 출력되면 정규식 정상 동작)