问题描述
我不确定我是否正确使用了 callbackUrl,或者视频索引器服务中的回调逻辑是否存在问题。此回调专门用于将视频提交(上传)到索引服务。
以下代码段工作并生成对服务的 http POST 请求,服务成功导入视频并对其进行处理。但是,当它完成时,回调帖子正文是空的。
我要发布到的端点定义:
https://api.videoindexer.ai/{location}/Accounts/{accountId}/Videos?name={name}[&privacy][&priority][&description][&partition][&externalId][&externalUrl][&callbackUrl][&Metadata][&language][&videoUrl][&fileName][&indexingPreset][&streamingPreset][&linguisticModelId][&personModelId][&animationModelId][&sendSuccessEmail][&assetId][&brandsCategories][&accesstoken]
应用发布请求(此代码有效)
Config.ApiKey.Remove("Ocp-Apim-Subscription-Key");
VideosApi videosApi = new VideosApi(Config);
string callbackUrl = $"{FunctionApiEndpoint}/api/VideoIndexStatus?Code={FunctionApiCode}&clientId={FunctionapiclientId}";
ApiResponse<dynamic> result = await videosApi.UploadVideoAsyncWithHttpInfo($"Snag1 - {DateTime.UtcNow.Ticks}",Location,AccountId,privacy: "private",accesstoken: Token.Data.Content.ToString().Replace("\"",""),description: $"Test Video Segment - {DateTime.UtcNow.Ticks}",fileName: "Snag1.MP4",callbackUrl: callbackUrl,videoUrl: "https://mystorage.blob.core.windows.net/testmedia/Snag1.MP4",xmsClientRequestId: MsClientId);
Console.WriteLine(result.Data.Content);
Function App / Webhook(此代码有效)
[FunctionName("VideoIndexStatusRun")]
[return: ServiceBus("servicebus.queue.dev",Connection = "AzureWebJobsServiceBus",EntityType = EntityType.Queue)]
public async Task<IActionResult> VideoIndexStatusRun(
[HttpTrigger(AuthorizationLevel.Function,"post",Route = "VideoIndexStatus")] HttpRequest req,ILogger log,ExecutionContext context)
{
log.Loginformation("C# HTTP trigger function processed a request.");
string postdata = await new StreamReader(req.Body).ReadToEndAsync();
log.Loginformation($"Postdata='{postdata}' | Postdata.Length='{postdata.Length}'");
return new OkObjectResult(postdata);
}
处理完媒体并在门户“https://www.videoindexer.ai/media/library”中分析媒体后,它会向我的函数应用发送一条发布消息。但是,postdata 是一个空字符串 "" 并且长度 = 0。
我正在使用 Application Insights 检查我的函数应用程序中发生的情况,并且在视频索引器的回调事件之后,我可以看到在 App Insights 中发布的消息“Postdata='' | Postdata.Length='0'”。人工智能服务。
解决方法
在发布问题后不久,我意识到答案是什么,并希望能帮助其他人,比如我,我意识到回调过程不是发布“正文消息”帖子,而是在 URL 查询字符串中返回它。
(我需要更好地阅读文档...)
所以我应该像下面这样编写我的函数应用 webhook 方法:
[FunctionName("VideoIndexStatusRun")]
[return: ServiceBus("servicebus.queue.dev",Connection = "AzureWebJobsServiceBus",EntityType = EntityType.Queue)]
public async Task<IActionResult> VideoIndexStatusRun(
[HttpTrigger(AuthorizationLevel.Function,"post",Route = "VideoIndexStatus")] HttpRequest req,ILogger log,ExecutionContext context)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string message = $"{{\"id\":\"{req.Query["id"]}\",\"state\":\"{req.Query["id"]}\"}}";
return new OkObjectResult(message);
}
现在可以捕获来自查询字符串的返回值并将其转发到我的消息处理器。