1

我正在尝试以此为指导在 twiml 中设置一个简单的语音邮件系统,

期望的行为:

来电时,连接到 SIP。如果 20 秒后无人接听,播放 mp3、录音、电子邮件。

<Response>
    <Dial action="/voicemail" timeout="20">
        <Sip>
            username@endpoint.sip.us1.twilio.com
        </Sip>
      </Dial>
  </Response>

语音信箱功能如下

<Response>
    <Play>https://www.example.com/voicemail.mp3</Play>
    <Record transcribe="true" transcribeCallback="http://twimlets.com/voicemail?Email=somebody@somedomain.com" action="/hangup"/>
</Response>

一切正常,除了呼叫者被转移到语音信箱,无论是否接听电话。

如果呼叫完成,我缺少什么可以提供挂断逻辑?

由于没有条件逻辑运算符,这可以纯粹在 twiml 中完成吗?

提前感谢您提供的任何帮助!

4

1 回答 1

1

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

正如您所说,TwiML (XML) 中没有条件,纯 TwiML 无法实现这一点。

您需要做的是在/voicemail端点内检查呼叫是“完成”还是“应答”。DialCallStatus您可以通过检查参数来做到这一点。如果是这样,那么您可以挂断电话,否则您想继续使用语音信箱。

您可以使用 Node.js 和Twilio 函数来执行此操作,如下所示:

exports.handler = function(context, event, callback) {
    const twiml = new Twilio.twiml.VoiceResponse();
    if (event.DialCallStatus === 'completed' || event.DialCallStatus === 'answered') {
        twiml.hangup();
    } else {
        twiml.play("https://www.example.com/voicemail.mp3");
        twiml.record({
            transcribe: true,
            transcribeCallback: "http://twimlets.com/voicemail?Email=somebody@somedomain.com",
             action: "/hangup"
        });
    }
    callback(null, twiml);
};

让我知道这是否有帮助。

于 2018-10-22T21:28:34.140 回答