Przejdź do treści

Wirtualny Agent

Moduł Wirtualnych Agentów (Ustawienia -> Usługi -> Integracje Chatbot/Voicebot) pozwala na konfigurację botów.

System Conpeek posiada obsługę rozmów z Botem (wirtualny agent) dla kanałów chat i voice. Integracja polega na wysłaniu żądania http na skonfigurowany adres URL w aplikacji WEB. W żądaniu określony jest tekst od klienta lub zdarzenie wychwycone przez system np. start rozmowy, cisza przez określony czas w rozmowie głosowej itd. Żądanie zawiera również informacje o kliencie między innymi identyfikatory rozmowy po stronie Conpeek, numer dzwoniącego i numer dodzwaniany, rekord ze sprawy w kampanii głosowej, zewnętrzny identyfikator połączenia jeśli połączenie zostało przekazane z innej centralki do Conpeeka, zmienne ustawione na stronie klienta np. w czasie przejścia przez IVR/IWRS. Żądanie z pakietem informacji jest wysyłane do serwera – odpowiedź może zawierać wiadomość do przekazania klientowi lub zestaw przycisków w chat itd. Odpowiedź może też nie zawierać tekstu, wtedy system wie że ma nasłuchiwać dalej. Rozmowa z wirtualnym agentem kończy się gdy klient się rozłączy lub NLP zwróci informację o zakończeniu konwersacji z botem. Jeżeli dojdzie do niespodziewanego zakończenia konwersacji NLP otrzyma żądanie z informacją, że rozmowa została zakończona.

Opis techniczny integracji z RASA

Konwersacja klienta z botem zaczyna się od wysłania HTTP POST na wskazany adres URL w wirtualnym agencie.

HTTP POST

{
    "sender": <UUID>,
    "text": <STRING>,
    "metadata": {
        "leg_uuid": <STRING>,
        "dialog_uuid": <STRING>,
        "bot_dialog_uuid": <STRING>,
        "session_variables": {},
        "local_variables": {},
        "confidence": <FLOAT>,,
        "caller_contact_address": <STRING>,
        "callee_contact_address": <STRING>,
        "start_talking_date": <STRING>,
        "stop_talking_date": <STRING>,
        "start_playback_date": <STRING>,
        "stop_playback_date": <STRING>,
        "machine_detected": <INT>,
        "machine_detected_type": <STRING>,
        "operator_call_id": <STRING>,
        "voice_campaign_request": {
            "voice_campaign_name": <STRING>,
            "project_id": <INT>,
            "project_name": <STRING>,
            "case_id": <STRING>,
            "case_group": <STRING>,
            "case_state": <STRING>,
            "crm_id": <STRING>,
            "contact_id": <STRING>,
            "custom_fields": {},
            "made_calls": <INT>,
            "served_calls": <INT>,
            "machine_detected_calls": <INT>,
        },
    },
}
Nazwa Rodzaj Przykład Opis
sender <STRING> 52499372-6c0f-45ea-a310-8c0b902e1d8c Id sesji/konwersacji z botem
text <STRING> Dzwonię w sprawie reklamacji Wiadomość/wypowiedź klienta lub zdarzenie
metadata Zawiera dodatkowe informacje przydatne w procesowaniu NLU
leg_uuid 02117c4d-3bc4-42c5-9810-b97cb1d8da83 Id lega w rozmowie audio/video
dialog_uuid 80f6815d-d143-4f6f-b6c1-9837c3ee2a00 Id dialogu/strony w rozmowie audio/video/chat
bot_dialog_uuid c02e5a03-e6cb-47bd-ac26-6fde7a857fb9 Id dialogu/strony wirtualnego agenta w rozmowie audio/video/chat
session_variables {"client_verified": true} Obiekt ze zmiennymi ustawionymi na dialogu klienta
local_variables {"xyz": 123} Obiekt ze zmiennymi ustawionymi na dialogu wirtualnego agenta w ramach konwersacji
confidence 0.9 Pewność zamiany mowy na tekst z ASR
caller_contact_address 48123456789 Numer/identyfikator strony dzwoniącej
callee_contact_address 48987654321 Numer/identyfikator strony dodzwanianej
start_talking_date 2022-01-01 10:00:00 Data rozpoczęcia ostatniego zdania przez klienta
stop_talking_date 2022-01-01 10:00:10 Data zakończenia ostatniego zdania przez klienta
start_playback_date 2022-01-01 10:00:00 Data rozpoczęcia odgrywania ostatniego komunikatu klientowi
stop_playback_date 2022-01-01 10:00:10 Data zakończenia odgrywania ostatniego komunikatu klientowi
machine_detected 0 Czy wykryto maszynę dla połączenia z kampanii głosowej
machine_detected_type AMD W jaki sposób wykryto maszynę
operator_call_id c7b0e197-e71a-47ea-aa94-d57a99a444bd Identyfikator połączenia z zewnętrznej centrali telefonicznej
voice_campaign_request Informacje na temat sprawy z kampanii głosowej
voice_campaign_request.custom_fields Sprawa może zawierać dodatkowe dowolne pola. Pola może ustawiać NLU

