c# - 从 Azure 机器人调用 Web API

标签 c# azure asp.net-web-api bots botframework

我是 Azure Bot 编程 (C#) 新手,找不到有关此主题的好文章。

我想让用户使用机器人“订阅”邮件列表。我构建了一个表单对话框和表单流。它要求用户提供电子邮件地址。

我需要做的是将其发布到外部 WebAPI (json) 并获取响应并处理响应。

有人可以给我一些关于如何从机器人调用 WebAPI 的指导吗?

    public async Task Subscribe(IDialogContext context, IAwaitable<IMessageActivity> activity, LuisResult result)
    {
        context.Call(SubscribeForm.BuildFormDialog(FormOptions.PromptInStart), SubscribeFormComplete);
    }

    private async Task SubscribeFormComplete(IDialogContext context, IAwaitable<SubscribeForm> result)
    {
        try
        {
            var form = await result;
            if (form != null)
            {
                await context.PostAsync("Thanks for subscribing! You can always remove yourself by typing unsubscribe.");
            }
            else
            {
                await context.PostAsync("Form returned empty response!");
            }
        }
        catch (OperationCanceledException)
        {
            await context.PostAsync("I am sorry you decided not to subscribe! If you change your mind just type 'subscribe' again.");
        }

        context.Wait(this.MessageReceived);
    }


        [Serializable]
public class SubscribeForm
{
    [Prompt("What is your email address?")]
    [Required()]
    [DataType(DataType.EmailAddress)]
    public string EmailAddress { get; set; }

    public static IForm<SubscribeForm> BuildForm()
    {
        // Builds an IForm<T> based on BasicForm
        return new FormBuilder<SubscribeForm>()
            .Message("We often send out updates on new features. We don't spam.  You can type 'quit' to cancel this.")
           .Build();
    }

    public static IFormDialog<SubscribeForm> BuildFormDialog(FormOptions options = FormOptions.PromptInStart)
    {
        // Generated a new FormDialog<T> based on IForm<BasicForm>
        return FormDialog.FromForm(BuildForm, options);
    }
}

最佳答案

这是我如何调用 Microsoft 认知服务 LUIS 的示例,我在静态类上有该方法,并且该方法是异步的。

方法:

 public static class CognitiveHelper
    {
        private const string UrlLuis = "https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/a267a797-9584-41a5-83f3-xxxxxxxxx?subscription-key=xxxxxxxxxxxxxxxxxxxxxxx&q=";
    public static async Task<LuisObjects> GetLuisAnswer(string textToEvaluate)
            {
                if (string.IsNullOrWhiteSpace(textToEvaluate)) throw new ArgumentException("Null argument");

                textToEvaluate= HttpUtility.UrlEncode(textToEvaluate);
                var urlLuisWithRequest = UrlLuis + textToEvaluate;

                var client = new HttpClient();
                var body = new { };

                var serializedBody = new JavaScriptSerializer().Serialize(body);
                byte[] bodyByte = Encoding.UTF8.GetBytes(serializedBody );

                using (var content = new ByteArrayContent(bodyByte))
                {
                    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
                    var response= await client.GetAsync(urlLuisWithRequest );
                    var responseContent= await respuesta.Content.ReadAsStringAsync();

                    var javaScriptSerializer = new JavaScriptSerializer();
                    var resultTextAnalysis= javaScriptSerializer.Deserialize<LuisResult>(responseContent);
                    return new LuisObjects()
                    {
                        Entities= resultTextAnalysis.entities.ToList(),
                        TopScoringIntent = resultTextAnalysis.topScoringIntent
                    };
                }
            }
}

调用:

  var luisResponse = await CognitiveHelper.GetLuisAnswer(activity.Text);

关于c# - 从 Azure 机器人调用 Web API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42698110/

相关文章:

javascript - 有什么方法可以使用 Instagram API 删除照片吗?

c# - 如何在 Visual Studio 中调试时查看 ViewBag 内容?

c# - 如何用引号引起来的整数C#?

设置应用程序设置后,Azure Functions 应用程序产生错误

azure - 如何监视 Azure 部署中的种子方法?

c# - ASP.NET MVC Core 3.0 - 为什么来自主体的 API 请求不断返回!ModelState.IsValid?

node.js - 类型 'body' 上不存在属性 'Request'

c# - 在线程返回池之前如何阻塞?

c# - 重定向文件系统

azure - Web Api 上传到 Azure 存储 - 请求实体太大