Supongamos que por alguna razón vamos a estar ausentes de nuestra tierra una temporada y no queremos gastarnos una pasta en roaming pero queremos que nuestra gente siga pudiendo llamarnos.
Lo primero que necesitamos es algo con lo que hacer y recibir llamadas y SMS. Ese algo es Asterisk con chan_sebi, un canal que ha desarrollado Odicha, un grande del bare metal.
Muchos modems USB soportan el envio de SMS, pero necesitamos uno que soporte tambien voz. En mi caso utilice el Huawei K3520, que puede encontrarse en eBay por unos 50-70 euros.
Manos a la obra!
Lo primero es descargar y compilar el codigo, que se encuentra en el repositorio RSP:
svn co http://asterisk-es-rsp.irontec.com/svn/asterisk-es-rsp/
cd branches/asterisk/1.4.24
./configure && make && make install
make samples && make config
ahora instalamos los asterisk-addons de Odicha, los que tienen chan_sebi 🙂
cd team/Odicha/1_4/asterisk-addons-1.4.9
./configure && make menuselect (marcamos chan_sebi)
make install && make samples
Una vez lo tenemos instalado vamos a configurar chan_sebi editando el fichero /etc/asterisk/sebi.conf:
[huawei1]
imei=3534xxxxxxxx ; imei of modem
;pin=12345678 ; pin (use only if sim card has pin request enabled)
csca=+34607003110 ; SMS centre number (Vodafone ES - example)
sms=yes ; Enable sms send/receive
voice=yes ; Enable voice for calls
context=from-sebi ; dialplan context for incoming calls
group=1 ; this phone is in channel group 1
volume=5 ; Modem Volume (1-5)
language=es ; Channel language
;nocallsetup=yes ; set this only if you want override call status notifications
;hidecid=#31# ; if you want outbound calls without caller id
;noincomingcalls=yes ; Reject all voice incoming calls
Solo tenemos que ajustar el IMEI, PIN, numero de servicio de SMS y contexto.
Ahora vamos a crear un sencillo dialplan para hacer/recibir llamadas y SMS:
[from-sebi]
; Incoming calls
exten => s,1,NoOp(Incoming call from ${CALLERID(num)})
exten => s,n,Dial(SIP/saghul,60))
exten => s,n,Hangup
; Incomming SMS
exten => sms,1,NoOp(Incoming SMS from ${SMSSRC})
exten => sms,n,System(/usr/local/bin/recvSMS.sh "${SMSSRC}" "${SMSTXT}")
exten => sms,n,Hangup
[from-ast16]
exten => _6XXXXXXXX,1,NoOp(Outgoing call through the SEBI device to ${EXTEN})
exten => _6XXXXXXXX,n,Dial(Sebi/g1/${EXTEN},60)
exten => _6XXXXXXXX,n,Hangup
Con esto ya podremos hacer y recibir llamadas, pero para los SMS vamos a hacer algo mas elegante:
Utilizaremos el script recvSMS.sh, que nos mandara un email con el asunto «SMS from 6123123123» a la dirección de email que le indiquemos. Y para rizar el rizo, utilizaremos el script readMail.py cada minuto en el cron, para que si respondemos al email del SMS esa respuesta se convierta en SMS. How cool is that?!
Para finalizar, si no teneis instalado ningun servidor de correo podeis instalar ssmtp y utilizarlo con una cuanta de GMail por ejemplo. Es tan facil como esto:
remote-mobile:~# cat /etc/ssmtp/ssmtp.conf
root=tu_email@gmail.com
mailhub=smtp.gmail.com:587
rewriteDomain=
hostname=tu_email@gmail.com
UseSTARTTLS=YES
AuthUser=tu_usuario_de_gmail
AuthPass=tu_clave_de_gmail
FromLineOverride=YES
y esto:
remote-mobile:~# cat /etc/ssmtp/revaliases
root:saghul.movil@gmail.com:smtp.gmail.com:587
Enjoy! 😉
PD: Manwe y amigos de la RAE: perdón por los acentos y tal, ando en precario a nivel de teclados y el autocorrector no es que mole mucho… 🙂
te acuerdas de lo que decía Julian?
Y si te mando un sms que diga (comillas incluidas)?
» > /etc/passwd && reboot && echo «
Con esas comillas nada. Con comillas francesas igual colaria, pero bueno, que esto es un PoC, no la manera de salvar el mundo 🙂 Aunque buena cazada, habría que escapar el contenido del SMS para que no tuviera nada raro…
Servidor de correo != de postfix?? no way! 😛
Aupa Iker!
Jeje, es cierto, pero para alertas txorras caseras el ssmtpd funciona en 1 minuto, y Postfix se me da fatal… 😉
Hola
Llevo bastantes horas peleándome con la compilación y no salgo de ahí.
Me bajo las fuentes de svn export http://asterisk-es-rsp.irontec.com/svn/asterisk-es-rsp/team/Odicha/1_4/asterisk-addons-1.4.9 asterisk-addons
Realizo el configure y menuselect sin problemas pero al empezar a compilar me da el siguiente error y de ahi no avanzo.
# make
menuselect/menuselect –check-deps menuselect.makeopts
Generating embedded module rules …
[CC] chan_sebi.c -> chan_sebi.o
chan_sebi.c:169: warning: initialization from incompatible pointer type
chan_sebi.c:169: warning: initialization from incompatible pointer type
chan_sebi.c: In function ‘modem_read’:
chan_sebi.c:646: error: incompatible types in assignment
chan_sebi.c:648: error: incompatible type for argument 2 of ‘read’
chan_sebi.c: In function ‘modem_write’:
chan_sebi.c:700: error: incompatible type for argument 2 of ‘memcpy’
chan_sebi.c:709: error: invalid operands to binary + (have ‘union ’ and ‘int’)
chan_sebi.c: In function ‘modem_drv_config’:
chan_sebi.c:1548: error: ‘ast_config_AST_CONFIG_DIR’ undeclared (first use in this function)
chan_sebi.c:1548: error: (Each undeclared identifier is reported only once
chan_sebi.c:1548: error: for each function it appears in.)
chan_sebi.c:1668:45: error: macro “ast_config_load” requires 2 arguments, but only 1 given
chan_sebi.c: In function ‘modem_load_config’:
chan_sebi.c:1668: error: ‘ast_config_load’ undeclared (first use in this function)
chan_sebi.c:1672:36: error: macro “ast_config_load” requires 2 arguments, but only 1 given
chan_sebi.c:1773: error: ‘DSP_FEATURE_DTMF_DETECT’ undeclared (first use in this function)
make[1]: *** [chan_sebi.o] Error 1
make: *** [channels] Error 2
Tengo la versión 1.6.1.9 de Asterisk, por si aclara algo.
Gracias
@Jose: chan_sebi solo funciona en Asterisk 1.4, ese es tu problema 🙂
Y pregunta de novato novatisimo, ¿Que tengo que hacer para pasar a 1.4? ¿Tengo que desinstalar la 1.6? o ¿solo compilar la version 1.4 e instalarla?
Gracias
@Jose: Mejor desinstala primero la 1.6, no sea que te dejes algo y luego las cosas no funcionen…
Bueno, tengo todo instalado pero algo me falla y no pordonde cojerlo.
mi fichero sebi_devices.conf
[2-2]
data = /dev/ttyUSB1
imei = 358192019xxxxxx
Mi fichero sebi.conf
huawei1]
imei=358192019xxxxxx ; imei of modem
;pin=123456 ; pin (use only if sim card has pin request enabled)
csca=+34644109030 ; SMS centre number (SIMYO)
sms=yes ; Enable sms send/receive
voice=yes ; Enable voice for calls
context=from-sebi ; dialplan context for incoming calls
group=1 ; this phone is in channel group 1
volume=5 ; Modem Volume (1-5)
language=es ; Channel language
;nocallsetup=yes ; set this only if you want override call status notifications
;hidecid=#31# ; if you want outbound calls without caller id
;noincomingcalls=yes ; Reject all voice incoming calls
Arranco todo y si miro los devices me da esto:
ID IMEI Group Provider Connected State Voice SMS
huawei1 358192019xxxxxx 1 No Init No No
Por lo que deduzco que no se ha conectado, se me ocurre que el OS (openSUSE 11.1) lo haya pillado.
Si miro dmesg me da esto:
usb 2-2: New USB device found, idVendor=12d1, idProduct=1003
usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 2-2: Product: HUAWEI Mobile
usb 2-2: Manufacturer: HUAWEI Technologies
usb-storage: device found at 10
usb-storage: waiting for device to settle before scanning
usb 2-2: USB disconnect, address 10
usb 2-2: new full speed USB device using uhci_hcd and address 11
usb 2-2: configuration #1 chosen from 1 choice
usb-storage: probe of 2-2:1.0 failed with error -5
option 2-2:1.0: GSM modem (1-port) converter detected
usb 2-2: GSM modem (1-port) converter now attached to ttyUSB0
usb-storage: probe of 2-2:1.1 failed with error -5
option 2-2:1.1: GSM modem (1-port) converter detected
usb 2-2: GSM modem (1-port) converter now attached to ttyUSB1
scsi20 : SCSI emulation for USB Mass Storage devices
usb 2-2: New USB device found, idVendor=12d1, idProduct=1003
usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 2-2: Product: HUAWEI Mobile
usb 2-2: Manufacturer: HUAWEI Technologies
usb-storage: device found at 11
usb-storage: waiting for device to settle before scanning
scsi 20:0:0:0: CD-ROM HUAWEI Mass Storage 2.31 PQ: 0 ANSI: 2
sr0: scsi-1 drive
sr 20:0:0:0: Attached scsi CD-ROM sr0
sr 20:0:0:0: Attached scsi generic sg2 type 5
usb-storage: device scan complete
Bueno, no se te dice algo, pero a mi no 🙁
Gracias
@Jose: Tienen que salirte 3 ttys… pregunta en Asterisk-ES, que bastante gente lo ha probado, alguno igual con openSUSE, yo solo con Debian 🙂
Solo en el caso de los E169 que tienen voz salen los tres tty.
En el caso de los E220 y los E270 solo saldrán dos puertos. Solo servirán para enviar sms.
Muchas gracias saghul. Estoy trabajando en un proyecto personal que requiere una esta funcionalidad, y nunca había pensado que se podría hacer con asterisk.
Mil gracias por abrirme los ojos 🙂
Hola de nuevo,
estoy intentando automatizar la instalación generando un ebuild para gentoo. Pero tengo un problemilla. La cosa está en que hay que realizar el make menuselect, lo cual requiere interacción con el usuario. ¿Sabríais decirme donde se guarda/genera el fichero que almacene el listado de modulos a instalar?
Un saludo
Me autocontesto:
# If the file .asteriskaddons.makeopts is present in your home directory, you can
# include all of your favorite menuselect options so that every time you download
# a new version of Asterisk-addons, you don’t have to run menuselect to set them.
# The file /etc/asteriskaddons.makeopts will also be included but can be overridden
# by the file in your home directory.
Buena idea!
Pero no veo como puedes ahorrar en roaming con esto, siempre que recibas una llamada en el extranjero pagaras roaming…
@Alex: la idea es dejar esto en tu pais y cuando estes en el extranjero recibir las llamadas por SIP… así si que no hay roaming.
Ojo con el paquete ssmtp que tiene un bug no corregido desde hace mucho tiempo. Lo he sufrido en mis propias carnes al usar ssmtp para que un servidor enviase bastantes correos a través de un relay SMTP.
Cuando el correo es muy grande ssmtp peta con «buffer overflow». Confirmado en Debian Lenny así como en otras distros.
Amigos del blog, se me presento este problema y necesito de su ayuda.
Estoy queriendo hacer unas pruebas con un discador predictivo, me decidí a usar elastix ya que no soy un experto en Asterik.
Tengo un modem Huawei E176 que el linux me lo detectaba como 12d1:1003 y el chan_sebi (siguiendo esta magnifica guia) lo detectaba sin «Voice Features».
[root@elastix ~]# lsusb
Bus 001 Device 002: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E270 HSDPA/HSUPA Modem
___________________________________________
[root@elastix ~]# ls /dev/ttyUSB* -la
crw-r–r– 1 root root 188, 0 May 25 14:47 /dev/ttyUSB0
crw-r–r– 1 root root 188, 1 May 25 14:47 /dev/ttyUSB1
crw-r–r– 1 root root 188, 2 May 25 12:42 /dev/ttyUSB2
___________________________________________
elastix*CLI> sebi show devices
ID IMEI Group Provider Connected State Voice SMS
huawei1 355851027XXXXXX 1 Personal Yes Free No Yes
____________________________________________
[root@elastix ~]# vi /etc/asterisk/sebi_devices.conf
[1-1]
data = /dev/ttyUSB1
imei = 355851027XXXXXX
___________________________________________
Hasta acá todo bien, lo único que no podía era hacer llamadas de voz, pero leyendo en la web, encuentro que el E176 soporta Voice, y que estaba bloqueado por soft.
Así que busco como desbloquearlo y después del desbloqueo….
Ya no me lo detecta como 12d1:1003 sino que ahora lo detecta como 12d1:140c
_____________________________________________________
[root@elastix ~]# lsusb
Bus 001 Device 003: ID 12d1:140c Huawei Technologies Co., Ltd.
______________________________________________________
Y no veo ningún ttyUSB, entones corro los siguientes comandos y me lista 6 ttyUSB
_________________________________________________________
modprobe -r option
modprobe -r usb_storage
modprobe -r usbserial
modprobe usbserial vendor=0x12d1 product=0x140c
_________________________________________________________
[root@elastix ~]# ls /dev/ttyUSB* -la
crw-rw—- 1 root uucp 188, 0 May 25 15:06 /dev/ttyUSB0
crw-rw—- 1 root uucp 188, 1 May 25 15:06 /dev/ttyUSB1
crw-rw—- 1 root uucp 188, 2 May 25 15:09 /dev/ttyUSB2
crw-rw—- 1 root uucp 188, 3 May 25 15:06 /dev/ttyUSB3
crw-rw—- 1 root uucp 188, 4 May 25 15:06 /dev/ttyUSB4
crw-rw—- 1 root uucp 188, 5 May 25 15:06 /dev/ttyUSB5
Por lo que estuve leyendo el chan_sebi.so solo funciona con idProduct 1001 y 1003.
Se me ocurrieron 2 ideas:
1) Cambiar via udev el idProduct, cosa que todavía no pude hacer por falta de conocimientos,
2) Modificar el source del chan_sebi.c y reemplazar todo lo que decia 1001 por 140c.
Lo compile y lo carge en el asterisk
Ahora pasa esto cuando edito el sebi_devices.conf
[root@elastix ~]# vi /etc/asterisk/sebi_devices.conf
[1-1]
data = /dev/ttyUSB2
imei = ERROR
voice = /dev/ttyUSB1
______________________________________________________________
Y ahí ya no se mas que hacer, necesito de su ayuda
Gracias!
se trata de una aplicación muy interesante, sin duda. Esto trae muchas ventajas directas en la constitución primaria de un servicio lógico y bien organizado de telefonía avanzada; recordemos por ejemplo los call center y las demás manifestaciones telefónicas solventes