有幾種方法可以解決您的情況。
據我瞭解,當客戶端通過聊天機器人小部件到達網頁時,用戶已通過網頁對您的網站進行身份驗證。
編輯:我已經添加了第三種方法,是進行網頁和嵌入式WebChat框之間進行通信的首選方式。
方法1:在頁面內的用戶的憑證(身份驗證令牌)轉移到聊天機器人是使用的憑據從您的服務器的身份驗證端點開始一個新的對話框
的一種方式與用戶。
然而,爲了這個工作,則需要用戶的IAddress。換句話說,用戶必須事先與您的機器人進行對話,並且您必須將其存儲在某個地方,可能位於數據庫中。
例如,這裏將是你的服務器的代碼(這是的NodeJS):
//where user is sent after authenticating through web page
server.post("/authenticated", function(req, res){
//get user iaddress from database using credentials
//(you will need the Iaddress of the user to begin a dialog)
var address = getAddressFromDB(req.body.credentials)
//then use beginDialog to start a new dialog with the user you just authenticated
//(this dialog route will only be accessible from here to guarantee authentication)
bot.beginDialog(address, "/authenticated", { userAuthToken: auth_token });
//success
res.status(200);
res.end();
});
//user is sent here from the above bot.beginDialog() call
bot.dialog("/authenticated", function(session, args){
//extract credentials (auth token) from args
var authToken = args.userAuthToken;
//use auth token here.......
});
這樣,你會在機器人對話端點進行正常的邏輯來創建和處理支持票。如果在稍後的對話路線中需要,您甚至可以將authToken
存儲在session
對象內。 session.userData.authToken = authToken;
方法2:
另外,你可以驗證用戶的方式通過瀑布對話框僅僅是通過聊天窗口本身。 然而,這不會真正解決您的用戶驗證兩次的問題,但它可以解決用戶不得不離開當前網頁進行身份驗證的問題。
//begin user authentication here
bot.dialog("/get_username", [
function(session){
//prompt user for username here
botbuilder.Prompts.text(session, "Hello, what is your username?");
},
function(session, results){
//store username
session.userData.username = results.response;
//begin new dialogue
session.beginDialog("/get_password");
}
]);
bot.dialog("/get_password", [
function(session){
//prompt user for password here
botbuilder.Prompts.text(session, "What is your password?");
},
function(session, results){
//store password
session.userData.password = results.response;
//check credentials
if(checkCredentials(session.userData.username, session.userData.password){
//good credentials, send to post-authentication dialog
session.beginDialog("/authenticated");
} else {
//bad credentials
//reset user data and retry
session.userData.username = "";
session.userData.password = "";
session.beginDialog("/get_username");
}
}
]);
You can actually check out a working example of the above Method 2 code here.
方法3::
具有網頁的優選方式與通信
機器人程序將通過輸入他們的憑證的過程中引導用戶嵌入WebChat機器人是通過Direct Line REST API,允許您創建一個「backchannel」。
使用WebChat控件(which you can download and learn about from the repo here),您可以設置嵌入式機器人和網頁,通過監聽和廣播您定義的事件來相互通信。
You can see a great example of this by checking out this example code that shows the client side.
While this code demonstrates what the bot & server-side code is doing behind the scenes.
然後,您可以使用此方法讓你的機器人偵聽來自你的網頁的認證活動,而當用戶進行身份驗證,播出活動與附着,使所需憑證他們可以被你的機器人使用。
我希望這有助於!