The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

SMS::Send::Wadja - Non-regional SMS::Send driver for the http://wadja.com free global SMS service, using their API.

VERSION

Version 1.0

SYNOPSIS

    use SMS::Send;

    my $sender = SMS::Send->new('Wadja',
        _key      => 'my-wadja-API-key'
    );

    my $sent = $sender->send_sms(
        to        => '+40-722-123456',    # recipient
        text      => "Hello, world!",     # the text of the message to send
        _from     => 'me@mydomain.com',   # optional "from" address
    );

    # Did it send to Wadja OK?
    if ( $sent ) {
        print "Sent test message\n";
    } else {
        print "Test message failed\n";
    }

DESCRIPTION

SMS::Send::Wadja is an SMS::Send driver for the http://wadja.com free global SMS service, using their API. To apply for an API key, sign up for an account (it requires e-mail confirmation, but no phone number confirmation), then request an API key from http://www.wadja.com/api/get-started.aspx. In theory, Wadja could also be screen scraped so that you could send text messages via the web interface, without having to apply for an API key. However, applying is free, and the Wadja site is JavaScript-heavy and slow, which is why I didn't spend time implementing the screen scraping method.

I've seen Wadja deliver text messages successfully to the UK (Vodaphone), Germany (T-Mobile (D1) and Vodafone), Philippines (Global Telecom), Poland (Orange, Polkomtel), Romania (Orange), and Russia (BeeLine), but not to the US (AT&T Wireless), despite the official coverage claim at http://us.wadja.com/applications/compose/coverage.aspx. However, Wadja provides a delivery status function (which happens to be currently broken via their API (see http://us.wadja.com/applications/forum/replies.aspx?id=643) but works via the web UI).

Wadja offers two types of APIs:

  • Free SMS API - free, limited to 3 messages per day and 90 characters per message (the remaining characters will be used for ad delivery or Wadja branding)

  • SMS Plus API - requires topping up credit (in EUR), and doesn't deliver ads (thus you get the full 160 characters).

This module has only been tested with the Free SMS API but will probably work with the SMS Plus API as well.

METHODS

new

    # Create a new sender using this driver
    my $sender = SMS::Send->new('Wadja',
        _key    => 'your_wadja_API_key'            # required
        _ua     => $your_own_LWP_UserAgent_object  # useful if you want to pass proxy parameters
    );

send_sms

This method is actually called by SMS::Send when you call send_sms on it.

    my $sent = $sender->send_sms(
        text => 'Messages have a limit of 90 chars',
        to   => '+44-1234567890',
        _from => 'custom From string'  # works only in the SMS Plus API
    );

Unicode messages appear to be handled correctly and are still limited to 90 characters.

Returns a hashref with the following keys:

    price
    batchID - used for tracking the delivery status

delivery_status

    # Get the delivery status of the last message we sent
    my $status = $sender->delivery_status;

    # Get the delivery status for an arbitrary message we sent in the past,
    # based on an anonymous hashref with a 'batchID' key
    my $sent = $sender->send_sms(...);
    my $status = $sender->delivery_status($sent);
    
    # Or just pass a {batchID => nnn}
    my $batchID = 2180419;
    my $status = $sender->delivery_status({batchID => $batchID});

    if ($status->{error}) {
        print "Can't check delivery: ", $status->{error}, "\n";
    } else {
        print "Delivery status of " . $batchID . ": ", $status->{status}, ' at ', $status->{completed};
    }

If called with no parameters then the most recent message sent out is checked. You can also provide an anoynmous hash with a batchID key set to the value of the batchID returned by a previous "send_sms" call.

Returns a hashref, of which the 'status' key indicates:

    DELIVRD Delivered to destination
    ACCEPTD Accepted by network operator
    EXPIRED Validity period has expired
    UNDELIV Message is undeliverable
    UNKNOWN Message is in unknown state
    REJECTD Message is in rejected state

BUGS AND LIMITATIONS

Wadja's API lets you send a text message to multiple recipients at once, by delimiting the phone numbers with commas. However, SMS::Send strips commas from the "to" parameter, which will obviously break things. I filed a bug against SMS::Send at http://rt.cpan.org/Ticket/Display.html?id=45868.

The official coverage claim is at http://us.wadja.com/applications/compose/coverage.aspx but beware that I could not send text messages successfully to AT&T Wireless in the US despite what the coverage claims.

Please report any bugs or feature requests for this module to bug-sms-send-wadja at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=SMS-Send-Wadja. For patches, please send whole files, not diffs.

AUTHOR

Dan Dascalescu, http://dandascalescu.com

ACKNOWLEDGEMENTS

Thanks to Adam Kennedy <adamk@cpan.org>, http://ali.as/ for writing SMS::Send. The Wadja API is described at http://www.wadja.com/api/docs/SMS_HTTP_API.pdf (as of 2010-01-25, the base URLs are wrong. s/sms/www/g.

Many thanks to my friends worldwide for assisting with QA.

LICENSE AND COPYRIGHT

Copyright (C) 2009-2010 Dan Dascalescu, http://dandascalescu.com. All rights reserved.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.