Pole "text" może zawierać nazwy zdarzeń:

  • __PEER_CONNECTED__ - rozpoczęcie konwersacji
  • __PEER_DISCONNECTED__ - rozłączenie od strony klienta lub przez system. Nie jest wysyłane jeśli NLP kończy konwersacje.
  • __NO_UTTERANCE__ - brak wypowiedzi klienta w określonym czasie.
  • __LOW_CONFIDENCE__ - niska pewność zamiany mowy na tekst. Tekst z ASR jest przesyłany w "metadata" w polu "text".
  • __TOO_LONG_SENTENCE__ - zbyt długa wypowiedź klienta dla integracji DialogFlow ES.

Pole "machine_detected_type" może zawierać:

  • AMD - kiedy wykryto maszynę poprzez AMD
  • MANUAL - kiedy wykryto maszynę ręcznie

Przykładowe odpowiedzi z NLU na żądanie HTTP POST:

{
  "text": <STRING>,
  "ssml": <STRING>,
  "end_of_conversation": <BOOLEAN>,
  "typing_delay": <INT>, - milisekundy
}
[
    {
        "custom": {
            "blocks": [
                {
                     "text": <STRING>,
                     "ssml": <STRING>,
                     "typing_delay": <INT>, - milisekundy
                     "duplex_enabled": <INT>,
                     "duplex_delay_ms": <INT>,
                     "stt_integration_name": <STRING>,
                     "sentence_time_max": <INT>,
                     "min_talking_time_to_interrupt": <INT>,
                     "min_confidence_level": <FLOAT>,
                     "sentence_end_silence_time": <INT>,
                     "speech_recognition_language": <STRING>,
                     "voice": <STRING>,
                     "speaking_rate": <FLOAT>,
                     "pitch": <FLOAT>,
                     "volume": <FLOAT>,
                     "voice_definition_id": <STRING>,
                     "voice_definition_name": <STRING>,
                     "sentence_start_timeout": <INT>,
                     "speech_contexts": <STRING>,
                     "dtmf_timeout": <INT>,
                     "text_conditional_actions": <STRING>,
                     "buttons": [
                        {
                         "title": <STRING>, etykieta przycisku
                         "payload": <STRING>, wartość wysłana do NLU po kliknięciu przycisku
                        },
                        {
                         "title": <STRING>,
                         "payload": <STRING>,
                        }
                     ],
                     "file_url": <STRING>,
                     "image_url": <STRING>,
                     "variables": {
                        "var1": "val2", ustawienie zmiannych na połączeniu, dostępne później w Webhooku i API
                     },
                     "post_message_notification": {
                        "var1": "val2", dowolny obiekt który zostanie przekazany do strony nadrzędnej z iframe z pluginem poprzez funkcję postMessage()
                     },
                }
                },
            ],
            "end_of_conversation": <BOOLEAN>, lub jak poniżej
            "end_of_conversation": {
                "export": {
                    "var1": "val2", ustawienie zmiannych na aplikacji BOT, wynik ten można zwrócić do IVR
                },
                "voice_campaign_actions": {
                    "set_custom_fields": {},
                    "set_case_state": <STRING>,
                    "set_priority": <INT>,
                    "execute_trigger": <STRING>,
                    "set_recall": <STRING>,  np. 2022-01-01 10:00:00
                    "set_dialing_method": <STRING>,
                    "set_application_state": <STRING>,
                    "set_mode": <STRING>,
                    "transfer_call": {
                        "type": CURRENT_PROJECT_WITH_CASE|PROJECT|EXTERNAL,
                        "tenant_user_id": <INT>,
                        "tenant_user_name": <STRING>,
                        "project_id": <INT>, tylko dla typu PROJECT
                        "project_name": <STRING>, tylko dla typu PROJECT
                        "number": <STRING>, tylko dla typu EXTERNAL
                        "required_skill": <STRING>, tylko dla typu CURRENT_PROJECT_WITH_CASE|PROJECT
                    },
                }
            }
        }
    },
]
    [] - pusta odpowiedź spowoduje kontynuację nasłuchiwania strony klienta