Utilice este SDK para crear aplicaciones basadas en Watson en Unity.
A partir de esta versión principal, 6.0.0, la API Tone Analyzer se eliminó en preparación para su desuso. Si deseas seguir usando este SDK para realizar llamadas a Tone Analyzer hasta su desuso final, tendrás que usar una versión anterior. El 24 de febrero de 2022, IBM anunció la desactivación del servicio Tone Analyzer. El servicio dejará de estar disponible a partir del 24 de febrero de 2023. A partir del 24 de febrero de 2022, no podrás crear nuevas instancias. Las instancias existentes serán compatibles hasta el 24 de febrero de 2023.
Como alternativa, le recomendamos que considere migrar al servicio Natural Language Understanding en IBM Cloud. Con Natural Language Understanding, el análisis de tonos se realiza mediante el uso de un modelo de clasificación prediseñado, que proporciona una manera sencilla de detectar tonos de lenguaje en texto escrito. Para obtener más información, consulte Migración del punto final de Watson Tone Analyzer Customer Engagement a Natural Language Understanding.
A partir de esta versión principal, 6.0.0, la API NLC se eliminó en preparación para su desuso. Si deseas seguir usando este SDK para realizar llamadas a NLC hasta su desuso final, tendrás que usar una versión anterior. El 9 de agosto de 2021, IBM anunció la desactivación del servicio Clasificador de lenguaje natural. El servicio dejará de estar disponible a partir del 8 de agosto de 2022. A partir del 9 de septiembre de 2021, no podrás crear nuevas instancias. Las instancias existentes serán compatibles hasta el 8 de agosto de 2022. Cualquier instancia que aún exista en esa fecha se eliminará.
Como alternativa, le recomendamos que considere migrar al servicio Natural Language Understanding en IBM Cloud, que utiliza el aprendizaje profundo para extraer datos e información del texto, como palabras clave, categorías, sentimientos, emociones y sintaxis, junto con texto avanzado con múltiples etiquetas. capacidades de clasificación, para proporcionar información aún más rica para su negocio o industria. Para obtener más información, consulte Migración a la comprensión del lenguaje natural.
Las URL de punto final de la API de Watson en watsonplatform.net están cambiando y no funcionarán después del 26 de mayo de 2021. Actualice sus llamadas para utilizar las URL de punto final más nuevas. Para obtener más información, consulte https://cloud.ibm.com/docs/watson?topic=watson-endpoint-change.
Asegúrese de tener los siguientes requisitos previos:
Actualizar MacOS a Mojave puede desactivar el micrófono para Unity. Si tiene este problema, consulte estas pautas para configurar el micrófono para Mojave.
Puede obtener la última versión del SDK haciendo clic aquí. También deberá descargar la última versión de IBM Unity SDK Core haciendo clic aquí.
Mueva los directorios unity-sdk
y unity-sdk-core
al directorio Assets
de su proyecto Unity. Opcional: cambie el nombre del directorio SDK de unity-sdk
a Watson
y el directorio Core de unity-sdk-core
a IBMSdkCore
.
Para crear instancias de servicios Watson y sus credenciales, siga los pasos a continuación.
Nota: Las credenciales del servicio son diferentes del nombre de usuario y la contraseña de su cuenta de IBM Cloud.
Las credenciales para cada servicio contienen un username
, password
y url
de punto final o una apikey
y una url
de punto final.
ADVERTENCIA: Usted es responsable de proteger sus propias credenciales. ¡Cualquier usuario con sus credenciales de servicio puede acceder a sus instancias de servicio!
Para comenzar con un servicio Watson en Unity, siga el enlace para ver el código.
Los servicios de Watson están migrando a la autenticación de gestión de acceso e identidad (IAM) basada en tokens.
Para saber qué autenticación usar, consulte las credenciales del servicio. Las credenciales de servicio para la autenticación se encuentran de la misma manera para todos los servicios de Watson:
url
y apikey
o username
y password
.En su código, puede usar estos valores en el constructor del servicio o con una llamada a un método después de crear una instancia de su servicio.
Algunos servicios utilizan autenticación de gestión de acceso e identidad (IAM) basada en tokens. La autenticación IAM utiliza una clave API de servicio para obtener un token de acceso que se pasa con la llamada. Los tokens de acceso son válidos durante aproximadamente una hora y deben regenerarse.
Usted proporciona una clave API del servicio IAM o un token de acceso :
HasIamTokenData()
devuelva true
. Authenticator authenticator ;
AssistantService assistant ;
string versionDate = "<service-version-date>" ;
IEnumerator TokenExample ( )
{
// Create authenticator using the IAM token options
authenticator = new IamAuthenticator ( apikey : "<iam-api-key>" ) ;
while ( ! authenticator . CanAuthenticate ( ) )
yield return null ;
assistant = new AssistantService ( versionDate , authenticator ) ;
assistant . SetServiceUrl ( "<service-url>" ) ;
assistant . ListWorkspaces ( callback : OnListWorkspaces ) ;
}
private void OnListWorkspaces ( DetailedResponse < WorkspaceCollection > response , IBMError error )
{
Log . Debug ( "OnListWorkspaces()" , "Response: {0}" , response . Response ) ;
}
Authenticator authenticator ;
AssistantService assistant ;
string versionDate = "<service-version-date>" ;
void TokenExample ( )
{
// Create authenticator using the Bearer Token
authenticator = new BearerTokenAuthenticator ( "<bearer-token>" ) ;
assistant = new AssistantService ( versionDate , authenticator ) ;
assistant . SetServiceUrl ( "<service-url>" ) ;
assistant . ListWorkspaces ( callback : OnListWorkspaces ) ;
}
private void OnListWorkspaces ( DetailedResponse < WorkspaceCollection > response , IBMError error )
{
Log . Debug ( "OnListWorkspaces()" , "Response: {0}" , response . Response ) ;
}
Authenticator authenticator ;
AssistantService assistant ;
string versionDate = "<service-version-date>" ;
void UsernamePasswordExample ( )
{
Authenticator authenticator = new BasicAuthenticator ( "<username>" , "<password>" , "<url>" ) ;
assistant = new AssistantService ( versionDate , authenticator ) ;
assistant . SetServiceUrl ( "<service-url>" ) ;
}
Hay dos formas de proporcionar el autenticador que encontró anteriormente al SDK para su autenticación.
Con un archivo de credenciales, sólo necesita colocar el archivo en el lugar correcto y el SDK hará el trabajo de analizarlo y autenticarlo. Puede obtener este archivo haciendo clic en el botón Descargar de las credenciales en la pestaña Administrar de su instancia de servicio.
El archivo descargado se llamará ibm-credentials.env
. Este es el nombre que buscará el SDK y debe conservarse a menos que desee configurar la ruta del archivo (más sobre esto más adelante). El SDK buscará su archivo ibm-credentials.env
en los siguientes lugares (en orden):
Siempre que lo configure correctamente, no tiene que preocuparse por configurar ninguna opción de autenticación en su código. Entonces, por ejemplo, si creó y descargó el archivo de credenciales para su instancia de Discovery, solo necesita hacer lo siguiente:
public IEnumerator ExampleAutoService ( )
{
Assistant assistantService = new Assistant ( "2019-04-03" ) ;
// Wait for authorization token
while ( ! assistantService . Authenticator . CanAuthenticate ( ) )
yield return null ;
var listWorkspacesResult = assistantService . ListWorkspaces ( ) ;
}
¡Y eso es todo!
Si está utilizando más de un servicio a la vez en su código y obtiene dos archivos ibm-credentials.env
diferentes, simplemente junte el contenido en un archivo ibm-credentials.env
y el SDK se encargará de asignar el autenticador a sus servicios apropiados. .
Si desea configurar la ubicación/nombre de su archivo de credenciales, puede configurar una variable de entorno llamada IBM_CREDENTIALS_FILE
. Esto tendrá prioridad sobre las ubicaciones especificadas anteriormente. Así es como puedes hacerlo:
export IBM_CREDENTIALS_FILE= " <path> "
donde <path>
es algo así como /home/user/Downloads/<file_name>.env
.
Si prefiere establecer valores de autenticación manualmente en su código, el SDK también lo admite. La forma en que hará esto depende del tipo de autenticador que le proporcione su instancia de servicio.
Se requiere una devolución de llamada exitosa. Puede especificar el tipo de devolución en la devolución de llamada.
AssistantService assistant ;
string assistantVersionDate = "<assistant-version-date>" ;
Authenticator assistantAuthenticator ;
string workspaceId = "<workspaceId>" ;
DiscoveryService discovery ;
string discoveryVersionDate = "<discovery-version-date>" ;
Authenticator discoveryAuthenticator ;
private void Example ( )
{
assistant = new AssistantService ( assistantVersionDate , assistantAuthenticator ) ;
assistant . SetServiceUrl ( "<service-url>" ) ;
discovery = new DiscoveryService ( discoveryVersionDate , discoveryAuthenticator ) ;
discovery . SetServiceUrl ( "<service-url>" ) ;
// Call with sepcific callbacks
assistant . Message (
callback : OnMessage ,
workspaceId : workspaceId
) ;
discovery . ListEnvironments (
callback : OnGetEnvironments
) ;
}
private void OnMessage ( DetailedResponse < MessageResponse > response , IBMError error )
{
Log . Debug ( "ExampleCallback.OnMessage()" , "Response received: {0}" , response . Response ) ;
}
private void OnGetEnvironments ( DetailedResponse < ListEnvironmentsResponse > response , IBMError error )
{
Log . Debug ( "ExampleCallback.OnGetEnvironments()" , "Response received: {0}" , response . Response ) ;
}
Dado que la firma de devolución de llamada exitosa es genérica y la devolución de llamada fallida siempre tiene la misma firma, puede usar un único conjunto de devoluciones de llamada para manejar múltiples llamadas.
AssistantService assistant ;
string assistantVersionDate = "<assistant-version-date>" ;
Authenticator assistantAuthenticator ;
string workspaceId = "<workspaceId>" ;
DiscoveryService discovery ;
string discoveryVersionDate = "<discovery-version-date>" ;
Authenticator discoveryAuthenticator ;
private void Example ( )
{
assistant = new AssistantService ( assistantVersionDate , assistantAuthenticator ) ;
assistant . SetServiceUrl ( "<service-url>" ) ;
// Call with generic callbacks
JObject input = new JObject ( ) ;
input . Add ( "text" , "" ) ;
assistant . Message (
callback : OnSuccess ,
workspaceId : workspaceId ,
input : input
) ;
discovery = new DiscoveryService ( discoveryVersionDate , discoveryAuthenticator ) ;
discovery . SetServiceUrl ( "<service-url>" ) ;
discovery . ListEnvironments (
callback : OnSuccess
) ;
}
// Generic success callback
private void OnSuccess < T > ( DetailedResponse < T > resp , IBMError error )
{
Log . Debug ( "ExampleCallback.OnSuccess()" , "Response received: {0}" , resp . Response ) ;
}
También puedes utilizar una devolución de llamada anónima.
AssistantService assistant ;
string assistantVersionDate = "<assistant-version-date>" ;
Authenticator assistantAuthenticator ;
string workspaceId = "<workspaceId>" ;
private void Example ( )
{
assistant = new AssistantService ( assistantVersionDate , assistantAuthenticator ) ;
assistant . ListWorkspaces (
callback : ( DetailedResponse < WorkspaceCollection > response , IBMError error ) =>
{
Log . Debug ( "ExampleCallback.OnSuccess()" , "ListWorkspaces result: {0}" , response . Response ) ;
} ,
pageLimit : 1 ,
includeCount : true ,
sort : "-name" ,
includeAudit : true
) ;
assistant . SetServiceUrl ( "<service-url>" ) ;
}
Puede verificar la respuesta error
para ver si hubo un error en la llamada.
AssistantService assistant ;
string assistantVersionDate = "<assistant-version-date>" ;
Authenticator assistantAuthenticator ;
string workspaceId = "<workspaceId>" ;
private void Example ( )
{
assistant = new AssistantService ( versionDate , authenticator ) ;
assistant . Message ( OnMessage , workspaceId ) ;
}
private void OnMessage ( DetailedResponse < MessageResponse > response , IBMError error )
{
if ( error == null )
{
Log . Debug ( "ExampleCallback.OnMessage()" , "Response received: {0}" , response . Response ) ;
}
else
{
Log . Debug ( "ExampleCallback.OnMessage()" , "Error received: {0}, {1}, {3}" , error . StatusCode , error . ErrorMessage , error . Response ) ;
}
}
Puede enviar encabezados de solicitud personalizados agregándolos al servicio.
AssistantService assistant ;
string assistantVersionDate = "<assistant-version-date>" ;
Authenticator assistantAuthenticator ;
string workspaceId = "<workspaceId>" ;
void Example ( )
{
assistant = new AssistantService ( assistantVersionDate , assistantAuthenticator ) ;
// Add custom header to the REST call
assistant . WithHeader ( "X-Watson-Metadata" , "customer_id=some-assistant-customer-id" ) ;
assistant . Message ( OnSuccess , "<workspace-id>" ) ;
}
private void OnSuccess ( DetailedResponse < MessageResponse > response , IBMError error )
{
Log . Debug ( "ExampleCallback.OnMessage()" , "Response received: {0}" , response . Response ) ;
}
Puede obtener encabezados de respuesta en el objeto headers
en DetailResponse.
AssistantService assistant ;
string assistantVersionDate = "<assistant-version-date>" ;
Authenticator assistantAuthenticator ;
string workspaceId = "<workspaceId>" ;
void Example ( )
{
assistant = new AssistantService ( assistantVersionDate , assistantAuthenticator ) ;
assistant . Message ( OnMessage , "<workspace-id>" ) ;
}
private void OnMessage ( DetailedResponse < MessageResponse > response , IBMError error )
{
// List all headers in the response headers object
foreach ( KeyValuePair < string , object > kvp in response . Headers )
{
Log . Debug ( "ExampleCustomHeader.OnMessage()" , "{0}: {1}" , kvp . Key , kvp . Value ) ;
}
}
Cada llamada al SDK devuelve una respuesta con un ID de transacción en el encabezado X-Global-Transaction-Id
. Junto con la región de la instancia de servicio, este ID ayuda a los equipos de soporte a solucionar problemas a partir de registros relevantes.
public void ExampleGetTransactionId ( )
{
AssistantService service = new AssistantService ( "{version-date}" ) ;
service . ListWorkspaces (
callback : ( DetailedResponse < Workspace > response , IBMError error ) =>
{
if ( error != null )
{
Log . Debug ( "AssistantServiceV1" , "Transaction Id: {0}" , error . ResponseHeaders [ "X-Global-Transaction-Id" ] ) ;
}
else
{
Log . Debug ( "AssistantServiceV1" , "Transaction Id: {0}" , response . Headers [ "X-Global-Transaction-Id" ] ) ;
}
}
) ;
}
Sin embargo, el ID de la transacción no está disponible cuando la API no devuelve una respuesta por algún motivo. En ese caso, puede configurar su propio ID de transacción en la solicitud. Por ejemplo, reemplace <my-unique-transaction-id>
en el siguiente ejemplo con un ID de transacción único.
public void ExampleSetTransactionId ( )
{
AssistantService service = new AssistantService ( "{version-date}" ) ;
service . WithHeader ( "X-Global-Transaction-Id" , "<my-unique-transaction-id>" ) ;
service . ListWorkspaces (
callback : ( DetailedResponse < Workspace > response , IBMError error ) =>
{
if ( error != null )
{
Log . Debug ( "AssistantServiceV1" , "Transaction Id: {0}" , error . ResponseHeaders [ "X-Global-Transaction-Id" ] ) ;
}
else
{
Log . Debug ( "AssistantServiceV1" , "Transaction Id: {0}" , response . Headers [ "X-Global-Transaction-Id" ] ) ;
}
}
) ;
}
Los servicios de Watson han actualizado sus hosts a TLS 1.2. La ubicación de Dallas tiene un punto final TLS 1.0 que funciona para transmisión. Para transmitir en otras regiones, use Unity 2018.2 y configure la versión de Scripting Runtime en Configuración de compilación en .NET 4.x equivalent
Para admitir Speech to Text en versiones anteriores de Unity, cree la instancia en la ubicación de Dallas.
Puede desactivar la verificación SSL al realizar una llamada de servicio.
AssistantService assistant ;
string assistantVersionDate = "<assistant-version-date>" ;
Authenticator assistantAuthenticator ;
string workspaceId = "<workspaceId>" ;
void Example ( )
{
authenticator . DisableSslVerification = true ;
assistant = new AssistantService ( assistantVersionDate , assistantAuthenticator ) ;
// disable ssl verification
assistant . DisableSslVerification = true ;
}
Si su instancia de servicio es de ICP4D, a continuación se muestran dos formas de inicializar el servicio de asistente.
username
, password
, icp4d_url
y authentication_type
El SDK gestionará el token para el usuario.
CloudPakForDataAuthenticator authenticator = new CloudPakForDataAuthenticator ( "<url>" , "<username>" , "<password>" ) ;
while ( ! authenticator . CanAuthenticate ( ) )
{
yield return null ;
}
service = new AssistantService ( versionDate , authenticator ) ;
BearerTokenAuthenticator = new BearerTokenAuthenticator ( "<accessToken>" ) ;
while ( ! authenticator . CanAuthenticate ( ) )
{
yield return null ;
}
service = new AssistantService ( versionDate , authenticator ) ;
El SDK de Watson Unity no da soporte a IBM Cloud Private porque la conexión a través de proxy no está soportada en UnityWebRequest.
La documentación se puede encontrar aquí. También puede acceder a la documentación seleccionando Referencia API en el menú Watson ( Watson -> Referencia API ).
Puede ver vídeos de introducción a IBM Watson SDK para Unity en YouTube.
Si tiene problemas con las API o tiene alguna pregunta sobre los servicios de Watson, consulte Stack Overflow.
Encuentre más proyectos de código abierto en la página de IBM Github.
Esta biblioteca tiene licencia Apache 2.0. El texto completo de la licencia está disponible en LICENCIA.
Consulte CONTRIBUCIÓN.md.
¡Nos encantaría destacar proyectos interesantes de código abierto que utilizan este SDK! Si desea que su proyecto se agregue a la lista, no dude en enviarnos un mensaje vinculándonos a él.