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

  1. La chiamata viene inoltrata ad AI4Call
  2. AI4Call si collega al tuo server API
  3. 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:

  1. Sostituisci le funzioni di supporto (identifyCaller, getTicketsForCaller, createTicketInSystem) con chiamate alle tue API o al tuo database.
  2. Assicurati che gli URL nelle risposte (next_url) puntino correttamente ai tuoi endpoint.
  3. Implementa la gestione degli errori e la validazione degli input.
  4. 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.


AI4CALL: potrai finalmente e facilmente integrare l’A.I. per le telefonate nei tuoi sistemi di gestione


In questo link trovi la descrizione del prodotto
https://www.beevoip.it/ai4call-ai-per-le-chiamate-telefoniche.php