2024-10-15 PitchPatterns Robo Caller Task

 

Telefonijas piekļuves

https://www.teltel.io/v2/login

email: evald@asya.ai pass: jh1K0xU8C8KW

 

SIP device var atrast šeit: https://www.teltel.io/account/call_flow Dokumentācija: https://doc.teltel.io/en/integration-guide https://apidoc.teltel.io (ir arī REST API, bet cik man zināms ne priekš zvanīšanas)

 

TODO:

  1. Kodēt iekš https://github.com/asya-ai/pp-robocaller

  2. Fonā nepieciešams apmācīt TTS modeli V2, bet pagaidām var izmantot “Model V1”

  3. Izveidot Python Flask app, kura strādā ar:

    1. PostgreSQL datu bāzi (dev vide zemāk)

      1. 🔴

    2. STT websocket based realtime (Mārcis iedos API key) https://stt.asya.ai/docs Kods ir šeit: https://github.com/asya-ai/asya-master-api (pievienoju tevi). Man liekas kaut kas nav pareizi sakodēts ar websocket sessijām, jo 2 lietotāji vienlaicīgi izmanto, tad sāk miksēties responses. Ja nepieciešams nokomentē Mārcim kādas izmaiņas tur jāpalīdz veikt

    3. TTS websocket based realtime (pats izveido API key)

      https://ttsapi.asya.ai

    4. Tulkošanas API (Mārcis iedos key), tur ari ir websocket

      https://api.gramatins.lv

    5. Izvietota uz ventspils-1 servera zem lietotāja robocaller

      1. 🔴

    6. Vēlāk būs arī eldigen integrācija uz generic question answering

  4. Nepieciešams veikt integrācijas ar teltel SIP vai RTP

  5. Priekš UX izmantot Bootrstrap Flask https://bootstrap-flask.readthedocs.io/en/stable/basic/

  6. Nepieciešams izveidot UX, kurā var ģenerēt sarunas skriptu soli pa solim, datu struktūras (prefix visam robo_, jo vēlāk pievienosim PP repo iespējams) Visām datu bāzes tabulām pretī dataclasses

    1. robo_organization - organizācija

      1. robo_organization_id

      2. robo_organization_uuid - nekad lietotājam nerādam ID, bet rādam UUID

      3. robo_organization_name

      4. is_deleted (vienmēr soft delete)

      5. created

      6. modified

    2. robo_user - lietotājs, vienā organizācijā daudzi

      1. robo_user_id

      2. robo_user_uuid

      3. robo_organization_id

      4. email

      5. password

      6. limit_minutes

      7. is_deleted

      8. created

      9. modified

    3. robo_intent - nodoms, kuru atpazīst pēc frāzēm embeddings vai regex

      1. robo_intent_id

      2. robo_intent_uuid

      3. robo_organization_id

      4. intent_name

      5. intent_language: varchar

      6. is_deleted (vienmēr soft delete)

      7. created

      8. modified

    4. robo_intent_phrases - katram nodomam daudz frāzes (ievad ērtībai ar textarea jaunās rindās). Var būt gan embeddings, gan regex kopā kā vairāki phrases

      1. robo_intent_phrase_id

      2. robo_intent_phrase_uuid

      3. robo_organization_id

      4. robo_intent_id

      5. intent_language: varchar

      6. phrase_text (reg frāzes var atpazīt vai piemērus pēc sentence embeddings) - šeit neizmantojam īstu regex, bet vnk “*” nozīmē jebkādas vārda beigas vai sākums, atstarpes atdala secīgus vārdus frāzē. Case insensitve

      7. phrase_type: VARCHAR - REGEX, EMBEDDING

      8. phrase_text_en: Ja nav zvaigznītes - Embedings vienmēr taisam no English

      9. phrase_embedding_en: PGVector format (dabūt no betijas info kādu embedding izmantot piemērus no eldigen koda ) - šis ir tikai tām frāzēm, kuras nesatur “*” zvaigznītes

      10. created (vienmēr hard delete)

    5. robo_extracts - dati, kurus ar dažādu vaicājumu palīdzību var izgūt no konkrēta message sarunas laikā

      1. robo_extract_id

      2. robo_extract_uuid

      3. robo_organization_id

      4. extract_field_name

      5. is_deleted (vienmēr soft delete)

      6. created

      7. modified

    6. robo_extract_prompt (sākotnēji šim jānotiek asinhroni, nedrīkst bremzēt sarunas - var būt tikai atzaros!) - vaicājums ar kuru izgūst datus, izmantojot LLM (pagaidām openai API, velāk mūsu)

      1. robo_extract_prompt_id

      2. robo_extract_prompt_uuid

      3. robo_organization_id

      4. robo_extract_field_id - uz kurieni nonāks izgūtais saturs (tabulās)

      5. extract_language: varchar

      6. extract_prompt: TEXT - Jautājums ar kuru var dabūt ārā no iepriekšējā message informāciju un saglabāt kā field “Kad tiks veikts nākamais maksājums? Diena vai datums, ja nosaukts?”

      7. extact_prompt_en

      8. created (vienmēr hard delete)

    7. robo_responses - STT ģenerētās atbildes, vēlāk būs ar tokens, tagad ierakstītas, vienīgais varētu ar LLM uzģenerēt vairākus rephrase variantus, lai zvana saņēmējs nevar uzreiz atpazīt robotu. Responses kā audio faili ir jau cached uz diska

      1. robo_response_id

      2. robo_response_uuid

      3. robo_organization_id

      4. is_rephrase_enabled

      5. response_voice (no robo_script copy)

      6. response_language

      7. response_text: Tas ko robots saka. Vēlāk varēs arī izmantot tokens kā {full_name} un tos, kuri iegūti no extract vai integrations

      8. is_deleted (vienmēr soft delete)

      9. created

      10. modified

    8. robo_script - galvenais skripts, kurš izpildās

      1. robo_script_id

      2. robo_script_uuid

      3. robo_organization_id

      4. script_name

      5. script_type: INBOUND, OUTBOUND (pašlaik bus tikai OUTBOUND)

      6. script_voice_name (vēlāk maināms)

      7. script_sip_device (SIP ID)

      8. is_enabled

      9. is_deleted (vienmēr soft delete)

      10. created

      11. modified

    9. robo_script_steps - skripta soļi, kuri veido koku UX

      1. robo_script_step_id

      2. robo_script_step_uuid

      3. robo_script_id

      4. robo_organization_id

      5. step_type: VARCHAR - CLIENT_RESPINSE, AGENT_RESPONSE, INTENT, CONDITION, EXTRACT, END_CALL - Kā python Enum, Str

      6. robo_response_id - optional / NULL

      7. robo_extract_id - optional

      8. robo_intent_id - optional

      9. condition_is_true: bool / optional / NULL

      10. created (vienmēr hard delete)

    10. robo_script_steps_tree - jāvar uztaisīt koku, kur zari apvienojas uz priekšu ejot

      1. robo_script_steps_tree_id

      2. robo_script_step_id

      3. next_robo_script_step_id

      4. created

    11. robo_call_campaigns (grupa ar telefoniem, kuriem zvanīs robts) - Zvanu saraksts un zvanīšanas plāna nosacījumi ar kuriem zvana numuriem

      1. robo_call_campaign_id

      2. robo_call_campaign_uuid

      3. robo_batch_name

      4. robo_organization_id

      5. robo_script_id : kāds script ir pieslēgts

      6. is_deleted (vienmēr soft delete)

      7. time_from_hours_gmt : optional (padomā varbūt šos shcedules var grudrāk sataisīt)

      8. time_to_hours_gmt : optional

      9. scheduled_date_from : optional

      10. scheduled_date_to : optional

      11. is_scheduled_monday: bool

      12. is_scheduled_tuesday: bool

      13. is_scheduled_wednesday: bool

      14. is_scheduled_thursday: bool

      15. is_scheduled_friday: bool

      16. is_scheduled_saturday: bool

      17. is_scheduled_sunday: bool

      18. is_deleted (vienmēr soft delete)

      19. created

      20. modified

    12. robo_call_numbers - numuri, kurus caur UX ielādē ar CSV vai manuāli

      1. robo_call_number_id

      2. robo_call_number_uuid

      3. robo_call_campaign_id

      4. robo_organization_id

      5. phone_number: varchar

      6. full_name: varchar (optional)

      7. language: varchar

      8. last_call_timestamp :NULL

      9. number_of_times_called

      10. number_of_times_picked

      11. is_deleted (vienmēr soft delete)

      12. created

      13. modified

    13. robo_recording - notikušais zvans ar audio un meta dadiem

      1. robo_recording_id

      2. robo_recording_uuid - pēc UUID saglabājam audio failu

      3. robo_organization_id

    14. robo_recording_steps (robot or client) - koka zari, kuri tika izpildīti un to rezultāti

      1. robo_recording_step_id

      2. robo_recording_step_uuid

      3. robo_organization_id

      4. robo_batch_call_id - 🟡 Labāk likt vairāk IDs nekā mazāk, jo vieglāk un efektīvaķi būs SELECTs

      5. robo_batch_calls_number_id

      6. robo_script_step_id

      7. step_type: VARCHAR - CLIENT_RESPINSE, AGENT_RESPONSE, INTENT, CONDITION, EXTRACT, END_CALL

      8. robo_response_id - optional / NULL

      9. robo_extract_id - optional

      10. robo_intent_id - optional

      11. condition_is_true: bool / optional / NULL

      12. robo_recording_extract_id - ja notika extract

      13. robo_intent_evidence_rext: teksts, kas noteica intent

      14. is_last_step

      15. created - hard delete

    15. robo_recording_extracts - iegūtie dati no zvana - vēlak tie tiks novirzīti uz CRM, tagad var no batch iegūt CSV, kur katra rinda zvanītājs robo_batch_calls_numbers un kolonas robo_recording_extracts

      1. robo_recording_extract_id

      2. robo_recording_extract_uuid

      3. robo_recording_step_id

      4. robo_batch_calls_number_id

      5. robo_organization_id

      6. robo_extract_id

      7. robo_extract_value: text

      8. created - hard delete

Vēlāk vajadzēs ievākt arī statistiku pie kura atzara skriptā atbirst cilvēki

 

AI tools

To speed up implementation

  1. Try adding in comments pyhon code and generate Python code

  2. Try commanding selected code to be ported using http://cursor.com (if necessary we will buy pro version)

  3. perplexity.ai give example in Python how to ...

 

UX Mockups

image-20241016075601311