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
2条答案
按热度按时间ki1q1bka1#
对于任何人来说...你不能从2022/03/18
这直接来自与微软的对话。
您可以通过API发起呼叫,但不能接收PSTN上的电话发出的呼叫或管理路由等。
x1c 0d1x的数据
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的验证-我已经添加了对该功能的支持,如下所示:
字符串