0

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

我将 (fromnumber, tonumber, twiliodemourl) 作为 3 个参数用于发起出站呼叫。然后它使用默认的 twilio 演示语音内容。

现在我每次触发发起外呼方法时都需要自定义语音内容属性和其他一些属性

我浏览了 Twilio 文档,但没有找到任何好的选择,可以在每次发送请求时使用 C# 从代码中动态自定义内容。

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

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

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

我尝试使用 twimlets.com 来回显自定义文本以在通话中发言。对于文本更改,它适用于自定义文本。但我不确定 twimlets.com/echo 是否可以用于生产用途?请确认。Twimlets 不支持我正在寻找的某些功能,例如收集输入,例如 IVR 消息以进行出站呼叫。

使用 Twilio Voice 和 C# 客户端:

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

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

    • 对于它发送的短信,我得到的响应是“排队”而不是发送的消息。根据短信发送成功与否,我需要更新一些标志。那么我如何才能将 SMS 响应设为“已发送”。

        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# 的示例示例,那就太好了。

4

2 回答 2

1

Twilio 布道者在这里。

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

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

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

如果您想处理来自<Gather>Twimlet 的输入但没有一个 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>verbs 操作参数中指定的 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 请求。

希望有帮助。

于 2014-09-13T01:11:53.233 回答
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);
于 2019-09-13T15:32:58.643 回答