Click2Dial automático en Firefox
Actualizado 24-09-2007: Nueva versión. Mejoras en la deteccion de numeros. Añadidos todos los prefijos de paises. Mi idea es poder adaptar la detección a números locales de cada país. En la actualidad funciona con números en formato internacional, y números españoles.
Actualizado 24-09-2007: Sí, otra actualización :). Mejorada la presentación, al no permitir el salto de línea. A veces se quedaba la bandera en una línea y el número en otra. También se ha añadido el nombre completo del país. Se puede ver dejando el ratón unos segundos encima del icono de llamada .
A raíz de un mensaje en la lista de correo de asterisk-es, intenté encontrar un sistema similar, pero que no dependiese de Skype o similares. La idea era que se detectasen los números de teléfono que hubiese en una página web, y automáticamente convertirlos en un enlace a un servicio click2dial.
Greasemonkey es una extensión para Firefox, que permite ejecutar codigo javascript en la página que está cargando. Estos scripts permiten analizar y modificar la página web, y como son persistentes, se ejecutan cada vez que se carga.
Existe ya un script, Skype Linkify, que sustituye los números que encuentra por un enlace a “skype:elnumero?call“. Lo he tomado como base, para hacerle unas mejoras:
- Soporte de números en formato internacional +34 928000000, 00 34 928000000, 011 34 928000000.
- Soporte para números españoles: [6-9]xxxxxxxx.ww
- Se añade una banderita con el país al que pertenece el número de teléfono, que queda muy mono
Instalación
- Instalar la extensión Greasemonkey
- Descargar e instalar el script PhoneLink (original, eh?)
- En Greasemonkey, editar el script, y modificar las variables “myExt” y “url”. La primera corresponde a tu extensión. Si pones 201, el canal utilizado será SIP/201. La segunda corresponde al script (en php por ejemplo) que se llamará cuando pulséis en un teléfono. %DEST% se sustituye por el número de teléfono solicitado.
- Abrir una página que tenga números de teléfono.
Por supuesto, tendréis que tener alojado un php o similar que inicie la llamada en asterisk. El que he usado para pruebas (cuidado con dejarlo accesible, que no es seguro) es este: webcall.php
Ejemplos de patrones que se detectan bien:
- +34 928 00 00 00
- 0034 928000000
- +1 212-000-1234
- 928000000
- 91-800-00-00
- 928.00.00.00
Seguro que falla con otros, y que da falsos positivos en determinados casos. La expresión regular tiene bastante margen de mejora.
Screenshots
Antes:
Después:
PopUp:






