Integrating Sybill with your existing tools is easier than ever, thanks to webhooks. These enable seamless automations by sending meeting data directly to other apps or automation platforms like Zapier or Make. With Sybill’s webhook functionality, you can automatically send meeting summaries, action items, and key insights to your team's preferred tools or existing tech stack, keeping your workflows smooth and organized.
What Are Webhooks?
What Are Webhooks?
Webhooks are essentially automated messages triggered by specific events and sent from one app to another in real-time. Unlike traditional APIs that require constant pulling to check for updates, webhooks notify your chosen application instantly when something important happens. For example, when a meeting summary is generated in Sybill, the webhook immediately sends that information to your selected tool, ensuring faster, more efficient workflows.
Customizable Automation
Customizable Automation
Not every meeting requires the same treatment, and Sybill’s webhook automation lets you tailor which meetings trigger a webhook. You can set parameters such as meeting participants, topics, meeting types, and deal stages to ensure only relevant data is sent to your connected apps. This ensures your systems stay organized, avoiding information overload.
How Can One Set Up a Webhook?
How Can One Set Up a Webhook?
There are two ways to go about it:
Using Intermediaries like Zapier or Make
Using Intermediaries like Zapier or Make
Zapier and Make act as intermediaries that help you connect Sybill to thousands of other applications. They receive webhooks when your app of choice might not do so, and they then send the webhook information to your app of choice.
Start with Sybill:
Start with Sybill:
a. Navigate to Automations:
Settings > Integrations > Automations
b. Create a New Automation:
Click on Create Automation to begin setting up a new webhook automation. This setup involves three easy steps:
Name and Describe the Automation: This will help you and your team understand what this automation does at a glance.
Define the Trigger for the Webhook: The trigger is the event that prompts sending the information. In Sybill, you can choose to send all meeting summaries or filter meetings based on specific criteria such as participants, topic trackers, meeting type, and deal parameters.
Set the Destination URL: Paste the URL where you want the meeting information to be sent. For this integration, we will use Zapier.
Generate the Destination URL in Zapier:
Generate the Destination URL in Zapier:
a. Log in to your Zapier account and click on Create Zaps.
b. Click on Trigger and search for and select Webhooks by Zapier.
c. For Event choose Catch Hook and click on Continue.
d. Leave the Child Key empty.
e. Copy the Webhook URL: Zapier will generate a webhook URL. Copy this URL, as you will need it in the next step.
Connect Zapier and Sybill:
Connect Zapier and Sybill:
a. Paste the Webhook URL in Sybill:
Return to Sybill and paste the URL in the last step of creating the new automation. Click Create.
b. Test the Webhook:
Hover over the automation you just created and click on Test to send a test payload to Zapier.
c. Verify the Test Payload in Zapier:
In Zapier click on Test Trigger to find the test payload, select it, and click on Continue with selected record.
A successful payload test confirms that the automation between Sybill and Zapier is successfully established.
Quick Tip: You can maintain a 'Private List' of meetings in Sybill, which will exclude those meetings from being shared through the automations you create even if they pass through the filtering. This helps protect sensitive or private information. To create your Private List, go to Call Sharing in Sybill Settings.
From this point forward, the next steps will depend on the specific automation use case. Before establishing the connection between Zapier and your app, it is essential to identify the relevant portion of the payload received from Sybill that needs to be transferred. Additionally, determine which specific fields in your app should be updated with this information.
Set Up Looping in Zapier:
Set Up Looping in Zapier:
Sample Use Case
Sample Use Case
Zapier allows multiple such automations, but for this example, we will focus on the use case of updating the pain points and interests of each meeting participant in your CRM.
Given the above, the objective of this automation is to:
Update pain points and interests from Sybill meeting summaries for every call participant that matches a contact in your CRM.
a. For Step 2 in Zapier, search for and select Looping by Zapier.
b. For Event choose Create Loop From Line Items and click on Continue.
c. Add the participant Email:
Under Line Items, search for and select ‘Data Participant Insights Email’ in the field ‘Enter text or insert data’.
You can choose to replace ‘Data Participant Insights Email’ with a simpler name in the ‘Values to Loop’ field. For this example, let’s call it ‘Email’.
d. Add the participant Interests
In the same box, click on the ‘+’ icon to add another field below Email
Search for and select ‘Data Participant Insights Interests’
For simplicity, let’s call it ‘Interests’
e. Add the participant Pain Points
Click on the ‘+’ icon to add another field below Interests.
Search for and select ‘Data Participant Insights Pain Points’.
For simplicity, let’s call it ‘Pain Points’.
Next, click Continue.
f. Under Test, test the loop to see the output preview that will be sent to your CRM. Verify and click on Publish
A successful test confirms that the Interests and Pain Points associated with each participant's Email are ready to be sent. The next step is to identify the relevant fields in your CRM where this data should be mapped and updated.
The next steps in the Zap will depend on what actions you can take in your CRM directly from Zapier;
For Close, for example, some of these include: Find or Create Contact, Find or Create Lead, Update Contact, Update Lead, among many others. You can find the full list here.
For Zoho, some of these include: Find or Create Contact, Find or Create Lead, Create/Update Module Entry, among many others. You can find the full list here.
This completes the setup process for your webhook automation between Sybill, Zapier, and your CRM of choice for this particular use case. With this automation in place, you can rest assured that all relevant participant insights from your meetings will be accurately reflected in your CRM, keeping your sales process smooth and efficient.
Webhook Signature Verification
Webhook Signature Verification
For security, it's essential to verify that the webhooks you receive are actually coming from Sybill. Our partner, Svix, offers libraries to make this process easy. By verifying webhook signatures and timestamps, you can be confident in the authenticity of the messages you're processing.
Here is a an example using Javascript:
The const secret key in this can be found on Sybill’s dashboard when you click on the key icon.
Webhook Templates
Webhook Templates
Add Sybill participant insights to Zoho leads: https://zapier.com/shared/b035a7367a7d54ac3e3f801ed29047f967c0d5bf
Add Sybill meeting summaries to Zoho deals: https://zapier.com/shared/9934eb4d340df3555cf457b3426194c13b2fe2fa
Creating Own Endpoint to Receive Webhooks
Creating Own Endpoint to Receive Webhooks
How?
How?
At their core, webhooks are just POST requests sent to a designated endpoint—essentially a URL that listens for incoming event data. You can set up one endpoint for each service you want to connect. For instance, if you're receiving webhooks from a service like Acme Inc., your URL might look something like this: `https://www.example.com/acme/webhooks/`.
Once a webhook is successfully processed, you’ll want to ensure your system returns a 2xx status code (any code between 200 and 299) to confirm receipt. Be sure to disable CSRF protection on this endpoint if it’s enabled by default, and always verify the webhook’s signature and timestamp to ensure its authenticity.
Step-by-Step Guide:
Step-by-Step Guide:
a. Choose your Endpoint
- Decide where you want to receive webhook data (e.g.,`https://yourapp.com/sybill-webhooks`)
- Pro tip: Use a unique URL for each service sending webhooks
b. Configure Your Listener
- Ensure your Automation can handle POST requests
- Disable CSRF protection for this specific route (if applicable)
- Aim to process and respond to webhooks within 15 seconds
c. Security First
- Implement signature verification to ensure webhooks are legitimate
- Check timestamps to prevent replay attacks
d. Select Your Events
- Currently, the only event available is ‘New Meeting Recording.
e. Test and Verify
- Use our Test button to send sample webhooks
- Monitor message delivery and troubleshoot any issues
Handling Webhook Retries
Handling Webhook Retries
In case of delivery failure, Svix implements a retry system with exponential backoff. This means that if a webhook delivery attempt fails, it will be retried according to the following schedule:
Immediately
After 5 seconds
5 minutes
30 minutes
2 hours
5 hours
10 hours (with additional 10-hour intervals thereafter).
If an endpoint is removed or disabled, the retries will stop.
By understanding and setting up webhooks correctly, you can unlock a new level of automation and efficiency in your workflow with Sybill.
Schema
Schema
Open API
Open API
{
"definitions": {
"AutomationEventCrmInfo": {
"properties": {
"accountId": {
"title": "Accountid",
"type": "string"
},
"accountName": {
"title": "Accountname",
"type": "string"
},
"opportunityId": {
"title": "Opportunityid",
"type": "string"
},
"opportunityName": {
"title": "Opportunityname",
"type": "string"
}
},
"title": "AutomationEventCrmInfo",
"type": "object"
},
"AutomationEventMeetingMetadata": {
"properties": {
"controller": {
"$ref": "#/definitions/AutomationEventParticipantMetadata"
},
"duration": {
"title": "Duration",
"type": "integer"
},
"participants": {
"items": {
"$ref": "#/definitions/AutomationEventParticipantMetadata"
},
"title": "Participants",
"type": "array"
},
"platform": {
"$ref": "#/definitions/ConferenceProviders"
},
"startTime": {
"title": "Starttime",
"type": "integer"
},
"title": {
"title": "Title",
"type": "string"
},
"type": {
"$ref": "#/definitions/MeetingTypes"
},
"url": {
"format": "uri",
"maxLength": 65536,
"minLength": 1,
"title": "Url",
"type": "string"
}
},
"required": [
"url",
"startTime",
"duration",
"controller",
"type"
],
"title": "AutomationEventMeetingMetadata",
"type": "object"
},
"AutomationEventParticipantMetadata": {
"properties": {
"attended": {
"title": "Attended",
"type": "boolean"
},
"email": {
"format": "email",
"title": "Email",
"type": "string"
},
"name": {
"title": "Name",
"type": "string"
},
"participantId": {
"title": "Participantid",
"type": "string"
}
},
"required": [
"participantId",
"name",
"attended"
],
"title": "AutomationEventParticipantMetadata",
"type": "object"
},
"AutomationEventTranscript": {
"properties": {
"endOffset": {
"title": "Endoffset",
"type": "integer"
},
"sentenceBody": {
"title": "Sentencebody",
"type": "string"
},
"sentenceId": {
"title": "Sentenceid",
"type": "integer"
},
"speakerId": {
"title": "Speakerid",
"type": "string"
},
"speakerName": {
"title": "Speakername",
"type": "string"
},
"startOffset": {
"title": "Startoffset",
"type": "integer"
}
},
"required": [
"speakerId",
"speakerName",
"sentenceId",
"startOffset",
"endOffset",
"sentenceBody"
],
"title": "AutomationEventTranscript",
"type": "object"
},
"ConferenceProviders": {
"description": "An enumeration.",
"enum": [
"ZOOM",
"TEAMS",
"GMEET"
],
"title": "ConferenceProviders",
"type": "string"
},
"MeetingNewRecordingAutomationEventData_V1": {
"properties": {
"crmInfo": {
"$ref": "#/definitions/AutomationEventCrmInfo"
},
"metadata": {
"$ref": "#/definitions/AutomationEventMeetingMetadata"
},
"participantInsights": {
"items": {
"$ref": "#/definitions/MeetingParticipantInsight"
},
"title": "Participantinsights",
"type": "array"
},
"summary": {
"$ref": "#/definitions/MeetingSummary"
},
"transcript": {
"items": {
"$ref": "#/definitions/AutomationEventTranscript"
},
"title": "Transcript",
"type": "array"
}
},
"required": [
"metadata",
"participantInsights",
"summary",
"transcript"
],
"title": "MeetingNewRecordingAutomationEventData_V1",
"type": "object"
},
"MeetingParticipantInsight": {
"properties": {
"email": {
"format": "email",
"title": "Email",
"type": "string"
},
"interests": {
"items": {
"type": "string"
},
"title": "Interests",
"type": "array"
},
"name": {
"title": "Name",
"type": "string"
},
"painPoints": {
"items": {
"type": "string"
},
"title": "Painpoints",
"type": "array"
},
"participantId": {
"title": "Participantid",
"type": "string"
}
},
"required": [
"participantId",
"name"
],
"title": "MeetingParticipantInsight",
"type": "object"
},
"MeetingSummary": {
"properties": {
"conversationStarters": {
"title": "Conversationstarters",
"type": "string"
},
"keyTakeaways": {
"items": {
"$ref": "#/definitions/StructuredSentence"
},
"title": "Keytakeaways",
"type": "array"
},
"nextSteps": {
"items": {
"type": "string"
},
"title": "Nextsteps",
"type": "array"
},
"outcome": {
"title": "Outcome",
"type": "string"
}
},
"title": "MeetingSummary",
"type": "object"
},
"MeetingTypes": {
"description": "An enumeration.",
"enum": [
"INTERNAL",
"EXTERNAL"
],
"title": "MeetingTypes",
"type": "string"
},
"StructuredSentence": {
"properties": {
"heading": {
"description": "Topic/heading for the current point.",
"title": "Heading",
"type": "string"
},
"summary": {
"description": "Short summary of the current point.",
"title": "Summary",
"type": "string"
}
},
"required": [
"heading",
"summary"
],
"title": "StructuredSentence",
"type": "object"
}
},
"examples": [
{
"data": {
"crmInfo": {
"accountId": "sample-account-id",
"accountName": "Acme Inc",
"opportunityId": "sample-opportunity-id",
"opportunityName": "Acme Inc New Deal"
},
"metadata": {
"controller": {
"attended": true,
"email": "john-smith@sybill.ai",
"name": "John Smith",
"participantId": "participant-id-1"
},
"duration": 1442,
"participants": [
{
"attended": true,
"email": "john-smith@sybill.ai",
"name": "John Smith",
"participantId": "participant-id-1"
},
{
"attended": true,
"email": "melissa@acme.com",
"name": "Melissa Wright",
"participantId": "participant-id-2"
}
],
"platform": "ZOOM",
"startTime": 1722363518000,
"title": "Acme <> Example New Deal",
"type": "EXTERNAL",
"url": "https://l.sybill.ai/c?id=sample-id&utm_source=AUTOMATION"
},
"participantInsights": [
{
"email": "melissa@acme.com",
"interests": [
"Recording Calls and Internal Use: There was moderate to mild excitement about the possibility of recording calls, including internal calls, and the value it could bring to her team, despite some reservations about the necessity for her own license.",
"Comparison with Competitors: Melissa showed moderate excitement when comparing Sybill to competitors, appreciating Sybill's more integrated and less intrusive approach, indicating a preference for user-friendly and efficient solutions."
],
"name": "Melissa Wright",
"painPoints": [
"Uncertainty about user count: Melissa is unsure about the exact number of users for the service, fluctuating between 10 and 12, and needs to discuss this with her team before finalizing."
],
"participantId": "participant-id-2"
}
],
"summary": {
"conversationStarters": "John Smith jokes about the process of signing agreements, referencing a movie like scenario.",
"keyTakeaways": [
{
"heading": "Decision on User Count and Pricing Flexibility",
"summary": "Melissa is in the process of deciding the final user count for Sybill licenses, considering options for 10 and 12 users. She appreciates the flexibility offered by Sybill in adding additional seats and reassigning licenses as needed."
},
{
"heading": "Value of Sybill Recognized by Team and Leadership",
"summary": "Melissa's team have quickly recognized the value of Sybill, particularly for sales and customer success. The dashboard feature has been specifically highlighted as valuable by the team."
}
],
"nextSteps": [
"John Smith: Set up a meeting with Alissa, the customer success manager, once the subscription is activated.",
"Melissa Wright: Review the order forms sent by John and decide on the seat count."
],
"outcome": "The overall outcome of the meeting is positive, with Melissa showing strong buying intent towards purchasing Sybill's services for her team. She requests order forms for both 10 and 12 licenses, indicating flexibility and a high likelihood of proceeding with the purchase, pending final discussions and approval from her leadership team."
},
"transcript": [
{
"endOffset": 73681,
"sentenceBody": "Thank you, Melissa.",
"sentenceId": 0,
"speakerId": "participant-id-2",
"speakerName": "John Smith",
"startOffset": 73049
},
{
"endOffset": 85418,
"sentenceBody": "There we go. Thank you. Good day.",
"sentenceId": 1,
"speakerId": "participant-id-1",
"speakerName": "Melissa Wright",
"startOffset": 85309
}
]
},
"eventId": "example-event-id",
"eventType": "meeting.new_recording.v1",
"eventVersion": 1,
"objectId": "9ea8a811-ddcc-44f8-894e-f20315785d3a",
"objectType": "meeting",
"timestamp": 1722373518000
}
],
"properties": {
"data": {
"$ref": "#/definitions/MeetingNewRecordingAutomationEventData_V1"
},
"eventId": {
"title": "Eventid",
"type": "string"
},
"eventType": {
"enum": [
"meeting.new_recording.v1"
],
"title": "Eventtype",
"type": "string"
},
"eventVersion": {
"enum": [
1
],
"title": "Eventversion",
"type": "integer"
},
"objectId": {
"format": "uuid",
"title": "Objectid",
"type": "string"
},
"objectType": {
"enum": [
"meeting"
],
"title": "Objecttype",
"type": "string"
},
"timestamp": {
"title": "Timestamp",
"type": "integer"
}
},
"required": [
"eventId",
"eventType",
"eventVersion",
"timestamp",
"objectId",
"objectType",
"data"
],
"title": "MeetingNewRecordingAutomationEvent_V1",
"type": "object",
"x-svix-preserve-example": true
}
Example Payload
Example Payload
{
"data": {
"crmInfo": {
"accountId": "sample-account-id",
"accountName": "Acme Inc",
"opportunityId": "sample-opportunity-id",
"opportunityName": "Acme Inc New Deal"
},
"metadata": {
"controller": {
"attended": true,
"email": "john-smith@sybill.ai",
"name": "John Smith",
"participantId": "participant-id-1"
},
"duration": 1442,
"participants": [
{
"attended": true,
"email": "john-smith@sybill.ai",
"name": "John Smith",
"participantId": "participant-id-1"
},
{
"attended": true,
"email": "melissa@acme.com",
"name": "Melissa Wright",
"participantId": "participant-id-2"
}
],
"platform": "ZOOM",
"startTime": 1722363518000,
"title": "Acme <> Example New Deal",
"type": "EXTERNAL",
"url": "https://l.sybill.ai/c?id=sample-id&utm_source=AUTOMATION"
},
"participantInsights": [
{
"email": "melissa@acme.com",
"interests": [
"Recording Calls and Internal Use: There was moderate to mild excitement about the possibility of recording calls, including internal calls, and the value it could bring to her team, despite some reservations about the necessity for her own license.",
"Comparison with Competitors: Melissa showed moderate excitement when comparing Sybill to competitors, appreciating Sybill's more integrated and less intrusive approach, indicating a preference for user-friendly and efficient solutions."
],
"name": "Melissa Wright",
"painPoints": [
"Uncertainty about user count: Melissa is unsure about the exact number of users for the service, fluctuating between 10 and 12, and needs to discuss this with her team before finalizing."
],
"participantId": "participant-id-2"
}
],
"summary": {
"conversationStarters": "John Smith jokes about the process of signing agreements, referencing a movie like scenario.",
"keyTakeaways": [
{
"heading": "Decision on User Count and Pricing Flexibility",
"summary": "Melissa is in the process of deciding the final user count for Sybill licenses, considering options for 10 and 12 users. She appreciates the flexibility offered by Sybill in adding additional seats and reassigning licenses as needed."
},
{
"heading": "Value of Sybill Recognized by Team and Leadership",
"summary": "Melissa's team have quickly recognized the value of Sybill, particularly for sales and customer success. The dashboard feature has been specifically highlighted as valuable by the team."
}
],
"nextSteps": [
"John Smith: Set up a meeting with Alissa, the customer success manager, once the subscription is activated.",
"Melissa Wright: Review the order forms sent by John and decide on the seat count."
],
"outcome": "The overall outcome of the meeting is positive, with Melissa showing strong buying intent towards purchasing Sybill's services for her team. She requests order forms for both 10 and 12 licenses, indicating flexibility and a high likelihood of proceeding with the purchase, pending final discussions and approval from her leadership team."
},
"transcript": [
{
"endOffset": 73681,
"sentenceBody": "Thank you, Melissa.",
"sentenceId": 0,
"speakerId": "participant-id-2",
"speakerName": "John Smith",
"startOffset": 73049
},
{
"endOffset": 85418,
"sentenceBody": "There we go. Thank you. Good day.",
"sentenceId": 1,
"speakerId": "participant-id-1",
"speakerName": "Melissa Wright",
"startOffset": 85309
}
]
},
"eventId": "example-event-id",
"eventType": "meeting.new_recording.v1",
"eventVersion": 1,
"objectId": "9ea8a811-ddcc-44f8-894e-f20315785d3a",
"objectType": "meeting",
"timestamp": 1722373518000
}