main.dsl 5.21 KB
import "commonReactions/all.dsl";

context {
    input phone: string;
    //input caller: string;

    output cjm: string[] = [];
    output need_ask_name: boolean = true;
    output template_id: number = 3;
    output conversation_start: number = 0;
    output conversation_begin: number = 0;
    output conversation_stop: number = 0;
    output conversation_status: string = "normal";
    output abonent_request: string[] = [];
    output another_phone_number: string = "";
    output abonent_name: string = "";
    output company_name: string = "";
    output phone_suffix: string = "";
}

external function performed_stage(stages: string[], stage: string): string[];

start node root
{
    do
    {
        //set $cjm = external performed_stage($cjm, "root");
        //set $conversation_start = external time_stamp();
        goto caller_id;
    }
    transitions
    {
        caller_id: goto caller_id;
    }
}

node caller_id
{
    do
    {
        set $cjm = external performed_stage($cjm, "caller_id");

        #connectSafe($phone);
        #waitForSpeech(1000);

        // Строим приветствие, зависящее от времени суток
        //var part_of_the_day_name = external part_of_the_day();
        var part_of_the_day_name = "day";
        var abonent_greeting = "Здравствуйте";
        if (part_of_the_day_name == "night")
        {
            set abonent_greeting = "Доброй ночи";
        }
        if (part_of_the_day_name == "morning")
        {
            set abonent_greeting = "Доброе утро";
        }
        if (part_of_the_day_name == "day")
        {
            set abonent_greeting = "Добрый день";
        }
        if (part_of_the_day_name == "evening")
        {
            set abonent_greeting = "Добрый вечер";
        }

        // Запоминаем временной штамп перед самой первой репликой
        //set $conversation_begin = external time_stamp();
        #say("greeting");
        //#say("dont_understand_question");
        wait *;
    }
    transitions
    {
        //end_conversation: goto end_conversation on true;
        canttalkrn: goto cant_talk_rn on #messageHasAnyIntent(["decline", "cant_talk_rn"]);
        cantalk: goto can_talk on #messageHasAnyIntent(["accept", "can_talk"]);

    }
}
node helpful_pos //pair2
{
    do
    {
        #say("helpful_pos");
        wait*;
    }
    transitions
    {
        
    }
}
node helpful_neg //pair2
{
    do
    {
        #say("helpful_neg");
        wait*;
    }
    transitions
    {
        understood: goto understood on true;
    }
}
node understood //pair3
{
    do
    {
        #say("understood");
        wait*;
    }
    transitions
    {
        positive: goto send_it on #messageHasSentiment("positive") || #messageHasIntent("send_it");
        negative: goto dont_need on #messageHasSentiment("negative");
    }
}
node send_it
{
    do
    {
        #say("have_whatsapp");
        wait*;
    }
    transitions
    {
        positive: goto yes_whatsapp on #messageHasSentiment("positive");
        negative: goto no_whatsapp on #messageHasSentiment("negative") || #messageHasIntent("no_whatsapp");
    }
}
node dont_need
{
    do
    {
        //почему отказываетесь
        #say("why_reject");
        wait*;
    }
    transitions
    {
        negative: goto thanks_bye_2 on #messageHasSentiment("negative") || #messageHasIntent("not_interested");
    }
}
node thanks_bye_2
{
    do
    {
        #say("thanks_for_time_2");
        goto do_before_exit;
    }
    transitions
    {
        do_before_exit: goto do_before_exit;
    }
}
node yes_whatsapp
{
    do
    {
        #say("gonna_send_code");
    }
    transitions
    {
        end_conversation: goto end_conversation;
    }
}
node no_whatsapp
{
    do
    {
        #sayText("give_contacts");
        wait*;
    }
    transitions
    {
        thanks_bye: goto thanks_bye on true;
    }
}
node thanks_bye
{
    do
    {
        #say("thanks_bye");
        
    }
    transitions
    {
        end_conversation: goto end_conversation;
    }
}
node can_talk
{
    do
    {
        #say("how_helpful");
        wait*;

    }
    transitions
    {
        positive: goto helpful_pos on #messageHasSentiment("positive");
        negative: goto helpful_neg on #messageHasSentiment("negative");
    }
}
node cant_talk_rn //pair1
{
    do
    {
        #say("thanks_for_time");
    }
    transitions
    {
        end_conversation: goto end_conversation;
    }
}
node end_conversation
{
    do
    {
        set $cjm = external performed_stage($cjm, "end_conversation");
        #say("end_conversation");
        goto do_before_exit;
    }
    transitions
    {
        do_before_exit: goto do_before_exit;
    }
}

node do_before_exit
{
    do
    {
        set $cjm = external performed_stage($cjm, "do_before_exit");
        //set $conversation_stop = external time_stamp();
        exit;
    }
    transitions
    {
    }
}

digression @exit_dig
{
    conditions { on true tags: onclosed; }
    do
    {
        set $cjm = external performed_stage($cjm, "@exit_dig");
        set $conversation_status = "broken";
        goto do_before_exit;
    }
    transitions
    {
        do_before_exit: goto do_before_exit;
    }
}