La pagina mostra come utilizzare gli endpoint di chat come descritto in Endpoint API della piattaforma di chat.
Terminologia
Per chiarezza, ecco alcune definizioni importanti da tenere a mente quando utilizzi questo documento.
Cliente:il cliente di Contact Center AI Platform (CCAI Platform) che implementa l'API della piattaforma di chat nel proprio software.
Consumatore:il software che invia richieste all'API della piattaforma di chat.
Utente finale:l'utente del software del cliente che sta tentando di avviare una chat con un agente.
Autenticazione webhook
L'API della piattaforma di chat comunica gli eventi che si verificano durante la chat al consumatore inviando richieste webhook al server del consumatore. I payload e i tipi di webhook sono definiti nella specifica API. Ogni richiesta webhook contiene due intestazioni, X-Signature e X-Signature-Timestamp.
X-Signature contiene una firma webhook con il seguente formato:
primary=<primary_signature> secondary=<secondary_signature>
Le firme primaria e secondaria sono un digest sha256 con codifica base64 dei segreti del webhook primario o secondario, rispettivamente, con una stringa concatenata dell'intestazione X-Signature-Timestamp e del payload JSON della richiesta.
Di seguito è riportato un esempio di implementazione dell'autorizzazione per le richieste webhook in un'app Ruby on Rails di esempio:
def authorize_webhook
# In a real consumer use case, these webhook secrets would be
# stored/retrieved along with other application secrets, however the application chooses to do that
primary_secret = @company.primary_webhook_secret
secondary_secret = @company..secondary_webhook_secret
signature_header = request.headers['X-Signature']
timestamp_header = request.headers['X-Signature-Timestamp']
if signature_header.present? && timestamp_header.present?
# Header will be in the format "primary=abcdefg12341234 secondary=qwertyuiop567890" if a tenant has both webhook
# secrets generated in Contact Center AI Platform, otherwise it will be in the format ""primary=abcdefg12341234"
primary_signature, secondary_signature = signature_header.scan(/primary=(.*)\ssecondary=(.*)/).flatten
# Optional: check age of request timestamp to protect against replays
# raise UnauthorizedException unless Time.now - timestamp_header.to_time < 1.minute
# String value of the request body JSON
payload = request.body.read
expected_primary_signature = Base64.strict_encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::SHA256.new, primary_secret, "#{timestamp_header}#{payload}"))
expected_secondary_signature = Base64.strict_encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::SHA256.new, secondary_secret, "#{timestamp_header}#{payload}"))
# Only one signature needs to be valid, this allows for easier rotation of secrets in the Contact Center AI Platform developer portal
if primary_signature == expected_primary_signature || primary_signature == expected_secondary_signature ||
secondary_signature == expected_primary_signature || secondary_signature == expected_secondary_signature
true
else
head :unauthorized
end
else
head :bad_request
end
end
Panoramica
In generale, il flusso di base di una conversazione API della piattaforma di chat dovrebbe essere il seguente. I punti chiave sono numerati e vengono fornite note per un contesto aggiuntivo. Tieni presente che il cliente è responsabile solo dell'implementazione della parte "Cliente" del diagramma, mentre Contact Center AI Platform gestisce le parti del diagramma relative al nostro sistema e all'agente. La loro inclusione nel diagramma ha lo scopo di fornire al lettore il contesto del flusso complessivo di una chat.

