如何将AWS Lex聊天机器人集成到我的网站?

时间:2017-03-28 03:01:58

标签: php amazon-web-services integration chatbot

我的网站正在做客户服务&支持票系统。

但是整合AWS lex的方式似乎并不像FB那么容易。

我想要做的就是让Lex Bot在我的网站上回复客户的门票。


我是否需要首先学习AWS Lambda和API Gateway来集成Lex?

我想知道如何在PHP curl中调用lex bot API。

正如API Docs所说。

但我不确定为什么POST网址就像一条相对路径。

无论如何,谢谢你的帮助。

5 个答案:

答案 0 :(得分:2)

要部署可以与您的网站用户进行交互的聊天机器人,涉及两个步骤。

  1. 创建并发布聊天机器人:

第一步是创建聊天机器人。 Lex提供了一个简单的UI,您可以在其中配置用户所说的内容以及来自机器人的相应回复。无需学习和AWS lambda即可创建一个类似于FAQ的简单bot。 Lex UI就足够了。如果您要创建一个更强大的机器人,该机器人可以识别可操作的详细信息并根据用户的查询执行一些业务逻辑,则需要使用AWS lambda函数作为实现。

例如,如果您正在创建酒店预订机器人,并且用户说:

Book me a hotel for tomorrow in London

如果已配置插槽,则Lex将为您提供以下预订信息。

{
"bookingDate": "06-07-2019" //equivalent date of tomorrow
"location":"london"
}

如果您已启用AWS lambda作为实现,则Lex会将此信息发送到lambda函数。然后,您的lambda函数必须调用酒店预订API并将确认发送给用户。

准备好此设置后,您就可以发布bot并进行下一步,将其集成到您的网站中。

  1. 将漫游器集成到您的网站中

这里您有两个选择:

  • AWS SDK提供了将聊天机器人集成到网站中的API。您可以检查this answer以获得有关AWS API的更多详细信息。
  • 另一种便捷的方法是使用Kommunicate之类的任何服务,这些服务提供与Lex平台的无代码集成。 Kommunicate是一个Bot + human混合客户支持平台,提供了从机器人到人类的交接,可操作的消息,路由规则等功能。您可以按照以下步骤使用Kommunicate将Lex bot集成到网站中:

    1. 注册该共同体,转到bot section并选择Amazon lex。
    2. 填写所需的详细信息,然后单击“让此机器人处理所有对话”。
    3. 从安装部分获取installation script并将其粘贴到您的网站中。
    4. 您的漫游器已准备好回复您的用户。

答案 1 :(得分:1)

最近玩了一些AWS Lex,似乎你无法真正避免使用Lambda代码。

首先,验证和履行代码挂钩将是lambda函数,对于任何半正式的lex机器人对话,您将需要这些。

其次是聊天客户端:如果您不想使用现有聊天机器人集成的现有列表(目前是Facebok,Twilio SMS和Slack),您将需要一个自定义实现。 直接PHP curl可能是一个选项(直接访问API),但我强烈建议使用标准AWS API Gateway / AWS lambda设置来创建lex客户端并使用SDK的便利性。这是一个非常灵活的设置,非常简单。我们已经在几天内完成了使用boto3 SDK的最小python代码库,几乎没有使用python的经验。

希望它有所帮助!

答案 2 :(得分:1)

要将lex bot集成到网站,您需要了解AWS Lex运行时API,AWS IAM和Cognito配置。这是将bot集成到网站的最安全方式。

以下是将lex bot添加到您网站的步骤:

<强> 1。创建新的标识池

在Amazon Cognito控制台中,选择管理新的标识池,然后选择创建新的标识池。您提供池名称(testPoolName),选择“启用对未经身份验证的身份的访问”,然后选择“创建池”。记下标识池ID。

<强> 2。授予lex bot访问权限     身份池

转到IAM服务。选择角色。寻找Cognito_testPoolNameUnauth_Role。单击“附加策略”。搜索AmazonLexRunBotsOnly并附加它。

第3。来自网站的Lex运行时调用:以下是该网站的示例代码

在以下代码中填写标识池ID。要理解此代码,您需要了解AWS Lex运行时api。

    <!DOCTYPE html>
<html>

<head>
    <title>Amazon Lex for JavaScript - Sample Application (BookTrip)</title>
    <script src="https://sdk.amazonaws.com/js/aws-sdk-2.41.0.min.js"></script>
    <style language="text/css">
        input#wisdom {
            padding: 4px;
            font-size: 1em;
            width: 400px
        }
    input::placeholder {
        color: #ccc;
        font-style: italic;
    }

    p.userRequest {
        margin: 4px;
        padding: 4px 10px 4px 10px;
        border-radius: 4px;
        min-width: 50%;
        max-width: 85%;
        float: left;
        background-color: #7d7;
    }

    p.lexResponse {
        margin: 4px;
        padding: 4px 10px 4px 10px;
        border-radius: 4px;
        text-align: right;
        min-width: 50%;
        max-width: 85%;
        float: right;
        background-color: #bbf;
        font-style: italic;
    }

    p.lexError {
        margin: 4px;
        padding: 4px 10px 4px 10px;
        border-radius: 4px;
        text-align: right;
        min-width: 50%;
        max-width: 85%;
        float: right;
        background-color: #f77;
    }
