Twilio twiml 记录操作返回空记录,回调返回空调用方参数



以下twiml几年前用于记录通话:

<?php
header("content-type: text/xml");
?>
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Say voice="woman" language="en-gb">This call may be recorded for quality assurance.</Say>
<Dial record='true' action='https://URL.TLD/TWIML/record.php'  method='post'>+15555555555</Dial>
</Response>

现在它返回一个空的录制链接。重温Twilio文档使我发现录音可能没有立即准备好并使用recordingStatusCallback

<Dial record='true' action='https://URL.TLD/TWIML/do-something.php' recordingStatusCallback = 'https://the-url-thats-supposed-to-do-something-with-the-actual-recording.php'  method='post'>+15555555555</Dial>

我遇到的问题是recordingStatusCallback没有说电话来自哪个号码。我尝试将其保存到$_SESSION变量中,但 Twilio 在请求回调 URL 时没有传递会话 ID。

Twilio 确实传递了一个CallSid,可以将其写入文件或数据库,然后拉取,将 Sid 与呼叫者的电话号码匹配,但是没有其他方法可以将呼叫者的电话号码与实际录音联系起来吗?

我想到的解决方案很慢。我可以简单地将调用方 ID 作为 GET 参数传入 recordingStatusCallback 中,如下所示:

<Dial record='true' action='https://URL.TLD/TWIML/do-something.php' recordingStatusCallback = 'https://the-url-thats-supposed-to-do-something-with-the-actual-recording.php?caller=<?=$_REQUEST['Caller']?>'  method='post'>+15555555555</Dial>

(在我的情况下,它是php,但你用什么语言生成Twiml并不重要。

我以前不必这样做。Twilio 使用尊重会话 Cookie,并在某一时刻将准备好的录制 URL 发送到操作 URL。

您需要使用呼叫资源和 CallSID 来获取呼叫者号码。

获取呼叫资源

我对Twilio尊重会话cookie没有问题。它尊重他们。您应该能够在首次连接时设置会话 ID,在会话中存储变量,并在与特定调用关联的帖子/请求期间随时访问它们。

我遇到此问题的时候是当我在一个脚本中遗漏了会话初始化,并且之前创建的会话不再可用于当前正在运行的脚本。

我处理这个问题的方法是创建一个初始化会话的方法,发送一个cookie,如果再次调用它,将只使用之前设置的会话,因为Twilio在get参数或post正文中设置PHPSESSION。

我的日常工作生活在一个common_functions.php脚本中:

/**
* @return string (sessionId)
* It's not required that you consume the sessionID.
* However, this function will either set the current sessionID to
* what is on the URL parameter PHPSESSID or it will just start a
* new session and send a cookie.
*/
public function checkOrStartSession(): string
{
$sessionId = session_id();
if ($sessionId === null || $sessionId === '') {
session_start();
}
# sends a cookie to the caller so that subsequent
# calls will inform us what session to use.
# 1 hour to live 
setcookie("my_session_cookie", "/", time() + 3600);
$this->logger->debug("Check Session sessionId:" . $sessionId);
return session_id();
}

然后在您调用的脚本中(实际上可能由 Twilio 调用的任何脚本:

<?php
require_once(__DIR__ . "/../common_functions.php");

$functions = new common_functions();
/**
*  capturing the session ID so it can be logged
**/
$sessionId = $functions->checkOrStartSession();

就是这样。我唯一遇到过的问题是当我忘记在脚本开头调用 checkOrStartSession(( 时。没有会话,因此 $_SESSION 为空,尝试获取数据是徒劳的。

最新更新