使用 Twilio 的客户端到客户端 VoIP 语音 SDK 调用

Client-to-Client VoIP Voice SDK Call with Twilio

我正在尝试使用 Twilio 的语音 SDK 进行 VoIP 客户端到客户端呼叫。到目前为止,我可以让我的 iPhone 拨我的 Android phone,反之亦然,但只能听到自动语音说“to”客户的身份,而不是 phone 能够彼此交谈。我在这里遗漏了什么吗?

对于这两个平台,我只使用 Twilio 提供的示例存储库。对于服务器,我使用的是 Twilio 的示例 NodeJS 无服务器代码。

// /place-call

...

var url = 'https://' + context.DOMAIN_NAME + '/incoming';
const client = context.getTwilioClient();

client.calls.create({
    url: url,
    to: 'client:' + to,
    from: event.From,
}, function(err, result) {    
    // End our function
    if (err) {
        callback(err, null);
    } else {
        callback(null, "<Response/>");
    }
});

...

// /incoming

...

const toClient = (event.To).replace('client:', '');
const twiml = new Twilio.twiml.VoiceResponse();

const dial = twiml.dial();
const client = dial.client();
client.identity(toClient);
callback(null, twiml.toString());

...

当我查看日志时,我看到“/incoming”端点返回:

<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <Dial>
        <Client>
            <Identity>android_user</Identity>
        </Client>
    </Dial>
</Response>

这里是 Twilio 开发人员布道者。

问题是您将 TwiML 作为字符串返回,然后 Twilio Functions 将响应视为 Content-Type text/plain。然后 Twilio 读取内容,就好像它是 <Say>.

虽然这很容易修复。变化:

callback(null, twiml.toString());

callback(null, twiml);

Twilio Functions 将识别 twiml 变量的类型为 VoiceResponse,并将 Content-Type 设置为 text/xml,您的应用程序将按预期工作。