main.dsl 4.86 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 canttalkrn on #messageHasAnyIntent(["decline", "canttalkrn"]);
        cantalk: goto cantalk on #messageHasAnyIntent(["accept", "cantalk"]);

    }
}
node helpfulpos //pair2
{
    do
    {
        #say("helpful_pos");
        wait*;
    }
    transitions
    {
        
    }
}
node helpfulneg //pair2
{
    do
    {
        #say("helpful_neg");
        wait*;
    }
    transitions
    {
        understood: goto understood on true;
    }
}
node understood //pair3
{
    do
    {
        #say("understood");
        wait*;
    }
    transitions
    {
        positive: goto sendit on #messageHasSentiment("positive") || #messageHasIntent("sendit");
        negative: goto dontneed on #messageHasSentiment("negative");
    }
}
node sendit
{
    do
    {
        #say("have_whatsapp");
        wait*;
    }
    transitions
    {
        positive: goto yeswhatsapp on #messageHasSentiment("positive");
        negative: goto nowhatsapp on #messageHasSentiment("negative") || #messageHasIntent("nowhatsapp");
    }
}
node dontneed
{
    do
    {
        #say("why_reject");
        wait*;
    }
    transitions
    {
        
    }
}
node yeswhatsapp
{
    do
    {
        #say("gonna_send_code");
    }
    transitions
    {
        end_conversation: goto end_conversation;
    }
}
node nowhatsapp
{
    do
    {
        #sayText("give_contacts");
        wait*;
    }
    transitions
    {
        thanksbye: goto thanksbye on true;
    }
}
node thanksbye
{
    do
    {
        #say("thanksbye");
        
    }
    transitions
    {
        end_conversation: goto end_conversation;
    }
}
node cantalk
{
    do
    {
        #say("how_helpful");
        wait*;

    }
    transitions
    {
        positive: goto helpfulpos on #messageHasSentiment("positive");
        negative: goto helpfulneg on #messageHasSentiment("negative");
    }
}
node canttalkrn //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;
    }
}