1 个稳定版本

1.0.0 2021 年 7 月 9 日

#8 in #twilio

MIT 许可证

26KB
671

twilio-agnostic

twilio-agnostic 是一个以 twilio-rs 为基础的分支,使用 isahc 来实现异步运行时通用。它是一个用于与 Twilio 集成的 Rust 库,旨在提供一种 Rust 风格的接口,用于向 Twilio API 发送请求,以及验证、解析并回复 Twilio 发送到您服务器上的 webhook。

首先,您需要创建一个 Twilio 客户端

let client = twilio::Client::new(ACCOUNT_ID, AUTH_TOKEN);

现在,您可以使用该客户端来发送或接收 Twilio 请求。例如,要发送消息

client.send_message(OutboundMessage::new(from, to, "Hello, World!")).await;

或进行通话

client.make_call(OutboundCall::new(from, to, callback_url)).await;

当然,我们与 Twilio 的交互大部分是通过定义响应 Twilio webhook 的资源来实现的。为了对每个 SMS 发送定制回复,在您的服务器处理方法中

use hyper::{Body, Request, Response, Error};

async fn handle_request(req: Request<Body>) -> Result<Response<Body>, Error> {
    let client = ...;

	// Convert hyper body to bytes
    let (parts, body) = req.into_parts();
    let body_bytes = hyper::body::to_bytes(body).await?;
    let req = Request::from_parts(parts, body_bytes.as_ref());

    let response = client.respond_to_webhook(req, |msg: Message| {
        let mut t = Twiml::new();
        t.add(&twiml::Message {
            txt: format!("You told me: '{}'",
            msg.body.unwrap()),
        });
        t
    })
    .await;

	// Convert string body back to hyper
    Ok(response.map(|b| b.into()))
}

或者,为了对语音回调和消息回复

use hyper::{Body, Request, Response, Error};

async fn handle_request(req: Request<Body>) -> Result<Response<Body>, Error> {
    let client = ...;

	// Convert hyper body to bytes
    let (parts, body) = req.into_parts();
    let body_bytes = hyper::body::to_bytes(body).await?;
    let req = Request::from_parts(parts, body_bytes.as_ref());

    let response = client.respond_to_webhook(req, |msg: Call| {
        let mut t = Twiml::new();
        t.add(&twitml::Say {
            txt: "Thanks for using twilio-rs. Bye!".to_string(),
            voice: Voice::Woman,
            language: "en".to_string(),
        });
        t
    })
    .await;

	// Convert string body back to hyper
    Ok(response.map(|b| b.into()))
}

使用 respond_to_webhook 方法将首先使用您的 AuthToken 验证请求是否来自 Twilio。如果失败,将向客户端发送错误。接下来,将解析从传递的参数中解析的调用或消息。如果缺少必要的字段,将向客户端发送错误。最后,将解析的对象传递给您的处理方法,该方法必须返回一个 Twiml,该对象将用于回复 webhook。

依赖关系

~15–25MB
~383K SLoC