Freeswitch-python module install & configuration

Debian Linux/Freeswitch source 설치 기준으로 설명한다.

Freeswitch Python 모듈인 mod_pythom 을 설치해야 한다.
Source Directory 로 이동하자.

$ cd /usr/local/src/freeswitch.git

Freeswitch 는 설치시 모든 모듈을 컴파일하지 않는다. 아무런 추가 설정이 없다면 기본 모듈만을 설치한다.
따라서, 다른 추가 모듈들이 필요하다면 별도의 설정 후, 다시 컴파일을 진행해 주어야 한다.
정확히는 컴파일 시, Source 디렉토리 내의 modules.conf 파일을 참조하여 컴파일을 해야하는 모듈들을 확인한 다음에 컴파일을 진행한다.
따라서, modules.conf 파일을 수정하면 추가적인 모듈 설치가 가능하다.
python module compile 을 활성화 시키기 위해서 modules.conf 파일을 수정한다.

$ vi modules.conf

mod_python 부분을 찾아서 주석 해제한다.

#languages/mod_python
languages/mod_python

make & make install.

$ make && make install

python-freeswitch 모듈이 제대로 설치되었는지 확인해야 한다.
아래의 예제처럼 python 시작후, 전체 모듈 검색에서 freeswitch 모듈이 확인되어야 한다.
만약 확인되지 않으면 수동으로 freeswitch 모듈을 옮겨 주어야 한다.

pchero@MyDebian:/etc$ python
Python 2.7.3 (default, Mar 13 2014, 11:03:55) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> help('modules')

ANSI                _codecs_iso2022     fdpexpect           pyatspi
ArgImagePlugin      _codecs_jp          feedparser          pyclbr
BaseHTTPServer      _codecs_kr          filecmp             pycurl
Bastion             _codecs_tw          fileinput           pydoc
BdfFontFile         _collections        fnmatch             pydoc_data
BeautifulSoup       _csv                formatter           pyexpat
BeautifulSoupTests  _ctypes             fpconst             pygtk
BmpImagePlugin      _ctypes_test        fpectl              pynotify
BufrStubImagePlugin _curses             fpformat            quopri
CDROM               _curses_panel       fractions           random
CGIHTTPServer       _dbus_bindings      freeswitch          re
Canvas              _dbus_glib_bindings ftplib              readline
ConfigParser        _elementtree        functools           reportbug
ContainerIO         _functools          future_builtins     reportlab
...

만약 확인되지 않는다면 수동으로 freeswitch 모듈을 설치해 주어야 한다.
아래의 예제는 Debian Linux/Python2.7 설치 기준이다.
리눅스 배포판/Python 버전에 따라 모듈 설치 디렉토리가 달라지므로 주의하자.

pchero@MyDebian:/usr/local/src/freeswitch.git/src/mod/languages/mod_python$ pwd
/usr/local/src/freeswitch.git/src/mod/languages/mod_python

pchero@MyDebian:/usr/local/src/freeswitch.git/src/mod/languages/mod_python$ sudo cp ./freeswitch.py /usr/lib/python2.7/dist-packages/

 

Python 에서 freeswitch 모듈을 확인했다면, 이제는 Freeswitch 에서 Python 모듈이 사용가능한지 확인해야 한다.

modules.conf.xml 파일에서 매번 자동으로 mod_python module 을 load 하도록 설정해주자.
<load_module=”mod_python”> 부분을 주석 해제하거나 추가해주자.

    <!-- Languages -->
    <!-- <load module="mod_spidermonkey"/> -->
    <load module="mod_v8"/>
    <!-- <load module="mod_perl"/> -->
    <load module="mod_python"/>
    <!-- <load module="mod_java"/> -->
    <load module="mod_lua"/>

freeswitch cli(fs_cli) 에서 mod_python 모듈을 load 하고, 정상적으로 load 되었는지 확인하자.

freeswitch@192.168.200.10@internal> load mod_python
+OK Reloading XML

freeswitch@192.168.200.10@internal> module_exists mod_python
true

Using python script on freeswitch.

이제 실제로 sample python script 를 작성 및 사용해 보자. mod_python 소스 디렉토리에는 훌륭한 예제 스크립트가 있다. 사용하도록 하자.

cp /usr/local/src/freeswitch.git/src/mod/languages/mod_python/python_example.py /usr/lib/pymodules/python2.7

마지막으로 실제 Dialplan 내에서 python 모듈을 호출하도록 설정해야 한다.

<include>
  <extension name="python_test">
    <condition field="destination_number" expression="^(5555555)$">
      <!--
      If you're hosting multiple domains you will want to set the
      target_domain on these calls so they hit the proper domain after you
      transfer the caller into the default context. 
      
      $${domain} is the default domain set from vars.xml but you can set it
      to any domain you have setup in your user directory.

      -->
      <action application="info"/>
      <action application="python" data="python_example"/>
      <!--<action application="set" data="domain_name=$${domain}"/>-->
      <!-- This example maps the DID 5551212 to ring 1000 in the default context -->
      <!--<action application="transfer" data="1000 XML default"/>-->
    </condition>
  </extension>
</include>

 

참조 : https://wiki.freeswitch.org/wiki/Mod_python#Sample_Python_Scripts

Tags: ,

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.