Мой сайт занимается обслуживанием клиентов & Система поддержки билетов.
Но способ интеграции AWS lex, кажется, не так прост, как FB.
То, что я хочу сделать, это позволить Lex Bot отвечать за билеты для клиента на моем сайте.
Нужно ли сначала изучать AWS Lambda и API Gateway для интеграции Lex?
Я хочу знать, как вызвать API лекс бота в PHP curl.
Как API Документы сказал.
Но я не уверен, почему URL-адрес POST похож на относительный путь.
В любом случае спасибо за помощь.
Недавно поиграл с AWS Lex, и кажется, что вы не можете избежать использования лямбда-кода.
Во-первых, хуки кода проверки и выполнения будут лямбда-функциями, и для любого полу-приличного разговора с ботом lex они вам понадобятся.
Вторым является чат-клиент: если вы не хотите использовать существующий список встроенных интеграций чат-ботов (в настоящее время Facebok, Twilio SMS и Slack), вам потребуется индивидуальная реализация.
Прямой PHP curl может быть вариантом (прямой доступ к API), но я настоятельно рекомендую использовать стандартную настройку AWS API Gateway / AWS lambda для создания lex-клиента и использовать вместо этого удобство SDK. Это очень гибкая настройка, супер просто. Мы приняли участие за несколько дней, с минимальной базой кода Python, использующей boto3 SDK, и практически без опыта работы с Python.
Надеюсь, поможет!
Чтобы интегрировать lex-бот в веб-сайт, вам необходимо знать об API-интерфейсе среды выполнения AWS Lex, конфигурации AWS IAM и Cognito. Это наиболее безопасный способ интеграции бота на сайт.
Вот шаги, чтобы добавить бот lex на ваш сайт:
1. Создайте новый пул удостоверений
Из консоли Amazon Cognito вы выбираете Управление новым пулом удостоверений, а затем выберите Создать новый пул удостоверений. Вы предоставляете имя пула (testPoolName), выбираете «Включить доступ к неаутентифицированным удостоверениям» и затем выбираете «Создать пул». Запишите идентификатор пула идентификаторов.
2. Дайте lex боту доступ к
идентификационный пул
Перейти в сервис IAM. Выберите Роли. Ищите Cognito_testPoolNameUnauth_Role. Нажмите на кнопку Присоединить политику. Найдите AmazonLexRunBotsOnly и прикрепите его.
3. Вызов Lex Express с веб-сайта: вот пример кода для веб-сайта
Введите идентификатор пула идентификаторов в следующем коде. Чтобы понять этот код, необходимо понимать API времени выполнения AWS Lex.
<!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>
Пользовательская реализация — это единственный способ поговорить с lex с вашего сайта. Однако это не так сложно, как кажется. Ссылка для разработчиков Вот
поможет в реализации в JS.
Единственный недостаток, однако, заключается в совместном использовании учетных данных aws (пользователя IAM) в коде вашего веб-сайта. Этого также можно избежать, получив временный токен от IAM, что потребует дальнейших усилий по разработке.