通过Azure通信服务处理呼入电话

bzzcjhmw  于 2023-08-07  发布在  其他
关注(0)|答案(2)|浏览(120)

是否可以使用Azure通信服务接收PSTN电话呼叫?
所有的文档和演示都在谈论向已知号码发起呼叫。
我的用例是有人从他们的移动的电话(PSTN)拨打电话号码,我希望能够处理呼叫。
我找不到任何讨论这个或如何做路由的文档!例如,将呼叫路由到特定座席。
我错过什么了吗?有什么想法吗

ki1q1bka

ki1q1bka1#

对于任何人来说...你不能从2022/03/18
这直接来自与微软的对话。
您可以通过API发起呼叫,但不能接收PSTN上的电话发出的呼叫或管理路由等。
x1c 0d1x的数据

ig9co6j1

ig9co6j12#

现在这是可能的-我已经在我自己的应用程序中实现了,它运行得很好。
要允许来电,您必须在ACS中购买免费电话号码-本地号码不支持。然后配置Azure事件网格服务以订阅ACS示例上的传入呼叫事件,并为其配置指向您自己的API的webhook URL。然后,Azure事件网格在收到包含“传入呼叫上下文”的传入呼叫时将一些数据发布到您的API。ACS团队的一名成员Jason Shave创建了一些有用的Nugets来帮助解析Azure事件网格事件数据,请参阅此处。
然后,您的API可以执行一些逻辑,例如检查您的数据库以获取您要将特定来电转发到的已连接用户的ACS唯一标识符,例如基于查找来电电话号码以检查分配的代理,然后可以使用CallAutomation client SDK for .Net将来电上下文重定向到此标识符,并将空的200响应返回到Azure事件网格,以便它知道响应已被处理,不会重新发送。
请参阅有关here概念的完整文档。
我还将添加Azure事件网格的端点需要通过Azure的验证-我已经添加了对该功能的支持,如下所示:

using Azure.Messaging.EventGrid;
using Azure.Messaging.EventGrid.SystemEvents;
...

        [AllowAnonymous]
        [HttpPost("~/api/call-automation/event")]
        public async Task<IActionResult> Event([FromBody] EventGridEvent[] events)
        {
            int eventCount = 0;

            foreach (var eventGridEvent in events)
            {
                try
                {
                    logger.LogWarning($"EventGridData[{eventCount++}] data is: {JsonConvert.SerializeObject(eventGridEvent)}");

                    // Validate whether EventType is of "Microsoft.EventGrid.SubscriptionValidationEvent"
                    switch (eventGridEvent.EventType)
                    {
                        case SystemEventNames.EventGridSubscriptionValidation:
                            {
                                var eventData = eventGridEvent.Data.ToObjectFromJson<SubscriptionValidationEventData>();

                                var responseData = new SubscriptionValidationResponse
                                {
                                    ValidationResponse = eventData.ValidationCode
                                };

                                if (responseData.ValidationResponse != null)
                                {
                                    return Ok(responseData);
                                }
                            }
                            break;

                            // Now you can handle incoming call

字符串

相关问题