Skip to content

Provider Selection

K-Message supports multiple provider backends. The right choice depends on your channel mix, onboarding expectations, and whether you need one provider or a routed combination.

ProviderStrongest fitNotable strengthsNotes
IWINVAlimTalk-focused flowsKakao-centric APIs, template operations, clear split between Kakao and SMS APIsGood when Kakao messaging is central
SOLAPIBroad channel coverageWide channel support, TypeScript SDK, strong developer ecosystemGood default for mixed channel needs
AligoSimpler SMS-centric or cost-sensitive setupsStraightforward setup for common send flowsFeature surface is narrower than SOLAPI
  • AlimTalk is your primary business channel
  • you want provider APIs that map closely to Kakao template workflows
  • you are comfortable with separate Kakao and SMS configuration surfaces
  • you need the broadest channel support
  • you expect to use SMS, LMS, AlimTalk, FriendTalk, or adjacent channels together
  • your team wants the safest default for general-purpose production use
  • your use case is operationally simple
  • you want a lightweight provider choice for SMS-heavy workloads
  • you do not need the richest channel matrix
import { KMsg } from "k-msg";
import { SolapiProvider } from "@k-msg/provider/solapi";
const kmsg = new KMsg({
providers: [
new SolapiProvider({
apiKey: process.env.SOLAPI_API_KEY!,
apiSecret: process.env.SOLAPI_API_SECRET!,
defaultFrom: "01000000000",
}),
],
});

This is common when you want one provider for SMS and a different one for Kakao channels.

import { KMsg } from "k-msg";
import { IWINVProvider } from "@k-msg/provider";
import { SolapiProvider } from "@k-msg/provider/solapi";
const kmsg = KMsg.builder()
.addProvider(
new SolapiProvider({
apiKey: process.env.SOLAPI_API_KEY!,
apiSecret: process.env.SOLAPI_API_SECRET!,
defaultFrom: "01000000000",
}),
)
.addProvider(
new IWINVProvider({
apiKey: process.env.IWINV_API_KEY!,
baseUrl: "https://alimtalk.bizservice.iwinv.kr",
smsApiKey: process.env.IWINV_SMS_API_KEY,
smsAuthKey: process.env.IWINV_SMS_AUTH_KEY,
smsSenderNumber: "01000000000",
}),
)
.withRouting({
defaultProviderId: "solapi",
byType: {
ALIMTALK: "iwinv",
},
})
.build();

Use templateId, not the removed templateCode field.

await kmsg.send({
type: "ALIMTALK",
to: "01012345678",
templateId: "AUTH_OTP",
variables: { code: "123456" },
});

Before you commit to a provider, answer these questions:

  • Which channels must be available on day one?
  • Do you need AlimTalk template operations through provider APIs?
  • Is one provider enough, or do you want channel-based routing?
  • Which onboarding model fits your team: simple setup or richer provider-specific flows?