Help Optimize My SMS/Voice AI Integration - 8 Operations Per Response Seems Excessive

Hey Make Community! :waving_hand:

My automation is working perfectly, but I’m concerned about efficiency and long-term costs. Looking for your expert advice on optimization.

Current Setup: I’ve built an SMS chatbot that mirrors my Retell AI voice agent using the same phone number. The goal is seamless omnichannel experience - customers can either call or text the same number and get consistent AI responses.

The Problem: My current flow uses 8 operations per single customer response:

  • Webhook (incoming SMS)
  • Webhook Response 204 (Twilio acknowledgment)
  • Twilio (List Messages)
  • Array Aggregator (for conversation history)
  • JSON Transform (for conversation history)
  • OpenAI (GPT completion with context)
  • Twilio (Send Reply)
  • Plus some additional processing

The Math That Worries Me:

  • If on average 10 message exchanges per customer conversation = 80 customers on a single customer alone.
  • At scale, this could get expensive fast.
  • Industry standard seems to be 3-5 operations per response.

Context on Array + JSON: I’m using Array Aggregator + JSON Transform to maintain conversation history so OpenAI has context for more natural responses. Not sure if this is the most efficient approach.

My Questions:

  1. Is there a way to reduce operations while maintaining the webhook response (required for Twilio)?
  2. Do I really need the “List Messages” step if I’m getting the message content from the webhook?
  3. Should I use Data Stores instead of Array Aggregator + JSON for conversation history?
  4. Would OpenAI Assistant API be more efficient for handling conversation context?
  5. Any other best practices for SMS/AI integrations that I’m missing?

Use Case Context: The same phone number handles both Retell AI voice calls and SMS. I want the SMS responses to match the voice agent’s personality and knowledge base while maintaining conversation context.

Would love to hear how you’ve optimized similar workflows! Any suggestions for improving this without breaking functionality?

Thanks in advance! :folded_hands:

Hopefully someone would be able to actually help me on this one. :slight_smile:

We’d love to help, however, there is just not enough information about the format of the data flowing through your scenario, as you have not provided sufficient information to demonstrate the problem that would allow us to reproduce the scenario and any issue/s and/or error/s.

To allow others to assist you with your scenario, please provide the following:

1. All Relevant Screenshots

We need to see what you’re working with to give you the best advice. Screenshots are extremely important because Make is a visual editor — a picture provides us with more context.

It would help us identify the issue by having screenshots of:

  • any error messages,
  • individual module fields,
  • relevant filter settings (conditions), and
  • each module’s output bundles
  • any external services (spreadsheet headers, sample data, regex101.com, etc.)

You can upload images here using the Upload icon in the text editor:

We would appreciate it if you could upload screenshots here instead of linking to them outside of the forum. This allows us to zoom in on the image when clicked, and avoid tracking cookies from third-party websites.

2. Scenario Blueprint

Please export the scenario blueprint. Providing your scenario blueprint file will allow others to quickly recreate and see how you have set up the mappings in each module, and also allows us take screenshots or provide module exports of any solutions we have for you in return - this would greatly benefit you in implementing our suggestions as you can simply paste module exports back into your scenario editor!

To export your scenario blueprint, click the three dots at the bottom of the editor then choose ‘Export Blueprint’.

You can upload the file here by clicking on this button:

3. Module Output Bundles

Please provide the output bundles of each of the relevant modules by running the scenario (you can also get this without re-running your scenario from the History tab).

Click on the white speech bubbles on the top-right of each module and select “Download input/output bundles”.

A. Upload as a Text File

Save each bundle contents in a plain text editor (without formatting) as a bundle.txt file.

You can upload the file here by clicking on this button:

B. Insert as Formatted Code Block

If you are unable to upload files on this forum, alternatively you can paste the formatted bundles.
Here are some ways to provide text content in a way that it won’t be modified by the forum.

  • Method 1: Type code fence manually
    Add three backticks ``` in a separate line before and after the content, like this,

    ```
    text goes here
    ```
    
  • Method 2: Highlight and click the “preformatted text” button in the editor

  • Method 3: Upload your file and share the public link
    (this method is only recommended for large files exceeding the forum upload limit)

Providing the input/output bundles will allow others to replicate what is going on in the scenario, especially if there are complex data structures (nested arrays and collections) or if external services are involved, and help you with mapping the raw property names from collections.

Sharing these details will make it easier for others to assist you.