Inapoi la Integrari
🌿

Freshdesk Integration

Conectează VAI Portal cu Freshdesk pentru suport clienți modern, automatizare inteligentă a tichetelor și experiențe excepționale.

Modern UI

Interfață intuitivă și modernă pentru managementul tichetelor.

Smart Automation

Automatizează fluxurile de lucru cu reguli inteligente.

Real-time Updates

Sincronizare instantă a conversațiilor în tichete Freshdesk.

Multi-channel Support

Suport pentru email, chat, social media și telefon.

Arhitectura Integrării

VAI Portal

AI Support Agents

Workflow Engine

Smart Automation

Freshdesk

Modern Helpdesk

REST API & Webhooks

Workflow-uri Automate

First Response

Keyword match

Răspuns automat pentru probleme comune

Action: Template response

Escalation

Sentiment analysis

Escalare automată pentru probleme complexe

Action: Priority increase + L2 assignment

Follow-up

Time-based

Urmărire automată a tichetelor ne rezolvate

Action: Reminder + escalation

Closure

Customer confirmation

Închidere automată a tichetelor rezolvate

Action: CSAT survey + closure

Cazuri de Utilizare

Automated Ticket Creation

Generează tichete Freshdesk când agenții AI identifică probleme.


      VAI Agent → Issue Analysis → Freshdesk API → Ticket Creation
           ↓              ↓              ↓
      Problem Type   Priority Set    Support Group
    

Customer Satisfaction

Colectează feedback automat și monitorizează CSAT scores.


      VAI Agent → Satisfaction Check → Survey Trigger → CSAT Update
           ↓              ↓              ↓
      Resolution     Feedback Form    Dashboard Update
    

Knowledge Base Sync

Sincronizează soluțiile AI cu baza de cunoștințe Freshdesk.


      VAI Agent → Solution Extract → KB Update → Article Publish
           ↓              ↓              ↓
      Best Answer   Content Format    Knowledge Base
    

Exemple de Implementare

Freshdesk API Integration

// Freshdesk API Client Configuration
const axios = require('axios');
const Freshdesk = require('freshdesk-api');

const freshdesk = new Freshdesk(
  process.env.FRESHDESK_DOMAIN,
  process.env.FRESHDESK_API_KEY
);

// Create Ticket from VAI Conversation
async function createFreshdeskTicket(conversationData) {
  const ticketData = {
    description: `**AI Agent Conversation Summary**

**Issue Details:**
- Type: ${conversationData.issueType}
- Priority: ${conversationData.priority}
- Category: ${conversationData.category}

**Conversation Summary:**
${conversationData.fullSummary}

**Customer Information:**
- Email: ${conversationData.userEmail}
- Name: ${conversationData.userName}
- Account ID: ${conversationData.accountId}

**AI Analysis:**
- Sentiment: ${conversationData.sentiment}
- Urgency: ${conversationData.urgency}
- Recommended Action: ${conversationData.recommendedAction}

**Next Steps:**
${conversationData.resolutionPlan}
`,
    subject: conversationData.issueType === 'technical' 
      ? `[AI] Technical Issue: ${conversationData.summary}`
      : `[AI] Customer Inquiry: ${conversationData.summary}`,
    email: conversationData.userEmail,
    priority: conversationData.priority === 'urgent' ? 4 : 2, // 4=Urgent, 2=Medium
    status: 2, // Open
    group_id: determineGroupId(conversationData.issueType),
    custom_fields: {
      vai_conversation_id: conversationData.conversationId,
      vai_agent_type: conversationData.agentType,
      vai_sentiment_score: conversationData.sentimentScore,
      vai_automation_level: conversationData.automationLevel,
      issue_complexity: conversationData.complexity
    }
  };

  try {
    const ticket = await freshdesk.tickets.create(ticketData);
    console.log('Freshdesk ticket created:', ticket.id);
    
    // Add internal note for context
    await freshdesk.notes.create(ticket.id, {
      body: `This ticket was automatically created by VAI AI Agent.
      
Agent Performance:
- Resolution Time: ${conversationData.resolutionTime}s
- Customer Satisfaction: ${conversationData.satisfactionScore}
- Escalation Required: ${conversationData.escalationRequired}

AI Recommendations:
${conversationData.aiRecommendations}
`,
      private: true
    });
    
    return ticket;
  } catch (error) {
    console.error('Error creating Freshdesk ticket:', error);
    throw error;
  }
}

function determineGroupId(issueType) {
  const groupMapping = {
    technical: 20000123456, // Technical Support Group
    billing: 20000123457, // Billing Group
    account: 20000123458, // Account Management Group
    general: 20000123459  // General Support Group
  };
  
  return groupMapping[issueType] || groupMapping.general;
}

Smart Workflow Automation

// Freshdesk Workflow Automation Logic
class FreshdeskWorkflowAutomation {
  constructor() {
    this.workflows = {
      autoResponse: this.autoResponseWorkflow.bind(this),
      escalation: this.escalationWorkflow.bind(this),
      satisfaction: this.satisfactionWorkflow.bind(this),
      knowledgeSync: this.knowledgeSyncWorkflow.bind(this)
    };
  }

