You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PHP LaML Webhook转发呼叫至SignalWire Relay并在JS应用中处理

处理SignalWire来电转发至Relay及JS Relay应用处理指南

1. 创建LaML将呼叫转发至SignalWire Relay主题

你可以在已有的PHP Webhook脚本中动态生成LaML XML,替换之前转发到SIP的逻辑,实现呼叫转发到Relay主题。以下是PHP代码示例:

<?php
header('Content-Type: text/xml');
echo '<?xml version="1.0" encoding="UTF-8"?>';
?>
<Response>
  <Relay topic="incoming_calls">
    <Param name="caller_id" value="<?php echo $_REQUEST['From']; ?>" />
    <Param name="call_id" value="<?php echo $_REQUEST['CallSid']; ?>" />
  </Relay>
</Response>

关键说明:

  • <Relay>标签的topic属性指定要转发到的Relay主题名称(示例中为incoming_calls),可根据需求自定义。
  • <Param>可添加自定义参数,比如来电号码、呼叫ID,这些参数会被Relay应用接收并使用。
  • 确保Webhook返回的Content-Type为text/xml,SignalWire才能正确解析LaML内容。

2. JavaScript Relay应用处理呼叫

使用SignalWire Realtime SDK创建Relay应用,订阅指定主题并处理来电事件。

步骤1:安装依赖

在项目目录执行:

npm install @signalwire/realtime-api

步骤2:编写Relay应用代码

import { RelayClient } from '@signalwire/realtime-api'

// 初始化Relay客户端
const client = new RelayClient({
  project: '你的SignalWire项目ID',
  token: '你的SignalWire API Token'
})

// 订阅目标主题
const topic = client.subscribe('incoming_calls')

// 监听呼叫接收事件
topic.on('call.received', async (call) => {
  console.log(`收到来电:${call.from},呼叫ID:${call.id}`)
  
  // 接听呼叫
  await call.answer()
  console.log('已接听呼叫')

  // 播放文字转语音提示(可选)
  await call.playTTS({ text: '欢迎来电,正在处理您的请求' })

  // 自定义业务逻辑示例:保持呼叫30秒后挂断
  setTimeout(async () => {
    await call.hangup()
    console.log('已挂断呼叫')
  }, 30000)
})

// 启动客户端
client.connect()
console.log('Relay应用已启动,等待来电...')

关键说明:

  • 将代码中的项目ID和API Token替换为你SignalWire控制台的对应值。
  • call.received事件会在呼叫转发到指定主题时触发,call对象包含呼叫的所有信息及操作方法(如answer、hangup、playTTS等)。
  • 可根据业务需求扩展处理逻辑,比如转接至其他号码、启动录音、对接业务系统查询信息等。

文档参考提示:

  • SignalWire官方文档中关于LaML <Relay>标签的详细参数说明
  • SignalWire Realtime API的呼叫操作方法列表
  • Relay主题订阅与事件监听的官方示例

内容的提问来源于stack exchange,提问作者Jithin Lukose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 10:43:10