Call a Skype user in a html page

Introduction to html-based Skype interaction

When the user has installed Skype, one can open Skype directly from a webpage. The protocol is skype:skypename – and optional flags.

The example will use the chinese demo user of Skype (echo-chinese) – which will record a call and play it back or ping back the typed in chat messages.

Call a skype user

The optional flag is call – to force Skype to call somebody. It can also be left out – but if the user changed the default behaviour to e.g. chat – Skype will open an IM session instead. So – go the save way and use the call – flag.

Example: call a Skype user

call echo-chinese with Skype
<a href="skype:echo-chinese?call">call echo-chinese with Skype</a>

Send an Skype IM message to a Skype user

The optional flag is chat. See the example below to see the usage in a html page.

Example: send a chat message to a Skype user

<a href="skype:echo-chinese?chat">Chat with echo-chinese</a>

Send a voicemail to a Skype user

The optional flag is voicemail – as you might have guessed.

Example: send a voicemail to Skype user

<a href="skype:echo-chinese?voicemail">Send voicemail to echo-chinese</a>

Create a Skype conference call with multiple users

This is as easy as the examples above – just more usernames before the “?” and call as flag.

Example: create a Skype conference call

<a href="skype:echo-chinese;echo123?call">conference call with echo-chinese and echo123</a>

Create a conference chat with multiple users

Same as conference call – with chat as flag.

Example: open a conference chat with multiple users – in html

<a href="skype:echo-chinese;echo123?chat">conference chat with echo-chinese and echo123</a>

Doing a Skype video call with C# / .Net

Introduction and premise

If you’re using ActiveS to control Skype, it’s easy. If not, you should check if you can migrate to ActiveS – which is really recommended! ActiveS is a nice .NET library that supports most of the Skype API – for free (BSD licence – you can even use it for commercial applications).
Skype supports video calls since Skype version 2.0.

Example – doing a Skype video call

With ActiveS it’s easy: you do just a normal call and than switch on the video support:

This example assume’s that m_objAccess is an instance of the SKYPEAPILib.AccessClass which is the ActiveX stub that connects .NET to Skype. skypeId is a string containing the username of the skype user you’re calling. The next to lines enable the sending of video messages (START_VIDEO_SEND) and the receiving of video messages (START_VIDEO_RECEIVE).

Call call = this.m_objAccess.PlaceCall(skypeId); m_objAccess.SendCommand("ALTER CALL " + call.ID + " START_VIDEO_SEND"); m_objAccess.SendCommand("ALTER CALL " + call.ID + " START_VIDEO_RECEIVE");

You can find more information about the video support at the description of the updated Skype protocol – video section

Skype video calls and conference conversations

The Skype conference calls doesn’t support video conversations. Even the Skype window doesn’t support it, the API seems to behave the same.

You can try to do a conference call and than switch on the video support – but it still doesn’t work. So maybe Skype checks the network load and the usage of the video calls – and then maybe enables the conference calls or makes it a payed service. But – nobody knows execept the Skype developer, we’ll see.

Register incomming Skype calls with ActiveS in C# .NET

Description of the problem – register incomming Skype calls

Skype allows you to register for incomming calls – you can decide if you wanna take the call or not. ActiveS is a wrapper that allows you to control Skype through an easy API.

Solution: register incomming Skype calls ( C# and .NET )

The solution for Visual Basic is similar.

try {
// initialize Skype / ActiveS
ConversionClass m_objConversion = new ConversionClass();
AccessClass m_objAccess = new AccessClass();
// register event handler that listens on status changes of calls
m_objAccess.CallStatusChanged += new _IAccessEvents_CallStatusChangedEventHandler(Skype_CallStatusChanged);
// connect to Skype
m_objAccess.Connect();
} catch (Exception e) {
Console.WriteLine(e.Message);
}

// our event handler
void Skype_CallStatusChanged(SKYPEAPILib.Call call, SKYPEAPILib.SkypeCallProgress callProgress)
{
if (callProgress.Equals(SKYPEAPILib.SkypeCallProgress.prgRinging) && call.Type.Equals(SkypeCallType.ctypIncomingP2P))
{
// display message box to ask user
MessageBox.Show("Do you wanna take that call from " + call.PartnerDisplayName + "?",
"Incomming Skype-call from " + call.PartnerDisplayName,
MessageBoxButtons.YesNo,
MessageBoxIcon.Question);

// if user answered no, hang up call
if(res.Equals(DialogResult.No))
{
call.Status = SKYPEAPILib.SkypeCallProgress.prgFinished;
}
else
{
call.Status = SKYPEAPILib.SkypeCallProgress.prgInProgress;
}
}
}

Hang up a Skype call with C#

Description of the problem: hang up a call with Skype

If you’re using ActiveS to control Skype, it’s easy. If not, you should check if you can migrate to ActiveS – which is really recommended!

Solution – hang up the call

Assuming that the current Call object is called call, you can hang up a call with just changing the status to prgFinished.

call.Status = SKYPEAPILib.SkypeCallProgress.prgFinished;

You can get this Call object with placing an outgoing call (AccessClass.PlaceCall(string username)), taking a call for a call id (AccessClass.GetCall(int callId)) or walking through the list of calls (AccessClass.GetCallList(), returns a list of Call objects).

See also register incomming Skype calls with ActiveS in C#

Skype & C# / .Net

Controlling Skype with a .NET language is easy:

Please note: the following content is partially outdated and only available for historic reasons.

  • Download the ActiveS library here and install it

Using Skype API wrapper ActiveS [outdated]

More Skype knowledge – html based

Add Skype functionality to a html page

More ressources