Está en la página 1de 64

GUÍA DE LA API DE SKYPE:

Conociendo la arquitectura del


Plug-in de Skype
PRIMERA EDICIÓN. ABRIL, 2005

PROYECTO DE DEMOSTRACIÓN: DISEÑA TU PROPIO

CONTESTADOR PARA SKYPE.

• CONOCER Y TRABAJAR CON


“Creo que es una guía muy buena
LA API DE SKYPE. para los programadores noveles y,
lo que es más importante, un
• CONSTRUIR LA PLATAFORMA
excelente libro para los
DE COMUNICACIONES DEL
programadores con experiencia
MAÑAÑA. como yo (26 años), pero que
somos nuevos con Skype.
• ADAPTAR SOLUCIONES DE
Gracias, Bill.”
SKYPE.

Arie Bakker, Holanda


• CREAR POTENTES

APLICACIONES, PASO A

PASO.

Por W.J. (Bill) Campbell,


Editor técnico de Skype Journal (Diario de Skype) y el Skype Developer
Community (Comunidad de Desarrollo de Skype).

Disponible en: chino, holandés, ingles, alemán, húngaro, italiano,


japonés, polaco, portugués, rumano, ruso y español.
COPYRIGHT Y RECTIFICACIONES

© 2005 Skype Journal

Skype Journal y www.SkypeJournal.com son marcas registradas de


Mosoci LLC.

Skype™ es una marca registrada de Skype Technologies S.A. Los


diseños de los logos de Skype y otros iconos de Skype mostrados en las
imágenes están protegidos por el copyright de Skype Technologies S.A.

Skype no está afiliada con el Skype Journal ni aprueba o soporta esta


Guía de la API, o el uso de los productos API COM o SkypeX wrapper
que son tratados en él.

AVISOS LEGALES ÚTILES SOBRE SKYPE

Algunos enlaces útiles para comprender el Acuerdo de Licencia de


Usuario Final de Skype (Skype End User License Agreement, EULA) y
temas asociados.

Búsqueda en la base de datos de Skype (en inglés):


http://support.skype.com/?_a=knowledgebase&_j=subcat&_i=13

Certificación (en inglés):


www.skype.com/partners/certification/

Términos de uso (en inglés):


www.skype.com/company/legal/

Acuerdo de Licencia de Usuario Final (en inglés):


www.skype.com/company/legal/eula/index.html

Términos de Distribución (en inglés):


www.skype.com/company/legal/promote/distributionterms.html

Términos promocionales (en inglés):


www.skype.com/company/legal/promote/materialterms.html

Anuncios y Promociones (en inglés):


www.skype.com/community/promoteskype.html
©2005 The Skype Journal www.SkypeJournal.com
Página 2
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Agradecimientos

Me gustaría agradecer la gran contribución que muchos amigos y


entusiastas de Skype han proporcionado a este libro. De no ser por su
amable y generoso apoyo no existiría. El entusiasmo de sus
contribuciones demuestra el interés que la API de Skype está generando
en todo el mundo.

CONTRIBUCIONES (VER PÁGINA 56):

• Arie Bakker • Wei Li


• Kevin Delaney • Gaurav Prasad
• German Koninin • Jason Terando
• Johnny Krogsgaard • beeSync

TRADUCTORES (ver página 58):

• Ewelina Chudzińska • kootstra


• Markus Daehne • Nina Kupper
• Ramon (Skype-es.com) • Tracizio Pinto
• Brian Harward • Paulo Sousa
• Peter Henning • Wuyijun
• Seishi Isobe • Skaipe.com

PROBADORES (ver página 61):

• Cesar Andrade • Neil Lindsey


• ascenna • Jerry Pedersen
• Arie Baker • sanith1976
• Vir Banhu • Rolf Stefanni
• Peter Henning • Tomasz Tybulewicz
• jaragrets • Yann

©2005 The Skype Journal www.SkypeJournal.com


Página 3
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
CONTENIDO

Conociendo la arquitectura del Plug-in de Skype.....................................1

Agradecimientos .......................................................................................3

Conociendo la Arquitectura del plug-in de Skype.....................................5

¿Qué es el interfaz COM de la API y SkypeX? ........................................6

Documentación de la API de Skype .........................................................7

Comprender y trabajar con la API de Skype.............................................7

Instalación del interface de la API de Skype...........................................10

Cómo crear aplicaciones potentes..........................................................15

Instalación de SkypeX.............................................................................22

APÉNDICE..............................................................................................27

Visual BASIC.NET Sample Chat Message Utility: ..................................27

Ejemplo en Perl de mensajes de char: ...................................................29

Ejemplo de mensajería de chat en PHP GTK:........................................37

Ejemplo de mensajería de chat en Java:................................................41

Guía de programación de Microsoft C# ..................................................47

Guía de programación en Microsoft C++................................................50

Uso de la clase CSkypeMessageQueue ................................................56

Colaboradores:........................................................................................57

Traductores: ............................................................................................59

Probadores:.............................................................................................62

Sobre el autor:.........................................................................................64

©2005 The Skype Journal www.SkypeJournal.com


Página 4
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Conociendo la Arquitectura del plug-in de Skype

INTRODUCCIÓN

T
Esta guía introduce en la API (Application Programming Interface) de
Skype tanto a programadores con experiencia, que trabajan por primera
vez con Skype, como a programadores noveles. Quizás usted no sea un
programador, pero tiene una pregunta en la cabeza, “¿Qué se puede
hacer con la API de Skype?”, o quizás solo tenga una curiosidad natural
de entender cómo funcionan las cosas. Si es su caso, esta guía está
pensada para usted.

Su aproximación es práctica y sencilla. Exploraremos juntos la API. En


los próximos 5 minutos enviaremos un primer mensaje de chat a través
de la API utilizando una utilidad de una tercera compañía con Skype. A
continuación, se instalará el interfaz COM (Component Object Model)
de la API que permite crear programas en lenguajes
diferentes y que puedan acceder a la API de Skype. Incluso
mostraremos cómo crear un contestador automático para
La Guía de la API de Skype en un
Skype.
vistazo

Muchos programadores noveles solo conocen un lenguaje de


1. Descargar la documentación de
programación. Suele resultar difícil empezar con la API ya que
la API de Skype.
no puede leer los ejemplos de C++ o Visual Basic 6 que
2. Descargar la utilidad de traceo
normalmente están disponibles. Así, hemos intentado incluir
SkypeTracer.
un ejemplo sencillo para cada lenguaje. Esta versión de la
3. Enviar un mensaje de chat.
Guía de la API no los tendrá todos, pero es un documento
4. Hacer una llamada PSTN.
actualizado continuamente.
5. Descargar e instalar la librería
de la API COM de Skype.
Skype está construyendo lo que parece un nuevo e increíble
6. Descargar la utilidad de
gran mercado. Esta versión de la API de Skype permite a
mensajes de chat.
terceras compañías participar en esta oportunidad de
7. Enviar un mensaje de chat.
aprendizaje, diversión o beneficio.
8. Revisar el código comentado
para la utilidad de mensajes de
Nota Final: Esta guía es un manual paso a paso. Funciona
chat.
como un programa de ordenador. Saltarse un paso, o
empezar a leerlo en un punto indeterminado que no sea el de
inicio puede llevarle a cometer errores. ☺

©2005 The Skype Journal www.SkypeJournal.com


Página 5
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
¿Qué es el interfaz COM de la API y SkypeX?

Antes de nada, ¿qué es la API de Skype?

La API (Application Programming Interface) de Skype permite a


programas externos acceder a las funcionalidades de Skype. La API de
Skype, que utiliza una arquitectura de “mensaje-respuesta”, necesita
que esos programas estén escritos en C++. Eso dejaría a muchos de
nosotros fuera de juego si no fuera por productos (gratuitos) como la
interface COM de la API de Skype o SkypeX. Estos productos permiten
a programas externos que estén escritos en otros lenguajes, tales como
Visual Basic 6 (VB6), Visual Basic .Net, PHP, Java y Perl trabajar con
Skype.

La interface COM de la API y SkypeX crean un interface alrededor del


Entorno de Mensajes de Windows de la API de Skype. Los interfaces
COM, utilizan los COM (Component Object Model) de Microsoft que
proporcionan una forma elegante de comunicarse con los productos.

Un interface COM es un conjunto de componentes orientados a objetos


que los programas utilizan para diseñar un interface que es eficiente y
fácil de mantener. En este caso, proporciona una fácil y rápida
integración de Skype con productos Microsoft Office, en particular
SharePoint e Internet Explorer, además de otras aplicaciones
software.

Skype
Skype Message/Response API COM
Your
Skype Client Application
API Communication or
SkypeX

La interface COM de la API y SkypeX proporcionan otra función única e


importante para los desarrolladores que planeen crear un interface con
dispositivos hardware o aplicaciones software con la API de Skype:
estos interfaces permiten un desarrollo rápido de prototipos.

Vamos a empezar…

©2005 The Skype Journal www.SkypeJournal.com


Página 6
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Documentación de la API de Skype

Primero, descargue la documentación de la API de Skype (Skype API –


Description of Skype API and how to use it) que describe los comandos
mensaje-respuesta utilizados para acceder a las funciones de Skype,
desde aquí.

Segundo, lea el documento “Expanding Skype” en la web de la


comunidad de Skype, aquí.

Consejo: Para acceder a la API estándar de Skype necesitará tener


