1 个稳定版本

1.0.3 2023年11月2日

#9#twilio

MIT 协议

26KB
662 行(不包括注释)

twilio-rs

twilio-rs 是一个用于与 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 的资源来完成的。为了对每个短信进行自定义回复,在您的服务器处理方法中

use hyper::{Body, Request, Response};
use std::convert::Infallible;

async fn handle_request(req: Request<Body>) -> Result<Response<Body>, Infallible> {
    let client = ...;
    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;
    Ok(response)
}

或者,对语音回调进行消息回复

use hyper::{Body, Request, Response};
use std::convert::Infallible;

async fn handle_request(req: Request<Body>) -> Result<Response<Body>, Infallible> {
    let client = ...;
    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;
    Ok(response)
}

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

respond_to_webhook 方法设计用于在 Hyper RequestResponse 上工作。Hyper 还用于内部请求 Twilio 的 API。

依赖项

~12–26MB
~346K SLoC