#sms #messagebird

messagebird-async

Wrapper around the message bird SMS API

14 releases (4 breaking)

0.4.0 Jan 17, 2019
0.4.0-beta.1 Dec 27, 2018
0.3.1 Dec 1, 2018
0.3.0 Nov 25, 2018
0.0.4 Sep 18, 2018

#61 in Asynchronous

Download history 3/week @ 2018-12-14 92/week @ 2018-12-21 3/week @ 2018-12-28 19/week @ 2019-01-04 14/week @ 2019-01-11 19/week @ 2019-01-18 3/week @ 2019-01-25 5/week @ 2019-02-01 2/week @ 2019-02-08 16/week @ 2019-02-22 28/week @ 2019-03-01 1/week @ 2019-03-08 1/week @ 2019-03-15 319/week @ 2019-03-22

124 downloads per month

MIT/Apache

89KB
2.5K SLoC

messagebird-async

Build Status Crates.io docs.rs License

MessageBird is a service for sending SMS at its core https://www.messagebird.com/

Example

Send a SMS Message

Sending a sms to a specified target is implemented in examples/send.rs:

export MESSAGEBIRD_ACCESSKEY=abio8usad..dfahdk
export SMS_RECIPIENT=1234556

The SMS_RECIPIENT should NOT contain leading zeros nor the +. The countrycode is still necessary.

cargo run --example send

or copy & paste:

#[macro_use]
extern crate log;
extern crate env_logger;
extern crate futures;
extern crate messagebird_async;
extern crate tokio_core;

use futures::future::Future;
use messagebird_async::errors::*;
use messagebird_async::sms;
use messagebird_async::sms::*;

fn main() -> Result<(), MessageBirdError> {
    env_logger::init();

    let msisdn_str = std::env::var("SMS_RECIPIENT".to_string())
        .expect("SMS_RECIPIENT should contain the number without prefix");
    let msisdn: Msisdn = Msisdn::from_str(msisdn_str.as_str())
        .expect("SMS_RECIPIENT did not contain a valid number");

    info!("example: sending a message");
    let sendable = sms::send::SendParameters::builder()
        .payload(
            PayloadType::Sms,
            Payload::Text("fun".to_string()),
            PayloadEncoding::Auto,
        )
        .origin(AlphaNumeric("inbox".to_string()).into())
        .add_recipient(msisdn.into())
        //.add_recipient(Recipient::new())
        .build();

    let accesskey = AccessKey::from_env()?;
    let fut = RequestSend::new(&sendable, &accesskey);
    let fut = fut.and_then(|sent_msg: Message| {
        info!("{:?}", sent_msg);
        futures::future::ok(())
    });
    let mut core = tokio_core::reactor::Core::new().unwrap();
    core.run(fut.map(|_| ()))
}

Features

Currently the planned features only include to send SMS and query SMS stati.

RoadMap

  • serde impl for all relevant datatypes
  • roundtrip decode encode tests
  • use crate serde_plain for trait ToString and trait FromStr for objects which are used in query filters and payload www urlencode
  • future for SMS sending and retrieval based on hyper.rs
  • send SMS example using tokio as executor
  • future for listing SMS
  • listing SMS examples using tokio as executor
  • write documentation
  • future for notification callback on SMS reception
  • callback example using hyper (and thus imlicitly tokio) as executor
  • convert all service API return errors to typed errors
  • improve error information content
  • create sms callback notification test based on the receive example running on clever cloud (the creators of sozu)

MessageBird APIs

* = not planned, unless external contributors step up

License

MIT or Apache-2.0

If neither of those work for you, feel free to request so via a github issue.

Donations

Since I am not affiliated with MessageBird in any kind (other than being their customer) I'd be delighted if you'd leave a tipp to keep the automated send/receive routines going.

LiberaPayButton

Dependencies

~18MB
~442K SLoC