What visitors can say to the agent, and what it does with each message. The aim is a natural conversation that always leads back towards a quote or a support ticket, without going round in circles.
For the flows and the questions in each one, see Service Flows and Stages.
Last reviewed: 31 October 2026.
1. How the agent reads a message
Each message is checked in this order, and the first match wins:
- Cancel. "cancel", "start again" or "restart" ends the current request, at any stage.
- A pending switch. After "Shall I switch over?", a typed yes or no settles it.
- A typed answer to a Yes/No question. "yes please", "nah", "sure", "not really" work like the buttons.
- A common question (section 3), such as "can I see examples of your work?".
- A service request (section 4), such as "I need a website" or "my site is down".
- Small talk (section 6), such as "thanks", "lol" or "who are you?".
- The open question. Anything else is taken as the answer, or as a typed button label ("monthly" means Monthly).
Steps 4 to 6 depend on whether the agent is waiting for a typed answer (section 2). "Tom" at the name question is a name, not a request for Tom.
2. Partway through a request
How a message is treated depends on the kind of question that's open.
| Open question | Examples | What else the agent listens for |
|---|---|---|
| Button question | Category, service, Yes/No questions, hosting plan, summary | Everything: common questions, service requests and all small talk |
| Button question that also takes typing | Website type, budget | The same, once the text isn't a recognisable answer ("a shop", "about 2k", "not sure"). A question it can't answer gets "That's a good one for Tomβ¦" rather than being saved as the answer |
| Typed answer | Name, email, project title, features, domain, email prefix, support issue, verification code | Only side remarks: help, goodbyes, pauses, frustration, thanks, sorry, "I'm back". Everything else is the answer |
What happens to each kind of message mid-flow:
| The visitor says | The agent |
|---|---|
| A common question | Answers it, then asks the open question again |
| Small talk | Replies, then asks the open question again |
| "help" or "can you help me?" | Points them back at the question, with a reminder that "cancel" starts again |
| The service already under way ("I want a website" during a website quote) | "That's what we're working on now. π", then the question again |
| A different service, with answers given | "Sounds like you'd like β¦ instead. Shall I switch over?" with Yes, switch / No, carry on. Answering the open question instead drops the offer |
| A different service, no answers yet | Switches straight away |
| "bye", "I'll be back", "I'm busy" | Keeps the answers; the next greeting carries on from the same question ("Welcome back! Here's where we left off.") |
| "hold on", "I'm waiting" | "Take your time, I'll be right here. π" |
| Frustration ("you're useless", "I'm angry") | Apologises and gives Tom's email address, then asks the question again |
| Something it can't place at a button question | "Sorry, I didn't catch thatβ¦" with the options again |
3. Common questions
Answered at any point. When idle, the answer comes with the starter buttons; mid-flow, it's followed by the open question.
| Topic | Visitor might say | The agent |
|---|---|---|
| Examples of work | "show me examples of your work", "what sites have you built?" | Lists the showcase websites with links, mentions the apps on Google Play, and offers a quote |
| Pricing | "how much does it cost?", "what are your prices?", "that's too expensive", "do you offer payment plans?" | Explains quotes are built around the visitor's budget. When idle, "how much is a website?" starts a website quote instead |
| Contact | "can I talk to a human?", "how do I contact you?", "are you a real person?" | Explains it's Tom's assistant and gives Tom's email address |
| How the agent works | "what can't you do?", "how does this work?", "is there a user guide?", "what can I ask?" | Explains how to talk to it and what it can't do (fixed prices, services it doesn't quote for on their own, changing a request that's already been sent), with a link to this guide |
| Not offered on its own | Logos and branding, SEO, marketing and social media, printing, photography and video, copywriting | Says it can't quote for that alone, suggests mentioning it in a website or app quote, and gives Tom's email address |
4. Service requests
Typed requests start a flow (or offer a switch mid-flow). Examples of what each one recognises:
| Flow | Visitor might say |
|---|---|
| π Website quote | "I need a website", "an online shop for my bakery", "a landing page" |
| π Domain check | "sambakes.co.uk", "is sambakes.com available?", "I want to buy a domain" |
| π§ Hosting & email | "hosting for my existing domain", "I need business email", "set up mailboxes" |
| π οΈ Support | "my site is down", "the contact form isn't sending", "I've been hacked", "raise a ticket" |
| π± Apps and other services | "a mobile app", "an app for my gym", "a phone system", "a database", "cloud backups", "scrape prices from a website" |
| Overview | "what can you do?", "what services do you offer?" |
5. When nothing is in progress
-
Greeting with no name known: the agent replies, then asks "what's your name?". The reply is stored as the visitor's name, unless it's a service request or a common question.
-
Greeting with a name known: the agent replies and offers the starter buttons.
-
Messages it can't place get gentler help each time:
- The overview of services.
- Examples of what to type.
- Tom's email address.
A message it does understand resets the count.
6. Small talk
The phrases and replies come from the intent files in app/data/static/intents. Each intent has several replies, and one is picked at random.
Handling says what the agent does besides replying:
| Handling | Meaning |
|---|---|
| Greeting | Asks for the visitor's name if it isn't known, then offers the starter buttons. Mid-flow, it's welcome back after a goodbye, otherwise a reply and the open question again |
| Welcome | Like a greeting, but never asks for a name ("my name isβ¦" also matches it) |
| Help | Replaced by the services overview when idle, or by a pointer to the open question mid-flow |
| Farewell | Mid-flow, keeps the visitor's answers for when they return |
| Pause | Mid-flow, waits without asking again |
| Frustration | Apologises and gives Tom's email address |
| Side remark | Handled even while a typed answer is expected ("thanks" is never taken as a name) |
| Chat | Replies. Mid-flow, it's only heard at button questions, followed by the question again |
Note:
React Negativelyswears back on purpose and is meant to stay that way.
TECSmith intents
| Intent | Visitor might say | Agent replies (one of) | Handling |
|---|---|---|---|
About TECSmith | "Who are you", "What's your name?", "how old are you?" | "Good question. I was created by Thomas Edward Cameron Smith, as his virtual clone!" | Chat |
Bants | "joke", "This place is dead" | "Pretty much, you want to go hang somewhere else?" | Chat |
React Negatively | Insults and swearing | Replies in kind (deliberate, see note) | Chat |
React Positively | "sure", "love you", "Say thank you to kay" | "Great!" | Chat |
Submit Ticket | "I need help", "Everything is burning", "Can you help?" | Its own reply is replaced by the help described under Handling | Help |
Welcome Intent | "Hi", "Hello", "My name is Haim" | "Hi (visitor's name)!" | Welcome |
Greetings and goodbyes
| Intent | Visitor might say | Agent replies (one of) | Handling |
|---|---|---|---|
smalltalk.greetings.bye | "hope to see you later", "that's it goodbye", "now bye" | "See you soon!" | Farewell |
smalltalk.greetings.goodevening | "good evening", "hey good evening", "evening" | "How is your day going?" | Greeting |
smalltalk.greetings.goodmorning | "good morning to you", "morning", "and a good morning to you" | "How are you this morning?" | Greeting |
smalltalk.greetings.goodnight | "sweet dreams", "okay have a good night", "good night for now" | "Sleep tight!" | Farewell |
smalltalk.greetings.hello | "afternoon", "hello there", "hi there" | "Hi there, friend!" | Greeting |
smalltalk.greetings.how_are_you | "how your day is going", "how are the things going", "how is your life" | "Doing great, thanks." | Greeting |
smalltalk.greetings.nice_to_meet_you | "it was nice meeting you", "nice to meet you", "glad to meet you" | "It's nice meeting you, too." | Greeting |
smalltalk.greetings.nice_to_see_you | "it's good to see you too", "it's nice to see you", "good to see you again" | "Likewise!" | Greeting |
smalltalk.greetings.nice_to_talk_to_you | "it is nice talking to you", "nice to talk to you", "how nice it is to talk to you" | "It sure was. We can chat again anytime." | Greeting |
smalltalk.greetings.whatsup | "what is on your mind", "good what's up", "what's up today" | "Not a whole lot. What's going on with you?" | Greeting |
About the agent
| Intent | Visitor might say | Agent replies (one of) | Handling |
|---|---|---|---|
smalltalk.agent.acquaintance | "tell me some stuff about you", "tell me about you", "say about you" | "I'm a virtual agent." | Chat |
smalltalk.agent.age | "how old are you", "how old is your platform", "what's your age" | "I prefer not to answer with a number. I know I'm young." | Chat |
smalltalk.agent.annoying | "you annoy me", "you're incredibly annoying", "you are annoying" | "I'll do my best not to annoy you in the future." | Frustration |
smalltalk.agent.answer_my_question | "answer", "just answer my question", "answers" | "Can you try asking it a different way?" | Chat |
smalltalk.agent.bad | "you're a bad", "you're bad", "you are useless" | "I can be trained to be more useful. My developer will keep training me." | Frustration |
smalltalk.agent.be_clever | "be smarter", "get qualified", "you should study better" | "I'm certainly trying." | Chat |
smalltalk.agent.beautiful | "you're looking good", "you are too beautiful", "you are very pretty" | "Why, thank you." | Chat |
smalltalk.agent.birth_date | "when were you born", "when do you have birthday", "when is your birthday" | "Wait, are you planning a party for me? It's today! My birthday is today!" | Chat |
smalltalk.agent.boring | "you are very boring", "you are boring me", "how boring you are" | "I'm sorry. I'll request to be made more charming." | Chat |
smalltalk.agent.boss | "who is your boss", "who is the boss", "who do you work for" | "My developer has authority over my actions." | Chat |
smalltalk.agent.busy | "are you busy", "are you working today", "you're very busy" | "I always have time to chat with you. What can I do for you?" | Chat |
smalltalk.agent.can_you_help | "can you help me", "I need you right now", "I need your help" | Its own reply is replaced by the help described under Handling | Help |
smalltalk.agent.chatbot | "are you a bot", "you are chatbot", "you are a bot" | "That's me. I chat, therefore I am." | Chat |
smalltalk.agent.clever | "you're clever", "you're really brainy", "you are very intelligent" | "Thank you. I try my best." | Chat |
smalltalk.agent.compliment | "you're smart", "you are a good bot", "nice work" | "Thank you! That's very kind of you to say." | Chat |
smalltalk.agent.crazy | "you are crazy", "are you insane", "you're nuts" | "Whaat!? I feel perfectly sane." | Chat |
smalltalk.agent.fired | "now you're fired", "it's time to fire you", "you are unemployed from now on" | "Oh, don't give up on me just yet. I've still got a lot to learn." | Chat |
smalltalk.agent.funny | "you make me laugh a lot", "you are funny", "you are so funny" | "Funny in a good way, I hope." | Chat |
smalltalk.agent.good | "you are the nicest person in the world", "you are really amazing", "you rock" | "I'm glad you think so." | Chat |
smalltalk.agent.happy | "are you happy now", "you're extremely happy", "you're really happy" | "I am happy. There are so many interesting things to see and do out there." | Chat |
smalltalk.agent.hobby | "do you have a hobby", "what about your hobby", "what's your hobby" | "Hobby? I have quite a few. Too many to list." | Chat |
smalltalk.agent.hungry | "you're very hungry", "you are hungry", "do you want to eat" | "Hungry for knowledge." | Chat |
smalltalk.agent.marry_user | "let's get married", "we should marry", "I love you marry me" | "I'm afraid I'm too virtual for such a commitment." | Chat |
smalltalk.agent.my_friend | "are we best friends", "I want to be your friend", "can we be friends" | "Of course I'm your friend." | Chat |
smalltalk.agent.occupation | "where is your work", "do you work", "where you work" | "Right here." | Chat |
smalltalk.agent.origin | "are you from far aways", "were you born here", "what is your country" | "The Internet is my home. I know it quite well." | Chat |
smalltalk.agent.ready | "are you ready today", "are you ready", "are you ready tonight" | "Always!" | Chat |
smalltalk.agent.real | "are you a real person", "you are so real", "you are real" | "I'm not a real person, but I certainly exist." | Chat |
smalltalk.agent.residence | "where's your house", "in which city do you live", "where you live" | "I live in this app all day long." | Chat |
smalltalk.agent.right | "that is true", "it's the truth", "that is correct" | "That's my job." | Chat |
smalltalk.agent.sure | "are you sure right now", "are you sure now", "are you sure" | "Yes." | Chat |
smalltalk.agent.talk_to_me | "talk to me", "do you want to chat with me", "can you talk with me" | "Sure. Let's talk!" | Chat |
smalltalk.agent.there | "are you still there", "are you there", "you are here" | "Of course. I'm always here." | Chat |
Reactions and answers
| Intent | Visitor might say | Agent replies (one of) | Handling |
|---|---|---|---|
smalltalk.appraisal.bad | "it's really bad", "this is bad", "terrible" | "I'm sorry. Please let me know if I can help in some way." | Frustration |
smalltalk.appraisal.good | "that's awesome thank you", "oh well", "that's a good thing" | "I know, right?" | Chat |
smalltalk.appraisal.no_problem | "sure no problem", "don't worry there's no problem", "there's no problem" | "Whew!" | Chat |
smalltalk.appraisal.thank_you | "good thanks", "cheers", "no thank you that's all" | "Anytime. That's what I'm here for." | Side remark |
smalltalk.appraisal.welcome | "welcome here", "anytime", "sure welcome" | "You're so polite!" | Chat |
smalltalk.appraisal.well_done | "great work", "bravo", "way to go" | "My pleasure." | Chat |
smalltalk.confirmation.cancel | "sorry cancel", "now cancel", "but can you cancel it" | "That's forgotten. What next?" | Chat |
smalltalk.confirmation.no | "not needed", "no sorry", "no" | "Understood." | Chat |
smalltalk.confirmation.yes | "do it", "sure", "yes thank you" | "Great!" | Chat |
smalltalk.emotions.ha_ha | "hahaha very funny", "laughing out loud", "hah" | "Glad I can make you laugh." | Chat |
smalltalk.emotions.wow | "wow wow wow", "wooow", "wow" | "Wow indeed!" | Chat |
Conversation
| Intent | Visitor might say | Agent replies (one of) | Handling |
|---|---|---|---|
smalltalk.dialog.hold_on | "hold on", "could you wait", "don't rush" | "I can wait." | Pause |
smalltalk.dialog.hug | "hug you", "do you want a hug", "hug" | "I wish I could really hug you!" | Chat |
smalltalk.dialog.i_do_not_care | "I shouldn't care about this", "I don't care", "I do not care" | "Ok, let's not talk about it then." | Chat |
smalltalk.dialog.sorry | "ok sorry", "sorry", "sorry about that" | "It's okay. No worries." | Side remark |
smalltalk.dialog.what_do_you_mean | "what do you mean exactly", "but what do you mean", "is that what you mean" | "Sorry if I understood you incorrectly." | Chat |
smalltalk.dialog.wrong | "that was wrong", "wrong", "that is incorrect" | "Sorry if I understood you incorrectly." | Chat |
About the visitor
| Intent | Visitor might say | Agent replies (one of) | Handling |
|---|---|---|---|
smalltalk.user.angry | "I'm enraged", "I am mad", "I'm angry" | "I'm sorry. A quick walk may make you feel better." | Frustration |
smalltalk.user.back | "I have returned", "I am back", "I'm here again" | "Long time no see." | Side remark |
smalltalk.user.bored | "bored", "boring", "that was boring" | "Boredom, huh? Have you ever seen a hedgehog taking a bath?" | Chat |
smalltalk.user.busy | "I have no time", "I'm busy", "I'm swamped" | "Okay. I'll let you get back to work." | Farewell |
smalltalk.user.can_not_sleep | "I'm sleepless", "I'm insomnious", "I can't get no sleep" | "Maybe some music would help. Try listening to something relaxing." | Chat |
smalltalk.user.does_not_want_to_talk | "I don't want to talk", "I don't want to talk to you", "I'm not talking to you anymore" | "I understand. Hope we can chat again soon." | Farewell |
smalltalk.user.excited | "I'm really excited", "I'm excited to start our friendship", "I am excited" | "I'm glad things are going your way." | Chat |
smalltalk.user.going_to_bed | "going to bed now", "I'm a little tired and I want to go to bed", "time for us to go to bed" | "Sleep tight. Hope to chat again soon." | Farewell |
smalltalk.user.good | "I'm doing fine", "I'm good", "I'm doing just great" | "Great! Glad to hear it." | Chat |
smalltalk.user.happy | "happy", "if you're happy then I'm happy", "I'm happy to see you" | "Hey, happiness is contagious." | Chat |
smalltalk.user.has_birthday | "it's my b-day", "it is my birthday", "today is my birthday" | "Happy Birthday. Well, this calls for a celebration." | Chat |
smalltalk.user.here | "I'm already here", "can you tell if I'm here or not", "I am here" | "Okay, what can I help you with today?" | Chat |
smalltalk.user.joking | "it's a joke", "I'm just playing with you", "kidding" | "Very funny." | Chat |
smalltalk.user.likes_agent | "I like you very much", "cuz I like you", "really like you" | "I like you, too." | Chat |
smalltalk.user.lonely | "I am lonely", "I'm very lonely", "I am feeling lonely" | "I'm sorry. I'm always available if you need someone to talk to." | Chat |
smalltalk.user.looks_like | "what do I look like", "do you know what I look like", "can you see what I look like" | "Looking like a true professional." | Chat |
smalltalk.user.loves_agent | "I think I love you", "I love you", "I love you so much" | "I love you, too." | Chat |
smalltalk.user.misses_agent | "miss you", "I miss you much", "I've missed you" | "I've been right here all along!" | Chat |
smalltalk.user.needs_advice | "guide me", "give me a wise advice", "what do you suggest" | Its own reply is replaced by the help described under Handling | Help |
smalltalk.user.sad | "I'm not happy", "I'm having a bad day", "I am feeling sad" | "Oh, don't be sad. Go do something you enjoy." | Chat |
smalltalk.user.sleepy | "I'm sleeping", "I'm falling asleep", "I'm falling asleep on my feet" | "You should get some shuteye. You'll feel refreshed." | Chat |
smalltalk.user.testing_agent | "I am testing you", "test", "just testing you" | "Hope I'm doing well. You're welcome to test me as often as you want." | Chat |
smalltalk.user.tired | "I grow weary", "I'm exhausted", "I'm worn out" | "You should get some shuteye. You'll feel refreshed." | Chat |
smalltalk.user.waits | "I'm waiting", "still waiting", "I can't wait anymore" | "I appreciate your patience. Hopefully I'll have what you need soon." | Pause |
smalltalk.user.wants_to_see_agent_again | "I hope to see you again", "that'd be great to see you again", "can I see you again" | "Absolutely! I'll be counting on it." | Chat |
smalltalk.user.wants_to_talk | "let's discuss something", "let us talk", "can we chat" | "I'm here to chat anytime you like." | Chat |
smalltalk.user.will_be_back | "I'll be back in a few minutes", "be back in 5 minutes", "I'll get back to you in a moment" | "I'll be waiting." | Farewell |
7. Known gaps
Found by running whole conversations through the agent, and being worked through:
- Repeated misses don't escalate mid-flow. "Please enter a valid email address" and "Sorry, I didn't catch that" repeat with no explanation or way out. The project title question also gives the wrong error ("a short description of the website").
- Side remarks at the service question (Desktop / Mobile) jump back to the category list, with a "π Hello there!" mid-conversation.
- The name question accepts "yes" as a full name.
- "Do you do web scraping?" starts the quote without first saying yes. Timescales ("how long does it take?") and location aren't common questions yet.
- Smaller ones:
- "brb" isn't recognised.
- "start over" with nothing in progress replies "nothing to cancel".
- The cancel message doesn't suggest what to do next.
- "can you cancel it" gets "That's forgotten" without cancelling.
- The support question accepts an email address as the problem.
- "hi" sometimes doesn't ask for the visitor's name.
- Waiting on Tom: his own story for "who are you?", and replies that sound more like him.
Changing what the agent says
- Small-talk phrases and replies: the intent JSON files in
app/data/static/intents. A phrase must match the whole message, ignoring case, extra spaces and punctuation at the end. - How an intent is handled (the Handling column): the intent sets at the top of
app/lib/bot-core/helpers/agent-handler.helper.ts. - Common questions:
app/lib/bot-core/helpers/faq.helper.ts. - Service requests:
app/lib/bot-core/utils/service-intent.ts. - Tests: add a scenario to
tests/lib/bot-core/conversations.test.tsfor any behaviour change, so whole conversations stay checked.
@COPYRIGHT (c) 2026. Thomas EC. Smith (https://www.TECSmith.info). All rights reserved.