From a6222083e6b15b476a6445d4f455617a42c8fc2f Mon Sep 17 00:00:00 2001 From: danny Date: Wed, 24 Dec 2025 12:18:45 +0000 Subject: [PATCH] Add Top 20 multilingual ready replies --- README.md | 11 +- reply_library/top20_ready_answers.json | 245 ++++++++++++++++++ reply_library/top20_ready_answers.md | 153 +++++++++++ ...=> voiceDNA_socialmediatorr_insta_dm.json} | 0 4 files changed, 407 insertions(+), 2 deletions(-) create mode 100644 reply_library/top20_ready_answers.json create mode 100644 reply_library/top20_ready_answers.md rename voice_dna/{socialmediatorr.voice-dna.json => voiceDNA_socialmediatorr_insta_dm.json} (100%) diff --git a/README.md b/README.md index 54ceb10..b973104 100644 --- a/README.md +++ b/README.md @@ -143,7 +143,7 @@ Generate the deeper “no raw quotes” report directly from an Instagram export ## VoiceDNA (manual reply style) -`voice_dna/socialmediatorr.voice-dna.json` is a **safe-to-store** style fingerprint generated from the last 6 months of **manual (non-template) DM replies** (no raw DM quotes are included). +`voice_dna/voiceDNA_socialmediatorr_insta_dm.json` is a **safe-to-store** style fingerprint generated from the last 6 months of **manual (non-template) DM replies** (no raw DM quotes are included). It also encodes a hard rule for the bot: @@ -151,7 +151,14 @@ It also encodes a hard rule for the bot: Regenerate from a local Instagram export folder: -- `python3 -m sergio_instagram_messaging.generate_voice_dna --export-input /path/to/export-root --out voice_dna/socialmediatorr.voice-dna.json --owner-name "Sergio de Vocht" --window-months 6` +- `python3 -m sergio_instagram_messaging.generate_voice_dna --export-input /path/to/export-root --out voice_dna/voiceDNA_socialmediatorr_insta_dm.json --owner-name "Sergio de Vocht" --window-months 6` + +## Ready Replies (Top 20) + +Multi-language ready-made answers for the Top question topics (aligned to the VoiceDNA language-mirroring policy): + +- `reply_library/top20_ready_answers.json` (programmatic) +- `reply_library/top20_ready_answers.md` (copy/paste) ## Webhooks (new messages → auto-reply) diff --git a/reply_library/top20_ready_answers.json b/reply_library/top20_ready_answers.json new file mode 100644 index 0000000..9c9c370 --- /dev/null +++ b/reply_library/top20_ready_answers.json @@ -0,0 +1,245 @@ +{ + "schema_version": "ready_replies/v1", + "voice_dna_ref": "voice_dna/voiceDNA_socialmediatorr_insta_dm.json", + "language_mode": "mirror_user_input_language", + "notes": [ + "Pick the reply language to match the user's most recent message with enough text to classify (English / Spanish / French / Catalan).", + "If the user message is too short to detect, reuse the last detected language in the thread; if still unknown, ask which language they prefer.", + "Replace {PLACEHOLDERS} before sending." + ], + "placeholders": { + "BOOK_LINK": "Direct link to the book/ebook page", + "VIDEO_LINK": "Direct link to the video", + "CALENDLY_LINK": "Direct link to the booking page", + "WHATSAPP_LINK": "Direct link to WhatsApp (wa.me/...)", + "PRICE": "Price string, include currency (e.g., €29)", + "TIMEFRAME": "Time estimate (e.g., 2 weeks, 30 days)", + "BASE_LOCATION": "Short location label (e.g., Chamonix)" + }, + "replies": [ + { + "rank": 1, + "topic": "Just one word: book", + "reply_id": "book_keyword", + "replies_by_language": { + "English": "Got it. Do you want the book link or the video first?", + "Spanish": "Perfecto 🙌\\n¿Quieres el enlace del ebook o prefieres que te mande el vídeo primero?", + "French": "OK. Tu veux le lien du livre ou la vidéo d’abord ?", + "Catalan": "Perfecte. Vols l’enllaç del llibre o el vídeo primer?" + } + }, + { + "rank": 2, + "topic": "What is this?", + "reply_id": "what_is_this", + "replies_by_language": { + "English": "It’s a simple, practical resource to help you move forward. What are you looking for right now?", + "Spanish": "Es un recurso práctico para avanzar.\\n¿Qué estás buscando ahora mismo?", + "French": "C’est un outil simple et pratique pour avancer. Tu cherches quoi en ce moment ?", + "Catalan": "És un recurs simple i pràctic per avançar. Què busques ara mateix?" + } + }, + { + "rank": 3, + "topic": "Can you send the video?", + "reply_id": "send_video", + "replies_by_language": { + "English": "Sure — here it is: {VIDEO_LINK}. Want a quick summary first?", + "Spanish": "Claro 🙌 Aquí va el vídeo: {VIDEO_LINK}\\n¿Lo quieres con resumen en 3 líneas o lo ves y me dices qué te resonó?", + "French": "Bien sûr. Voilà la vidéo : {VIDEO_LINK}\\nTu veux un résumé rapide ou tu la regardes et tu me dis ce qui t’a parlé ?", + "Catalan": "Sí. Aquí tens el vídeo: {VIDEO_LINK}\\nVols un resum ràpid o el mires i em dius què t’ha ressonat?" + } + }, + { + "rank": 4, + "topic": "Other question", + "reply_id": "other_question", + "replies_by_language": { + "English": "Tell me in one sentence what you need, and I’ll point you to the right next step.", + "Spanish": "Dime en 1 frase qué necesitas y te digo el siguiente paso 🙌", + "French": "Dis‑moi en 1 phrase ce que tu veux, et je te dis la prochaine étape.", + "Catalan": "Digue’m en 1 frase què necessites i et dic el següent pas." + } + }, + { + "rank": 5, + "topic": "Can you help me?", + "reply_id": "help_request", + "replies_by_language": { + "English": "Yes. What are you struggling with most right now?", + "Spanish": "Sí.\\n¿Qué es lo que más te está costando ahora mismo?", + "French": "Oui. Qu’est‑ce qui est le plus difficile pour toi en ce moment ?", + "Catalan": "Sí. Què és el que et costa més ara mateix?" + } + }, + { + "rank": 6, + "topic": "Can you send the link?", + "reply_id": "send_link", + "replies_by_language": { + "English": "Sure. Is this for the book or to book a call?", + "Spanish": "Claro.\\n¿El enlace es para el ebook o para reservar una llamada?", + "French": "Bien sûr. C’est pour le livre ou pour réserver un appel ?", + "Catalan": "Clar. És per al llibre o per reservar una trucada?" + } + }, + { + "rank": 7, + "topic": "What does it cost?", + "reply_id": "pricing", + "replies_by_language": { + "English": "It’s {PRICE}. Want the link?", + "Spanish": "Son {PRICE}.\\n¿Te paso el enlace?", + "French": "C’est {PRICE}. Tu veux le lien ?", + "Catalan": "Són {PRICE}. Vols l’enllaç?" + } + }, + { + "rank": 8, + "topic": "Is this therapy?", + "reply_id": "therapy_boundary", + "replies_by_language": { + "English": "No — this isn’t therapy in DMs. I can share resources and options. What are you looking for?", + "Spanish": "No, esto no es terapia por DM.\\nPuedo ayudarte con recursos y opciones.\\n¿Qué estás buscando?", + "French": "Non, ce n’est pas une thérapie en DM. Je peux te partager des ressources et des options. Tu cherches quoi ?", + "Catalan": "No, això no és teràpia per DM. Puc compartir recursos i opcions. Què busques?" + } + }, + { + "rank": 9, + "topic": "Where do I get the book?", + "reply_id": "get_book", + "replies_by_language": { + "English": "Here you go: {BOOK_LINK}. Did it open for you?", + "Spanish": "Aquí tienes el enlace: {BOOK_LINK}\\n¿Te llega bien?", + "French": "Tiens : {BOOK_LINK}. Ça s’ouvre bien de ton côté ?", + "Catalan": "Aquí ho tens: {BOOK_LINK}. Se t’obre bé?" + } + }, + { + "rank": 10, + "topic": "I can’t find it / it didn’t arrive", + "reply_id": "delivery_issue", + "replies_by_language": { + "English": "No worries — let’s fix it. What email did you use to buy (or send a screenshot of the receipt)?", + "Spanish": "Vale, lo solucionamos.\\n¿Con qué email lo compraste? (o mándame una captura del recibo)", + "French": "OK, on règle ça. Tu as acheté avec quel e‑mail ? (ou envoie une capture du reçu)", + "Catalan": "Ho arreglem. Amb quin e‑mail ho vas comprar? (o envia una captura del rebut)" + } + }, + { + "rank": 11, + "topic": "How do I book a call?", + "reply_id": "book_call", + "replies_by_language": { + "English": "Book a call here: {CALENDLY_LINK}. What times work for you?", + "Spanish": "Reserva aquí: {CALENDLY_LINK}\\n¿Qué horarios te vienen bien?", + "French": "Réserve ici : {CALENDLY_LINK}. Quels créneaux te vont ?", + "Catalan": "Reserva aquí: {CALENDLY_LINK}. Quins horaris et van bé?" + } + }, + { + "rank": 12, + "topic": "How do I start?", + "reply_id": "start", + "replies_by_language": { + "English": "To start, tell me your goal in one sentence and I’ll tell you the first step.", + "Spanish": "Para empezar: dime tu objetivo en 1 frase y te digo el primer paso 🙌", + "French": "Pour commencer, dis‑moi ton objectif en 1 phrase et je te donne le premier pas.", + "Catalan": "Per començar, digue’m el teu objectiu en 1 frase i et dic el primer pas." + } + }, + { + "rank": 13, + "topic": "Can we talk on WhatsApp?", + "reply_id": "whatsapp", + "replies_by_language": { + "English": "We can. If you prefer WhatsApp: {WHATSAPP_LINK}. Want to continue there?", + "Spanish": "Podemos.\\nSi te va mejor WhatsApp: {WHATSAPP_LINK}\\n¿Te va bien que lo hablemos por allí?", + "French": "Oui. Si tu préfères WhatsApp : {WHATSAPP_LINK}. Ça te va de continuer là‑bas ?", + "Catalan": "Sí. Si prefereixes WhatsApp: {WHATSAPP_LINK}. Et va bé seguir per allà?" + } + }, + { + "rank": 14, + "topic": "How does it work?", + "reply_id": "how_it_works", + "replies_by_language": { + "English": "Simple: you get the resource, apply it, and if you want we can go deeper. What do you want to improve?", + "Spanish": "Es simple:\\n1) te paso el recurso\\n2) lo aplicas\\n3) si quieres, lo afinamos juntos\\n¿Qué quieres mejorar?", + "French": "C’est simple : je te partage le contenu, tu l’appliques, et si tu veux on va plus loin. Tu veux améliorer quoi ?", + "Catalan": "És simple: et passo el recurs, l’apliques, i si vols ho aprofundim. Què vols millorar?" + } + }, + { + "rank": 15, + "topic": "What are the steps?", + "reply_id": "steps", + "replies_by_language": { + "English": "1) Tell me what you want 2) I send the right link 3) You start. What’s your goal?", + "Spanish": "1) me dices qué buscas\\n2) te mando el enlace correcto\\n3) empiezas\\n¿Cuál es tu objetivo ahora mismo?", + "French": "1) Tu me dis ce que tu veux 2) je t’envoie le bon lien 3) tu commences. Ton objectif, c’est quoi ?", + "Catalan": "1) Em dius què busques 2) t’envio l’enllaç correcte 3) comences. Quin és el teu objectiu?" + } + }, + { + "rank": 16, + "topic": "Is this real?", + "reply_id": "legit", + "replies_by_language": { + "English": "Yes. If you want, I’ll send the official link. What are you looking to get out of it?", + "Spanish": "Sí, es real.\\nSi quieres, te mando el enlace oficial.\\n¿Qué estás buscando conseguir?", + "French": "Oui, c’est réel. Si tu veux je t’envoie le lien officiel. Tu veux obtenir quoi exactement ?", + "Catalan": "Sí, és real. Si vols, t’envio l’enllaç oficial. Què vols aconseguir exactament?" + } + }, + { + "rank": 17, + "topic": "Is it free?", + "reply_id": "free", + "replies_by_language": { + "English": "The full thing isn’t free, but I can share a free starting point. Want it?", + "Spanish": "No es gratis, pero sí tengo un punto de inicio gratuito.\\n¿Quieres que te lo pase?", + "French": "Ce n’est pas gratuit, mais j’ai un point de départ gratuit. Tu veux que je te l’envoie ?", + "Catalan": "No és gratis, però tinc un punt d’inici gratuït. Vols que te’l passi?" + } + }, + { + "rank": 18, + "topic": "Can I get a refund?", + "reply_id": "refund", + "replies_by_language": { + "English": "Sure — happy to help. Send me the purchase email + date and I’ll sort it.", + "Spanish": "Claro, te ayudo.\\nPásame el email de compra + la fecha y lo reviso.", + "French": "Bien sûr. Envoie‑moi l’e‑mail d’achat + la date et je m’en occupe.", + "Catalan": "És clar. Envia’m l’e‑mail de compra + la data i ho gestiono." + } + }, + { + "rank": 19, + "topic": "How long does it take?", + "reply_id": "timeframe", + "replies_by_language": { + "English": "It depends, but usually {TIMEFRAME}. What are you trying to change?", + "Spanish": "Depende, pero normalmente {TIMEFRAME}.\\n¿Qué quieres cambiar tú?", + "French": "Ça dépend, mais en général {TIMEFRAME}. Tu veux changer quoi, toi ?", + "Catalan": "Depèn, però normalment {TIMEFRAME}. Què vols canviar tu?" + } + }, + { + "rank": 20, + "topic": "Where are you based?", + "reply_id": "location", + "notes": [ + "Added as a practical top-20 coverage item (not shown in the report's top-19 table for this export)." + ], + "replies_by_language": { + "English": "I’m based in {BASE_LOCATION} (CET) and I work online. Where are you based?", + "Spanish": "Estoy en {BASE_LOCATION} (CET) y trabajo online.\\n¿Tú dónde estás?", + "French": "Je suis basé à {BASE_LOCATION} (CET) et je travaille en ligne. Et toi, tu es où ?", + "Catalan": "Sóc a {BASE_LOCATION} (CET) i treballo online. I tu, on ets?" + } + } + ] +} + diff --git a/reply_library/top20_ready_answers.md b/reply_library/top20_ready_answers.md new file mode 100644 index 0000000..d57a1c8 --- /dev/null +++ b/reply_library/top20_ready_answers.md @@ -0,0 +1,153 @@ +# Top 20 Ready-Made Answers (Multi‑Language) + +**VoiceDNA:** `voice_dna/voiceDNA_socialmediatorr_insta_dm.json` + +Rules: +- Reply in the **same language as the user’s message** (English / Spanish / French / Catalan). +- Replace `{PLACEHOLDERS}` before sending. +- Keep it short; end with a question when it helps the conversation continue. + +--- + +## 1) Just one word: book + +- English: `Got it. Do you want the book link or the video first?` +- Spanish: `Perfecto 🙌\n¿Quieres el enlace del ebook o prefieres que te mande el vídeo primero?` +- French: `OK. Tu veux le lien du livre ou la vidéo d’abord ?` +- Catalan: `Perfecte. Vols l’enllaç del llibre o el vídeo primer?` + +## 2) What is this? + +- English: `It’s a simple, practical resource to help you move forward. What are you looking for right now?` +- Spanish: `Es un recurso práctico para avanzar.\n¿Qué estás buscando ahora mismo?` +- French: `C’est un outil simple et pratique pour avancer. Tu cherches quoi en ce moment ?` +- Catalan: `És un recurs simple i pràctic per avançar. Què busques ara mateix?` + +## 3) Can you send the video? + +- English: `Sure — here it is: {VIDEO_LINK}. Want a quick summary first?` +- Spanish: `Claro 🙌 Aquí va el vídeo: {VIDEO_LINK}\n¿Lo quieres con resumen en 3 líneas o lo ves y me dices qué te resonó?` +- French: `Bien sûr. Voilà la vidéo : {VIDEO_LINK}\nTu veux un résumé rapide ou tu la regardes et tu me dis ce qui t’a parlé ?` +- Catalan: `Sí. Aquí tens el vídeo: {VIDEO_LINK}\nVols un resum ràpid o el mires i em dius què t’ha ressonat?` + +## 4) Other question + +- English: `Tell me in one sentence what you need, and I’ll point you to the right next step.` +- Spanish: `Dime en 1 frase qué necesitas y te digo el siguiente paso 🙌` +- French: `Dis‑moi en 1 phrase ce que tu veux, et je te dis la prochaine étape.` +- Catalan: `Digue’m en 1 frase què necessites i et dic el següent pas.` + +## 5) Can you help me? + +- English: `Yes. What are you struggling with most right now?` +- Spanish: `Sí.\n¿Qué es lo que más te está costando ahora mismo?` +- French: `Oui. Qu’est‑ce qui est le plus difficile pour toi en ce moment ?` +- Catalan: `Sí. Què és el que et costa més ara mateix?` + +## 6) Can you send the link? + +- English: `Sure. Is this for the book or to book a call?` +- Spanish: `Claro.\n¿El enlace es para el ebook o para reservar una llamada?` +- French: `Bien sûr. C’est pour le livre ou pour réserver un appel ?` +- Catalan: `Clar. És per al llibre o per reservar una trucada?` + +## 7) What does it cost? + +- English: `It’s {PRICE}. Want the link?` +- Spanish: `Son {PRICE}.\n¿Te paso el enlace?` +- French: `C’est {PRICE}. Tu veux le lien ?` +- Catalan: `Són {PRICE}. Vols l’enllaç?` + +## 8) Is this therapy? + +- English: `No — this isn’t therapy in DMs. I can share resources and options. What are you looking for?` +- Spanish: `No, esto no es terapia por DM.\nPuedo ayudarte con recursos y opciones.\n¿Qué estás buscando?` +- French: `Non, ce n’est pas une thérapie en DM. Je peux te partager des ressources et des options. Tu cherches quoi ?` +- Catalan: `No, això no és teràpia per DM. Puc compartir recursos i opcions. Què busques?` + +## 9) Where do I get the book? + +- English: `Here you go: {BOOK_LINK}. Did it open for you?` +- Spanish: `Aquí tienes el enlace: {BOOK_LINK}\n¿Te llega bien?` +- French: `Tiens : {BOOK_LINK}. Ça s’ouvre bien de ton côté ?` +- Catalan: `Aquí ho tens: {BOOK_LINK}. Se t’obre bé?` + +## 10) I can’t find it / it didn’t arrive + +- English: `No worries — let’s fix it. What email did you use to buy (or send a screenshot of the receipt)?` +- Spanish: `Vale, lo solucionamos.\n¿Con qué email lo compraste? (o mándame una captura del recibo)` +- French: `OK, on règle ça. Tu as acheté avec quel e‑mail ? (ou envoie une capture du reçu)` +- Catalan: `Ho arreglem. Amb quin e‑mail ho vas comprar? (o envia una captura del rebut)` + +## 11) How do I book a call? + +- English: `Book a call here: {CALENDLY_LINK}. What times work for you?` +- Spanish: `Reserva aquí: {CALENDLY_LINK}\n¿Qué horarios te vienen bien?` +- French: `Réserve ici : {CALENDLY_LINK}. Quels créneaux te vont ?` +- Catalan: `Reserva aquí: {CALENDLY_LINK}. Quins horaris et van bé?` + +## 12) How do I start? + +- English: `To start, tell me your goal in one sentence and I’ll tell you the first step.` +- Spanish: `Para empezar: dime tu objetivo en 1 frase y te digo el primer paso 🙌` +- French: `Pour commencer, dis‑moi ton objectif en 1 phrase et je te donne le premier pas.` +- Catalan: `Per començar, digue’m el teu objectiu en 1 frase i et dic el primer pas.` + +## 13) Can we talk on WhatsApp? + +- English: `We can. If you prefer WhatsApp: {WHATSAPP_LINK}. Want to continue there?` +- Spanish: `Podemos.\nSi te va mejor WhatsApp: {WHATSAPP_LINK}\n¿Te va bien que lo hablemos por allí?` +- French: `Oui. Si tu préfères WhatsApp : {WHATSAPP_LINK}. Ça te va de continuer là‑bas ?` +- Catalan: `Sí. Si prefereixes WhatsApp: {WHATSAPP_LINK}. Et va bé seguir per allà?` + +## 14) How does it work? + +- English: `Simple: you get the resource, apply it, and if you want we can go deeper. What do you want to improve?` +- Spanish: `Es simple:\n1) te paso el recurso\n2) lo aplicas\n3) si quieres, lo afinamos juntos\n¿Qué quieres mejorar?` +- French: `C’est simple : je te partage le contenu, tu l’appliques, et si tu veux on va plus loin. Tu veux améliorer quoi ?` +- Catalan: `És simple: et passo el recurs, l’apliques, i si vols ho aprofundim. Què vols millorar?` + +## 15) What are the steps? + +- English: `1) Tell me what you want 2) I send the right link 3) You start. What’s your goal?` +- Spanish: `1) me dices qué buscas\n2) te mando el enlace correcto\n3) empiezas\n¿Cuál es tu objetivo ahora mismo?` +- French: `1) Tu me dis ce que tu veux 2) je t’envoie le bon lien 3) tu commences. Ton objectif, c’est quoi ?` +- Catalan: `1) Em dius què busques 2) t’envio l’enllaç correcte 3) comences. Quin és el teu objectiu?` + +## 16) Is this real? + +- English: `Yes. If you want, I’ll send the official link. What are you looking to get out of it?` +- Spanish: `Sí, es real.\nSi quieres, te mando el enlace oficial.\n¿Qué estás buscando conseguir?` +- French: `Oui, c’est réel. Si tu veux je t’envoie le lien officiel. Tu veux obtenir quoi exactement ?` +- Catalan: `Sí, és real. Si vols, t’envio l’enllaç oficial. Què vols aconseguir exactament?` + +## 17) Is it free? + +- English: `The full thing isn’t free, but I can share a free starting point. Want it?` +- Spanish: `No es gratis, pero sí tengo un punto de inicio gratuito.\n¿Quieres que te lo pase?` +- French: `Ce n’est pas gratuit, mais j’ai un point de départ gratuit. Tu veux que je te l’envoie ?` +- Catalan: `No és gratis, però tinc un punt d’inici gratuït. Vols que te’l passi?` + +## 18) Can I get a refund? + +- English: `Sure — happy to help. Send me the purchase email + date and I’ll sort it.` +- Spanish: `Claro, te ayudo.\nPásame el email de compra + la fecha y lo reviso.` +- French: `Bien sûr. Envoie‑moi l’e‑mail d’achat + la date et je m’en occupe.` +- Catalan: `És clar. Envia’m l’e‑mail de compra + la data i ho gestiono.` + +## 19) How long does it take? + +- English: `It depends, but usually {TIMEFRAME}. What are you trying to change?` +- Spanish: `Depende, pero normalmente {TIMEFRAME}.\n¿Qué quieres cambiar tú?` +- French: `Ça dépend, mais en général {TIMEFRAME}. Tu veux changer quoi, toi ?` +- Catalan: `Depèn, però normalment {TIMEFRAME}. Què vols canviar tu?` + +## 20) Where are you based? + +Note: added as a practical top‑20 coverage item. + +- English: `I’m based in {BASE_LOCATION} (CET) and I work online. Where are you based?` +- Spanish: `Estoy en {BASE_LOCATION} (CET) y trabajo online.\n¿Tú dónde estás?` +- French: `Je suis basé à {BASE_LOCATION} (CET) et je travaille en ligne. Et toi, tu es où ?` +- Catalan: `Sóc a {BASE_LOCATION} (CET) i treballo online. I tu, on ets?` + diff --git a/voice_dna/socialmediatorr.voice-dna.json b/voice_dna/voiceDNA_socialmediatorr_insta_dm.json similarity index 100% rename from voice_dna/socialmediatorr.voice-dna.json rename to voice_dna/voiceDNA_socialmediatorr_insta_dm.json