How do I hit both Clerk API endpoint as well as my own application in Twilio?
Some clients who are on the API plan require to hit both Clerk endpoint as well as their internal application. There are multiple ways this can be achieved, but in this tutorial, we will be covering Twilio Studio.
As an example, we will be hitting Clerk API endpoint as well as Front App.
Navigate to Twilio Studio and create a new flow. When designing your flow select Make HTTP Requst
Widget. Here is an example of the flow:
Clerk
Clerk API requires the following parameters to be set in order to work properly.
Request URL: https://api.clerk.chat/prod/twilio/events
HTTP Parameters:
To: {{trigger.message.To}}
From: {{trigger.message.From}}
Body: {{trigger.message.Body}}
FrontApp
Request URL: https://webhook.frontapp.com/sms/*********
Request Body:
{
"SmsSid": "{{trigger.message.MessageSid}}",
"SmsMessageSid": "{{trigger.message.MessageSid}}",
"ToState": "{{trigger.message.ToState}}",
"From": "{{trigger.message.From}}",
"MessageSid": "{{trigger.message.MessageSid}}",
"AccountSid": "{{trigger.message.AccountSid}}",
"ToCity": "{{trigger.message.ToCity}}",
"FromCountry": "{{trigger.message.FromCountry}}",
"ToZip": "{{trigger.message.ToZip}}",
"FromCity": "{{trigger.message.FromCity}}",
"To": "{{trigger.message.To}}",
"FromZip": "{{trigger.message.FromZip}}",
"ToCountry": "{{trigger.message.ToCountry}}",
"Body": "{{trigger.message.Body}}",
"NumMedia": "{{trigger.message.NumMedia}}",
"FromState": "{{trigger.message.FromState}}"
}
Here is an example of a Twilio Studio Flow JSON that you can import into your flow.
{
"description": "A New Flow",
"states": [
{
"name": "Trigger",
"type": "trigger",
"transitions": [
{
"next": "clerk-api",
"event": "incomingMessage"
},
{
"event": "incomingCall"
},
{
"event": "incomingRequest"
}
],
"properties": {
"offset": {
"x": 70,
"y": -30
}
}
},
{
"name": "clerk-api",
"type": "make-http-request",
"transitions": [
{
"next": "front-api",
"event": "success"
},
{
"event": "failed"
}
],
"properties": {
"offset": {
"x": -270,
"y": 240
},
"method": "POST",
"content_type": "application/x-www-form-urlencoded;charset=utf-8",
"parameters": [
{
"value": "{{trigger.message.To}}",
"key": "To"
},
{
"value": "{{trigger.message.From}}",
"key": "From"
},
{
"value": "{{trigger.message.Body}}",
"key": "Body"
}
],
"url": "https://api.clerk.chat/prod/twilio/events"
}
},
{
"name": "front-api",
"type": "make-http-request",
"transitions": [
{
"event": "success"
},
{
"event": "failed"
}
],
"properties": {
"offset": {
"x": -270,
"y": 560
},
"method": "POST",
"content_type": "application/json;charset=utf-8",
"body": "{\n \"SmsSid\": \"{{trigger.message.MessageSid}}\",\n \"SmsMessageSid\": \"{{trigger.message.MessageSid}}\",\n \"ToState\": \"{{trigger.message.ToState}}\",\n \"From\": \"{{trigger.message.From}}\",\n \"MessageSid\": \"{{trigger.message.MessageSid}}\",\n \"AccountSid\": \"{{trigger.message.AccountSid}}\",\n \"ToCity\": \"{{trigger.message.ToCity}}\",\n \"FromCountry\": \"{{trigger.message.FromCountry}}\",\n \"ToZip\": \"{{trigger.message.ToZip}}\",\n \"FromCity\": \"{{trigger.message.FromCity}}\",\n \"To\": \"{{trigger.message.To}}\",\n \"FromZip\": \"{{trigger.message.FromZip}}\",\n \"ToCountry\": \"{{trigger.message.ToCountry}}\",\n \"Body\": \"{{trigger.message.Body}}\",\n \"NumMedia\": \"{{trigger.message.NumMedia}}\",\n \"FromState\": \"{{trigger.message.FromState}}\" \n}",
"url": "https://webhook.frontapp.com/sms/613d990497926d56b2411e09489ce7221db1014b8f24f09c41c9b186d353f6d3b72c10a20f696f550850564044391b5d"
}
}
],
"initial_state": "Trigger",
"flags": {
"allow_concurrent_calls": true
}
}
Anytime someone messages your number it will appear in both Clerk and in Front
Any outbound messages sent from Clerk will only be imported into Front after a new inbound message is received in the conversation. This is a Front limitation (refer to their docs).