是否可以使用 AMAZON LEX 构建一个与客户端存储的数据库和 Web 服务连接的聊天机器人?

2024-03-15

我们的组织希望开发一个《失物招领系统应用》使用集成在网站中的聊天机器人。

每当用户开始与聊天机器人对话时,聊天机器人都应该询问丢失物品或找到物品的详细信息,并将详细信息存储在数据库中。

我们怎样才能做到呢?

我们可以使用我们自己的网络服务吗,因为组织不想将数据库保留在亚马逊的服务器中。


作为刚刚实现了同样情况的人(在 @Sid8491 的帮助下),我可以就我如何管理它提供一些见解。

请注意,我使用 C# 是因为我工作的公司就是使用 C# 的。

首先,机器人需要用户输入来决定调用什么意图。为此,我实现了对 Lex API 的 PostText 调用。

PostTextRequest lexTextRequest = new PostTextRequest()
        {
            BotName = botName,
            BotAlias = botAlias,
            UserId = sessionId,
            InputText = messageToSend
        };

        try
        {
            lexTextResponse = await awsLexClient.PostTextAsync(lexTextRequest);
        }
        catch (Exception ex)
        {
            throw new BadRequestException(ex);
        }

请注意,这要求您创建一个 Cognito 对象来验证您的 AmazonLexClient(如下所示):

protected void InitLexService()
    {
        //Grab region for Lex Bot services
        Amazon.RegionEndpoint svcRegionEndpoint = Amazon.RegionEndpoint.USEast1;

        //Get credentials from Cognito
        awsCredentials = new CognitoAWSCredentials(
                            poolId,                     // Identity pool ID
                            svcRegionEndpoint);         // Region

        //Instantiate Lex Client with Region
        awsLexClient = new AmazonLexClient(awsCredentials, svcRegionEndpoint);
    }

收到机器人的响应后,我们使用一个简单的 switch case 来正确识别运行 Web 应用程序所需调用的方法。整个过程由我们的 Web 应用程序处理,我们仅使用 Lex 来识别用户的请求和槽值。

//Call Amazon Lex with Text, capture response
var lexResponse = await awsLexSvc.SendTextMsgToLex(userMessage, sessionID);

//Extract intent and slot values from LexResponse
string intent = lexResponse.IntentName;
var slots = lexResponse.Slots;

//Use LexResponse's Intent to call the appropriate method 
switch (intent)
{
    case: /*Your intent name*/:
    /*Call appropriate method*/;
    break;
}

之后,只需将结果显示给用户即可。如果您需要更多说明,请告诉我!

UPDATE:

