嘿伙计们,我正在做一些事情并且有以下问题:
实际目标 - 如果有人打电话,我想让声音说:"试着联系某人"然后从数组中调出一些数字。 (不能那样做,因为我需要打电话)
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;
答案 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
如果有帮助,请告诉我。