Modèles d'intégration des robots de conversation
Integrate 3rd party AI Chat Bots with IBM Security Verify
Introduction
Les chatbots élargissent le moyen d'interaction avec les consommateurs. Dans le contexte de la gestion des identités et des accès des consommateurs (CIAM), les marques peuvent interagir avec les consommateurs de manière logique et automatisée, tout en garantissant la confiance et en offrant une expérience transparente. L'intégration des robots de conversation à l'IAM est un domaine où de nouveaux modèles d'interaction peuvent être mis en place.
IBM Verify peuvent être autorisés à utiliser des robots de conversation pour relever les défis en matière de sécurité afin d'établir et de maintenir la confiance par le biais d'interactions avec les robots de conversation.
Le document suivant décrit les étapes de la configuration d'un Chat Bot IA pour IBM Verify. Ce document précise comment utiliser Watson Assistant avec IBM Verify. IBM Verify peut s'étendre et s'intégrer à d'autres chatbots si nécessaire.
Prérequis
Pour commencer avec les intégrations IBM Verify avec Watson Assistant, les pré-requis suivants sont nécessaires pour cette intégration de chat bot. D'autres intégrations de chat bot sont possibles avec IBM Verify.
- IBM Verify SaaS locataire (essai gratuit disponible)
- S'inscrire à IBM Cloud Functions (niveau gratuit disponible)
- S'inscrire à Watson Assistant (essai gratuit disponible)
Les développeurs doivent être familiarisés avec les chatbots, IBM Verify et les appels d'API REST.
Créer une fonction IBM Cloud
Étapes de la création d'une fonction IBM Cloud
- Cliquez sur Démarrer la création
- Choisissez " Action " dans la catégorie Droits uniques
- Donnez un nom à votre action
- Il servira de référence ultérieurement.
- Choisissez votre langage d' exécution
- Dans la page de code, copiez ce code. Veillez à modifier le tenantid, le clientid et le clientsecret. Ajoutez des méthodes supplémentaires et des appels au repos si nécessaire.
#
#
# main() will be run when you invoke this action
#
# @param Cloud Functions actions accept a single parameter, which must be a JSON object.
#
# @return The output of this action, which must be a JSON object.
#
#
import sys
import os
import requests
import json
import base64
import random
from flask import Flask, request, jsonify
tentantid="https://mytenatn.ice.ibmcloud.com"
clientid="46e458c7-33f4-XXXXXX"
clientsecret="abcdef"
def main(dict):
action = dict.get("action")
if action == "lookup": username = dict.get("userName")
response=accountlookup(username)
return response
if action == "email": otpmethod = dict.get("method")
target = dict.get('target')
response=initiate_email(method=otpmethod, target=target)
return response
if action == "sms": otpmethod = dict.get("method")
target = dict.get('target')
response=initiate_sms(method=otpmethod, target=target)
return response
if action == "verify": txnid = dict.get('txnid')
method = dict.get('method')
otp = dict.get('otp')
response=verify(txnid=txnid, method=method, otp=otp)
return response
if action == "reset": userid = dict.get('userid')
response = pwreset(userid)
return response
if action == "showotp": userid = dict.get('userid')
response = showotp(userid)
response = {'message': "Sorry, I didn't understand"}
return response
def auth():
url = tentantid + ":443/v1.0/endpoint/default/token"
payload = "grant_type=client_credentials&client_id=" + clientid + "&client_secret=" + clientsecret + "&scope=openid"
headers = {
'Content-Type': "application/x-www-form-urlencoded"
}
response = requests.request("POST", url, data=payload, headers=headers)
return response.json()["access_token"]
def showotp():
access_token = auth()
url = tentantid + "/v2.0/factors/otp"
payload = "{\r\n \"correlation\": \"1234\"}"
headers = {
'Authorization': "Bearer "+access_token,
'Content-Type': "application/json"
}
response = requests.request("POST", url, data=payload, headers=headers)
if response.status_code == 202:
resp = {
"txnid": response.json()["id"],
"correlation": response.json()["correlation"],
"otp": response.json()["otp"],
'status_code': 200
}
else:
resp = {
'messages': "Nope.. that didnt work.",
'status_code': 400
}
return resp
def initiate_email(method, target):
access_token = auth()
url = tentantid + "/v1.0/authnmethods/" + method + "/transient/verification"
payload = "{\r\n \"correlation\": \"1234\",\r\n \"otpDeliveryEmailAddress\": \""+target+"\"\r\n}"
headers = {
'Authorization': "Bearer "+access_token,
'Content-Type': "application/json"
}
response = requests.request("POST", url, data=payload, headers=headers)
if response.status_code == 202:
resp = {
"txnid": response.json()["id"],
"correlation": response.json()["correlation"],
'status_code': 200
}
else:
resp = {
'messages': "Nope.. that didnt work.",
'status_code': 400
}
return resp
def initiate_sms(method, target):
access_token = auth()
url = tentantid + "/v1.0/authnmethods/" + method + "/transient/verification"
payload = "{\r\n \"correlation\": \"1234\",\r\n \"otpDeliveryMobileNumber\": \""+target+"\"\r\n}"
headers = {
'Authorization': "Bearer "+access_token,
'Content-Type': "application/json"
}
response = requests.request("POST", url, data=payload, headers=headers)
if response.status_code == 202:
resp = {
"txnid": response.json()["id"],
"correlation": response.json()["correlation"],
'status_code': 200
}
else:
resp = {
'messages': "Nope.. that didnt work.",
'status_code': 400
}
return resp
def accountlookup(userName):
access_token = auth()
url = tentantid + "/v2.0/Users?filter=userName eq \"" + userName + "\""
payload = ""
headers = {
'Authorization': "Bearer "+access_token,
}
response = requests.request("GET", url, data=payload, headers=headers)
print(response.text)
if response.status_code == 200:
if response.json()["totalResults"] != 0:
resp={
'message': "I found your account.",
'user_email': response.json()["Resources"][0]["emails"][0]["value"],
'user_id': response.json()["Resources"][0]["id"],
'cell_phone': response.json()["Resources"][0]["phoneNumbers"][0]["value"],
'status_code': 200
}
else:
resp = {'messages': "I'm sorry, I can't find that account. Can you try again?",
'status_code': 400
}
else:
resp = {'messages': "Oops... that didnt work.",
'status_code': 400
}
return resp
def verify(txnid, method, otp):
access_token = auth()
url = tentantid + "/v1.0/authnmethods/" + method + "/transient/verification/" + txnid
print("URL "+url)
payload = "{\r\n \"otp\": \"" + otp + "\"\r\n}"
print(payload)
headers = {
'Authorization': "Bearer "+access_token,
'Content-Type': "application/json"
}
response = requests.request("POST", url, data=payload, headers=headers)
print(response.text)
if response.status_code == 200:
resp = {
"bbb_verified": "true",
'messages':"Perfect, the code was successful. We're good to go!",
'status_code': 200
}
else:
resp = {'messages': "Nope.. that didnt work.",
'status_code': 400}
return resp
def pwreset(userid):
access_token = auth()
url = tentantid + "/v2.0/Users/" + userid + "/passwordResetter"
print("URL "+url)
payload = """{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:PatchOp"
],
"operations": [
{
"op": "replace",
"value": {
"password": "auto-generate",
"urn:ietf:params:scim:schemas:extension:ibm:2.0:Notification": {
"notifyType": "EMAIL",
"notifyPassword": true,
"notifyManager": false
}
}
}
]
}"""
headers = {
'Authorization': "Bearer "+access_token,
'Content-Type': "application/scim+json"
}
response = requests.request("PATCH", url, data=payload, headers=headers)
print(response.text)
if response.status_code == 204:
resp = {
'messages': "Your password has been reset successfully. Please check your email for the new password.",
'status_code': 200
}
else:
resp = {
'messages': "The password reset operation failed. Please try again.",
'status_code': 400
}
return resp
- Allez sur Endpoint et récupérez le site URL. Cette adresse url est nécessaire pour l'étape suivante.

