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

如何让Skype通话在Azure Functions机器人中正常工作?

Azure Functions机器人处理Skype通话问题排查与解决

首先明确:Azure Functions机器人完全可以处理Skype通话,下面针对你遇到的问题一步步分析解决:

一、已解决的回调URL无效问题

你之前在local.settings.json配置Microsoft.Bot.Builder.Calling.CallbackUrl未生效,是因为Azure Functions的生产环境配置需要在Azure门户的**应用设置(Application settings)**中添加对应键值对,本地配置文件仅适用于本地调试。你已经完成这一步并消除了日志错误,接下来聚焦第二个问题。

二、Skype仍返回默认提示语的解决要点

这个提示说明你的通话处理逻辑未正确触发,或者没有返回有效的自定义响应,结合你参考的CallingBot示例,迁移到Azure Functions时需要注意以下关键细节:

1. 确保Function的HTTP触发器配置正确

  • 你的通话处理Function必须是HTTP触发器,且需设置为允许匿名访问(Skype的通话回调请求是匿名发起的)。
  • 确认Function的公网可访问URL正确,格式为:https://<你的函数应用名称>.azurewebsites.net/api/<你的函数名称>,这个URL就是要配置的回调URL。

2. 手动初始化CallingBotService(避免依赖注入问题)

Azure Functions的依赖注入机制与普通Web项目不同,不能依赖Autofac自动注册,需要手动初始化服务:

// 在Function代码中获取应用设置里的配置
var appId = Environment.GetEnvironmentVariable("MicrosoftAppId");
var appPassword = Environment.GetEnvironmentVariable("MicrosoftAppPassword");
var callbackUrl = Environment.GetEnvironmentVariable("Microsoft.Bot.Builder.Calling.CallbackUrl");

// 创建配置实例
var settings = new CallingBotServiceSettings
{
    MicrosoftAppId = appId,
    MicrosoftAppPassword = appPassword,
    CallbackUrl = new Uri(callbackUrl)
};

// 初始化CallingBotService并传入你的自定义ICallingBot实现
var callingBotService = new CallingBotService(settings, new YourCustomCallingBot());

3. 确保自定义ICallingBot实现正确处理通话事件

你的ICallingBot子类必须重写OnIncomingCallReceived方法,返回自定义的通话响应,不要让流程走到默认逻辑。示例代码如下:

public class YourCustomCallingBot : ICallingBot
{
    public async Task OnIncomingCallReceived(IncomingCallEvent incomingCallEvent)
    {
        // 创建自定义通话响应
        var playPrompt = new PlayPrompt
        {
            OperationId = Guid.NewGuid().ToString(),
            Prompts = new List<Prompt>
            {
                new Prompt { Value = "你好!这是你的Azure Functions通话机器人,测试通话正常。" }
            },
            Actions = new List<ActionBase>
            {
                new Hangup { OperationId = Guid.NewGuid().ToString() }
            }
        };

        // 将响应添加到工作流
        await incomingCallEvent.ResultingWorkflow.Actions.Add(playPrompt);
    }

    // 按需实现其他ICallingBot接口方法
    public Task OnPlayPromptCompleted(PlayPromptCompletedEvent playPromptCompletedEvent) => Task.CompletedTask;
    public Task OnRecordCompleted(RecordCompletedEvent recordCompletedEvent) => Task.CompletedTask;
    public Task OnHangupCompleted(HangupCompletedEvent hangupCompletedEvent) => Task.CompletedTask;
    // ...其他方法
}

4. 验证Skype机器人的通话配置

在Azure门户的机器人资源中,进入通话选项卡:

  • 确认已启用通话能力
  • 回调URL已设置为你的Function公网URL
  • 机器人的Microsoft App ID和密码与你Function中使用的完全一致

总结

按照上述步骤检查后,你的机器人应该能正确响应Skype通话,替换掉默认的提示语。你在BotBuilder仓库提交的问题也可以同步关注,不过优先排查这些配置和代码逻辑问题,大概率能解决当前问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:03:49