Creare utenti finali
Le chat richiedono un ID utente finale valido al momento della creazione, il che significa che un utente finale deve esistere nel sistema Contact Center AI Platform prima della creazione di una chat.
Gli utenti finali vengono identificati in modo univoco dall'attributo
identifier, che è un valore stringa fornito dal consumatore. È possibile che un utente finale esista già nel sistema se ha utilizzato gli SDK web o mobile. L'endpointPOST /end_usersviene implementato come upsert idempotente, quindi nel caso di un utente finale esistente, il tentativo di crearlo di nuovo aggiornerà tutti i dati modificati e restituirà le informazioni dell'utente finale.
Creare chat
Per creare chat utilizzando l'API della piattaforma di chat, segui questi passaggi:
Gestione dei nuovi payload di chat: il processo di inizializzazione della chat avviene in modo asincrono rispetto alla richiesta
POST /chats. Per questo motivo, l'eventochat_createdpotrebbe essere ricevuto prima o dopo la risposta dell'API dall'endpoint di creazione diPOST /chats. Ti consigliamo di gestire l'eventochat_createde la risposta dell'API di creazione della chat in modo idempotente per evitare bug nel consumer.Creazione di chat con trascrizioni:l'API della piattaforma di chat supporta la creazione di una chat con la trascrizione di una conversazione esistente, per uno scenario in cui una chat si svolge all'interno della piattaforma di un cliente, ad esempio con un chatbot, prima di essere inviata a Contact Center AI Platform. In questo modo, l'agente che risponde alla chat dispone di informazioni aggiuntive sulla sessione di chat e si evita che l'utente finale si ripeta. Per il formato del payload della trascrizione, consulta chat_platform_openapi.yaml.
L'agente virtuale di selezione della coda
Per semplificare la selezione dei menu per i consumer di API, l'API della piattaforma di chat è progettata per essere utilizzata insieme a un agente virtuale Dialogflow per aiutare a posizionare in coda le nuove chat.
Per configurare l'agente virtuale, devi svolgere i seguenti passaggi:
Crea un agente virtuale designato a questo scopo e assegnagli una coda. Tutte le nuove chat create dall'API della piattaforma di chat devono essere create in questa coda. La creazione e la configurazione di un nuovo agente virtuale non rientrano nell'ambito di questo documento.
Quando crei una nuova chat con l'endpoint POST o chats, includi un payload di contesto personalizzato che includa alcune informazioni sulla chat creata che l'agente virtuale può utilizzare per determinare a quale coda deve essere indirizzata la chat. Il payload di contesto può contenere qualsiasi dato personalizzato definito dal cliente, ma deve avere il seguente formato per essere accessibile all'agente virtuale assegnato alla coda.
- Esempio:
"context": {"value": {"foo": "bar" } }consentirebbe all'agente virtuale di leggere$session.params.context.foocon un valore dibar.
- Esempio:
Utilizzando i dati contenuti nel campo di contesto, l'agente virtuale (in base alla configurazione del cliente) riassegna la chat alla coda selezionata. Se non è disponibile alcun agente nella coda di destinazione (ad esempio in uno scenario in cui una coda è fuori orario o ha superato la capacità), la riassegnazione viene deviata e il consumatore riceve un webhook che indica il motivo del reindirizzamento e le opzioni di reindirizzamento disponibili.
Deviazioni delle riassegnazioni: le riassegnazioni delle chat nell'API della piattaforma di chat supportano le seguenti opzioni di deviazione, se configurate nel portale Contact Center AI Platform:
Email: chiedi all'utente finale di inviare un'email all'assistenza e termina la chat. Quando un utente finale seleziona questa opzione, dopo l'invio dell'email, il cliente dovrà contrassegnare la chat come deviata e terminata utilizzando l'endpoint
PATCH /chats/:idcon i seguenti parametri nel corpo della richiesta:"status": "finished" , "escalation_id": <id of escalation> ,e"deflection_channel": "email"Continua con l'agente virtuale: tecnicamente questa è un'opzione di deflezione valida, ma non ha senso utilizzare l'agente virtuale di selezione della coda perché l'agente virtuale cercherebbe di riassegnare la chat.
Continua ad attendere l'agente: questa opzione può essere utilizzata solo per le riassegnazioni con motivo
over_capacity. Se l'utente finale sceglie questa opzione, aggiorna la deviazione dell'escalation conPATCH chats/:id/escalations/:id with deflection_channel=human_agent- Link di self-service esterno: avvisa l'utente finale che la selezione di un link
fornito nel self-service terminerà la chat. Se viene selezionato un link, termina
la chat e utilizza
external_linkper il parametrodeflection_channel
- Link di self-service esterno: avvisa l'utente finale che la selezione di un link
fornito nel self-service terminerà la chat. Se viene selezionato un link, termina
la chat e utilizza
Inviare e ricevere messaggi
Per inviare o ricevere messaggi:
Contenuto di testo: per inviare messaggi di testo, utilizza l'endpoint
POST /chats/:id/messagecome definito nella documentazione dell'API. Per ricevere messaggi, ascolta l'evento webhookmessage_received. Tieni presente che il consumer dell'API riceverà un eventomessage_receivedper tutti i messaggi inviati utilizzando l'API, inclusi i messaggi inviati dall'utente finale.Contenuti di foto e video: i contenuti di foto e video vengono inviati recuperando un URL di caricamento pre-firmato per un servizio Cloud Storage configurato da Contact Center AI Platform, caricandoli nel servizio di archiviazione e poi inviando l'URL di archiviazione in un payload del messaggio alla Contact Center AI Platform.
Recupero dell'URL pre-firmato: recupera un URL di caricamento pre-firmato da Contact Center AI Platform utilizzando
POST /v1/chats/:chat_id/photos/uploadoPOST /v1/chats/:chat_id/videos/upload endpoints. Questo endpoint restituisce un URL firmato, insieme a una raccolta di campi da inoltrare al servizio di archiviazione durante il caricamento del file. I caricamenti pre-firmati presentano le seguenti limitazioni:Content-Type è
image/jpegper le foto evideo/mp4per i video.La dimensione massima della foto è 2 MB. La dimensione massima del video è 20 MB.
Il tempo di scadenza è di 5 minuti.
Il cliente deve ridimensionare e regolare l'orientamento della foto prima del caricamento.
Ogni URL pre-firmato è per una singola foto o un singolo video. Per inviare più allegati, devi richiedere un URL pre-firmato per ciascuno.
Caricamento del file multimediale: per caricare il file multimediale, invia una richiesta POST all'URL pre-firmato recuperato nel passaggio 2a con quanto segue nel corpo della richiesta:
"file": il file da caricareTutti i campi restituiti nell'oggetto fields nella richiesta di URL pre-firmato.
Aggiunta del file multimediale alla chat: per aggiungere il file multimediale alla chat, utilizza l'endpoint
POST /chats/:id/photosoPOST /chats/:id/videos. Tieni presente che l'endpoint delle foto supporta l'invio di un array di foto, mentre l'endpoint dei video supporta un solo video alla volta.Il parametro del corpo della richiesta
s3_pathdeve avere lo stesso valore del campokeydella risposta dell'URL pre-firmato.Se la richiesta ha esito positivo, vengono restituiti due campi. Ti consigliamo di salvare o memorizzare nella cache una mappatura di
media_idall'URL nel consumer API, poiché tutti i contenuti multimediali nei messaggi di chat faranno riferimento solo amedia_id.url: l'URL di S3 o Cloud Storage di sola lettura in cui si trova il file.media_id: l'ID del file multimediale in Contact Center AI Platform. Questo è l'ID con cui verrà fatto riferimento ai contenuti multimediali nei payload della chat.
Invio del file multimediale come messaggio di chat: per inviare il file multimediale come messaggio di chat, invia il seguente payload a
POST /chats/:id/message endpoint:
{ "from_user_id": <id of end user>, "message": "type": <"photo" or "video">, "content": { "media_id": < media_id returned as described in 2.c > } }
Aspettati chiavi JSON non riconosciute nelle risposte API
Tutti gli aggiornamenti delle API sono compatibili con le versioni precedenti. Ci riserviamo il diritto di introdurre nuove chiavi JSON nelle risposte API esistenti in qualsiasi momento. Ti consigliamo di gestire le risposte in modo difensivo ignorando le chiavi non riconosciute per mantenere la funzionalità continua.