从控制台客户端进行自定义内容出站语音呼叫

本文关键字:语音 呼叫 自定义 控制台 客户端 | 更新日期: 2023-09-27 18:21:44

我正在尝试使用Twilio和C#进行传出呼叫。

我给出了(fromnumber,tonumber,twiliodemoll)作为启动的3个参数呼出电话。然后它使用默认的twilio演示语音内容。

现在我需要自定义语音内容属性和其他一些属性每次我触发启动出站呼叫方法

我已经浏览了Twilio文档,我没有找到任何好的选项来定制每次我发送请求时,都使用C#动态地从代码中获取内容。

我的客户端应用程序定期运行以验证是否有任何新消息,然后触发器initiateoutboundcall。

我没有任何自定义的URL来发布语音正在第三版中寻找的任何新XMLinitiateOutBoundCall的参数。

那么,是否需要一个外部域URL来从代码动态定制语音内容?如果没有,请提供我必须从C#控制台应用程序中执行的选项/示例。

我试着使用twimlets.com来回复通话中的自定义文本。对于文本更改,它可以很好地处理自定义文本。但我不确定twimlets.com/echo是否可以用于生产用途?请确认。Twimlets不支持我正在寻找的一些功能,比如Gather输入如用于出站呼叫的IVR消息。

使用Twilio Voice和C#客户端:

  1. 使用Twilio C#客户端进行语音请求?

    • 使用自定义语音内容拨打号码()。如果用户没有响应,请留下带有自定义语音内容的语音邮件()
    • 拨打带有自定义语音内容的号码()。如果用户在阅读后做出响应消息需要提供如下选项:
      • 按1可重复相同的语音信息
      • 按2确认对信息的操作
      • 按3可发送语音信息的短信息
  2. 需要获得每个语音呼叫/消息的响应吗?

    • 对于它发送的短信,我得到的回复是"排队",而不是发送的消息。根据短信发送成功与否,我需要更新一些标志。那么,我如何才能得到短信回复为"发送"。

        SMSMessage sms = twilio.SendSmsMessage(sFromNumber, sToNumber, sMessage);
        Console.WriteLine("SMS Status::::::" + sms.Status);
      
    • 同样,我需要语音呼叫的响应,一旦呼叫完成。但它是在"排队"。

        var call = twilio.InitiateOutboundCall(sFromNumber,sToNumber, url);  
        Console.WriteLine("Call Status" + call.Status);
      

所以请给我提供使用Twilio的选项。

如果您提供任何使用C#的示例,那就太好了。

从控制台客户端进行自定义内容出站语音呼叫

Twilio福音传道者。

您确实需要某种公共URL,一旦出站呼叫得到响应,Twilio就可以向其发出HTTP请求。这就是Twilio获得所需指令的方式,以便继续进行实时、进行中的呼叫。

正如您所指出的,有许多免费选项用于托管静态TwiML内容。Twimlets就是其中之一。Twimlbin.com是另一个。这两项服务都是免费的,都是很好的地方,至少可以开始原型设计或设置应用程序的简单MVP,但请记住,如果你预计会有大量流量,或者你需要在其中构建具有自己自定义逻辑的东西,你可能会想转移到其他地方。

其他东西可能是你自己的网站,作为Azure网站托管(你也可以免费获得)。移动到自己的网站也意味着你可以根据需要扩展它,你可以开始提供动态生成的TwiML,而不是像使用Twimlets或Twimlbin那样仅限于动态TwiML。

如果你想处理来自<Gather>的输入,但没有一个Twimlets满足你的需求,那么你可能需要查看Azure选项(或者某种托管网站,不一定是Azure)。这将允许您构建自己的自定义逻辑,以便处理呼叫者的输入,并基于该逻辑动态生成TwiML响应。

Twilio为TwiML生成和使用ASP.NET MVC构建Twilio应用程序提供了帮助程序库,您可以从NuGet获得这些帮助程序库。

比方说,你想使用ASP.NET MVC构建自己的自定义Twilio应用程序,并使用Azure网站托管它。在这种情况下,使用我们的帮助程序库,您可以在控制器中构建一个操作方法,该方法返回带有<Say><Gather>谓词的TwiML。类似于:

var response = new TwilioResponse();
response.Say("Hello World");
response.BeginGather(new { action="http://example.azurewebsites.com/gather/" } );
response.EndGather();

您可以提供执行该操作方法的URL作为initiaizeOutboundCall方法中的第三个参数,例如:

client.IntializeOutboundCall(FROM, TO, "http://example.azurewebsites.net");

一旦用户输入他们的输入,Twilio将请求您在<Gather>动词动作参数中指定的URL,并向您传递一个名为Digits的额外HTTP参数,您可以在您的动作方法中获取该参数,并在应用程序逻辑中使用:

public void Gather(string Digits) {
    var response = new TwilioResponse();
    response.Say("You pressed " + Digits);
    return TwiML(response);
}

要获取电话或短信的状态,您可以使用statuscalelback参数:

  • 短信:var result = client.SendMessage(FROM, TO, BODY, "http://example.azurewebsites.net/status");

  • 语音:var result = client.InitiateOutboundCall(FROM, TO, VOICEURL, "http://example.azurewebsites.net/status");

一旦到达消息或调用的最终状态,Twilio将向statusCallback URL发出HTTP请求。

希望能有所帮助。

从C#SDK的5.32版本开始,您可以将动态twml字符串传递到CallResource.Update()方法中,如下所示:

CallResource.Update(
   twiml: "<Response><Say>Custom Message Here</Say></Response>"
   pathSid: call.Sid);

甚至:

string customMessage = "<Response><Say>Custom Message Here</Say></Response>"
CallResource.Update(
    twiml: customMessage,
    pathSid: call.Sid);