如何通过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
相关产品推荐
相关产品推荐

