6

I've seen several links suggesting it is possible to make a call from the command-line with skype. The instructions suggest something along the lines of:

skype --callto:+14445551234

However, this gets me an error message, "skype: unrecognized option '--callto:+14445551234".

Is this possible?

Use case scenario:

I want to call a particular number frequently.

  • assuming skype client is already running and logged in.
  • I create a shortcut on my desktop, which runs skype --callto:+14445551234 or something similar.
  • Double-click the shortcut.
  • skype window pops up, immediately calling this number

Can this be done?

I know there is a Skype API. Can this be done from a normal skype installation on Ubuntu, without installing any developer tools?

EDIT: I am considering this question to be still open, because I would like to know if this is possible from a default installation of skype without any additional functionality.

However, the answer below regarding "Skype4Py" does answer the desired outcome, albeit with an additional tool. I will mark this as the answer if another is not forthcoming in a few weeks.

7

Very simple:

$> skype --help

Skype 4.3.0.37

Usage: skype [options]
Options:
  --dbpath=<path>       Specify an alternative path to store Skype data files.
                        Default: ~/.Skype
  --resources=<path>    Specify a path where Skype can find its resource files.
                        Default: /usr/share/skype
  --secondary           Start a secondary instance of Skype.
  --disable-api         Disable Skype Public API.
  --callto <nick>
  skype:<nick>?<action>
    [...]

Tested. It works. Not just with nicknames. Also with direct phone numbers:

$> skype --callto +494030001234

( this means: OPs main mistake was a colon instead of a space... )

| improve this answer | |
5

Yes, if you use Skype4Py.

I've created a simple callto.py script based on examples/callfriend.py from Skype4Py. It takes a phone number or a friend name from the skype roster as an argument. It's only working if skype is already launched.

Skype will ask you if you want to give API permission to Skype4Py.

Code follows:

#!python
# ---------------------------------------------------------------------------------------------
#  Python / Skype4Py example that takes a skypename or number from the commandline
# and calls it.
#

import sys
import Skype4Py

# This variable will get its actual value in OnCall handler
CallStatus = 0

# Here we define a set of call statuses that indicate a call has been either aborted or finished
CallIsFinished = set ([Skype4Py.clsFailed, Skype4Py.clsFinished, Skype4Py.clsMissed, Skype4Py.clsRefused, Skype4Py.clsBusy, Skype4Py.clsCancelled]);

def AttachmentStatusText(status):
   return skype.Convert.AttachmentStatusToText(status)

def CallStatusText(status):
    return skype.Convert.CallStatusToText(status)

# This handler is fired when status of Call object has changed
def OnCall(call, status):
    global CallStatus
    CallStatus = status
    print 'Call status: ' + CallStatusText(status)

# This handler is fired when Skype attatchment status changes
def OnAttach(status): 
    print 'API attachment status: ' + AttachmentStatusText(status)
    if status == Skype4Py.apiAttachAvailable:
        skype.Attach()

# Let's see if we were started with a command line parameter..
try:
    CmdLine = sys.argv[1]
except:
    print 'Missing command line parameter'
    sys.exit()

# Creating Skype object and assigning event handlers..
skype = Skype4Py.Skype()
skype.OnAttachmentStatus = OnAttach
skype.OnCallStatus = OnCall

# Starting Skype if it's not running already..
if not skype.Client.IsRunning:
    print 'Starting Skype..'
    skype.Client.Start()

# Attatching to Skype..
print 'Connecting to Skype..'
skype.Attach()

# Make the call
print 'Calling ' + CmdLine + '..'
skype.PlaceCall(CmdLine)

# Loop until CallStatus gets one of "call terminated" values in OnCall handler
while not CallStatus in CallIsFinished:
    pass
| improve this answer | |
  • Hey. This looks promising. Preliminary to installing skype4py and testing this out, can you tell me basically what this script will do? ie, I run what command to get what result? – emf Oct 11 '10 at 4:28
  • Put it in a file callto.py and you can run it with python callto.py <phone-number>. If your skype is online, it will start a call to <phone-number>. – jneves Oct 11 '10 at 11:12
  • Cool. This answers the desired outcome, but I am leaving this question to be open because I'd like to hear if this is possible via normal skype capabilities, the google results seemed to indicate so. However, thank you for the answer. – emf Oct 13 '10 at 20:07
  • 1
    Good luck. My own searches led me to believe it's something specific to the windows client, but I'd love to find out otherwise. – jneves Oct 15 '10 at 7:48
  • 1
    I don't think you can call phone number from the command line by just using skype. Every time you call skype from the command line, it will start a new skype instance. You can only pipe the username and password using --piped-login – Adi Roiban Nov 7 '10 at 21:39
2

You can write a bash script without using any API. Your usage is wrong. The correct way is:

skype --callto +14445551234

You can view more options by typing the following command in the terminal

skype --help
| improve this answer | |
0

Some years ago I wrote a little Python script do do this sort of thing.

This was for the Linux version of Skype. So I cannot be sure it will still work.

#!/usr/bin/python
import Skype4Py
import os

os.system("/usr/bin/skype")
# Create an instance of the Skype class.
skype = Skype4Py.Skype()

# Connect the Skype object to the Skype client.
skype.Attach()

# Obtain some information from the client and print it out.
print 'Your full name:', skype.CurrentUser.FullName

print 'Your contacts:'

for user in skype.Friends:

    print '    ', user.FullName

skype.PlaceCall("+44123456789")
| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.