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 Security Verify peut être activé pour utiliser des chatbots afin d'intégrer des défis de sécurité pour établir et maintenir la confiance par le biais d'interactions avec les chatbots.
Le document suivant décrit les étapes de la configuration d'un chatbot AI pour IBM Security Verify. Ce document explique comment utiliser Watson Assistant avec IBM Security Verify. IBM Security Verify peut s'étendre et s'intégrer à d'autres chatbots si nécessaire.
Prérequis
Pour démarrer les intégrations IBM Security Verify avec Watson Assistant, les prérequis suivants sont nécessaires pour cette intégration de chatbot. D'autres intégrations de robots conversationnels sont possibles avec IBM Security Verify.
- IBM Security Verify SaaS tenant (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 Security Verify et les appels d'API REST.
Créer une fonction IBM Cloud

Étapes de création d'une fonction IBM Cloud
- Cliquez sur Démarrer la création
- Choisissez "Action" dans la catégorie Entités 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 REST 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 à Endpoint et obtenez l'URL. Cette adresse URL est nécessaire pour l'étape suivante.
Créer la configuration de Watson Assistant
- Commencez par lancer Watson Assistant
- Accédez à la page de l'outil Watson Assistant (spécifique à votre compte)
- Créez un nouvel assistant (ou utilisez "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 dialogue, créez les nœuds et les flux nécessaires.
- Un nœud (Compte de consultation) utilise le Web Hook 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 Security Verify Configuration
Incorporez le code HTML de l'étape précédente dans toutes les pages personnalisées IBM Security 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, consultez le document sur l'image de marque et la personnalisation.
Diana Jorgenson, IBM Security
Martin Schmidt, IBM Security
Updated 21 days ago