Skip to the page

Dasha

Give a Dasha BlackBox voice agent a Deep Search list as a tool it calls during a call. The tool reads the list's rows, with a source link on every value, and the agent answers the caller from the row. No server of your own is needed.

SpecStream for DashaAgent frameworks & builders

What you need

  • A Dasha BlackBox agent you can edit.
  • A SpecStream account with a finished Deep Search list. New accounts get $10 of credit on sign-up, no card. Create one.
  1. 1. Build the list in SpecStream

    Ask Deep Search for the records the agent should know, in plain words, and name the facts to bring back on each one. SpecStream reads the request back, prices it, and runs it once you approve the maximum. Open the finished list in your workspace. Its address ends in the list's find_id: https://specstream.ai/workspace/collections/<find_id>.

  2. 2. Create a key that only reads

    In SpecStream, open Agents & API, choose API keys, then Create API key. Leave out execute permission: a key without it reads your lists and cannot spend. Copy the key.

  3. 3. Store the list's ID on the agent

    In the agent's Additional Data, add the key specstream_find_id with the find_id as its value. The tool reads it as {{agentAdditionalData.specstream_find_id}}, so the language model never has to say it. To give each call its own list, pass specstream_find_id in the call's additionalData and use {{callAdditionalData.specstream_find_id}} instead.

  4. 4. Add the tool

    Open the agent's Tools tab and click Add Tool. Fill in the fields:

    Tool Name: lookup_list. Description: what the list holds and when to use it, for example Read the saved list of clinics in Lyon with their opening hours and phone numbers. Use it when the caller asks about a clinic. Schema: {"type": "object", "properties": {}}, because the tool takes no arguments.

    Webhook URL: https://api.specstream.ai/v1/finds/{{agentAdditionalData.specstream_find_id}}/rows. Headers: Authorization with the value Bearer followed by your key.

    Open Advanced request settings, set HTTP Method to GET, and add two query parameters: format set to markdown, and limit set to 100.

  5. 5. Test it

    Click Test Tool. Fill in Test values for custom data with your find_id, or leave it blank to use the agent's own Additional Data. Request Sent shows the exact URL and headers, and the response holds data.table: the list's columns in order, one row a line, with a source link for each value.

  6. 6. Tell the agent when to use it

    In the agent's prompt, say when to call the tool and how to answer from it:

    In the agent prompt
    When the caller asks about a clinic, call lookup_list, find that clinic's row, and answer from it. If the clinic is not on the list, say so. Do not read out the links.
  7. 7. Or create the tool with the API

    A tool created through the Dasha API replaces variables only when its webhook has customSettings. This is the same tool as JSON:

    lookup_list tool
    {
    "name": "lookup_list",
    "description": "Read the saved list of clinics in Lyon with their opening hours and phone numbers. Use it when the caller asks about a clinic.",
    "schema": {"type": "object", "properties": {}},
    "webhook": {
    "url": "https://api.specstream.ai/v1/finds/{{agentAdditionalData.specstream_find_id}}/rows",
    "headers": {"Authorization": "Bearer YOUR_SPECSTREAM_API_KEY"},
    "customSettings": {
    "httpMethod": "GET",
    "queryParams": {"format": ["markdown"], "limit": ["100"]}
    }
    },
    "fallBackResult": {"error": "The list could not be read right now."}
    }

What the agent reads

GET /v1/finds/{id}/rows with format=markdown returns data.columns, the facts you asked for in order, and data.table, one table with a source link for each value. limit takes 1 to 100 rows; a longer list returns next_cursor for the next page. Leave out format to get the rows as JSON records instead. The API reference has every field.

Answer one question from the live web

For a single fact that is on no list, add a second tool that calls the Search API. It answers in a few seconds with the fact, the page it was read from and the results it read. This key needs execute permission and a spending limit above zero.

Set Tool Name to web_search, Schema to one string property q (the question, in everyday words), Webhook URL to https://api.specstream.ai/v1/web-search, the same Authorization header with this key, HTTP Method GET, and the query parameters q set to {{arguments.q}} and num set to 5.

Turn on isLongRunning and set longRunningAdditionalInstructions to what the agent says while it waits, for example Tell the caller you are checking. The agent keeps talking and tells the caller the answer as soon as it arrives. With Enhanced tooling on in the LLM configuration, these two settings are not used.

Why the list is built before the call

A Deep Search run is priced before it starts and runs only after a person approves the maximum. A large list can take up to four hours, longer than any caller waits. So the run happens in your workspace, and the call reads the finished rows, which takes one request and spends nothing.

Cost

Reading a list's rows costs nothing. Each row a Deep Search run delivers costs 5¢, 15¢ or $1, depending on how much the row needs, plus 5¢ for a person's email and 15¢ for a phone. A run never costs more than the maximum you approved, and a run that finds nothing costs nothing. Each web_search call is $5 per 1,000 searches of up to 10 results, from your balance. Balance, quotes, and billing has the details.

Disconnect

Delete the tools in the agent's Tools tab, then open Agents & API in your workspace, choose API keys, and revoke the keys. Your lists stay in your workspace. Questions go to [email protected].

More

SpecStream for Dasha covers what it does in Dasha on one page. Every other tool has its guide in Connect your tools. You see the most a request can cost before it starts, and the matches are paid from your balance. Billing has the details. For help, email [email protected].