NAME
Mojolicious::Plugin::Nexmo - Asynchronous (and synchronous) SMS and TTS (Text To Speech) sending with Nexmo provider.
VERSION
0.90
SYNOPSIS
plugin 'Nexmo' => {
api_key => 'n3xm0rocks',
api_secret => '12ab34cd',
from => 'YourCompanyName', # This options are global, you don't need
lg => 'de-de' # to declare them in every request
};
Simple blocking example
use Mojolicious::Lite
plugin 'Nexmo' => {
api_key => 'n3xm0rocks',
api_secret => '12ab34cd'
};
# /block ? mode=SMS & phone_number=447525856424 & message=Hello!
get '/block' => sub {
my $self = shift;
my $mod = $self->param('mode');
my $tel = $self->param('phone_number');
my $mes = $self->param('message');
$self->render(text => "$tel : $mes");
my ($err, $err_mes, $info) = $self->nexmo(
mode => $mod,
to => $tel,
text => $mes
);
};
app->start;
Nonblocking example
use Mojolicious::Lite;
plugin 'Nexmo' => {
api_key => 'n3xm0rocks',
api_secret => '12ab34cd'
};
# /nonblock ? mode=SMS & phone_number=447525856424 & message=Hello!
get '/nonblock' => sub {
my $self = shift;
my $mod = $self->param('mode');
my $tel = $self->param('phone_number');
my $mes = $self->param('message');
$self->render(text => "$tel : $mes");
$self->nexmo(
mode => $mod,
to => $tel,
text => $mes,
sub {
my ($self, $err, $err_mes, $info) = @_;
# ...
}
);
};
app->start;
Nice example with Mojo::IOLoop
use Mojolicious::Lite;
use Mojo::IOLoo;
plugin 'Nexmo' => {
api_key => 'n3xm0rocks',
api_secret => '12ab34cd'
};
# /delay ? mode=SMS & phone_number=447525856424 & message=Hello!
get '/delay' => sub {
my $self = shift;
my $mod = $self->param('mode');
my $tel = $self->param('phone_number');
my $mes = $self->param('message');
Mojo::IOLoop->delay(
sub {
my $delay = shift;
$self->nexmo(
mode => $mod,
to => $tel,
text => $mes,
$delay->begin # CallBack
);
return $self->render(text => "$tel : $mes");
},
sub {
my ($delay, $err, $err_mes, $info) = @_;
# ...
}
);
};
app->start;
DESCRIPTION
This plugin provides an easy way to send SMS and TTS with Nexmo API.
OPTIONS
You can redefine global options:
plugin 'Nexmo' => {
api_key => 'n3xm0rocks',
api_secret => '12ab34cd',
from => 'YourCompanyName' # Global option
};
# ...
$self->nexmo(
mode => $mod,
to => $tel,
text => $mes,
from => 'NewCompanyName' # 'NewCompanyName' will be used in this response
);
# ...
Or you can disable global options by setting them in undef
:
plugin 'Nexmo' => {
api_key => 'n3xm0rocks',
api_secret => '12ab34cd',
lg => 'de-de' # Global option
};
# ...
$self->nexmo(
mode => $mod,
to => $tel,
text => $mes,
lg => undef # lg will be missed in this response
);
# ...
Mojolicious::Plugin::Nexmo supports the following options:
- api_key
- api_secret
-
Your Nexmo API key & API secret. This two options are required, you should always declare it globally:
plugin 'Nexmo' => { api_key => '...', api_secret => '...' # ... }
- mode
-
Can be 'SMS' or 'TTS'. Depending on mode there are different options:
SMS options
See detailed description of SMS options at https://docs.nexmo.com/index.php/sms-api/send-message.
$self->nexmo(
mode => 'SMS',
# options
);
TTS options
See detailed description of TTS options at https://docs.nexmo.com/index.php/voice-api/text-to-speech.
$self->nexmo(
mode => 'TTS',
# options
);
- to
- from
- text
- lg
- voice
- repeat
- machine_detection
- machine_timeout
- callback
- callback_method
Asynchronous and synchronous modes
For asynchronous mode you should pass a callback as last parameter:
$self->nexmo(
mode => 'SMS',
# options
sub {
my ($self, $err, $err_mes, $info) = @_;
# ...
}
);
If a callback is missed, plugin works in synchronous mode:
my ($err, $err_mes, $info) = $self->nexmo(
mode => 'SMS',
# options
);
RETURN VALUES
Error code ($err
)
Values:
- 0
-
Success.
- -1
-
Network error.
- 1 - 99
-
Nexmo error response codes.
See detailed description of SMS response codes at https://docs.nexmo.com/index.php/sms-api/send-message#response_code.
See detailed description of TTS response codes at https://docs.nexmo.com/index.php/voice-api/text-to-speech#tts_response_code.
IT'S IMPORTANT: If you use 'SMS' mode, message can be divided into several parts. If all parts were sent succesfully, then 0 is returned. Otherwise $err
will contain error code of first failed part. If you need error codes of all parts, use $info
hash.
Error message ($err_mes
)
Additional information ($info
)
Hash that corresponds to the Nexmo JSON response.
DEBUG
Set MOJOLICIOUS_NEXMO_DEBUG
environment variable to turn Nexmo debug on.
$ MOJOLICIOUS_NEXMO_DEBUG=1 morbo test
SEE ALSO
AUTHOR
Andrey Khozov, <avkhozov@googlemail.com>
CORE DEVELOPERS
Georgiy Alexeew, <alexeew.georgiy@gmail.com>
Alexey Stavrov, <logioniz@yandex.ru>
COPYRIGHT AND LICENSE
Copyright (C) 2014, Andrey Khozov
This program is free software, you can redistribute it and/or modify it under the terms of the Artistic License version 2.0.