php 如何将Twilio呼叫置于保留状态

7d7tgy0s  于 2023-09-29  发布在  PHP
关注(0)|答案(3)|浏览(145)

我试图在Twilio上实现以下操作,但不确定为什么我不能正确完成。我已经使用标准Twilio程序从twilio.device.connect发起了一个呼叫。发起呼叫后,我将呼叫更新为新的URL,以便将其搁置。

$client = new Services_Twilio($accountSid, $authToken); 
$call = $client->account->calls->get($call_sid); 
$call->update( 
    array( 
        "Url"    => "http://localhost/voice.xml",               
        "Method" => "POST",  
    )
);

现在这里,而不是把最终用户在等待它只是断开通话,并播放音乐在我这边。为什么会这样?

up9lanfz

up9lanfz1#

不,问题是因为电话有两条腿。查查通话记录你得接另一段电话。Twilio似乎不允许我们通过API查看子调用,但公共API(通过控制台)可以获取它们。
因此,您需要获取所有调用,并过滤调用的父级是您的调用sid。
因此,当将某人置于保留状态时,请获取父呼叫sid是您拥有的callSid的所有呼叫。然后使用拥有您的调用的子对象的callSid作为父对象。
我希望能够从我们的调用示例中获得子调用,但我看不出这是怎么可能的。

public async enqueueCall(callSid: string, queueName: string): Promise<CallInstance> {
    const call = await this.getCall(callSid);
    console.log({ backendCall: call });

    const correctedCallSid = await this.getCustomersCallSid(call);

    return await this.client.calls(correctedCallSid).update({
      twiml: `<Response><Enqueue>${queueName}</Enqueue></Response>`,
    });
  }

  private async getCustomersCallSid({
    parentCallSid,
    direction,
    sid,
  }: CallInstance): Promise<string> {
    if (parentCallSid === null && direction === "inbound") {
      const childCall = await this.client.calls.list({ parentCallSid: sid });

      // If call is a child and it is inbound then it is actually an outbound call
      if (childCall.length) {
        console.log({ childCall });
        return childCall[0].sid;
      }

      // If the call is not a child and it is inbound then it is actually an dequeued call
      return sid;
    }

    if (parentCallSid !== null && direction === "outbound-dial") {
      // IF the call does have a parent and it is outbound-dial then it is actually an inbound call
      return parentCallSid;
    }

    return sid;
  }

我是这么做的
1.如果我拨出去。然后direction是'inbound' -.-并且有另一个调用的parentSid等于我当前的调用id。因此,我们希望获得另一个调用并使用它sid。
1.如果我通过device.connect()让一个客户出队,并给出队列名称或SID。没有一个孩子不叫,直到有父母。
1.否则,如果有人直接打电话给我,那么就使用sid
可怕的,令人困惑的和缺乏记录。

daupos2t

daupos2t2#

我是Twilio布道者
我建议检查Twilio是否记录了任何错误:
https://www.twilio.com/user/account/monitor/alerts
如果你试图将Twilio重定向到“http://localhost“,那是行不通的,因为Twilio显然不知道如何到达你自己机器上运行的本地主机。
如果你想通过一个公共URL将运行在你自己本地机器上的Web服务器公开到互联网上,可以看看一个名为ngrok的工具。

eqzww0vc

eqzww0vc3#

原因是在你的“http://localhost/voice.xml”文件中的<Play>标记之后。没有进一步执行TwiML。
解决方案是将调用重定向回其原始状态

相关问题