Se hai già un sistema di ticket con accesso alle API o al database e desideri integrarlo con le telefonate, AI4Call offre una soluzione flessibile e potente. In questo post, esploreremo come implementare questa integrazione con un esempio di codice dettagliato e commentato.
Panoramica del Processo
- La chiamata viene inoltrata ad AI4Call
- AI4Call si collega al tuo server API
- Il tuo server gestisce la chiamata in base alle tue esigenze specifiche
Implementazione
Ecco un esempio di codice Node.js che illustra come potresti implementare questa integrazione:
const express = require('express');
const bodyParser = require('body-parser');
const axios = require('axios');
const app = express();
app.use(bodyParser.json());
// Simula un database di ticket
const ticketDB = {
// ... (aggiungi qui i tuoi ticket di esempio)
};
// Endpoint iniziale chiamato da AI4Call
app.post('/incoming-call', async (req, res) => {
const { callerNumber } = req.body;
// Identifica il chiamante e cerca ticket associati
const caller = await identifyCaller(callerNumber);
const tickets = await getTicketsForCaller(caller.id);
if (tickets.length > 0) {
// Se ci sono ticket esistenti, offri opzioni
res.json({
text: `Benvenuto ${caller.name}. Hai ${tickets.length} ticket aperti. Digita 1 per controllare lo stato, 2 per aggiornarne uno, o 3 per aprirne uno nuovo.`,
action: "ASR_DTMF",
key: "choice",
next_url: "https://your-server.com/handle-ticket-choice",
min_length: 1,
max_length: 1
});
} else {
// Se non ci sono ticket, vai direttamente alla creazione
res.json({
text: `Benvenuto ${caller.name}. Non hai ticket aperti. Creiamone uno nuovo. Quale è l'oggetto del tuo problema?`,
action: "ASR_string",
key: "ticketSubject",
next_url: "https://your-server.com/create-ticket"
});
}
});
// Gestisce la scelta dell'utente per i ticket esistenti
app.post('/handle-ticket-choice', async (req, res) => {
const { choice, callerNumber } = req.body;
const caller = await identifyCaller(callerNumber);
const tickets = await getTicketsForCaller(caller.id);
switch(choice) {
case "1":
// Controlla lo stato del ticket
const latestTicket = tickets[0];
res.json({
text: `Il tuo ultimo ticket riguarda "${latestTicket.subject}" ed è attualmente ${latestTicket.status}. Vuoi ulteriori dettagli? Digita 1 per sì, 2 per no.`,
action: "ASR_DTMF",
key: "moreDetails",
next_url: "https://your-server.com/ticket-details"
});
break;
case "2":
// Aggiorna un ticket esistente
res.json({
text: `Quale ticket vuoi aggiornare? Digita il numero corrispondente.`,
action: "ASR_DTMF",
key: "ticketToUpdate",
next_url: "https://your-server.com/update-ticket",
min_length: 1,
max_length: tickets.length.toString().length
});
break;
case "3":
// Crea un nuovo ticket
res.json({
text: `Creiamo un nuovo ticket. Quale è l'oggetto del tuo problema?`,
action: "ASR_string",
key: "ticketSubject",
next_url: "https://your-server.com/create-ticket"
});
break;
default:
res.json({
text: "Scelta non valida. Per favore, riprova.",
action: "ASR_DTMF",
key: "choice",
next_url: "https://your-server.com/handle-ticket-choice",
min_length: 1,
max_length: 1
});
}
});
// Crea un nuovo ticket
app.post('/create-ticket', async (req, res) => {
const { ticketSubject, callerNumber } = req.body;
const caller = await identifyCaller(callerNumber);
// Qui andresti a creare effettivamente il ticket nel tuo sistema
const newTicket = await createTicketInSystem(caller.id, ticketSubject);
res.json({
text: `Grazie. Ho creato un nuovo ticket con oggetto "${ticketSubject}". Il numero del tuo ticket è ${newTicket.id}. Un nostro operatore ti contatterà presto. C'è altro in cui posso aiutarti?`,
action: "ASR_DTMF",
key: "moreHelp",
next_url: "https://your-server.com/more-help",
min_length: 1,
max_length: 1
});
});
// Funzioni di supporto (da implementare con la tua logica specifica)
async function identifyCaller(phoneNumber) {
// Implementa la logica per identificare il chiamante dal numero di telefono
}
async function getTicketsForCaller(callerId) {
// Implementa la logica per ottenere i ticket associati al chiamante
}
async function createTicketInSystem(callerId, subject) {
// Implementa la logica per creare un nuovo ticket nel tuo sistema
}
app.listen(3000, () => console.log('Server running on port 3000'));
Spiegazione del Codice
Questo codice implementa un server Express che gestisce le chiamate inoltrate da AI4Call. Ecco i punti chiave:
- Identificazione del Chiamante: Usa il numero di telefono per identificare il cliente.
- Verifica dei Ticket Esistenti: Controlla se ci sono ticket aperti per il chiamante.
- Gestione delle Opzioni: Offre diverse opzioni basate sui ticket esistenti.
- Creazione di Nuovi Ticket: Permette di creare nuovi ticket direttamente tramite la chiamata.
- Aggiornamento dei Ticket: Offre la possibilità di aggiornare i ticket esistenti.
Implementazione Pratica
Per implementare questo sistema nel tuo ambiente:
- Sostituisci le funzioni di supporto (identifyCaller, getTicketsForCaller, createTicketInSystem) con chiamate alle tue API o al tuo database.
- Assicurati che gli URL nelle risposte (next_url) puntino correttamente ai tuoi endpoint.
- Implementa la gestione degli errori e la validazione degli input.
- Aggiungi logica per gestire scenari più complessi, come l’aggiornamento di ticket specifici o la prioritizzazione.
Conclusione
Integrando AI4Call con il tuo sistema di ticket esistente, puoi creare un’esperienza cliente fluida e efficiente. Questo approccio ti permette di automatizzare molti aspetti del supporto clienti, riducendo il carico di lavoro manuale e migliorando i tempi di risposta.
Ricorda di testare approfonditamente il tuo sistema e di considerare tutti i possibili scenari d’uso per garantire un’esperienza utente ottimale.