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

时间:2014-09-12 16:13:03

标签: c# twilio twilio-click-to-call

我正在尝试使用Twilio和C#拨打电话。

我将(来自数字,重量,twiliodemourl)作为3个参数用于启动 出站呼叫。然后它使用默认的twilio演示语音内容。

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

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

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

我没有任何自定义网址来发布语音正在寻找的第三个新XML initiateOutBoundCall的参数。

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

我尝试使用twimlets.com来回显要在通话中说话的自定义文字。 对于文本更改,它可以正常使用自定义文本。但我不确定twimlets.com/echo是否可以用于生产用途?请确认。 Twimlets不支持我正在寻找的一些功能,如收集输入 比如出站呼叫的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);
      
  3. 所以请为我提供使用Twilio的选项。

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

2 个答案:

答案 0 :(得分:1)

Twilio福音传教士在这里。

您确实需要某种公共URL,Twilio可以在应答出站呼叫后发出HTTP请求。这就是Twilio如何获得所需的指令,以便继续进行实时的正在进行的呼叫。

正如您所指出的,托管静态TwiML内容有许多免费选项。 Twimlets就是其中之一。 Twimlbin.com是另一个。这两种服务都是免费的,至少可以开始进行原型设计或设置应用程序的简单MVP,但请记住,如果您预计会有大量流量,或者您需要使用自己的自定义逻辑构建内容,那么#39; ll可能想要转向别的东西。

其他东西可能是您自己的网站托管,如Azure网站(您也可以免费获得)。移动到您自己的网站也意味着您可以根据需要进行扩展,并且您可以开始提供动态生成的TwiML,而不仅仅局限于动态TwiML,因为您基本上使用的是Twimlet或Twimlbin。

如果您想处理来自<Gather>的输入并且没有任何Twimlet满足您的需求,那么您可能需要查看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);
}

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

  • 短信: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请求。

希望有所帮助。

答案 1 :(得分:0)

从C#SDK的5.32版本开始,您可以将动态twiml字符串传递到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);
相关问题