twilio对调用者说了些什么(node.js)

时间:2016-02-12 17:28:08

标签: node.js twilio

嘿伙计们,我正在做一些事情并且有以下问题:

实际目标 - 如果有人打电话,我想让声音说:"试着联系某人"然后从数组中调出一些数字。 (不能那样做,因为我需要打电话)

ATM AIM - 这就是为什么我至少想对那些接听twilio电话的人说些什么,我可以肯定它会"会#34;工作

所以我通过发送twilio将通过localhost http服务器发送的URL(如果它接到一个电话)伪造了一个电话。到目前为止这么好,我的手机被叫了。但女人不说我想让她说什么......她说:谢谢你试试我们的文件然后等待音乐跟着。

AND:call.status是排队的,或者我没有在正确的地方找到它:/,记住我的手机响了,所以它至少应该响铃状态......

这就是我现在所拥有的:

requestHandler.js:

    var querystring = require("querystring");
var emergency = require("./emergency");
var twilio = require('twilio');

function callRequest(response) {
    var resp = new twilio.TwimlResponse();
    resp.say({voice:'woman'}, 'ahoy hoy! Testing Twilio and node.js');

    console.log("call incomming ! EMERGENCY 1 1 11 !");

    //emergency.handleIncommingCall();
    response.writeHead(200, {"Content-Type": "text/xml"});
    response.end(resp.toString());
}

exports.callRequest = callRequest;

server.js:

var http = require("http");
var url = require("url");

function start(route, handle) {
  function onRequest(request, response) {
    var pathname = url.parse(request.url).pathname;
    console.log("Request for " + pathname + " received.");
    route(handle, pathname, response, request);
  }

  http.createServer(onRequest).listen(1337);
  console.log("Server has started");
}

exports.start = start;
exports.http = http;

router.js:

function route(handle, pathname, response, request) {
  console.log("About to route a request for " + pathname);
  if (typeof handle[pathname] === 'function') {
    handle[pathname](response, request);
  }else{
    console.log("No request handler found for " + pathname);
    response.writeHead(404, {"Content-Type": "text/html"});
    response.write("404 Not found");
    response.end();
  }
}

exports.route = route;

index.js:

var server = require("./server");
var router = require("./router");
var requestHandler = require("./requestHandler");

var handle = { };
handle["/demo.twilio.com/welcome/voice/"] = requestHandler.callRequest;

server.start(router.route, handle);

emergency.js:

var twilio = require('twilio');
var accountSid = 'cant tell ya';
var authToken = "cant tell ya";
var client = require('twilio')(accountSid, authToken);
var firstCascadeNumber = "cant tell ya";
var secondCascadeNumber;
var privateNumber; //enter privateNumber here
var twiml = new twilio.TwimlResponse();

function handleIncommingCall (){
    //twilio should say : we contact team internet pls wait
    //twilio should make music
    call(1,firstCascadeNumber);
        //cb if staus ist nicht rangegangen call(2)
}

function call (cascade,cascadeNumber){
    client.makeCall({
        url: "http://demo.twilio.com/docs/voice.xml",
        to: cascadeNumber,
        from: "cant tell ya" 
    }, function(err, call) {
        if(err){
            console.log("ERROR:", err.message);
        }else{
            console.log("calling " + cascadeNumber);
            console.log("status: " + call.status);
            if(cascade == 1){
                //twiml.say("Hello this i a test. Thank you for calling.");
                console.log("should say what i want it to say ! god damn it ");
                console.log("status: " + call.status);
                //if user geht ran
                    //startConference()
                //if user geht nicht ran
                    //call(2,secondCascadeNumber)
            }else if(cascade == 2){
                //if user geht ran
                    //startConference()
                //if user geht nicht ran
                    //inform caller that no one is there
            }else{
                console.log("Error: cascade doesnt exsist");
            }
        }
    });
}

function openConference(call,from,to){
    //call.joinConference([roomName, option, cbOnEnd])
}

exports.handleIncommingCall = handleIncommingCall;

1 个答案:

答案 0 :(得分:1)

Twilio开发者传道者在这里。

你大部分时间都在那里,但你还没有完全设置你的应用程序。

当您拨打电话时,您获得的回叫仅指呼叫是否正确启动。这不是一个回调,你需要返回TwiML才能告诉Twilio如何处理这个电话。

相反,当Twilio进行呼叫时会发生什么,它会在您首先拨打电话时向您提供的URL发送HTTP请求。该URL应该在您的应用程序中,并且可供Twilio使用。

using Twilio with Node.js上的这篇博文应该能够向您展示我的意思,并为您提供一种在本地进行测试的好方法。

修改

感谢您更新代码。

你的问题是你没有告诉Twilio一旦连接就问你如何处理这个电话。

使用API​​创建呼叫时,您需要3个参数,要呼叫的号码,要呼叫的号码和URL。当Twilio连接呼叫时,它将向您提供的URL发出HTTP请求,询问下一步该做什么,这是您提供一些TwiML告诉Twilio如何处理呼叫的地方。

目前,您提供此网址:http://demo.twilio.com/docs/voice.xml

如果您点击那里的演示Twilio URL,您将看到正在返回的TwiML以及您听到不期望的消息的原因。由于该URL不是您的,因此您的应用程序无法控制该呼叫。

您需要发送一个指向应用程序中路由的URL,并且该路由需要使用您想要的TwiML进行响应。您可以使用名为ngrok的工具将本地服务器公开给Twilio,以便对此进行测试。

我建议您按照我之前链接的教程,本教程在using ngrok to text your incoming HTTP requests from Twilio和此tutorial on creating a click to call application with Twilio上进行。

对于您的申请,而不是试图处理" /demo.twilio.com/welcome/voice /"这不是你可以控制的URL,你应该处理,比如说:

 public void onBackPressed(){
        if(doubleBackToExitPressedOnce)
        {
            super.onBackPressed();
            return;
        }

        this.doubleBackToExitPressedOnce = true;
        Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show();

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                doubleBackToExitPressedOnce = false;

            }
        },2000);


    }

然后使用ngrok创建一个到您的应用程序的隧道,并将URL传递给var handle = { }; handle["/calls"] = requestHandler.callRequest; ,如下所示:

client.makeCall

如果有帮助,请告诉我。