Skip to contentSkip to navigationSkip to topbar
On this page

twilio/call-to-action


Twilio/call-to-action buttons let recipients tap to trigger actions such as launching a website, copying a coupon code, or making a phone call.

If you are using a URL button and want to submit the template for WhatsApp approval, the URL must resolve to a publicly accessible website. If there is a variable, a valid path sample should be included in the variables array. The combined URL should resolve to a publicly accessible website.

Example:

"url": ["https://www.twilio.com/{{1}}"] would include a path sample in the variables definition. "variables": {"1": "docs"}

(warning)

Warning

Twilio/call-to-action templates can be sent via WhatsApp for out of session messages with variables. If the template's body starts or ends with a variable or has two variables next to each other, the template will not be approved by WhatsApp without a sample variable. For additional information about variables see Using Variables with Content Templates.


Supported Channels

supported-channels page anchor

WhatsApp, Facebook Messenger


Content Api - CTA preview.

body:

  • Type: string
  • Required: yes
  • Variable Support: yes
  • Description: The text of the message you want to send. This is included as a regular text message.
    • Maximum 640 characters

actions:

  • Type: array
  • Required: Yes
  • Variable Support: Yes
  • Description: Call to action templates support URL, PHONE, COPY_CODE, and VOICE_CALL buttons.
(information)

Info

Limitations -

  • Only 1 of the 2 call options can be on a template: PHONE or VOICE_CALL.
  • Up to 2 URL buttons are allowed.
  • VOICE_CALL is currently a private beta in select regions.

actions:

URL:

  • parameters
    • type: URL
    • title: Button text of URL redirect button. Variables are not supported. Max 25 chars.
    • url: URL opened when end user clicks the button. Variables are supported at the end of the url string.

PHONE:

  • parameters
    • type: PHONE
    • title: Button text of URL redirect button. Variables are not supported. Max 25 chars.
    • phone: Phone number to call when the recipient taps the button. E.164 formatted. Variables are not supported.

VOICE_CALL:

  • parameters
    • type: VOICE_CALL
    • title: Button text of VOIP call button. Variables are not supported. Max 25 chars.

COPY_CODE:

  • parameters
    • type: COPY_CODE
    • title: Button text of copy code button. Variables are not supported. Max 25 chars.
    • code: Coupon code that is copied to end user clipboard after clicking button. Variables are supported.
Create a Call-To-Action TemplateLink to code sample: Create a Call-To-Action Template
1
// Install the C# / .NET helper library from twilio.com/docs/csharp/install
2
3
using System;
4
using Twilio;
5
using Twilio.Rest.Content.V1;
6
7
TwilioClient.Init(accountSid, authToken);
8
9
// define the twilio/call-to-action type
10
var twilioCallToAction = new TwilioCallToAction.Builder();
11
twilioCallToAction.WithBody("Owl Air: We will see you soon! Flight {{1}} to {{2}} departs at {{3}} from Gate {{4}}.");
12
var cta1 = new CallToAction.Builder()
13
.WithType(CallToActionActionType.Url)
14
.WithUrl("https://owlair.com/{{5}}")
15
.WithTitle("Check Flight Status")
16
.Build();
17
var cta2 = new CallToAction.Builder()
18
.WithType(CallToActionActionType.PhoneNumber)
19
.WithPhone("+15555551234")
20
.WithTitle("Call Support")
21
.Build();
22
twilioCallToAction.WithActions(new List<CallToAction>() { cta1, cta2 });
23
24
// define all the content types to be part of the template
25
var types = new Types.Builder();
26
types.WithTwilioCallToAction(twilioCallToAction.Build());
27
28
// build the create request object
29
var contentCreateRequest = new ContentCreateRequest.Builder();
30
contentCreateRequest.WithTypes(types.Build());
31
contentCreateRequest.WithLanguage("en");
32
contentCreateRequest.WithFriendlyName("owl_air_cta");
33
contentCreateRequest.WithVariables(new Dictionary<string, string>() { {"1", "flight_number"}, {"2", "arrival_city"}, {"3", "departure_time"}, {"4", "gate_number"}, {"5", "url_suffix"} });
34
35
// create the twilio template
36
var contentTemplate = await CreateAsync(contentCreateRequest.Build());
37
38
Console.WriteLine($"Created Twilio Content Template SID: {contentTemplate.Sid}");

Output

1
{
2
"account_sid": "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
3
"date_created": "2022-01-15T17:09:58Z",
4
"date_updated": "2022-01-15T17:09:58Z",
5
"friendly_name": "owl_air_cta",
6
"language": "en",
7
"links": {
8
"approval_fetch": "https://content.twilio.com/v1/Content/HXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/ApprovalRequests",
9
"approval_create": "https://content.twilio.com/v1/Content/HXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/ApprovalRequests/whatsapp"
10
},
11
"sid": "HXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
12
"types": {
13
"twilio/call-to-action": {
14
"actions": [
15
{
16
"url": "https://owlair.com/{{5}}",
17
"type": "URL",
18
"title": "Check Flight Status"
19
},
20
{
21
"phone_number": "+15555551234",
22
"type": "PHONE_NUMBER",
23
"title": "Call Support"
24
}
25
],
26
"body": "Owl Air: We will see you soon! Flight {{1}} to {{2}} departs at {{3}} from Gate {{4}}."
27
}
28
},
29
"url": "https://content.twilio.com/v1/Content/HXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
30
"variables": {
31
"1": "flight_number",
32
"3": "departure_time",
33
"2": "arrival_city",
34
"5": "url_suffix",
35
"4": "gate_number"
36
}
37
}