Transcript & Record Delivery Guide
Transcript & Record Delivery Guide
Velaro can automatically deliver a transcript of every chat conversation to your CRM, cloud storage, or any custom destination. This guide explains all available delivery methods and how to set them up.
---
How delivery works
When a conversation ends (resolves), Velaro automatically pushes the transcript to each configured destination — this applies no matter how the conversation was resolved: an agent clicking Resolve, a workflow's Resolve Conversation action, or the IVR bot ending a call. All pushes are additive — Velaro's own archive is never deleted, and you can send to multiple destinations at once.
For NetSuite, HubSpot, and Salesforce, Velaro identifies which CRM record to write to using the visitor's email first and falls back to their phone number when no email is available — this is what makes phone/IVR conversations, which typically only have a phone number, work the same as chat conversations for transcript delivery.
Your delivery options fall into two groups:
Native CRM pushes — automatic, zero-code, turn on in one click:
- Salesforce (Contact or Lead ContentNote)
- HubSpot (Note on Contact)
- Dynamics 365 (Note on Contact or Lead)
- NetSuite (Customer transcript field)
Custom destinations (BYOS — Bring Your Own Storage):
- Azure Blob Storage
- AWS S3
- Microsoft SharePoint / OneDrive (via Microsoft 365 connection)
- HTTPS webhook (sends to any URL — Power Automate, Azure Function, custom API, etc.)
---
Salesforce Transcript Push
Requirements: Salesforce integration connected (OAuth Connected App).
How to enable:
1. Go to Integrations → Salesforce → Configuration
2. Under Transcript Auto-Push, toggle Push transcript on resolve to ON
What happens: After every conversation, Velaro searches Salesforce for a Contact matching the visitor's email. If no email is available (for example, a phone/IVR conversation), Velaro falls back to matching by phone number. If found, a ContentNote is created and linked to that Contact. If no Contact is found, Velaro looks for a matching Lead using the same email-then-phone lookup. If neither is found, the push is skipped and logged.
What the note contains: Plain-text transcript with timestamps, agent name, visitor name, channel, and message history.
---
HubSpot Transcript Push
Requirements: HubSpot integration connected.
How to enable: Go to Integrations → HubSpot → Configuration and enable Auto-push transcript.
What happens: Creates a HubSpot Note on the Contact matching the visitor's email. If the conversation has no email on file (for example, a phone/IVR conversation), Velaro falls back to matching the Contact by phone number.
---
Dynamics 365 Transcript Push
Requirements: Dynamics 365 integration connected.
How to enable: Go to Integrations → Dynamics 365 → Configuration and enable Push Transcripts.
What happens: Creates a Note on the matching Contact or Lead in Dynamics.
---
NetSuite Transcript Push
Requirements: NetSuite integration connected (Token-Based Auth or OAuth 2.0).
How to enable: Go to Integrations → NetSuite → Configuration, enable Push transcripts to NetSuite on conversation resolve, and choose one of two modes:
How the customer is identified: Velaro looks up the NetSuite customer record by the visitor's email first. If the conversation has no email on file — most common for phone/IVR conversations, which are resolved by number rather than an email form — Velaro falls back to matching by the caller's phone number. This means transcripts from phone calls resolved by the IVR bot are pushed to NetSuite the same as chat conversations, as long as the caller's phone number matches a NetSuite customer record.
NetSuite Notes via RESTlet (recommended for transcript history):
NetSuite's REST API removed the note record endpoint in the 2024.1 release, so notes cannot
be created via the standard REST path. To get per-conversation note history (matching Dynamics /
HubSpot behavior), enable "Note via RESTlet" mode, contact Velaro Support for the sample
SuiteScript RESTlet, deploy it in your NetSuite account with External Access enabled, and paste
the deployment URL into the RESTlet URL field. The RESTlet uses the same OAuth 2.0 Bearer token
as the REST API — no second connection needed. You'll also need to check the RESTlets scope
on your Velaro NetSuite integration record (alongside the existing REST Web Services scope).
NetSuite custom field (simple, no history):
The default mode writes the transcript to a custom entity text field (custentity_transcript).
Each new conversation overwrites the previous. Use this only if transcript history is not required.
---
BYOS Webhook (Power Automate, Azure Functions, custom)
The most flexible option. Velaro POSTs the full JSON transcript to any HTTPS URL after each conversation resolves.
How to set up:
1. Go to Integrations → Transcript Storage → Add Destination
2. Choose HTTPS Webhook as the provider
3. Paste your endpoint URL
4. Optionally add a shared secret (sent as X-Velaro-Secret or a custom header)
5. Enable HMAC signing for cryptographic verification (X-Velaro-Signature: sha256=<hex>)
Verifying the signature (Node.js):
const crypto = require('crypto');
function isValid(req, secret) {
const expected = 'sha256=' + crypto.createHmac('sha256', secret)
.update(req.body).digest('hex');
const sig = req.headers['x-velaro-signature'] ?? '';
const a = Buffer.from(expected, 'utf8');
const b = Buffer.from(sig, 'utf8');
return a.length === b.length && crypto.timingSafeEqual(a, b);
}
---
Power Automate — the recommended no-code path
Power Automate connects your Velaro webhook to 1,000+ services without writing code. Use this when you want to:
- Write chat data to SQL Server or Azure SQL
- Post a summary to a Teams channel
- Create a row in SharePoint Lists or Dataverse
- Update a record in Salesforce, Dynamics, or ServiceNow
- Forward to Azure Blob or OneDrive
Setup:
1. In Power Automate, create a new flow with trigger: "When an HTTP request is received"
2. Copy the generated URL and paste it into Velaro → Transcript Storage → HTTPS Webhook URL
3. Add actions to forward the data to your destination
4. Optional: add a Response action returning JSON fields — the AI node can read those fields if you trigger the flow from a workflow
Why Power Automate instead of direct database access:
Your credentials never leave your systems. Velaro sends the transcript to your flow, and your flow handles the insert — you control what gets written, where, and with what permissions. This is more secure than sharing database credentials with any third-party service.
---
Azure Blob Storage
Requirements: Azure Storage account with a container. Create a connection string (Account Key or SAS).
How to set up:
1. Go to Integrations → Transcript Storage → Add Destination
2. Choose Azure Blob Storage
3. Paste your connection string, container name, and optional path prefix
File format: {prefix}/{year}/{month}/{day}/{conversationId}.json (or .txt)
---
AWS S3
Requirements: AWS IAM user with s3:PutObject permission on the target bucket.
How to set up:
1. Add destination, choose AWS S3
2. Enter your Access Key ID, Secret Access Key, bucket name, and region
---
SharePoint / OneDrive
Requirements: Microsoft 365 connection configured (via Integrations → Microsoft 365).
How to set up:
1. Add destination, choose SharePoint
2. Enter the SharePoint site URL and folder path
---
GDPR Erasure Propagation
Each BYOS destination has a Propagate Erasure toggle. When enabled, Velaro will delete the transcript file from that destination when a GDPR erasure request is processed for that contact. Default is off — you must explicitly opt in per destination.
---
What we do NOT support (and why)
Direct SQL INSERT: Velaro does not accept SQL Server credentials or execute queries against your database. The correct path is webhook → Power Automate → SQL connector (or webhook → Azure Function → SQL). You keep your credentials and we stay out of your database security perimeter.
NetSuite SuiteScript relay for anything other than transcript notes: For record reads/writes covered by the native NetSuite REST Record API, a custom SuiteScript relay is unnecessary — the native API covers those. The one confirmed exception is transcript history: NetSuite removed the REST note creation endpoint in 2024.1, so per-conversation Notes require the RESTlet mode described above. Don't decommission a transcript-note RESTlet without switching back to custom-field mode first.
XML upload: No modern system requires XML push. Our JSON webhook payload covers all use cases.
---
Troubleshooting
Transcript not appearing in Salesforce, HubSpot, or NetSuite:
- Confirm the conversation has an email address, a phone number, or both — a conversation with neither is skipped (this is logged, not a failure)
- Confirm a matching Contact/Lead/Customer exists in the CRM with that exact email or phone number
- Check the Activity Log tab on the integration's page for delivery events
- Check
/superadmin/logs/search?q=SalesforceTranscriptPush(orHubSpotTranscriptPush,NetSuiteTranscriptPush) for error details
Webhook not receiving data:
- Make sure your endpoint returns HTTP 2xx within 15 seconds
- Use the Test button in Transcript Storage settings to send a sample payload
- Check that HMAC verification uses the exact raw request bytes (not re-serialized JSON)
SharePoint upload failing:
- Confirm the Microsoft 365 connection has
Sites.ReadWrite.AllorFiles.ReadWrite.Allscope - Check that the folder path exists in the target site
Was this article helpful?