Créer la configuration de Watson Assistant
- Commencez par lancer l'application Watson Assistant
- Accédez à la page de l'outil Watson Assistant (spécifique à votre compte)
- Créer un nouvel assistant (ou utiliser "Mon premier assistant")
- Sélectionnez "Ajouter une compétence de dialogue"

- "Créer une compétence

- Sélectionnez Options et entrez les webhooks. C'est ici que vous devez coller l'url de l'étape précédente, assurez-vous d'ajouter.json à la fin

- Dans la section de dialogue, créez les nœuds et les flux nécessaires.

- Un nœud (compte de consultation) utilise le crochet Web en transmettant une action et les données requises :


- Une fois que vous avez défini le flux, utilisez la prévisualisation pour le tester :
- Retournez à l'onglet principal de votre assistant et sélectionnez "Ajouter des intégrations"
- Sélectionnez l'onglet intégré et copiez le code html pour l'étape suivante.
IBM Verify Configuration
Intégrer le code html de l'étape précédente dans toutes les pages personnalisées de IBM Verify si nécessaire. Cela peut se faire sur la page de connexion, les pages d'erreur, le mot de passe oublié, etc. Pour plus d'informations sur l'image de marque, voir le document sur l'image de marque et la personnalisation.
Diana Jorgenson, IBM Sécurité
Martin Schmidt, IBM Sécurité
Updated about 1 month ago