Julián,
Intentando instalar tu script tengo los sgtes mensajes de error:
[Wed Oct 03 16:30:18 2007] [error] [client 172.20.1.4] PHP Warning: fwrite(): supplied argument is not a valid stream resource in /export/www/html/webcall.php on line 14
[Wed Oct 03 16:30:18 2007] [error] [client 172.20.1.4] PHP Warning: fclose(): supplied argument is not a valid stream resource in /export/www/html/webcall.php on line 15
Tengo PHP versión 5, ¿sabés que pueda ser?
Gracias,
Juanjo
Comment by Juanjo
— 3 October 2007 @ 19:32
El problema es que el usuario que ejecuta el script (apache), no tiene permisos de escritura en /var/spool/asterisk/outgoing/
Puedes hacer, por ejemplo, un
chmod 777 /var/spool/asterisk/outgoingEsto dará permisos de escritura a todo el mundo. No me hago responsable
Comment by julianjm
— 3 October 2007 @ 21:05
Yo había probado poniendo webcall.call con 777, pero parece que tiene que ser el directorio
Pués bien, ahora puse el directorio con 777 y el error no aparece, pero no hace la llamada
El contenido de webcall.call (con la ext e IP mias) es:
Channel:SIP/3
CallerId:Webcall 0034911516748
MaxRetries:0
WaitTime:12
Context:telsip
Extension:0034911516748
Priority:1
Que fallará? habrá que poner por que proveedor sale la llamada por algún lado?
Saludos,
Juanjo
Comment by Juanjo
— 3 October 2007 @ 21:22
Primero comprueba que el contexto telsip admite la marcación de esos números:
CLI> dialplan show 0034910000000@telsip
Segundo, revisa el log del asteris, porque puede que se trate de permisos nuevamente, pero esta vez que no pueda leer el archivo generado.
Modifica el fichero webcall.php, y añade esta línea, justo antes del fopen
umask(0);
Y ya nos cuentas que tal
Comment by julianjm
— 3 October 2007 @ 22:18
Hola me gusta mucho tu, es muy practico, bueno para un novato como yo.
He montado el script como indicas pero no consigo hacer funicionar, me devuelve una y otra vez lo siguiente:
— Attempting call on SIP/22 for 22@from-internal:1 (Retry 1)
[Nov 14 11:10:47] WARNING[22853]: chan_sip.c:2860 create_addr: No such host: 22
[Nov 14 11:10:47] NOTICE[22853]: channel.c:3074 __ast_request_and_dial: Unable to request channel SIP/22
[Nov 14 11:10:47] WARNING[22853]: cdr.c:831 ast_cdr_init: CDR already initialized on ‘**Unknown**’
[Nov 14 11:10:47] NOTICE[22853]: pbx_spool.c:341 attempt_thread: Call failed to go through, reason (0) Call Failure (not BUSY, and not NO_ANSWER, maybe Circuit busy or down?)
podrías orientarme sobre lo que está ocurriendo ?
He cambiado el contexto pero sigue igual.
un saludo y gracias
Ignacio
Comment by ignacio
— 14 November 2007 @ 10:17
Ignacio, todo apunta a que no tienes creado el usuario SIP 22. Revisa tu sip.conf.
Comment by julianjm
— 14 November 2007 @ 11:43
Hola Julian que tal.. funciona perfecto y es muy util, muy comodo. Una cosa, el script se podria configurar para que pueda llamar a SIP, ZAP, IAX2 o lo que sea? Dentro de myext=? si pone 100(pej) llama al SIP/100 si pones myext=IAX2/100 llama al SIP/IAX2/100, se podria modificar de alguna forma?
Muchas gracias
Un saludo
Comment by javivi
— 17 December 2007 @ 8:46
Javivi, sí, pero antes tienes que modificar las primeras líneas del webcall.php para que queden así:
< ?php$ext=$_GET['ext']; # Sin el +0
$dest=$_GET['dest'];
#
$callfile="Channel:$ext # Sin el SIP/
Eso sí, protege bien el acceso a este script, porque podría ser abusado mucho más facilmente por gente “maliciosa”
Comment by julianjm
— 17 December 2007 @ 8:54
Ahh bueno si claro cierto. Ok muchas gracias tio
Comment by javivi
— 17 December 2007 @ 12:00
Genial, como siempre. Solo una pregunta, sabes (o alguien) como hacer una banderita de las que salen delante del numero? Esque he cambiado el script para que “detecte” las extensiones de la empresa y quiero que delante pinte nuestro logo. Supongo que sera algun “gif to url” o similar, pero no encuentro nada.
Un saludo!
Comment by juanmol
— 14 January 2008 @ 16:52
Yo lo hice con un pequeño script en PHP:
< ? $argv=$_SERVER['argv']; if (count($argv)<=1) die("Not enough params"); $filename=$argv[1]; $h=@fopen($filename,"rb"); if ($h) { $data=fread($h,filesize($filename)); $finfo = finfo_open(FILEINFO_MIME); $mime=finfo_file($finfo, $filename); $encoded=rawurlencode($data); echo "data:$mime,$encoded\n"; } else { die("File not found\n"); } ?>Comment by julianjm
— 14 January 2008 @ 17:21
Más información aquí: http://es.wikipedia.org/wiki/Data:_URL
Comment by julianjm
— 14 January 2008 @ 17:24
Hola necesita urgente poder leer tambien telefonos de argentina con el siguiente formato
4111-1111
41119999
011-111-2222
Por mas que hice mi propia expresion regular no eh podido hacer que funcione con tu script, tiene algun punto que se debe cambiar tambien?
desde y muchas gracias!!
Comment by martin
— 19 March 2008 @ 13:32
Hombre, yo copiaría la que hay para ‘es’. En la ultima versión añadí soporte para los USA (’us’).
Tampoco tengo muy claro lo que significa cada número que has puesto (empiezan todos por 4?), el resto de los números tienen algún patrón?
El tercer patron, corresponde a una llamada internacional? Si es así, me parecen pocos números…
Respecto a la expresión regular, la verdad es que tardé lo suyo haciendo pruebas hasta que conseguí detectar la mayor parte de números, y limitar al máximo los falsos positivos.
Si necesitas una solución urgente, porque se trata de un proyecto comercial, escribeme un email e igual podemos llegar a un acuerdo
Comment by julianjm
— 20 March 2008 @ 17:20
Hola Julian, he intentado ver el contenido del archivo webcall.php pero no se ve el codigo solo se ve la pagina en html como si la extension txt no estuiera, ojala me peudas explicar como ver el codigo para habilitarlo en mi navegador.
Gracias de antemano
javs
Comment by javs
— 4 July 2008 @ 2:58
Hola Julian,
me sucede exactamente lo mismo que a Javs. Podrías mirar que es lo que ha sucedido?
Un saludo y muchas gracias.
Comment by Andreu
— 16 July 2008 @ 9:20
Ya está corregido…
Comment by julianjm
— 16 July 2008 @ 9:34
Me volví loco hasta encontrar donde se almacenaban los iconos de las banderas xD, muy bien pensado. Ahora en la empresa usamos todos el script para hacer llamadas por asterisk desde la agenda, nos ha sido de gran utilidad.
Gracias y un saludo.
Comment by Jose Maria Olea
— 5 November 2008 @ 12:53