Twilio twiml 记录操作 returns 空记录和回调 returns 空调用者参数

Twilio twiml record action returns empty recording and callback returns empty caller parameter

几年前,以下 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>

现在它 returns 一个空录音 link。重新访问 Twilio 文档将我带到 this,其中表示录音可能无法立即准备好并使用 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 上与调用者的 phone 号码匹配,但不是有一些将呼叫者的 phone 号码与正在制作的实际录音联系起来的其他方法?

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

Fetch a Call resource

解决方案在我脑海中浮现的很慢。我可以简单地将呼叫者 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。

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

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

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

我的例程生活在 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 是空的,试图获取数据是徒劳的。