  async processConversation(conversationData) {
    const results = [];
    
    // Determine which workflows to trigger
    if (this.shouldAutoRespond(conversationData)) {
      const result = await this.workflows.autoResponse(conversationData);
      results.push(result);
    }
    
    if (this.shouldEscalate(conversationData)) {
      const result = await this.workflows.escalation(conversationData);
      results.push(result);
    }
    
    if (this.shouldRequestSatisfaction(conversationData)) {
      const result = await this.workflows.satisfaction(conversationData);
      results.push(result);
    }
    
    if (this.shouldSyncToKnowledgeBase(conversationData)) {
      const result = await this.workflows.knowledgeSync(conversationData);
      results.push(result);
    }
    
    return results;
  }

  shouldAutoRespond(conversationData) {
    const commonIssues = [
      'password reset', 'account locked', 'billing inquiry',
      'feature question', 'how to', 'where is'
    ];
    
    return commonIssues.some(issue => 
      conversationData.message.toLowerCase().includes(issue)
    ) && conversationData.confidence > 0.8;
  }

  shouldEscalate(conversationData) {
    return (
      conversationData.sentiment === 'very_negative' ||
      conversationData.urgency === 'high' ||
      conversationData.issueType === 'technical' ||
      conversationData.customerTier === 'enterprise'
    );
  }

  shouldRequestSatisfaction(conversationData) {
    return (
      conversationData.resolved === true &&
      conversationData.interactionCount > 1 &&
      !conversationData.satisfactionRequested
    );
  }

  shouldSyncToKnowledgeBase(conversationData) {
    return (
      conversationData.resolved === true &&
      conversationData.solutionQuality > 0.9 &&
      !conversationData.existsInKnowledgeBase
    );
  }

  async autoResponseWorkflow(conversationData) {
    // Find matching template
    const template = await this.findResponseTemplate(conversationData);
    
    if (template) {
      // Send automated response
      await freshdesk.conversations.reply(conversationData.ticketId, {
        body: template.content,
        user_id: process.env.AI_AGENT_USER_ID
      });
      
      return {
        action: 'auto_response',
        template: template.name,
        confidence: template.confidence
      };
    }
    
    return null;
  }

  async escalationWorkflow(conversationData) {
    // Update ticket priority and group
    const updateData = {
      priority: 4, // High priority
      group_id: this.getEscalationGroup(conversationData.issueType),
      custom_fields: {
        escalation_reason: conversationData.escalationReason,
        escalation_timestamp: new Date().toISOString()
      }
    };
    
    await freshdesk.tickets.update(conversationData.ticketId, updateData);
    
    // Notify escalation team
    await this.notifyEscalationTeam(conversationData);
    
    return {
      action: 'escalation',
      new_priority: 'high',
      assigned_group: updateData.group_id
    };
  }

  async satisfactionWorkflow(conversationData) {
    // Send satisfaction survey
    const surveyLink = this.generateSatisfactionLink(conversationData.ticketId);
    
    await freshdesk.conversations.reply(conversationData.ticketId, {
      body: `How satisfied are you with the support you received?

Please rate your experience: ${surveyLink}

Your feedback helps us improve our service!
`,
      user_id: process.env.AI_AGENT_USER_ID
    });
    
    // Mark satisfaction as requested
    await freshdesk.tickets.update(conversationData.ticketId, {
      custom_fields: {
        satisfaction_requested: true,
        satisfaction_timestamp: new Date().toISOString()
      }
    });
    
    return {
      action: 'satisfaction_survey',
      survey_link: surveyLink
    };
  }

  async knowledgeSyncWorkflow(conversationData) {
    // Extract solution from conversation
    const solution = this.extractSolution(conversationData);
    
    if (solution.quality > 0.9) {
      // Create knowledge base article
      const article = {
        title: solution.title,
        description: solution.description,
        category_id: this.getKnowledgeCategory(conversationData.issueType),
        tags: ['ai-generated', conversationData.issueType, 'automated'],
        status: 2 // Published
      };
      
      const kbArticle = await freshdesk.solutions.create(article);
      
      // Link article to ticket
      await freshdesk.tickets.update(conversationData.ticketId, {
        custom_fields: {
          kb_article_id: kbArticle.id,
          solution_synced: true
        }
      });
      
      return {
        action: 'knowledge_sync',
        article_id: kbArticle.id,
        article_title: kbArticle.title
      };
    }
    
    return null;
  }
}

Ghid de Configurare

1

Generează API Key în Freshdesk

Creează o API key cu permisiuni pentru ticket management.

Admin → Integrations → API Key Generation
2

Configurează Custom Fields

Adaugă câmpuri custom pentru VAI integration tracking.

3

Setează Automation Rules

Configurează reguli de automatizare pentru ticket routing și escalation.

4

Testează Integrarea

Verifică crearea tichetelor și activarea workflow-urilor automate.

Beneficii

Interfață Modernă

Design intuitiv și experiență plăcută pentru agenți.

Automatizare Inteligentă

Workflow-uri adaptabile care învață din interacțiuni.

Multi-channel Support

Suport unificat pentru toate canalele de comunicare.

Analytics Avansate

Rapoarte detaliate și insight-uri despre performanța suportului.

Pregătit pentru Freshdesk?

Integrează VAI Portal cu Freshdesk pentru a oferi suport modern, eficient și scalabil pentru clienții tăi.