Prerequisites
- An Azure Communication Services resource with an SMS-capable number
- That resource’s endpoint URL and access key
Setup
1
Create an Azure Communication Services resource
In Azure, create a Communication Services resource and copy its access key and endpoint.
2
Configure in Courier
Open the in Courier, enter your access key, endpoint, and from number, then click “Save.”
Overrides
covers the two levels and which one wins. Overrides change the request Courier makes to Azure Communication Services.config overrides the accessKey, endpoint, and from number. body overrides the message text and to number.
const { requestId } = await courier.send.message({
message: {
template: "nt_01kx4h2jdafq8bk9aftxak4b40",
to: {
phone_number: "+12345678901",
},
providers: {
"azure-sms": {
override: {
body: {
to: "+10987654321",
message: "Override message content",
},
config: {
from: "<override from number>",
accessKey: "<override access key>",
endpoint: "<override endpoint>",
},
},
},
},
},
});
response = client.send.message(
message={
"template": "nt_01kx4h2jdafq8bk9aftxak4b40",
"to": {
"phone_number": "+12345678901",
},
"providers": {
"azure-sms": {
"override": {
"body": {
"to": "+10987654321",
"message": "Override message content",
},
"config": {
"from": "<override from number>",
"accessKey": "<override access key>",
"endpoint": "<override endpoint>",
},
},
},
},
},
)
curl -X POST https://api.courier.com/send \
-H "Authorization: Bearer $COURIER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"message": {
"template": "nt_01kx4h2jdafq8bk9aftxak4b40",
"to": {
"phone_number": "+12345678901"
},
"providers": {
"azure-sms": {
"override": {
"body": {
"to": "+10987654321",
"message": "Override message content"
},
"config": {
"from": "<override from number>",
"accessKey": "<override access key>",
"endpoint": "<override endpoint>"
}
}
}
}
}
}'
response = courier.send_.message(
message: {
template: "nt_01kx4h2jdafq8bk9aftxak4b40",
to: {
phone_number: "+12345678901"
},
providers: {
"azure-sms": {
override: {
body: {
to: "+10987654321",
message: "Override message content"
},
config: {
from: "<override from number>",
accessKey: "<override access key>",
endpoint: "<override endpoint>"
}
}
}
}
}
)
response, err := client.Send.Message(context.TODO(), courier.SendMessageParams{
Message: courier.SendMessageParamsMessage{
To: courier.SendMessageParamsMessageToUnion{
OfUserRecipient: &shared.UserRecipientParam{
PhoneNumber: courier.String("+12345678901"),
},
},
Template: courier.String("nt_01kx4h2jdafq8bk9aftxak4b40"),
Providers: shared.MessageProvidersParam{
"azure-sms": shared.MessageProvidersTypeParam{
Override: map[string]any{
"body": map[string]any{
"to": "+10987654321",
"message": "Override message content",
},
"config": map[string]any{
"from": "<override from number>",
"accessKey": "<override access key>",
"endpoint": "<override endpoint>",
},
},
},
},
},
})
SendMessageParams params = SendMessageParams.builder()
.message(SendMessageParams.Message.builder()
.to(UserRecipient.builder().phoneNumber("+12345678901").build())
.template("nt_01kx4h2jdafq8bk9aftxak4b40")
.providers(MessageProviders.builder()
.putAdditionalProperty("azure-sms", JsonValue.from(java.util.Map.of("override", java.util.Map.of(
"body", java.util.Map.of(
"to", "+10987654321",
"message", "Override message content"
),
"config", java.util.Map.of(
"from", "<override from number>",
"accessKey", "<override access key>",
"endpoint", "<override endpoint>"
)
))))
.build())
.build())
.build();
SendMessageResponse response = client.send().message(params);
$response = $client->send->message(
message: [
'template' => 'nt_01kx4h2jdafq8bk9aftxak4b40',
'to' => [
'phone_number' => '+12345678901',
],
'providers' => [
'azure-sms' => [
'override' => [
'body' => [
'to' => '+10987654321',
'message' => 'Override message content',
],
'config' => [
'from' => '<override from number>',
'accessKey' => '<override access key>',
'endpoint' => '<override endpoint>',
],
],
],
],
],
);
SendMessageParams parameters = new()
{
Message = new()
{
To = new UserRecipient { PhoneNumber = "+12345678901" },
Template = "nt_01kx4h2jdafq8bk9aftxak4b40",
Providers = new Dictionary<string, MessageProvidersType>()
{
{
"azure-sms",
new()
{
Override = JsonSerializer.Deserialize<Dictionary<string, JsonElement>>(
"""
{
"body": {
"to": "+10987654321",
"message": "Override message content"
},
"config": {
"from": "<override from number>",
"accessKey": "<override access key>",
"endpoint": "<override endpoint>"
}
}
"""
),
}
},
},
},
};
var response = await client.Send.Message(parameters);
courier send message \
--api-key "$COURIER_API_KEY" \
--message.to '{"phone_number": "+12345678901"}' \
--message.template nt_01kx4h2jdafq8bk9aftxak4b40 \
--message.providers '{"azure-sms": {"override": {"body": {"to": "+10987654321", "message": "Override message content"}, "config": {"from": "<override from number>", "accessKey": "<override access key>", "endpoint": "<override endpoint>"}}}}'
With Courier MCP, send my template to +12345678901 through Azure from a different number.
Provider details
azure-sms
routing.channels instead is supported, and sends through just this provider.
Send to a specific provider
When that is worth doing, and what you give up: failover, channel priority, and providers you add later.