</style>

<body>
    <h1 style="text-align:  left">Amazon Lex - BookTrip</h1>
    <p style="width: 400px">
        This little chatbot shows how easy it is to incorporate
        <a href="https://aws.amazon.com/lex/" title="Amazon Lex (product)" target="_new">Amazon Lex</a> into your web pages.  Try it out.
    </p>
    <div id="conversation" style="width: 400px; height: 400px; border: 1px solid #ccc; background-color: #eee; padding: 4px; overflow: scroll"></div>
    <form id="chatform" style="margin-top: 10px" onsubmit="return pushChat();">
        <input type="text" id="wisdom" size="80" value="" placeholder="I need a hotel room">
    </form>
    <script type="text/javascript">
        // set the focus to the input box
    document.getElementById("wisdom").focus();

    // Initialize the Amazon Cognito credentials provider
    AWS.config.region = 'us-east-1'; // Region
    AWS.config.credentials = new AWS.CognitoIdentityCredentials({
    // Provide your Pool Id here
        IdentityPoolId: 'us-east-1:XXXXX',
    });

    var lexruntime = new AWS.LexRuntime();
    var lexUserId = 'chatbot-demo' + Date.now();
    var sessionAttributes = {};

    function pushChat() {

        // if there is text to be sent...
        var wisdomText = document.getElementById('wisdom');
        if (wisdomText && wisdomText.value && wisdomText.value.trim().length > 0) {

            // disable input to show we're sending it
            var wisdom = wisdomText.value.trim();
            wisdomText.value = '...';
            wisdomText.locked = true;

            // send it to the Lex runtime
            var params = {
                botAlias: '$LATEST',
                botName: 'BookTrip',
                inputText: wisdom,
                userId: lexUserId,
                sessionAttributes: sessionAttributes
            };
            showRequest(wisdom);
            lexruntime.postText(params, function(err, data) {
                if (err) {
                    console.log(err, err.stack);
                    showError('Error:  ' + err.message + ' (see console for details)')
                }
                if (data) {
                    // capture the sessionAttributes for the next cycle
                    sessionAttributes = data.sessionAttributes;
                    // show response and/or error/dialog status
                    showResponse(data);
                }
                // re-enable input
                wisdomText.value = '';
                wisdomText.locked = false;
            });
        }
        // we always cancel form submission
        return false;
    }

    function showRequest(daText) {

        var conversationDiv = document.getElementById('conversation');
        var requestPara = document.createElement("P");
        requestPara.className = 'userRequest';
        requestPara.appendChild(document.createTextNode(daText));
        conversationDiv.appendChild(requestPara);
        conversationDiv.scrollTop = conversationDiv.scrollHeight;
    }

    function showError(daText) {

        var conversationDiv = document.getElementById('conversation');
        var errorPara = document.createElement("P");
        errorPara.className = 'lexError';
        errorPara.appendChild(document.createTextNode(daText));
        conversationDiv.appendChild(errorPara);
        conversationDiv.scrollTop = conversationDiv.scrollHeight;
    }

    function showResponse(lexResponse) {

        var conversationDiv = document.getElementById('conversation');
        var responsePara = document.createElement("P");
        responsePara.className = 'lexResponse';
        if (lexResponse.message) {
            responsePara.appendChild(document.createTextNode(lexResponse.message));
            responsePara.appendChild(document.createElement('br'));
        }
        if (lexResponse.dialogState === 'ReadyForFulfillment') {
            responsePara.appendChild(document.createTextNode(
                'Ready for fulfillment'));
            // TODO:  show slot values
        } else {
            responsePara.appendChild(document.createTextNode(
                '(' + lexResponse.dialogState + ')'));
        }
        conversationDiv.appendChild(responsePara);
        conversationDiv.scrollTop = conversationDiv.scrollHeight;
    }
</script>

答案 3 :(得分:0)

自定义实施是从您的网站与lex交谈的唯一方式。然而,它并不像听起来那么复杂。开发人员链接here 将有助于在js中实施。

然而,唯一的问题是在您的网站代码中共享aws凭据(IAM用户)。通过从IAM获取临时令牌也可以避免这种情况,这需要进一步的开发工作。

答案 4 :(得分:0)

现在可以使用CloudFormation使用一个简单的向导将Lex bot集成到您的网站中。

该集成允许使用整页聊天界面或iframe聊天小部件。您可以将现有网站指定为父网站的原始来源(将小部件集成到其中)。

有关更多信息,请参见:https://aws.amazon.com/blogs/machine-learning/deploy-a-web-ui-for-your-chatbot/

相关问题