Twilio - 使用 C# 获取传入的 phone 号码
Twilio - Get the incoming phone number with C#
在我的 C# asp.net 核心网络 api 项目中,我使用网络钩子从我的 Twilio phone 号码捕获传入的语音呼叫。除了处理电话外,我还想通过电子邮件通知管理员来电。为此,我需要获取传入的 phone 号码。我该怎么做?
这是我的代码:
[HttpPost("incomingVoice")]
public async Task<IActionResult> IncomingVoice(string digits)
{
var response = new VoiceResponse();
if (!string.IsNullOrEmpty(digits))
{
... Handle the user selection
}
response.Append(new Gather(numDigits: 1).Say("Welcome to ...! For sales, press 1. For marketing, press 2. For support press 3", voice: "alice", language: "en-GB"));
//handle the lack of response
response.Say("Please leave a message after the tone. Hang up when finished.", voice: "alice", language: "en-GB");
response.Record();
response.Hangup();
string phoneNumber = <??? INCOMING PHONE NUMBER ???>
IRestResponse mgresp = await SendMGMessage(phoneNumber);
return Content(response.ToString(), "application/xml");
}
谢谢。
经过一番挖掘,我发现了这个 link:https://www.twilio.com/docs/api/twiml/twilio_request
其中规定了TwiML请求包含的参数种类繁多。从那里我能够将 phone 号码提取为:
string phoneNumber = Request.Form["From"];
希望能为您节省一些研究时间。
除了 之外,您还可以像这样打印出所有可用值...
[HttpGet]
public TwiMLResult Welcome()
{
var lst = Request.QueryString.AllKeys
.Select(key => new {Name = key.ToString(), Value = Request.QueryString[key.ToString()]})
.ToArray();
foreach (var v in lst)
{
_logger.Info(JsonConvert.SerializeObject(v, Formatting.Indented));
}
...
}
NLog 示例输出:
2019-05-07 17:00:36.7601|INFO|TwilioMvcDemo.Controllers.IvrController|{
"Called": "+15555555555",
"ToState": "CA",
"CallerCountry": "US",
"Direction": "inbound",
"ApiVersion": "2010-04-01",
"CallStatus": "ringing",
"From": "+15555554444",
"AccountSid": "CdEf567",
"CalledCountry": "US",
"CallerCity": "MARS OUTPOST",
...
}
我遇到了类似的问题,但我正在尝试使用带有 .NET 6 的 Minimal Web API 来解决这个问题。
Twilio 有这个很棒的教程:
https://www.twilio.com/blog/sms-voice-dotnet-6-minimal-api
但它没有回答如何从 webhook 内部访问传入的 phone 号码。
我不确定如何将 Microsoft.AspNetCore.HttpRequest 对象转换为首选的 Twilio.AspNet.Common.SmsRequest 对象。
以下代码似乎有效,但欢迎提出更好方法的建议。
//app.MapPost("/smshandler", (SmsRequest incomingMessage) => SmsHandler(incomingMessage)); // does not work
app.MapPost("/smshandler", (HttpRequest request) => SmsHandler(request));
private static IResult SmsHandler(HttpRequest request)
{
try
{
string from = request.Form["From"];
string body = request.Form["Body"];
DoWork(from, body);
return Results.Ok();
}
catch (Exception ex)
{
return Results.Problem(ex.Message);
}
}
在我的 C# asp.net 核心网络 api 项目中,我使用网络钩子从我的 Twilio phone 号码捕获传入的语音呼叫。除了处理电话外,我还想通过电子邮件通知管理员来电。为此,我需要获取传入的 phone 号码。我该怎么做?
这是我的代码:
[HttpPost("incomingVoice")]
public async Task<IActionResult> IncomingVoice(string digits)
{
var response = new VoiceResponse();
if (!string.IsNullOrEmpty(digits))
{
... Handle the user selection
}
response.Append(new Gather(numDigits: 1).Say("Welcome to ...! For sales, press 1. For marketing, press 2. For support press 3", voice: "alice", language: "en-GB"));
//handle the lack of response
response.Say("Please leave a message after the tone. Hang up when finished.", voice: "alice", language: "en-GB");
response.Record();
response.Hangup();
string phoneNumber = <??? INCOMING PHONE NUMBER ???>
IRestResponse mgresp = await SendMGMessage(phoneNumber);
return Content(response.ToString(), "application/xml");
}
谢谢。
经过一番挖掘,我发现了这个 link:https://www.twilio.com/docs/api/twiml/twilio_request
其中规定了TwiML请求包含的参数种类繁多。从那里我能够将 phone 号码提取为:
string phoneNumber = Request.Form["From"];
希望能为您节省一些研究时间。
除了
[HttpGet]
public TwiMLResult Welcome()
{
var lst = Request.QueryString.AllKeys
.Select(key => new {Name = key.ToString(), Value = Request.QueryString[key.ToString()]})
.ToArray();
foreach (var v in lst)
{
_logger.Info(JsonConvert.SerializeObject(v, Formatting.Indented));
}
...
}
NLog 示例输出:
2019-05-07 17:00:36.7601|INFO|TwilioMvcDemo.Controllers.IvrController|{
"Called": "+15555555555",
"ToState": "CA",
"CallerCountry": "US",
"Direction": "inbound",
"ApiVersion": "2010-04-01",
"CallStatus": "ringing",
"From": "+15555554444",
"AccountSid": "CdEf567",
"CalledCountry": "US",
"CallerCity": "MARS OUTPOST",
...
}
我遇到了类似的问题,但我正在尝试使用带有 .NET 6 的 Minimal Web API 来解决这个问题。
Twilio 有这个很棒的教程:
https://www.twilio.com/blog/sms-voice-dotnet-6-minimal-api
但它没有回答如何从 webhook 内部访问传入的 phone 号码。
我不确定如何将 Microsoft.AspNetCore.HttpRequest 对象转换为首选的 Twilio.AspNet.Common.SmsRequest 对象。
以下代码似乎有效,但欢迎提出更好方法的建议。
//app.MapPost("/smshandler", (SmsRequest incomingMessage) => SmsHandler(incomingMessage)); // does not work
app.MapPost("/smshandler", (HttpRequest request) => SmsHandler(request));
private static IResult SmsHandler(HttpRequest request)
{
try
{
string from = request.Form["From"];
string body = request.Form["Body"];
DoWork(from, body);
return Results.Ok();
}
catch (Exception ex)
{
return Results.Problem(ex.Message);
}
}