elevados conocimientos de C++. Afortunadamente, un grupo de
desarrolladores han creado un interface COM para la API que
proporciona el acceso a la API de Skype a través de diferentes
lenguajes de programación más simples como:
• Visual BASIC 6 • Perl
• VB.NET • Java
• PHP • C#

Comprender y trabajar con la API de Skype

Antes de profundizar en temas técnicos vamos a enviar un mensaje de


chat a través de la API de Skype.

Comience descargando e instalando una pequeña herramienta llamada


SkypeTracer desde http://sweb.cz/SetWindowLong/SkypeTracer.zip
(referencia: http://forum.skype.com/viewtopic.php?t=18150).

SkypeTracer es una ingeniosa utilidad que permite monitorizar todas las


actividades de su cliente de Skype y manejar comandos a través de la
API de Skype. SkypeTracer muestra un listado en tiempo real de las
actividades de Skype y sus comunicaciones desde y hacia el mundo
exterior.

El autor del SkypeTracer (“iunknown”) dice “ponga SkypeTracer en su


mano izquierda y el manual de la API de Skype en la derecha y estará
en el buen camino para utilizar la API”.

La ventana de inicio de SkypeTracer es:


©2005 The Skype Journal www.SkypeJournal.com
Página 7
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Para iniciar SkypeTracer, pinche en “Connect” (Conectar).

Aparecerá una ventana de aviso como la que aparece en la figura


siguiente. Seleccione “Permitir a este programa a utilizar Skype” y
pinche en OK.

Fíjese que una doble flecha en la esquina


inferior izquierda de su ventana de Skype le
informa de que un enlace de comunicación ha
sido establecido entre el SkypeTracer y su
cliente de Skype.

Ahora estará preparado para utilizar SkypeTracer y la API de Skype


para enviar un mensaje de chat.

©2005 The Skype Journal www.SkypeJournal.com


Página 8
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Abra o imprima la documentación de la API de Skype y vaya al capítulo
7.9.5, “Sending Messages” (Enviando mensajes).

El Manual de Referencia de la API de Skype (The Skype API


Reference Manual) le dará el formato y sintaxis de un comando para
enviar un mensaje de chat a cualquier usuario de Skype:

MESSAGE NombreUsuario Texto

donde “NombreUsuario” será reemplazado con el Nombre de Usuario de


Skype y “Texto” es el texto del mensaje.

Envíe un mensaje de chat a


uno de mis clientes con el
nombre de usuario
billcampbell.

Introduciremos el comando
exactamente como aparece
aquí en la línea de
comandos:

MESSAGE billcampbell
Hello, Bill. Here is a
message sent to you
via the Skype API.

Haga click en el botón “Send” (Enviar) para ejecutar.

La ventana del navegador mostrará un listado en tiempo real de la


actividad de Skype y las comunicaciones hacia y/o desde el mundo
exterior.

¡Acaba de convertirse en un experto de la API de Skype ;-) !

La Status Window (Ventana de Estado) de SkypeTracer listará todas


las comunicaciones relacionadas con su mensaje. Buena suerte en la
búsqueda de su mensaje entre el resto de mensajes. ☺

©2005 The Skype Journal www.SkypeJournal.com


Página 9
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Ahora puede probar la mayoría de los comandos listados en la guía de
la API de Skype de la misma manera y entender así las funcionalidades
que le ofrecen. Por ejemplo, si tiene una cuenta de SkypeOut, teclee
CALL seguido de +12505551212…. ¡Bingo! Ha iniciado una llamada de
SkypeOut!

(Consulte la documentación de la API de Skype, capítulo 7.9.4, “Cómo


hacer llamadas”.)

Instalación del interface de la API de Skype

Ahora que se ha convertido en un experto en el uso manual de la API,


vamos a escribir un programa de Visual Basic que lo haga
automáticamente.

Cierre la utilidad SkypeTracer.

A continuación, descargue e instale el interface COM de la API de Skype


desde aquí. Le permitirá comunicarse con la API utilizando Visual Basic
en vez de C++.

Este interface COM de la API está escrito por Jason Terando, de


Huntington Beach, California, EE.UU. Su usuario en el foro de Skype es
caraccas.

©2005 The Skype Journal www.SkypeJournal.com


Página 10
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Haga click dos veces en el icono de
SkypeAPIInstall para instalarlo.

El interface COM de la API está ahora instalado y registrado.

PROGRAMAS DE EJEMPLO PARA EL INTERFACE COM DE

LA API DE SKYPE

Ahora que el interface COM de la API está instalado y registrado vamos


a probarlo. Descargue el fichero “chat.zip” desde aquí. A continuación,
descomprima el fichero en su escritorio. Haga click dos veces en IM.exe.

Verá una ventana de aviso como la que aparece a continuación.


