23 августа 2012 г.

Астериск 1.6 + дахди 2.2 + ТДМ410П

Поимел я дело как-то с карточкой TDM410P, 
в итоге остались не самые гладкие впечатленя от неё т.к думал все будет гораздо проще,
Сначала пробовал все завести на любимой оси FreeBSD, но не тут то было, дров не оказалось, 
хотя на сайте производителя четко сказано:Хорошо дружит с правильной осью, 
но увы пришлось ставить это дело на:
Linux asterisk 2.6.32-21-generic #32-Ubuntu SMP Fri Apr 16 08:10:02 UTC 2010 i686 GNU/Linux

Вот краткое меню моего рассказа:

1. Проверяем определилось ли железо
2. Конфигурим dahdi для связки с карточкой
3. Конфигурим asterisk для связки с dahdi
4. Настройка голосового меню
5. Небольшие баги или порядок запуска демонов

 
1. Проверяем определилось ли железо, вот как определилась карта:
root@asterisk:/#lspci -v

03:01.0 Ethernet controller: Digium, Inc. Wildcard TDM410 4-port analog card (rev 11)
        Subsystem: Digium, Inc. Wildcard TDM410 4-port analog card
        Flags: bus master, medium devsel, latency 64, IRQ 19
        I/O ports at d100 [size=256]
        Memory at f1001000 (32-bit, non-prefetchable) [size=1K]
        [virtual] Expansion ROM at 80600000 [disabled] [size=128K]
        Capabilities: [c0] Power Management version 2
        Kernel driver in use: wctdm24xxp
        Kernel modules: wctdm24xxp


2. Конфигурим dahdi для связки с карточкой:
root@asterisk:/# nano /etc/dahdi/system.conf

#1-й Внутренний
fxsks=1
#2,3,4 Внешние
fxoks=2,3,4

#Эхоподавление
echocanceller=mg2,1-4

loadzone        = us
defaultzone     = us

Вот что должно получиться:
root@asterisk:/# dahdi_cfg -vv

DAHDI Tools Version - 2.2.1

DAHDI Version: 2.2.1
Echo Canceller(s):
Configuration
======================

Channel map:

Channel 01: FXS Kewlstart (Default) (Echo Canceler: mg2) (Slaves: 01)
Channel 02: FXO Kewlstart (Default) (Echo Canceler: mg2) (Slaves: 02)
Channel 03: FXO Kewlstart (Default) (Echo Canceler: mg2) (Slaves: 03)
Channel 04: FXO Kewlstart (Default) (Echo Canceler: mg2) (Slaves: 04)

4 channels to configure.

3. Конфигурим asterisk для связки с dahdi
root@asterisk:/# nano /etc/asterisk/chan_dahdi.conf

;General options
usecallerid = yes
hidecallerid = no
callwaiting = yes
threewaycalling = yes
transfer = yes
echocancel = yes
echocancelwhenbridged = yes
rxgain = 0.0
txgain = 0.0
;FXS Modules
group = 1
signalling = fxo_ks
context = Internal
channel = 1
;FXO Modules
group = 2
echocancel = yes
signalling = fxs_ks
context = Incoming
channel = 2,3,4

Вот так получилось у меня:
root@asterisk:/# lsdahdi

### Span  1: WCTDM/0 "Wildcard TDM410P Board 1" (MASTER)
  1 FXS        FXOKS       (In use)
  2 FXO        FXSKS       (In use)  RED
  3 FXO        FXSKS       (In use)
  4 FXO        FXSKS       (In use)  RED
### Span  2: DAHDI_DUMMY/1 "DAHDI_DUMMY/1 (source: HRtimer) 1"


4. Настройка голосового меню
root@asterisk:/# nano /etc/asterisk/extensions.conf

[Incoming]

exten => s,1,Answer()  
exten => s,n,Wait(1)
exten => s,n(naberite),Background(dial-exten-tone)  
exten => s,n,WaitExten(2)  
exten => s,n,GoTo(t,1) 
exten => 1,1,Goto(office,1,1)  ;teh.otdel
exten => 2,1,Goto(office,2,1)  ;otdel.prodaz
exten => 3,1,Goto(office,3,1)  ;;teh.otdel2
exten => 4,1,Goto(office,4,1)  ;teh.otdel3
exten => 5,1,Goto(office,5,1)  ;levantuev
exten => 6,1,Goto(office,6,1)  ;levantuev2
exten => 7,1,Goto(office,7,1)  ;Mahachkeev
exten => 404,1,Goto(office,404,1)  ;diza
exten => i,1,Playback(izvinite)  
exten => i,n,Goto(s,naberite) 
exten => t,1, Set(fname=${STRFTIME(${EPOCH},,%Y%m%d%H%M)}-${CALLERID(number)}-${EXTEN})
exten => t,2, Monitor(wav,/var/www/html/${fname},mb)
exten => t,3, Dial(sip/1,140,m(mymoh))
exten => t,n,Hangup()

[office]
;teh.otdel
exten => 1,1, Set(fname1=${STRFTIME(${EPOCH},,%Y%m%d%H%M)}-${CALLERID(number)}-${EXTEN})
exten => 1,2, Monitor(wav,/var/www/html/num1/${fname1},mb)
exten => 1,3, Dial(SIP/1,40,m(mymoh))
exten => 1,n, Hangup
exten => _X./1,1,Dial(DAHDI/g2/${EXTEN})

;otdel.prodaz
exten => 2,1, Set(fname2=${STRFTIME(${EPOCH},,%Y%m%d%H%M)}-${CALLERID(number)}-${EXTEN})
exten => 2,2, Monitor(wav,/var/www/html/num2/${fname2},mb)
exten => 2,3, Dial(SIP/2,40,m(mymoh))
exten => 2,n, Hangup
exten => _X./2,1,Dial(DAHDI/g2/${EXTEN})

;teh.otdel2
exten => 3,1, Set(fname3=${STRFTIME(${EPOCH},,%Y%m%d%H%M)}-${CALLERID(number)}-${EXTEN})
exten => 3,2, Monitor(wav,/var/www/html/num3/${fname3},mb)
exten => 3,3, Dial(SIP/3,40,m(mymoh))
exten => 3,n, Hangup
exten => _X./3,1,Dial(DAHDI/g2/${EXTEN})



root@asterisk:/# nano /etc/asterisk/sip.conf

[201]
type = friend
host = dynamic
username = 201
secret = 1111
nat = no
canreinvite = no
context = office
callerid = user1 <201>
allow = gsm
allow = ulaw
allow = alaw

;pavel
[202]
type = friend
host = dynamic
username = 202
secret = 1111
nat = no
canreinvite = no
context = office
callerid = user2 <202>
allow = gsm
allow = ulaw
allow = alaw

[203]
type = friend
host = dynamic
username = 203
secret = 1111
nat = no
canreinvite = no
context = office
callerid = user3 <203>
allow = gsm
allow = ulaw
allow = alaw

5. Небольшие баги или порядок запуска демонов
У меня отказывался астериск дружить с dahdi пока вручну не подгрузишь модуль wctdm24xxp, 
решил я это таким скриптом:

root@asterisk:/# nano /etc/init.d/iptelefoniya.sh

#!/bin/sh
/etc/init.d/dahdi stop
/etc/init.d/asterisk stop
modprobe wctdm24xxp
/etc/init.d/dahdi start
/etc/init.d/asterisk start