1 个稳定版本
1.0.0 | 2021 年 7 月 9 日 |
---|
#8 in #twilio
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