c# - Twilio MVC,我如何使电话号码/消息动态
问题描述
我正在使用视觉工作室。这适用于 Asp.net Web 应用程序(.net 框架)
该解决方案作为 webcore 应用程序也是可以接受的。
我希望能够动态输入消息信息和电话号码,但我不知道如何“暂停”程序以便发生这种情况。我了解动态部分,并且可以使用 Javascript 来做到这一点,
基本上我想要的是一个应用程序,它会打开一个网页,最终用户在其中输入收件人号码和消息,然后单击发送发送。
我认为这很简单,但不是那么简单:(
我有 C# 的快速启动代码 -
// Install the C# / .NET helper library from twilio.com/docs/csharp/install
using System;
using Twilio;
using Twilio.Rest.Api.V2010.Account;
class Program
{
static void Main(string[] args)
{
// Find your Account Sid and Token at twilio.com/console
const string accountSid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
const string authToken = "your_auth_token";
TwilioClient.Init(accountSid, authToken);
var message = MessageResource.Create(
body: "Join Earth's mightiest heroes. Like Kevin Bacon.",
from: new Twilio.Types.PhoneNumber("+15017122661"),
to: new Twilio.Types.PhoneNumber("+15558675310")
);
Console.WriteLine(message.Sid);
}
}
解决方案
好的,我假设您要发送短信。此外,我将假设您使用的是 Asp.Net MVC。Twilio 语音稍微复杂一些,因为 Twilio 会多次回调以获取语音脚本和更新状态。如果您需要电话树行为,则更复杂。
SMS 回调也不止一次发生,但它们一遍又一遍地调用相同的回调 URL,没有什么特别的。
流程应如下所示:Web 界面 -> Asp.Net MVC 控制器操作 -> 数据库 -> Twilio
我将把 web 界面留给你,并给出一些后端的例子。
您将需要一个数据库,其中包含一个表“消息”
消息应该有这些列(至少,您可能需要更多):
message_id_pk
twilio_sid(可为空)
message_content (160个字符限制,如果你想把消息保存在一个SMS段中,这需要考虑运营成本)
状态(可为空)
收件人电话
控制器动作:
[Authorize] //assuming you'll want to have users authenticate before they can send the sms
[RequireHttps]
public async Task<ActionResult> SendSMS(
[Bind(Include = "message_id_pk, message_content, recipient_phone"] Message message)
{
db.Messages.Add(message);
TwilioSmsSender.SendSMS(message);
return RedirectToAction("Success");
}
在 TwilioSender.cs
public static void SendSMS(Message message)
{
const string accountSid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
const string authToken = "your_auth_token";
TwilioClient.Init(accountSid, authToken);
var message = MessageResource.Create(
body: message.message_content,
from: new Twilio.Types.PhoneNumber("+15017122661"), //note: you can let your Twilio Messaging service handle the phone number, I recommend you look into that
to: new Twilio.Types.PhoneNumber(message.recipient_phone)
statusCallback: new Uri(TwilioCallBackController.SMSCallBackURL)
);
message.twilio_sid = message.Sid;
db.SaveChanges();
}
在 TwilioCallBackController.cs 中(您需要在此处处理来自 Twilio 的回调)
[ValidateTwilioRequest]
public ActionResult TwilioSMSCallback()
{
string sid = Request.Form["SmsSid"];
List<Message> msg = db.Message.Where(x=> x.twilio_sid == sid).ToListAsync();
if(msg.Count > 0)
{
Message message = msg.First();
message.status = Request.Form["SmsStatus"];
}
}
推荐阅读
- apache-flink - ProcessWindowFunction 中的 Apache Flink 状态
- angularjs - 即使我返回上一页,如何保持表单数据填写?
- ruby-on-rails - Ruby on Rails - ActiveRecord 在哪里
- python - 如何使用 Python 提取 JSON 格式的数据
- python - VS Code 中 python 的控制线换行
- html - 无法连接到 Firebase(在 Web 服务器上使用预览)
- python - 将十六进制数字转换为反转的字符字符串
- css - Bootstrap 4:selectpicker 1.13 不适合所选选项的内容
- html - 如何使用 css 反转 html 家谱布局?
- regex - 如何使用正则表达式替换非数字字符