首页 > 解决方案 > 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);
}
}

标签: c#

解决方案


好的,我假设您要发送短信。此外,我将假设您使用的是 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"];
        }
    }

推荐阅读