Seleccione “Allow this program to use Skype” (Autorizar a este
programa a usar Skype”.

Introduzca el nombre de usuario del receptor en el campo que dice


“Skype Handle” y su mensaje de texto en el cuadro de texto “Message”.

©2005 The Skype Journal www.SkypeJournal.com


Página 11
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Haga click en “Send Message” (Enviar Mensaje).

Fíjese en la doble flecha que aparece en la parte inferior izquierda de la


ventana de Skype que le dice que existe un enlace de comunicación
entre el programa IM y su cliente de Skype.

A continuación encontrará el código comentado para el ejemplo del


programa IM.exe.

CODIGO FUENTE COMENTADO PARA EL EJEMPLO DE CHAT

Option Explicit

Private m_objConversion As SKYPEAPILib.Conversion

‘Declare Variable of type SKYPEAPILib.Conversion


Private WithEvents m_objSkype As SKYPEAPILib.Access

‘Declare Objects m_objskype as SKYPEAPILib.Access


‘also look
Private Sub Form_Load()

©2005 The Skype Journal www.SkypeJournal.com


Página 12
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
'This function is automatically fired when form is getting started or loaded
for first time so good place to initialize Objects declared earlier
Set m_objConversion = New SKYPEAPILib.Conversion

On Error GoTo NoInit ' error handler,


Set m_objSkype = New SKYPEAPILib.Access

‘Initialize m_objSkype
m_objSkype.Connect

‘Connect to Skype network


Exit Sub

NoInit:
MsgBox Err.Description, vbCritical + vbOKOnly,
"Unable to Connect to Skype"

‘If unable to connect to Skype network for any runtime issues like
network issues, etc., show error description to user and unload form
Unload Me
Exit Sub
End Sub

Private Sub btnSendCommand_Click()

‘This will be fired when user clicks on send button


Dim s As String

On Error GoTo NoCommand

'error handler
s = "MESSAGE " & handle.Text & " " & message.Text

‘This just appending text you have written in text box to string s declared
above and constructing a command string to be passed to
SKYPEAPILib.Access instance
If Len(s) = 0 Then

‘Check if length of message is zero if yes then exit


Exit Sub
End If
m_objSkype.SendCommand s
©2005 The Skype Journal www.SkypeJournal.com
Página 13
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
'Pass the command string to SKYPEAPILib.Access which tells it to send
the message (message.Text)
Exit Sub

NoCommand:
MsgBox Err.Description, vbCritical + vbOKOnly,
"Unable to Send Command"
‘If any runtime error occurs show error
End Sub

Encontrará ejemplos equivalentes, en otros lenguajes de programación,


en el apéndice.

Pista: Visite los Foros de Skype sobre la API. Si, por ejemplo, mira en
este hilo encontrará un punto de inicio para PHP.

DÉ UN TOQUE INTERNACIONAL A SU PROGRAMA

Skype es un programa internacional por lo que utiliza codificación de


doble byte (Double Byte) para manejar conjuntos de caracteres
internacionales tales como los asiáticos. Skype utiliza UTF8 en todas
sus comunicaciones, incluido su interface y la función de mensajería.

Si es un programador de C/C++, utilice arrays de WCHAR o la clase


standard wstring para almacenar cadenas en su aplicación. Si se
comunica directamente con Skype, puede utilizar la función
MultiByteToWideChar para definir sus mensajes WM_COPYDATA.
En sentido contrario, cuando recibe un mensaje de Skype, puede utilizar
la función MultiByteToWideChar para traducir los mensajes entrantes de
UTF8 a Unicode. Los programadores de Visual Basic pueden también
utilizar estos métodos pero necesitarán importar prototipos utilizando el
API Text Viewer (Visor de Texto de la API).

Los programadores .Net pueden utilizar los métodos GetBytes y


GetString de la clase de codificación Encoding.UTF8 para traducir entre
los arrays de bytes y las cadenas.

Copie y pegue el mensaje de prueba de la siguiente caja de texto para


probar la compatibilidad con UTF8 de sus propios programas de
mensajería de chat. Si ve una serie de cuadrados en vez de los
©2005 The Skype Journal www.SkypeJournal.com
Página 14
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
caracteres chinos mostrados tendrá que habilitar el soporte de Idiomas
Asiáticos en el Panel de Control > Idiomas y Región.

你好,比尔
我的名字叫吴义军
欢迎你来中国

Traducción:
hello, Bill
my name is wuyijun
welcome to China

Cómo crear aplicaciones potentes

En este capítulo repasaremos lo se ha visto hasta ahora, se añadirán


unos pocos comandos de la API más al repertorio y se le guiará para
crear un sencillo contestador automático para Skype.

Necesitará la copia de la documentación de la API de Skype para este


capítulo. Probablemente ya lo habrá descargado siguiendo las
instrucciones de la página 7. En caso contrario puede hacerlo ahora
desde este enlace.

No vamos a reescribir la documentación de la API de Skype, pero nos


gustaría hablar sobre tres comandos simples para que los usuarios no
técnicos tengan una oportunidad de acceso a la documentación de la
API de Skype.

Los tres comandos sobre los que deseamos hablar son:


• Query
• Set
• Execute

Query le permite hacer una petición del estado del cliente local de
Skype. Por ejemplo, si desea saber qué dispositivo de entrada de audio
(Audio Input Device) está en uso por el cliente de Skype, usted
normalmente utilizará el comando (todo en mayúsculas):

©2005 The Skype Journal www.SkypeJournal.com


Página 15
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
GET AUDIO_IN

Puede probarlo con el SkypeTracer presentada en la página 7.

Set define parámetros en el cliente local de Skype. Esto le permite


cambiar el estado del cliente de Skype. Por ejemplo, suponga que desea
cambiar la entrada de audio de Skype a su micrófono Logitech 4000 Pro
Video en vez de sus auriculares Plantronics:

SET AUDIO_IN Logitech Microphone (Pro 4000)

Execute le permite ejecutar una función en el cliente local de Skype. Ya


lo hizo en la página 9. Recordémoslo:

MESSAGE billcampbell Hello Bill this is a test


message!

Estos tres comandos de ejemplo pueden considerarse la base para


desarrollar un sencillo contestador automático para Skype. Veamos
ahora.

Nuestro contestador automático tendrá las siguientes funciones:


1. Contestar una llamada.
2. Reproducir un mensaje de bienvenida grabado previamente.
3. Permitir a la persona que llama grabar un mensaje.

Las especificaciones de nuestro contestador automático son:


• Funcionar sobre Windows XP.
• Estar diseñado en VB.NET.
• Utilizar la Grabadora de Sonidos de Windows para la reproducción y
grabación.
• Utilice el Control Multimedia para manejar la Grabadora de Sonidos
de Windows desde aquí.
• Utilizar un cable de audio virtual (Virtual Audio Cable). Descargue la
versión gratuita de Virtual Audio Cables desde aquí.

Consejo: ¿Cómo maneja el canal de sonido de Skype?


La API de Skype no se expone en sí misma al canal de sonido a través
de la API de Skype. Sin embargo, le permite seleccionar qué dispositivo
de audio conectar a su cliente de Skype. De esta forma puede enlutar la
©2005 The Skype Journal www.SkypeJournal.com
Página 16
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
entrada y salida de audio de su cliente de Skype. Esto le facilita la
oportunidad de crear aplicaciones tales como contestadores
automáticos, grabadores de voz (Skype PodCaster), y
sistemas IVR (Interactive Voice Response, sistemas de
respuesta interactiva de voz) dirigidos por tonos DTMF (Dual
Tone Multi-Frequency).

Vamos a comenzar con la creación de un sencillo


contestador automático:

Yo utilizo una tarjeta de sonido integrada así que este


ejemplo aparece como dispositivo por defecto
seleccionado. Usted, tan solo ha de reemplazar
“Audio Integrado de Intel®” con los altavoces y
micrófono de su sistema en las listas desplegables.

Utilice la Grabadora de Sonido de Windows para


crear un “mensaje de bienvenida”. Encontrará la
Grabadora de Sonido en Inicio > Todos los
Programas > Accesorios > Entretenimiento. Cree
un enlace directo de esta aplicación a su escritorio.

Configure las propiedades de su Grabadora de


Sonido para grabar desde su micrófono (en mi caso,
unos cascos normales). Las Propiedades están en
Edición > Propiedades de Audio del menú.

A continuación, grabe su propio mensaje de


bienvenida. Guarde el fichero con el nombre
“Mensaje_Bienvenida.wav” en una carpeta con un nombre parecido a
“Mi Contestador Automático de Skype”.

Ahora definamos su cliente Skype para que pueda reproducir este


Mensaje de Bienvenida cuando un contacto suyo le llame.

Para configurar su contestador automático, necesitará el Virtual Audio


Cable (cable de audio virtual). Descargue e instale la versión gratuita de
VAC (si no lo ha hecho aún) desde aquí. Una vez instalado, reinicie su
ordenador.

©2005 The Skype Journal www.SkypeJournal.com


Página 17
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Considere a VAC como un cable que utilice
para conectar cualquier dispositivo a su tarjeta
de sonido o equipo estéreo.

En primer lugar, lo que tendrá que hacer es


conectar la salida de audio (altavoces) de su
Grabadora de Sonidos a la entrada de audio
(micrófono) de su cliente Skype.

Esta conexión virtual se realiza editando los


Dispositivos de Audio en la Grabadora de
Sonido y los Dispositivos de Audio en Skype.

En Dispositivos de Audio en la Grabadora de


Audio (Grabadora de Sonidos > Edición >
Propiedades de Audio), para reproducir
sonido, seleccione “Virtual Cable 1 Out” como el
dispositivo por defecto.

©2005 The Skype Journal www.SkypeJournal.com


Página 18
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
En Dispositivos de Sonido en
Skype (Skype > Herramientas >
Opciones > Dispositivos de
Sonido), para modificar la
entrada, seleccione “Virtual Cable
1 In”.

Ahora, probemos esta conexión


virtual. Tendrá que reproducir
manualmente su mensaje de
bienvenida para esta prueba.

Llame a uno de sus contactos o


defina un segundo usuario de
Skype en su escritorio y llámese a
sí mismo. Puede encontrar las instrucciones en SkypeJournal.com.

Con su mensaje de bienvenida abierto, conteste a la llamada y


reprodúzcalo. … ¡funciona!

El siguiente paso es configurar su Grabadora


de Sonidos y el cliente de Skype para grabar
el mensaje de su contacto.

Para grabar el mensaje de su contacto, tendrá


que desconectar la primera conexión virtual y
usar el cable de audio virtual para conectar la
salida de audio desde cliente de Skype a su
Grabadora de Sonidos.

Estas imagines ilustran cómo hacerlo.

Para los dispositivos de sonido de su


Grabadora de Sonidos, en el caso de la
reproducción, seleccione “sus altavoces”
como dispositivo por defecto. En el caso de la
grabación de sonido, seleccione el “Virtual
Cable 1 In” como dispositivo por defecto.

©2005 The Skype Journal www.SkypeJournal.com


Página 19
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
En los dispositivos de sonido
de Skype, para la entrada de
audio, seleccione “su
micrófono”, y para la salida
de audio el “Virtual Cable 1
Out”.

Ahora usted o uno de su


contacto pueden realizar una
llamada a su cliente de
Skype, conteste la llamada y
grabe el mensaje.

A continuación, necesita de
la API de Skype para
controlar este proceso. El
siguiente procedimiento puede ser ejecutado de forma manual enviando
comandos de la API de Skype a través de la utilidad SkypeTrace. Por
supuesto, la idea es ejecutar posteriormente el mismo procedimiento en
un programa de VB.Net a la vez de un programa que utilice el control
multimedia de Microsoft que le permitirá manejar los dispositivos MCI
(Media Control Interface) tales como la Grabadora de Sonidos de
Windows.

Realice una llamada a su cliente de Skype. Verá en la ventana de


mensajes de SkypeTracer CALL XXXX STATUS RINGING.

Conteste la llamada después de 10 segundos utilizando el siguiente


comando a través de SkypeTracer:
HOOK OFF

Entonces utilice el comando:


SET AUDIO_IN Virtual Cable 1 In

Abra el mensaje de bienvenida y reprodúzcalo.

©2005 The Skype Journal www.SkypeJournal.com


Página 20
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Cierre el fichero con el mensaje de bienvenida grabado.

Ahora, envíe un comando:


SET AUDIO_IN Plantronics headset

Seguido por el comando:


SET AUDIO_OUT Virtual Cable 1 Out

Abra la Grabadora de Sonidos.

Haga click en el botón Grabar (el botón con el círculo rojo) en la


Grabadora de Sonidos y déjese un mensaje.

Envíe el comando de colgado de la llamada:


HOOK ON

Salve el fichero de sonido.

Vuelva a su cliente de Skype a su estado habitual con el comando:


SET AUDIO_OUT Plantronics headset

©2005 The Skype Journal www.SkypeJournal.com


Página 21
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Instalación de SkypeX

En siguiente paso, descargue e instale el SkypeX, otro interface COM de


la API de Skype que le permitirá también comuicarse con la API
utilizando Visual Basic en lugar de C++.

Puede descargarlo desde beeSync.

La librería COM de SkypeX viene con una aplicación de


instalación/desinstalación.

Figura 1. Acuerdo de Licencia de Usuario Final de SkypeX .

©2005 The Skype Journal www.SkypeJournal.com


Página 22
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Figura 2. Selección de componentes.

Figura 3. Selección de carpeta destino.

©2005 The Skype Journal www.SkypeJournal.com


Página 23
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Figura 4. Instalación completada.

Figura 5. Enlaces rápidos en el menú Inicio.

©2005 The Skype Journal www.SkypeJournal.com


Página 24
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
PROGRAMAS DE EJEMPLO PARA SKYPEX

SkypeX viene acompañado de ejemplos en VBScript y HTML. Están

localizados en la subcarpeta "Examples\Scripts and Examples\Explorer”

del directorio de instalación.

Para ejecutar los ejemplos de VBScript necesita la utilidad de línea de


comandos WSH (Windows Scripting Host) denominada cscript.exe.

Figura 6. Ejecución de los ejemplos VBScript desde la línea de comandos.

Para ejecuat los ejemplos HTML necesita el Microsoft Internet Explorer


6.0.

Figura 7. Ejecución del ejemplo HTML en el Internet Explorer.

©2005 The Skype Journal www.SkypeJournal.com


Página 25
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
UTILIZACIÓN DE SKYPEX DESDE VBSCRIPT

UTILIZACIÓN DEL CONTROL ACTIVEX DESDE

HTML

APLICACIONES DE SKYPEX

1. Hacer multiconferencias.
2. Enviar mensajes instantáneos.
3. Búsqueda de usuarios.
4. Soporte de la API de teléfonos.
5. Envía de comandos de la API.

©2005 The Skype Journal www.SkypeJournal.com


Página 26
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
APÉNDICE

Código de ejemplo para las utilidades de mensajes de chat en otros


lenguajes de programación.

Visual BASIC.NET Sample Chat Message Utility:

Código de VB6 actualizado por Kevin Delaney (sillyrabbit999).

Public Class Form1

Private m_objConversion As SKYPEAPILib.Conversion


Private WithEvents m_objSkype As
SKYPEAPILib.Access

Private Sub Form1_Load(ByVal sender As


System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load
''Do the following when the program loads.
m_objConversion = New SKYPEAPILib.Conversion

On Error GoTo NoInit ''When there's an error, Go down


to "NoInit".
m_objSkype = New SKYPEAPILib.Access
m_objSkype.Connect() ''Connect to the Skype API.
Exit Sub

NoInit: ''This is what's going to be done


MsgBox(Err.Description, MsgBoxStyle.Critical
+ MsgBoxStyle.OKOnly, "Unable to Connect to Skype")
''Make a messagebox with the error happens.
Me.Close() ''Close the program.
End Sub

Private Sub SendCommand_Click(ByVal sender As


System.Object, ByVal e As System.EventArgs) Handles
SendCommand.Click
Dim s As String

On Error GoTo NoCommand ''When there's an error, Go


down to "NoCommand".

©2005 The Skype Journal www.SkypeJournal.com


Página 27
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
s = "MESSAGE " & handle.Text & " " &
message.Text ''Set raw message to Skype in format "MESSAGE
<handle> <chat message>"
If Len(s) = 0 Then
Exit Sub
End If
m_objSkype.SendCommand(s) ''Send the command
Exit Sub

NoCommand:
MsgBox(Err.Description, MsgBoxStyle.Critical
+ MsgBoxStyle.OKOnly, "Unable to Send Command") ''Make a
messagebox with the error happens.
End Sub

End Class

©2005 The Skype Journal www.SkypeJournal.com


Página 28
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Ejemplo en Perl de mensajes de char:

A continuación está un ejemplo de cómo crear un interface de usuario


de chats para Skype en Perl utilizando los paquetes TK y el interface
COM de la API de Skype.

Este es un ejemplo de aplicación para demostrar el uso de la API de


Skype y Perl. Este ejemplo utiliza la plataforma cruzada de Perl TK, que
significa que este programa correrá bajo Windows, Linux, Mac, etc., con
tan solo un pequeño número de modificaciones (para las llamadas de la
API de Skype).

INICIO

Para iniciar siga los siguientes pasos (si no lo ha hecho aún):


1. Descargue e instale el ActivePerl para Windows (MSI) desde
ActiveState.com.
2. Descargue e instale el interface COM de la API de Skype desde
KhaosLabs.com.
3. Ejecute el ejemplo desde su directorio como un script de Perl
llamado perlforskype.pl

DOCUMENTACIÓN DE REFERENCIA

1. Skype’s API Documentation


2. Perl for Windows
3. Perl TK

Nota: Si desea estudiar algo más sobre Skype vaya a la línea 316 o a la
function SndMsg().

CÇODIGO FUENTE

use Tk;
use Tk::widgets ;
use subs qw/build_menubar fini init/;
use vars qw/$MW $VERSION/;
use strict;

#Perl uses Win32::OLE module to interact with COM in Windows


use Win32::OLE qw(in);

©2005 The Skype Journal www.SkypeJournal.com


Página 29
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
use constant vbCr => "\r";
1. Create a New Window
2. Set the Window Size
3. Set the title of the window

$MW = MainWindow->new;
$MW->geometry("359x283+8+8");
init;
MainLoop;

sub build_menubar {

In this function we are creating a menu bar:


• Create Menu File and Help
• Create the menu items for each menu.
• n, ne, nw, s, sw, se, e, w are all directions. n = North, s = South and
so on.
• text = The text displayed in the label
• background = label’s background color
• cursor = Specifies the mouse cursor to be used for the widget. The
value may have any of the forms acceptable to Tk_GetCursor
• font = Font of the text in the label
• foreground = This is the font color

# Create the menu bar and File and Quit menu buttons. Note that the
cascade's menu widget is automatically created.

my $menubar = $MW->Menu;
$MW->configure(-menu => $menubar);
my $file = $menubar->cascade(-label => '~File');
my $help = $menubar->cascade(-label => '~Help',-tearoff => 0);

# Create the menu items for each menu. First, the File menu item.

$file->command(-label => "Quit", -command => \&fini);

# Finally, the Help menu items.

$help->command(-label => 'Version');


$help->separator;
$help->command(-label => 'About');
©2005 The Skype Journal www.SkypeJournal.com
Página 30
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
my $ver_dialog = $MW->Dialog(-title => 'PaGuX Perl Skype Chat',
-text => "PaGuX Perl Skype Chat\n\nVersion $VERSION",
-buttons => ['OK'],
-bitmap => 'info');

my $about_dialog = $MW->Dialog(-title => 'About PaGuX Perl Skype Chat',


-text => 'PaGuX Perl Skype Chat',
-buttons => ['OK']);

my $menu = $help->cget('-menu');
$menu->entryconfigure('Version', -command => [$ver_dialog => 'Show']);
$menu->entryconfigure('About', -command => [$about_dialog => 'Show']);

$menubar; # return the menu bar

} # end build_menubar

sub build_elements {

In this function we build all the Controls on Form or Main window


1. Labels
2. Create Input or entry box for Skype Handle or Message
3. Create a Command button which fires & passes Skype Handle and
Message to SndMsg function

my $hndl;
my $msg;

Now we are creating a Label


• anchor = the position of the Text inside the Label, options are:
o n, ne, nw, s, sw, se, e, w are all directions. n = North, s =
South and so on.
o text = The text displayed in the label
o background = label’s background color
o cursor = Specifies the mouse cursor to be used for the
widget. The value may have any of the forms acceptable to
Tk_GetCursor
o font = Font of the text in the label
o foreground = This is the font color

©2005 The Skype Journal www.SkypeJournal.com


Página 31
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
my $label = $MW->Label(
-anchor => "w",
-text => "Enter a Skype Handle:",
-background => "#D4D0C8",
-cursor => "",
-font => "Tahoma 9 bold",
-foreground => "#000077"
)->pack;

Now we are going to specify where to place the label we just created on
to the form, so we set the width and height of the label and give x/y
coordinates of where to place it at.

$label->place(
-width => 160,
-height => 16,
-x => 8,
-y => 50
);

Now we are going to create an Entry box also known as TextBox or


InputBox. We will this to grab the input to check if the inputted date string
is in valid format.

my $txtInput = $MW->Entry(
-textvariable => \$hndl,
-borderwidth => 1,
-cursor => "",
-font => "Tahoma 8 normal",
-foreground => "#000000",
-relief => "sunken"
)->pack;

$txtInput->place(
-width => 152,
-height => 24,
-x => 155,
-y => 50
);

my $lblDisplay = $MW->Label(
-anchor => "w",
©2005 The Skype Journal www.SkypeJournal.com
Página 32
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
-text => "Enter your Message : ",
-background => "#D4D0C8",
-cursor => "",
-font => "Tahoma 9 bold",
-foreground => "#000077"
);
$lblDisplay->place(
-width => 125,
-height => 24,
-x => 8,
-y => 120
);

my $msgInput = $MW->Entry(
-textvariable => \$msg,
-borderwidth => 1,
-cursor => "",
-font => "Tahoma 8 normal",
-foreground => "#000000",
-relief => "sunken"
)->pack;

$msgInput->place(
-width => 135,
-height => 24,
-x => 155,
-y => 120
);

Next we create a Button, also known as a CommandButton. This is what


we will use to call the IsDate Sub when this button is clicked on
• command = This calls the sub. sub{sub_name_here(input1, input2)}
and so on, you can have more than one input or have no inputs.
• Without arguments:
o command => \&subname
o command => sub { ... }
o command => 'methodname'
• Or with arguments:
o command => [ \&subname ?, args ...? ]
o command => [ sub { ... } ?, args...? ]
o command => [ 'methodname' ?, args...?]

©2005 The Skype Journal www.SkypeJournal.com


Página 33
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
my $cmdSndMsg = $MW->Button(
-activebackground => "#FFFCBF",
-activeforeground => "#E30229",
-background => "#FFFFFF",
-borderwidth => 1,
-text => "Send Message",
-command => sub{SndMsg($hndl,$msg)},
-cursor => "",
-font => "Tahoma 8 bold",
-foreground => "#140F7B",
-relief => "solid"
)->pack;

# Place the button on the form


$cmdSndMsg->place(
-width => 104,
-height => 24,
-x => 170,
-y => 160
);

my $lblError = $MW->Label(
-anchor => "w",
-borderwidth => 1,
-text => "",
-background => "#FFFFFF",
-cursor => "",
-font => "Tahoma 8 normal",
-relief => "solid",
-highlightbackground => "#000000",
-justify => "right"
)->pack;

our $lblError = $MW->Label(


-anchor => "w",
-borderwidth => 1,
-text => "",
-background => "#D4D0C8",
-cursor => "",
-font => "Tahoma 8 normal",
-justify => "right"
)->pack;

©2005 The Skype Journal www.SkypeJournal.com


Página 34
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
$lblError->place(
-width => 328,
-height => 44,
-x => 12,
-y => 190
);

}
Next, place all the subs below here. We only have one sub so it’s below.
But if we had more than one sub, then it could go anywhere just as long
as it’s below the MainLoop;
sub SndMsg() {

This function is called when user clicks on the Command button on the
form. Following in this function, we:
1. Get Skype Handle and Message parameters.
my $txtInput=$_[0];
my $msgInput=$_[1];

2. Check if parameters are empty or not.

my $error_message = "";

$error_message .= "Please enter a Skype Handle " if (


!$txtInput );
$error_message .= "Please specify your Message " if (
!$msgInput );

if ( $error_message )
{
our $lblError->configure(-text => $error_message );
}
else
{

3. If parameters not empty we initiate a new OLE object of type


SKYPEAPI.Access.

our $lblError->configure(-text => "" );


my $objSkype;
$objSkype = Win32::OLE->new('SKYPEAPI.Access',
'objSkype_');

©2005 The Skype Journal www.SkypeJournal.com


Página 35
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
4. Connect to Skype Network.

$objSkype->Connect();

5. Use SendMessage function of Skype API to send a chat message as


variables supplied by user.

$objSkype->SendMessage($txtInput, $msgInput);

sub fini {

exit;

} # end fini

sub init {

In this function we initialize


1. Title and some other variables
2. Call build_menubar to build menu bar
3. Call build_elements to build controls on Main window

$VERSION = '1.0';

$MW->title("PaGuX Perl Skype Chat $VERSION");

my $menubar = build_menubar;

build_elements;

# my $frame = $MW->Frame(qw/-width 400 -height 350 )-


>pack;

} # end init

©2005 The Skype Journal www.SkypeJournal.com


Página 36
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Ejemplo de mensajería de chat en PHP GTK:

ACERCA DE…

Este es una aplicación de ejemplo del


uso de la API de Skype y el lenguaje de
scripts PHP (Hypertext Preprocessor).
Este ejemplo utiliza el PHP GTK sobre
una plataforma cruzada para PHP, que
significa que su programa funcionará en
Windows, Linux, Mac, etc., con tan solo
unos pequeños cambios (para las
llamadas a la API de Skype).

INICIO
Para empezar siga los siguientes pasos:
1. Descargue e instale el paquete php-
gtk para Windows desde aquí.
2. Descargue e instale el interface COM de la API de Skype desde
KhaosLabs.com.
3. Ejecute el ejemplo desde su directorio como un script de php
llamado phpforskype.php.

Añada zlib a la carpeta...

DOCUMENTACIÓN DE REFERENCIA
1. Skype’s API Documentation
2. PHP COM for Windows
3. PHP-GTK

Nota: Si desea estudiar algo más sobre Skype vaya a la línea 90 o a la


función SndMsg().

©2005 The Skype Journal www.SkypeJournal.com


Página 37
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
CÓDIGO FUENTE

/* This “if” statement determines where it finds the appropriate file to run
the gtk program. It is for Windows and Linux (respectively) */
if (!class_exists('gtk'))
{
if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN')
dl('php_gtk.dll');
else
dl('php_gtk.so');
}
/* This function closes the window. It is defaulted to false. */
function delete_event()
{
return false;
}
/* This is very important to actually destroying any instances of PHP
running. */
function destroy()
{
Gtk::main_quit();
}
/* This takes the instance of entry class and grabs what has been
entered into the textbox and saves it to $gettext. Then the parameters
are passed to SendMessage function. */
function send_message($label, $entry,$message)
{
$gethandle = $entry->get_text();
$getmessage = $message->get_text();

if((strlen($gethandle))==0 ||
(strlen($getmessage))==0)
{
$sentmsg ="Handle or Message cannot be
empty, pl fill it";
$label->set_text($sentmsg);
}else
{
/* We now create a new instance of COM object SKYPEAPI.Access. Use
Connect API call. Use SendMessage API function to send Message. */
//com_load_typelib("SKYPEAPILib.Conversion");

©2005 The Skype Journal www.SkypeJournal.com


Página 38
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
$com = new COM("SKYPEAPI.Access") or die("can not
create SKYPEAPILib.Access object");

$com->Connect();

$com->SendMessage($gethandle, $getmessage);

$sentmsg ="Message :".$getmessage." sent to


$gethandle";
$label->set_text($sentmsg);
}
}
/* Create the window. */
$window = &new GtkWindow();
$window->set_name('main window');
$window->set_title('PaGuX Skype Chat for PHP-GTK');
$window->set_usize(400, 300);
$window->connect('destroy', 'destroy');
$window->connect('delete-event', 'delete_event');
$window->set_border_width(10);
$window->set_position(GTK_WIN_POS_CENTER);
/* Create the frame. */
$frame = &new GtkFrame('A Simple Skype Chat
Program');
$window->add($frame);
/* Create the vertical box for putting things in. */
$box1 = &new GtkVBox();
$frame->add($box1);
$box1->show();
/* Create the area where will be updating the information. */
$label = &new GtkLabel('');
$box1->pack_start($label);
$label->show();

$labelhandle = &new GtkLabel('Enter Skype Handle');


$box1->pack_start($labelhandle);
$labelhandle->show();
/* Create a horizontal line. */
$separator = &new GtkHSeparator();
$box1->pack_start($separator);
$separator->show();

©2005 The Skype Journal www.SkypeJournal.com


Página 39
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
/* Create the textbox for the user to enter in the information. */
$entry = &new GtkEntry();
$box1->pack_start($entry);
$entry->show();

$labelmsg = &new GtkLabel('Enter Message');


$box1->pack_start($labelmsg);
$labelmsg->show();
$box1->pack_start($separator);
$separator->show();

$message = &new GtkEntry();


$box1->pack_start($message);
$message->show();

/* Create the horizontal box for across the bottom of the window. */
$box2 = &new GtkHButtonBox();
$box2->set_layout(GTK_BUTTONBOX_SPREAD);
$box1->add($box2);
$box1->show();

/* Set up one button that is in the button box. */


$button = &new GtkButton('Send Message ');
$button->connect_object('clicked', 'send_message',
$label, $entry,$message);
$box2->pack_start($button);
$button->show();

/* Set up the other button in the button box */


$button = &new GtkButton('Close Window');
$button->connect_object('clicked', 'destroy');
$box2->pack_start($button);
$button->show();

/* Close off the frame by showing it. */


$frame->show();
/* Tell the window to show all elements */
$window->show_all();

/* Finish off the entire program. */


Gtk::main();
?>

©2005 The Skype Journal www.SkypeJournal.com


Página 40
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Ejemplo de mensajería de chat en Java:

INTRODUCCIÓN

Este capítulo intenta ser una guía práctica de cómo utilizar el lenguaje
Java para acceder a la API de Skype, que está pensada para trabajar
con C/C++. Esta guía está basada en JSkype –una implementación en
JNI (Java Native Interface) para permitir a clientes de Java utilizar la
API de Skype. JSkype está desarrollada por Bart Lamot y ahora está
evolucionando hacia un estándar abierto (licencia LGPL), proyecto
denominado Java to Skype API (JSA), y que se puede encontrar en
SourceForge.net. El nuevo proyecto planea proporcionar un nuevo
interface para soportar todas las partes de la API, pero no necesita
conocimientos de la API de Skype original lo que significa que algunas
capas abstractas (probablemente alguna arquitectura de clases) se
encargará de encapsular y ocultar las llamadas a la API de Skype.

Desafortunadamente, no hay nuevas versiones liberadas (desde el 9 de


Abril de 2005) en su nueva página web y está únicamente disponible la
versión del sitio antiguo. Hubiera estado bien que hubiera más
instrucciones en la página antigua, pero actualmente está trabajando
bien si puede lo configurar correctamente por sí mismo, aunque el nuevo
sitio ha rechazado también la validez del viejo sitio.

INSTALACIÓN

Estas instrucciones paso a paso, de acuerdo a mi experiencia, sobre


cómo instalar y configurar la JNI JSkype debería ahorrar al menos medio
día de su tiempo.
1. Descargue JSkype desde su viejo sitio. Esto incluye los ficheros
binarios y los ficheros fuente en C y en Java. Descomprímalo en un
directorio local y busque los ficheros JSkype.jar y JSkype.dll en la
estructura de directorios extraída.

2. El fichero JNI (.dll) está compilado en MS VC++ 6.0, y por tanto


necesita descargar un fichero.dll extra –el Microsoft C Runtime
Library (v. 6.0.8337.0) desde aquí-. La falta de esta librería no es
intuitiva y no se menciona en el sitio de JSkype.

3. Si desea ejecutar los ejemplos de Java incluidos en el paqueta


JSkype sin ninguna modificación tendría también que descargar el
©2005 The Skype Journal www.SkypeJournal.com
Página 41
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Standard Widget Toolkit (SWT) de Eclipse. Sin embargo, solo
necesitará dos ficheros (swt-win32-30xx.dll and swt.jar, donde xx
representa la etiqueta de la versión que a la hora de escribir esta
guía es la 64).

4. Mueva estos ficheros al directorio adecuado y ejecute la aplicación


de ejemplo en JSkype. Para ahorrar esfuerzos para averiguar cómo
especificar la CLASSPATH de Java en su sistema, he empaquetado
todo de manera que pueda continuar para ver el ejemplo
ejecutándose con tan solo descomprimir todos los ficheros. Consiga
el paquete completo de aquí.

5. Este paso es necesario solo si no tiene instalada la Java 2 Platform


(JDK) o Java Runtime Environment (JRE) posterior a la versión
v1.4.2. En ese caso, puede descargarla desde aquí.

EJECUCIÓN DEL EJEMPO DE JSKYPE

Si tiene Java 2 Platform (JDK/JRE v1.4.2 o posterior) instalado,


después de los pasos de instalación anteriores, solo necesita ejecutar el
fichero batch JSkypeExample.bat, que tiene el siguiente contenido:

REM set path = .\jre\bin,%path%


java -classpath .;jskype.jar;swt.jar
net.lamot.java.jskype.swtclient.swtChatWindow

Si no tiene Java instalado, necesita descomprimir el JRE.zip a su


directorio de JSkype y quitar el “REM” en la primera línea del fichero
batch:

SET PATH = .\JRE\BIN,%PATH%


java -classpath .;jskype.jar;swt.jar
net.lamot.java.jskype.swtclient.swtChatWindow

©2005 The Skype Journal www.SkypeJournal.com


Página 42
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Aparecerá una ventana de Skype como esta:

Haga click en el botón OK para continuar, introduzca algún comando en


la caja de texto y haga click en el botón Send.

©2005 The Skype Journal www.SkypeJournal.com


Página 43
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
En la ventana de salida pera líneas como:

Básicamente, este ejemplo funciona como una versión de Java de


SkypeTracer o el ejemplo msgapitest en la API oficial de Skype. Puede
probar con más comandos de la API como por ejemplo Call, SET
AUDIO_IN etc.

CONSTRUCCIÓN DE SU APLICACIÓN JAVA CON

JSKYPE

Este capítulo le dará alguna idea de cómo utilizar JSkype en su


programa de Java. El código se parece a la demo anterior para ilustrar
cómo enviar mensajes de texto a un usuario de Skype con el nombre
“theptcompany”.

// Import the JSkype packages


import net.lamot.java.jskype.general.AbstractMessenger;
import net.lamot.java.jskype.general.MessageListenerInterface;
import net.lamot.java.jskype.windows.Messenger;
import java.lang.Thread;
import java.lang.Exception;

// The MessageListenerInterface interface defines a method


onMessageReceived suppose to be called when notifications are
received from run-time Skype Client.
public class JSkypeTest implements MessageListenerInterface {

// Declare a messenger object to be used to send Skype commands


©2005 The Skype Journal www.SkypeJournal.com
Página 44
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
private AbstractMessenger msgr = null;

// Create a new instance of JSkypeTest.


public JSkypeTest() {
try {
// pause 6 seconds to wait for the
initialization of JSkype
Thread.sleep(6000);
// send the Skype API text command
msgr.sendMessage("Message theptcompany
hello from JSkypeTest" );
}
catch (Exception e) {
e.printStackTrace();
}
}

// * @param args the command line arguments


public static void main(String[] args) {
new JSkypeTest();
}

public void onMessageReceived(String str) {

// We simply just print out if any notifications arrive through JSkype


System.out.println(str);
}

The code above can be compiled with the batch file JSTest.bat, which
has the content
javac –classpath .;JSkype.jar JSkypeTest.java
java –classpath .;JSkype.jar JSkypeTest

Sin embargo, si está utilizando el paquete original de JSkype, pronto se


dará cuenta que el método onMessageReceived nunca es llamado.
Esto significa que su programa Java no recibirá ninguna información
desde JSkype, lo que a su vez conlleva que usted tan solo puede enviar
comandos a JSkype aunque no es posible recibir ningún mensaje del
cliente de Skype para determinar si su mensaje ha sido recibido con
éxito. Esto se debe a que hay un fallo en el paquete original de JSkype.

©2005 The Skype Journal www.SkypeJournal.com


Página 45
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
La cosa buena es que cualquier es capaz de solucionarlo ya que es
código abierto.

Yo mismo he solucionado dicho fallo durante la escritura de esta guía.


Así, si ejecuta el ejemplo de JSkype incluido con esta guía, verá los
avisos de Skype impresos únicamente en la ventana DOS pero también
en la aplicación. Ahora, usted es capaz de utilizar la contestación de
Skype en su aplicación para desarrollar comportamientos más
interesantes, por ejemplo, para reproducir un mensaje de felicitación

cuando su amigos llamen y entonces grabe sus mensajes de voz.

RESUMEN

JSkype proporciona un camino simple para conectar la aplicación Java


con Skype, y le permite realizar un mayor uso de la red de Skype para
sus programas. El Java Native Interface JSkype es bastante sencillo
pero razonablemente robusto a la vez. Sin embargo, algunos métodos
como el de destrucción, no parece estar implementado. Este es el por
qué la llamada a system.exit() fuerza su aplicación a cerrarse. Si no
puede esperar a la nueva versión del proyecto JSA, puede mirar en el
propio código y completarlo por sí mismo. Una gran ventaja con esta
versión es su simplicidad. ¡Disfrute del código!

Truco: Piense que el Por Qué es a veces más importante que averiguar
el Cómo.

©2005 The Skype Journal www.SkypeJournal.com


Página 46
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Guía de programación de Microsoft C#
Este capítulo muestra técnicas para el uso del interface COM de la API
de Skype en sus aplicaciones en C#. Como cualquier otro lenguaje .Net,
hay interoperabilidad casi inmediata. La parte más complicada es la
definición del controlador de eventos.

Los pasos básicos para la utilización del interface de la API de Skype


incluyen:
1. Añadir una referencia a la librería del interface de la API de Skype.
2. Declaración de los objetos interface de Skype.
3. Definición de los controladores de eventos.
4. Creación de objetos.
5. Realización de llamadas.

CÓMO AÑADIR UNA REFERENCIA A LA LIBRERÍA

DEL INTERFACE DE LA API

DE SKYPE

Para añadir una referencia a la librería de la API de


Skype a un proyecto C#, desplegue el menú
Proyecto, y a continuación Añadir Referencia. En la
pestaña COM, seleccione la librería con la API de
Skype, haga click en el Seleccionar y por último en el
botón Aceptar.

DECLARACIÓN DE LOS

OBJETOS INTERFACE DE

SKYPE

En su formulario (u otra clase de implementación), defina dos variables


miembros así:
private ConversionClass m_objConversion;
private AccessClass m_objAccess;

DEFINICIÓN DE CONTROLADORES DE EVENTOS

Usted puede implementar controladores de eventos de la misma forma


en que lo hace habitualmente con sus eventos C#. Para declarar un
controlador de eventos necesitará usar los parámetros adecuados.
Puede consultar la documentación del interface COM de la API de

©2005 The Skype Journal www.SkypeJournal.com


Página 47
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Skype o usar las capacidades Intellisense de Visual Studio con las vistas
de los parámetros. A continuación se incluyen un par de ejemplos de
declaración de funciones y las llamadas para monitorizar estos eventos.

m_objAccess.APIStatusChanged +=
new_IAccessEvents_APIStatusChangedEventHandler(APISta
tusChanged);

void APIStatusChanged(SkypeAPIAttachmentStatus
Status)
{
...
}

m_objAccess.MessageReceived += new
_IAccessEvents_MessageReceivedEventHandler(MessageRec
eived);

void MessageReceived(SKYPEAPILib.Message
ReceivedMessage)
{
...
}

CREACIÓN DE OBJETOS

To create the Skype objects previously declared and connect to Skype,


you can implement the following code:
try
{
// Initialize our objects
m_objConversion = new SKYPEAPILib.ConversionClass();
m_objAccess = new SKYPEAPILib.AccessClass();
// Set up event delegates
m_objAccess.APIStatusChanged += new
_IAccessEvents_APIStatusChangedEventHandler(APIStatus
Changed);
// Trigger a connection to Skype
m_objAccess.Connect();
} catch (Exception ex) {
MessageBox.Show(this, ex.Message, "Unable to
Initialize Skype Connectivity", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
©2005 The Skype Journal www.SkypeJournal.com
Página 48
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Clean-up is automatic.

IMPLEMENTAR LLAMADAS

Una vez que haya definido todo, puede hacer cosas fácilmente como se
puede observar a continuación:

Iteración por la lista de contactos de Skype:

foreach(User objUser in m_objAccess.GetFriendList())


{
AddUserHandleToMyList(objUser.Handle)
}

Enviar un mensaje:

m_objAccess.SendMessage("MyFriend", "How are You");

Cambiar el estado de conexión:

m_objAccess.CurrentUserStatus =
SkypeOnlineStatus.olsAway;

Colgar todas las llamadas activas:

foreach(Call objCall in
m_objAccess.GetActiveCallList())
{
objCall.Status = SkypeCallProgress.prgFinished;
}

©2005 The Skype Journal www.SkypeJournal.com


Página 49
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Guía de programación en Microsoft C++

Este capítulo muestra las técnicas para la utilización del interface COM
de la API de Skype con sus aplicaciones C++. Microsoft proporciona el
Active Template Library (ATL) para C++ desde la versión 6.0 y
posteriores versiones, ya .Net. Esta guía no es un tutorial de ATL; usted
debería estar ya familiarizado con el uso de framework y COM en
general. El código de ejemplo mostrado aquí puede ser incluido en un
Microsoft Foundation Classes (MFC) o una aplicación ATL pura.

Los pasos básicos para utilizar el interface de la API de Skype incluye:


1. Importación de la librería tipo.
2. Implementación del interface IDispEventImpl.
3. Definición de los controladores de eventos.
4. Creación de objetos.
5. Uso de la clase CSkypeMessageQueue.

IMPORTAR LA LIBRERIA TIPO

Necesitará importar la librería para conseguir todos los tipos de datos y


las clases proxy generadas para usted. En general, puede poner la
siguiente línea de código en el stdafx.h:

#import "c:\\winnt\\system32\\skypeapi.dll"
named_guids
using namespace SKYPEAPILib;

Sustituya la localización real en la que tenga almacenada la skypeapi.dll,


y ¡no olvide las dobles barras invertidas!

©2005 The Skype Journal www.SkypeJournal.com


Página 50
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
IMPLEMENTACIÓN DEL INTERFACE

IDISPEVENTIMPL

Existe un mecanismo ATL, IDispEventImpl, que permite a una clase


interactuar como un interface de eventos IConnectionPoint. Puede
implementar este interface en cualquier clase, incluidas las de diálogo y
ventana. Por ejemplo, si está desarrollando una aplicación de diálogo
MFC, puede definir:

// IDC_MYSKYPE can be any arbitrary unique constant


#define IDC_MYSKYPE 0x100

class CMySkypeAppDlg: public CDialog,


public IDispEventImpl<IDC_MYSKYPE,
CMySkypeAppDlg,
&DIID__IAccessEvents, &LIBID_SKYPEAPILib, 1, 0>
{

public:

// Include whatever other MFC/ATL stuff you need

BEGIN_SINK_MAP(CMySkypeAppDlg)
END_SINK_MAP()

protected:

IAccessPtr m_ptrAccess;
IConversionPtr m_ptrConversion;

void ConnectToSkype();
void DisconnectFromSkype();
};

DEFINICIÓN DE CONTROLADOR DE EVENTOS

Por cada evento de llamada que maneje, necesita definir una función
adecuadamente formateada. Puede usar la utilidad OLE View para ver
los prototipos de la clase IAccessEvents. En la lista de librería tipo, haga
click dos veces en la librería SkypeAPI.

©2005 The Skype Journal www.SkypeJournal.com


Página 51
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Una vez que haya incluido la librería, seleccione dispinterface
_IAccessEvents.

Hay dos partes importantes que necesitará por cada llamada. El id y la


lista de parámetros. Por ejemplo, es casi seguro que necesitará
controlar el evento APIStatusChanged. La información del prototipo es:

[id(0x00000009), helpstring("method
APIStatusChanged")]
HRESULT
APIStatusChanged(SkypeAPIAttachmentStatus Status);

En su clase, necesitará definir lo siguiente:


©2005 The Skype Journal www.SkypeJournal.com
Página 52
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
HRESULT __stdcall OnAPIStatusChanged (enum
SkypeAPIAttachmentStatus Status);
BEGIN_SINK_MAP(CMySkypeAppDlg)
SINK_ENTRY_EX(IDC_MYSKYPE,
DIID__IAccessEvents, 0x9, OnAPIStatusChanged)
END_SINK_MAP()

Ahora, todo esto debería funcionar, excepto si hay un fallo con el ATL
cuando se implementó IDispEventImpl y la inclusión de la llamada con
sus respectivos parámetros enumerados. Básicamente, los parámetros
enumerados serán traducidos como VT_USERDEFINED, que no
funcionará. Para más detalles, puede leer el artículo KB237771 de la
Microsoft’s knowledge base:
(http://support.microsoft.com/default.aspx?scid=kb;en-us;237771).
Afortunadamente, existe un remedio bastante simple. Tiene que
sobrecargar una función llamada GetFuncInfoFromId como sigue:

virtual HRESULT GetFuncInfoFromId(const IID& iid,


DISPID dispidMember,
LCID lcid, _ATL_FUNC_INFO& info) {

// class base class implementation


HRESULT hr = IDispEventImpl<0x100, CSkypeTestCPPDlg,
&DIID__IAccessEvents, &LIBID_SKYPEAPILib, 1, 0>::
GetFuncInfoFromId(iid, dispidMember,lcid, info);
if (SUCCEEDED(hr)) {
if (::InlineIsEqualGUID(iid, DIID__IAccessEvents)) {
for(long l = 0; l < info.nParams; l++) {
if(info.pVarTypes[l] == VT_USERDEFINED) {
info.pVarTypes[l] = VT_I4;
}
}
}
}
return hr;
}

©2005 The Skype Journal www.SkypeJournal.com


Página 53
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
CREACIÓN DE OBJETOS

No se asuste, ya casi hemos terminado. Ahora, solo necesitamos definir


las funciones para crear nuestros propios objetos de la API de Skype y
destruirlos cuando estén hechos. Definiremos un objeto de Access
además de un objeto Conversión dentro de la función ConnectToSkype,
y los destruiremos en la función DisconnectFromSkype. Cuando se
llama a estas funciones, se depende de esa aplicación concreta. Para
una aplicación de diálogo MFC, por ejemplo, el controlador OnInitDialog
es un buen lugar para llamar a ConnectToSkype, y el controlador
DestroyWindow es un buen lugar para llamar a DisconnectFromSkype.
Aquí hay un ejemplo de la creación de los objetos de Skype y cómo
definir su clase para recibir las notificaciones de eventos:

void ConnectToSkype()
{
TCHAR msg[128];

// Create the Skype Access object and do event advise


HRESULT hr =
m_ptrAccess.CreateInstance(__uuidof(Access));
if(FAILED(hr)) {
_stprintf(msg, _T("Unable to create Skype Access
object: 0x%08X"), hr);
MessageBox(msg, "Error", MB_OK | MB_ICONSTOP);
} else {
IUnknownPtr pUnk;
m_ptrAccess.QueryInterface(IID_IUnknown, & pUnk);
hr = DispEventAdvise(pUnk);
pUnk.Release();
if(FAILED(hr)) {
_stprintf(msg, _T("Unable to capture events from
Skype Access object: 0x%08X"), hr);
MessageBox(msg, _T("Error"), MB_OK | MB_ICONSTOP);
}
}

// Create the Skype Conversion object so we can get text representation


of enum values
if(SUCCEEDED(hr)) {
hr =
m_ptrConversion.CreateInstance(__uuidof(Conversion));
©2005 The Skype Journal www.SkypeJournal.com
Página 54
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
if(FAILED(hr)) {
_stprintf(msg, _T("Unable to create Skype Conversion
utility object: 0x%08X"), hr);
MessageBox(msg, _T("Error"), MB_OK | MB_ICONSTOP);
}
}

if(SUCCEEDED(hr)) {
hr = m_ptrAccess->Connect();
if(FAILED(hr)) {
_stprintf(msg, _T("Unable to receive Skype events:
0x%08X"), hr);
MessageBox(msg, _T("Error"), MB_OK | MB_ICONSTOP);
}
}
}

Now, to clean up...

void DisconnectFromSkype()
{
if(m_ptrAccess) {
IUnknownPtr pUnk;
m_ptrAccess.QueryInterface(IID_IUnknown, &
pUnk);
DispEventUnadvise(pUnk);
pUnk.Release();
m_ptrAccess.Release();
}

if(m_ptrConversion) {
m_ptrConversion.Release();
}
}

©2005 The Skype Journal www.SkypeJournal.com


Página 55
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Uso de la clase CSkypeMessageQueue

Si no quiere tratar con todo lo relacionado con la COM, puede querer


echar un vistazo a la clase CSkypeMessageQueue en el código fuente
de la API de Skype. Puede utilizarlo dentro de su aplicación para
comunicarse con Skype, y conseguir hilos múltiples y traducción
Unicode/UTF-8. Mire en el fichero Access.cpp par aver cómo puede ser
utilizada la clase CSkypeMessageQueue.

©2005 The Skype Journal www.SkypeJournal.com


Página 56
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Colaboradores:

Arie Bakker, Arie, contributor of the Simple Skype Answering Machine source
Holanda code and executable, studied mathematics in the early 1970’s,
Nombre en Skype: worked in the insurance industry, half time as mathematician,
aria44 half time in automation (developing programs). For the past eight
years Arie has done some programming for fun and sometimes
as little projects for a few clients.

Kevin Delaney, Kevin, contributor of the sample Chat Message utility in Visual
Ontario, Canadá BASIC.NET, is a student by day and programmer by night. Since
Nombre en Skype: his first computer at age five, he’s been hooked on exploring the
sillyrabbit999 computer and the Internet and learning how everything works.
He has experience as a server administrator of several game
servers and is currently the co-founder of the development team
of www.khaoslabs.com. Kevin also designed and coded the
new, soon-to-be-released QZoxy Presence System.

German Koninin, German, producer of SkypeTracer, is a Software Developer by


Praga, República occupation. His other interests are reverse engineering and
Checa sports.
Nombre en Skype:

Johnny Krogsgaard, Johnny, developer of the first Visual BASIC 6 code for the Chat
Copenage, Message executable, works with an Internet-based company
Dinamarca (www.andelsportal.dk) in Copenhagen where he’s responsible for
Nombre en Skype: telephones, computers, server, homepage, etc. He has been
john-9 programming since a very early age and is fluent in Java, PHP,
HTML, ASP, Delphi, and Visual BASIC. He also has good skills
in sense of graphical work with extensive experience with
Photoshop, Fireworks and Flash. He has been a beta-tester for
Skype since the start.

©2005 The Skype Journal www.SkypeJournal.com


Página 57
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Wei Li, Wei, contributor of the commented Skype Java Programming
DSV/KTH, using JSkype , is PhD student of Computer and Systems
Suecia Sciences. He’s doing research in “Ubiquitous and Context Aware
Nombre en Computing” and is currently involved in the Adaptive and
Skype: Context-Aware System project (http://psi.verkstad.net/acas).
beichuang www.dsv.su.se/fuse

Gaurav Prasad, Gaurav, contributor of the commented Visual BASIC 6 code and
India the sample Chat Message utility in Perl, is an Automation/
Nombre en Process specialist. His core competencies are process
Skype: optimization/redesign and rapid product development from
pagux2you business requirements to create business differentiation.
www.pagux.com

Jason, contributor of the C++ code, is Manager of Application


Development at Rapidtext, Inc., a firm specializing in
Jason Terando, transcription and captioning. He is the author of a COM wrapper
Huntington for the Skype API available at KhaosLabs.com. He holds a
Beach, California, Bachelor’s degree in Management Information Systems from the
EE.UU. California State University.
Nombre en

Skype: jasonterando
The developer of the free SkypeX:
www.beesync.com/skypex/index.html

©2005 The Skype Journal www.SkypeJournal.com


Página 58
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Traductores:

Chino: Wuyijun is a 24-year-old software engineer at Compal, a


Wuyijun, manufacturer of computer notebooks. He will concentrate on
Kunshan, Provincia compiling notebook BIOS source code this year. Because he
de Suzhou,China has a natural curiosity to understand how things work, he will
Nombre en Skype: explore every detail of Skype and Skype-related topics. So it’s
poseidem_wu time to study dotNet, not only Assembly Language.

Holandés: As an early adopter of Skype, kootstra has seen the online


Países Bajos user base grow from a few thousand to well over a few million.
Nombre en Skype: Though his active forum days are now behind him, he’s still an
kootstra active Skype user and remains interested in the technology;
though be it from the sidelines.

Alemán: Markus is a 24-year-old student of Applied Computer Science at


Markus Daehne the University in Duisburg. He’s an administrator/moderator of
Moers, NRW, the German Skype-Forum.com community and publisher of the
Alemania meinSkype.de portal. He’s currently focused on writing a book
Nombre en about Skype (to be published by Syngress) due to be available in
Skype: uniquex autumn 2005. He’s interested in all Skype-related subjects as
well as programming and working with the Skype API.
www.meinskype.de

Húngaro y Peter is a 22-year-old student of Applied Computer Science and


Rumano: Economy at the Academy of Economic Studies in Bucharest.
Peter Henning Resulting from his choice of university, he is knowledgeable in
Bucarest, economics, software development (C++/C# and Assembler) and
Rumanía system administration, a combination he sees as a great
Nombre en Skype: advantage for his future career in product management and
madraven entrepreneurship. He’s an active member of the Skype forum and
a Skype for Windows closed Beta tester. He’s interested in all
Skype-related subjects as well as programming and working with
the Skype API.
Italian:
Il Portale Italiano a Skype.
www.skaipe.com

©2005 The Skype Journal www.SkypeJournal.com


Página 59
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Japonés:
Brian has been living in Japan for the last 10 years. Five years
ago, with the help of members from Rotary Naka Nagoya, he
started @Works Ltd. They now run two Xserves and operate as
a server service for the local community. The Japanese
Brian Harward & Seishi Isobe,
translation team includes Seishi Isobe. Seishi has been
Nagoya, Japón
translating for @Works for the last three years and is a valued
member of the @Works team. www.a-area.org

Polaco: Ewelina is a 23-year-old student of English Philology,


Ewelina graduated from Central Metropolitan of TAFE, Perth, Western
Chudzińska, Australia. Currently working as a Polish-English interpreter.
Świdnica, Polonia
Nombre en Skype:
linkaewe

Portugués: Computer Science Graduate.


Paulo Sousa, Born in Portugal
Póvoa de Varzim, Post Graduate Studies: Electronic Commerce WebDesign;
Portugal WebProgramming
Nombre en Skype:
pjrsousa

Ruso: Nina is 24-year-old freelance technical writer and translator of


Nina Kupper, English/Russian. She is a graduate of the Tomsk (in Siberia)
Rudolstadt, State University of Control Systems and Radio Electronics,
Alemania possessing a System Technical Engineer degree.
Nombre en Skype: Nina is married and lives in Germany. She’s interested in
nina_tomsk mastering the German language to, perhaps, start doing
translation as well.

Español: Ramon es Ingeniero de Telecomunicaciones. Actualmente


Ramon, trabaja en una compañía de telecomunicaciones. Además es el
Madrid, España administrador y editor de la comunidad hispana de usuarios de
Nombre en Skype: Skype, www.skype-es.com . También le gusta programar y tiene
quemasda
experiencia con la API de Skype, especialmente en VB.NET.

©2005 The Skype Journal www.SkypeJournal.com


Página 60
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Brasileño: Tarcizio is a Computer Science Academic at the UNIFRA
Tarcizio Pinto, University and an Electrical Engineer Academic at the UFSM
Santa Mario, Rio University. He’s a researcher of overheating in Athlon CPU’s and
Grande do Sul, Linux “distros” in old RISC PowerPC computers. In his spare
Brasil time, Tracizio plays guitar with the Gorda Iliada band.
Nombre en Skype:
tarciziorp

©2005 The Skype Journal www.SkypeJournal.com


Página 61
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Probadores:
Un buen programador sabe que no puede probar su propio código. Para
probar la calidad se necesita preparar planes de pruebas y probadores
comprometidos y cualificados. Esto no cambia cuando se trata de
escribir un libro. Así, escribí un plan de pruebas y encontré un grupo de
dedicados usuarios de Skype, de todos lados del mundo de Skype, que
representan una audiencia diversificada que certifica la accesibilidad,
comprensibilidad y claridad de esta guía.
Esta guía ha sido probada con estas clases de individuos—
1. La versión en inglés con probadores cuya lengua materna no es
inglés.
2. Programadores sofisticados con experiencia en Skype.
3. Programadores experimentados que no hayan tenido contacto
con Skype.
4. Programadores novatos con experiencia en Skype.
5. Sin experiencia en programación, pero versados en Skype.
Cualquier error u omisión recae exclusivamente en mis hombros. Un
sincero agradecimiento y, con suerte de los lectores, aplauso para los
siguientes probadores:

Cesar Andrade,
Piracicaba, SP, Brazil
Nombre en Skype: cesarandrade2005

ascenna (Nombre en Skype)

Arie Baker,
Baarn, Netherlands
Nombre en Skype: aria44

Vir Banhu,
Knowledge Systems, Inc., Bangalore, India
Nombre en Skype: virbhanu

Peter Henning,
Rumanía
Nombre en Skype: madraven

jaragrets (Nombre en Skype)


©2005 The Skype Journal www.SkypeJournal.com
Página 62
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Nombre en Skype: sanith1976
Neil Lindsey,
New Westminster, B.C. Canada Rolf Stefani
Nombre en Skype: neillindsey
Tomasz Tybulewicz,
Jerry Pedersen, Gdansk, Polonia
Victoria, B.C. Canada Nombre en Skype: tomasztybulewicz
Nombre en Skype: jeryskype915
Yann
Knowledge Systems, Inc., China
Bangalore, India Nombre en Skype: yannshen9100

©2005 The Skype Journal www.SkypeJournal.com


Página 63
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com
Sobre el autor:

Bill Campbell
Kelowna, B.C., Canada
Nombre en Skype: theptcompany
www.SkypeJournal.com

Bill es un ávido usuario, entusiasta y defensor de Skype y lo ha sido desde que


el producto tenía seis meses de vida. Tiene más de treinta años de experiencia
en gestión. Cerca de un tercio lo ha pasado en puestos de gestión en Hewlett
Packard.

Ha inventado y gestionado el desarrollo del primer servidor de presencia en


Skype y las Q-Card™ que permiten informar del estado de conexión en Skype al
foro de Skype y proporcionar tanto el estado como interactividad con la voz para
sitios web, incluyendo los foros de las comunidades de usuarios español y
alemán.

Bill y el CEO de Skype, Niklas Zennström, firmaron un acuerdo, no público, el 2


de Septiembre de 2004 en el que se allanaba el camino para que su compañía
QZoxy, Inc. fuera invitada a ser el primer miembro del Skype Developer Program
(Programa de Desarrolladores de Skype).

Él y sus colegas en el cerrado foro de la beta de Skype ayudan a conpartir el


futuro de los productos de Skype. Prueban todos los nuevos productos de
Skype: multiconferencia, Chat-múltiple, SkypeIn, Video y grupos de trabajo de
Skype. Hill también vela y defiende a los nuevos usuarios en el foro de soporte
de Skype y es uno de los diez más activos usuarios.

Como editor técnico del Skype Journal trabaja con su compañero, Stuart
Henshall, para mantener a los miembros de la comunidad de Skype al día con la
última información sobre Skype –noticias, comentarios, eventos, entrevistas,
evaluación de productos y asuntos técnicos, especialmente todo aquello
relacionado con la API de Skype y los desarrolladores de la API.

Puede suscribirse para recibir nuevas actualizaciones del Skype Journal


copiando este enlace www.SkypeJournal.com/blog/atom.xml y pegándolo en su
lector RSS (Rich Site Summary) y recibir puntual información.

©2005 The Skype Journal www.SkypeJournal.com


Página 64
Teléfono: 250.808.7034 e-mail: bill_campbell@skypejournal.com

También podría gustarte