写入 SQL 的槽数据的示例实现(同样使用 C#)如下所示:

 case "LostItem":                                              
      message = "Please fill the following form with the details of the item you lost.";
      LostItem();
      break;

然后,您将进入 LostItem() 方法,您可以使用该方法填写表单。

public void LostItem()
{
    string itemName = string.Empty;
    itemName = //Get from user
    //repeat with whatever else you need for a complete item object

    //Implement a SQL call to a stored procedure that inserts the object into your database. 
    //You can do a similar call to the database to retrieve an object as well
}

希望这应该为您指明正确的方向。如果您需要 SQL 存储过程方面的帮助,Google 是您最好的朋友。希望这有帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以使用 AMAZON LEX 构建一个与客户端存储的数据库和 Web 服务连接的聊天机器人? 的相关文章

  • 亚马逊 AWS CloudFront 声称不存在这样的存储桶

    我正在尝试设置 CloudFront 来提供图像 但当前无法访问它并返回错误 指定的存储桶不存在
  • 从 node.js 创建对 AWS ES 实例的有效签名请求

    我试图找到一个示例 说明如何连接到 Node js 中的 AWS ES 实例 然后通过一个简单的请求访问 ES 集群 我正在尝试使用elasticsearch节点包 https www npmjs com package elasticse
  • 输出和导出之间的区别

    在 CloudFormation 中 我们能够从模板输出一些值 以便其他进程 堆栈等可以检索它们 这通常是某个名称 可能是 URL 或在堆栈创建 部署 过程中生成的名称等 我们还能够从模板 导出 返回值作为 输出 与 导出 之间有什么区别
  • 使用 Terraform 管理访问 RDS 数据库的凭据时出现问题

    我通过 Terraform 创建了一个秘密 该秘密用于访问也在 Terraform 中定义的 RDS 数据库 并且在秘密中 我不想包含username and password 因此我创建了一个空密钥 然后在 AWS 控制台中手动添加凭证
  • 如何使用对象标记上传到 AWS S3

    有没有办法使用标签将文件上传到AWS S3 不将标签添加到S3中的现有文件 对象 我需要让该文件与我的 Tags 一起出现在 S3 中 即在单个 API 调用中 我需要这个 因为我使用 Lambda 函数 使用这些 S3 对象标签 由 S3
  • 从本地计算机连接到 AWS 上的 Neptune

    我正在尝试从办公室的本地计算机连接到 AWS 实例中的 Neptune DB 就像从办公室连接到 RDS 一样 是否可以从本地计算机连接 Neptune 数据库 Neptune 数据库是否公开可用 开发人员有什么方法可以从办公室连接 Nep
  • 将密钥对添加到现有 EC2 实例

    我被给予AWS控制台访问正在运行 2 个实例的帐户 但我无法关闭 在生产中 但是 我想获得对这些实例的 SSH 访问权限 是否可以创建一个新的密钥对并将其应用到实例 以便我可以通过 SSH 访问 获取现有的pem当前无法选择创建实例所用的密
  • 如何将域添加到 aws 上的现有 SSL 证书

    我有一个与 Amazon Web Services 上的负载均衡器关联的 SSL 证书 我想在该证书上有一个额外的域 我的问题是 是否可以向 aws 上现有的 ssl 证书添加额外的域 我发现您可以在创建证书时添加其他名称 但我不知道如何使
  • 如何更改 SAM 模板中 API 阶段的名称?

    我正在使用 SAM 部署 Lambda 函数 并使其可通过 API Gateway 通过 HTTP 进行调用 大致使用以下模板片段 MyFunction Type AWS Serverless Function Properties Eve
  • AWS Lambda 提前结束(没有任何显式返回或回调)

    我在放入 AWS Lambda 中的一些 Node js 代码时遇到了一些问题 我需要进行几个异步调用 虽然第一个调用的行为符合我的预期 但 lambda 函数在第二个调用完成之前终止 返回值为 null 这让我认为 lambda 正在执行
  • AWS lambda 是否保证将函数更新到新版本时不会出现停机?

    默认情况下 AWS 使用LATEST更新了最新 lambda 版本的别名 我假设执行以下步骤 Now LATEST别名点版本 5 用户部署新版本的 lambda 在部署新版本时 LATEST别名仍然指向版本 5 部署完成后 Lambda 只
  • 如何使用 AWS Lambda 安装 Git?

    我在代码提交存储库中有代码 我正在编写一个 lambda 函数来为代码提交存储库的每个签入 事件 构建代码 我无法安装 git 因此无法克隆存储库 我该怎么办呢 正如其他人提到的 在 lambda 上安装 git 要么非常困难 要么完全不可
  • 从 AWS lambda 函数更新 Amplify 数据存储

    在我的应用程序中 有一个功能 当我们在 s3 中上传文件时 会调用相关的 AWS Lambda 触发器 当 Lambda 函数触发时 我想将文件相关数据存储在 AWS Amplify 数据存储中 是否可以在 Lambda 函数中访问 AWS
  • AWS RDS MySql - 如何在设置“公开可用”后允许访问

    刚刚使用默认设置和用户 密码创建了新的 AWS RDS MySql 实例 我也将其设置为publicly available并在此过程中创建新的 VPC 目前无法从我的笔记本电脑连接到此 RDS mysql h endpoint u myu
  • AWS ElasticSearch Service - 从 CF 模板设置加密选项

    我正在创建一个云形成模板来在AWS中配置elasticsearch服务域 我想将加密下的此属性设置为 true 域的所有流量都需要 HTTPS 但我无法在 AWS 文档中找到执行此操作的方法 用于设置加密属性的其他选项 例如 启用静态数据加
  • 如何使用配置文件 (.ebextensions) 在 AWS Elastic Beanstalk 上安装 PHP IMAP 扩展?

    有谁知道如何使用配置文件 ebextensions 在 AWS Elastic Beanstalk 上安装和启用 PHP IMAP 扩展 我使用的是 64 位 Amazon Linux 2017 03 v2 4 0 运行 PHP 7 0 1
  • Amazon EC2 Auto Scaling CPU 利用率警报 - 数据不足

    因此 我一直在 Python 中使用 Boto 来尝试配置基于 CPUUtilization 的自动缩放 或多或少与本示例中指定的完全相同 http boto readthedocs org en latest autoscale tut
  • 在 Elastic Beanstalk 中禁用自动安全组命名

    创建新环境时 Beanstalk 往往会使用随机且非常大的字符串 例如 awseb e nhmvcuvtjh stack AWSEBSecurityGroup 1R8CUK434DLPG 来污染我们的安全组命名约定 这些字符串之后无法更改
  • 如何中止/停止正在进行的 Amazon AWS s3 上传

    我正在使用 aws sdk 的 javascript 版本将文件上传到亚马逊 s3 存储桶 code AWS config update accessKeyId access key secretAccessKey secret key A
  • AWS S3 GetObject 是否提供随机访问?

    I can 提供 HTTP Range 标头 https docs aws amazon com AmazonS3 latest API API GetObject html API GetObject RequestSyntax到 AWS

随机推荐