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

如何利用WebEx API呼叫分机并播放音频文件?

解决方案:通过WebEx API或第三方工具实现PA系统音频播放

一、WebEx官方API正确实现步骤

你之前尝试的端点有误,WebEx Telephony API中不存在playsound/invoke接口,正确流程是先建立呼叫,待接通后调用媒体播放接口:

1. 发起呼叫到PA分机

使用/v1/telephony/calls/dial端点发起呼叫,需确保请求包含身份标识(如fromExtension),且AccessToken拥有spark:telephony_calls_write权限。

C#示例代码:

using System.Net.Http;
using System.Text;
using System.Text.Json;

public async Task<string> InitiateWebExCall(string accessToken, string fromExtension, string paExtension)
{
    var client = new HttpClient();
    client.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken}");
    
    var requestBody = new
    {
        from = new { extension = fromExtension },
        destination = new { extension = paExtension },
        mediaType = "AUDIO"
    };
    
    var content = new StringContent(JsonSerializer.Serialize(requestBody), Encoding.UTF8, "application/json");
    var response = await client.PostAsync("https://webexapis.com/v1/telephony/calls/dial", content);
    response.EnsureSuccessStatusCode();
    
    var responseData = await JsonSerializer.DeserializeAsync<JsonElement>(await response.Content.ReadAsStreamAsync());
    return responseData.GetProperty("callId").GetString();
}

2. 监听呼叫状态,等待接通

轮询/v1/telephony/calls/{callId}端点,直到呼叫状态变为connected:

public async Task WaitForCallConnected(string accessToken, string callId)
{
    var client = new HttpClient();
    client.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken}");
    
    while (true)
    {
        var response = await client.GetAsync($"https://webexapis.com/v1/telephony/calls/{callId}");
        response.EnsureSuccessStatusCode();
        
        var responseData = await JsonSerializer.DeserializeAsync<JsonElement>(await response.Content.ReadAsStreamAsync());
        var status = responseData.GetProperty("status").GetString();
        
        if (status == "connected")
            break;
            
        await Task.Delay(1000); // 每秒轮询一次
    }
}

3. 呼叫接通后播放音频

使用/v1/telephony/calls/{callId}/actions/play/invoke端点播放音频,音频需为WebEx支持的格式(如16kHz单声道WAV),且URL需公网可访问:

public async Task PlayAudioOnWebExCall(string accessToken, string callId, string audioUrl)
{
    var client = new HttpClient();
    client.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken}");
    
    var requestBody = new
    {
        play = new
        {
            url = audioUrl,
            loop = false // 是否循环播放,按需设置
        }
    };
    
    var content = new StringContent(JsonSerializer.Serialize(requestBody), Encoding.UTF8, "application/json");
    var response = await client.PostAsync($"https://webexapis.com/v1/telephony/calls/{callId}/actions/play/invoke", content);
    response.EnsureSuccessStatusCode();
}

4. 播放完成后挂断呼叫

调用/v1/telephony/calls/{callId}/actions/hangup/invoke端点挂断:

public async Task HangupWebExCall(string accessToken, string callId)
{
    var client = new HttpClient();
    client.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken}");
    
    var response = await client.PostAsync($"https://webexapis.com/v1/telephony/calls/{callId}/actions/hangup/invoke", null);
    response.EnsureSuccessStatusCode();
}

二、第三方方案:使用Twilio实现

如果WebEx API流程过于繁琐,Twilio可更简洁实现需求:

1. 核心逻辑

  • 用Twilio呼叫API发起呼叫到PA分机
  • 通过TwiML指定呼叫接通后播放的音频URL
  • Twilio自动处理呼叫接通、播放音频、挂断流程

2. C#示例代码

using Twilio;
using Twilio.Rest.Api.V2010.Account;
using Twilio.Types;

public void InitiateTwilioCall(string twilioAccountSid, string twilioAuthToken, string twilioPhoneNumber, string paExtension, string audioUrl)
{
    TwilioClient.Init(twilioAccountSid, twilioAuthToken);
    
    var twiml = new Twilio.TwiML.VoiceResponse();
    twiml.Play(new Uri(audioUrl));
    twiml.Hangup(); // 播放完成后自动挂断
    
    var call = CallResource.Create(
        to: new PhoneNumber(paExtension), // 需添加正确区号或前缀
        from: new PhoneNumber(twilioPhoneNumber),
        twiml: new Twilio.Types.Twiml(twiml.ToString())
    );
}

注意:需确保Twilio号码可呼叫到WebEx PA分机,且音频URL为公网可访问的WAV/MP3文件。

内容的提问来源于stack exchange,提问作者B-Ray

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 12:41:13