{"id":618,"date":"2026-09-08T10:28:59","date_gmt":"2026-09-08T04:58:59","guid":{"rendered":"https:\/\/smppcenter.com\/journal\/?p=618"},"modified":"2026-09-08T10:29:01","modified_gmt":"2026-09-08T04:59:01","slug":"migrating-kannel-licensed-smpp-platform-runbook","status":"publish","type":"post","link":"https:\/\/smppcenter.com\/journal\/migrating-kannel-licensed-smpp-platform-runbook\/","title":{"rendered":"Migrating From Kannel to a Licensed SMPP Platform: A Practical Runbook"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">A step-by-step runbook for moving a production SMS gateway off Kannel and onto a licensed <strong><a href=\"https:\/\/smppcenter.com\">SMPP platform<\/a><\/strong>, covering the pre-migration audit, credential and bind mapping, parallel-run cutover, throughput differences, and DLR reconciliation.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"584\" src=\"http:\/\/smppcenter.com\/journal\/wp-content\/uploads\/2026\/09\/migrating-kannel-licensed-smpp-platform-runbook-featured-1024x584.webp\" alt=\"Abstract illustration of a multi-process SMS gateway architecture consolidating into a single unified platform\" class=\"wp-image-619\" srcset=\"https:\/\/smppcenter.com\/journal\/wp-content\/uploads\/2026\/09\/migrating-kannel-licensed-smpp-platform-runbook-featured-1024x584.webp 1024w, https:\/\/smppcenter.com\/journal\/wp-content\/uploads\/2026\/09\/migrating-kannel-licensed-smpp-platform-runbook-featured-300x171.webp 300w, https:\/\/smppcenter.com\/journal\/wp-content\/uploads\/2026\/09\/migrating-kannel-licensed-smpp-platform-runbook-featured-768x438.webp 768w, https:\/\/smppcenter.com\/journal\/wp-content\/uploads\/2026\/09\/migrating-kannel-licensed-smpp-platform-runbook-featured.webp 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Moving a multi-process open-source gateway to a single licensed platform is an architecture change, not just a config swap.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Table of Contents<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Publishing note: WordPress does not auto-generate anchors from headings. For each H2 below, set the matching HTML anchor manually in the block editor (Block settings &gt; Advanced &gt; HTML anchor) so these links resolve.<\/em><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><a href=\"#the-short-answer\">The Short Answer<\/a><\/li>\n\n\n\n<li><a href=\"#tldr\">TL;DR<\/a><\/li>\n\n\n\n<li><a href=\"#why-teams-move\">Why Teams Move<\/a><\/li>\n\n\n\n<li><a href=\"#kannel-architecture\">Kannel Architecture Recap<\/a><\/li>\n\n\n\n<li><a href=\"#mapping-pieces\">Mapping The Pieces<\/a><\/li>\n\n\n\n<li><a href=\"#pre-migration-audit\">Pre-Migration Audit<\/a><\/li>\n\n\n\n<li><a href=\"#the-runbook\">The Runbook<\/a><\/li>\n\n\n\n<li><a href=\"#throughput-throttling\">Throughput And Throttling<\/a><\/li>\n\n\n\n<li><a href=\"#dlr-testing\">DLR Reconciliation And Testing<\/a><\/li>\n\n\n\n<li><a href=\"#common-pitfalls\">Common Pitfalls<\/a><\/li>\n\n\n\n<li><a href=\"#not-claimed\">What This Article Deliberately Does Not Claim<\/a><\/li>\n\n\n\n<li><a href=\"#next-steps\">Next Steps<\/a><\/li>\n\n\n\n<li><a href=\"#faqs\">FAQs<\/a><\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 id=\"the-short-answer\" class=\"wp-block-heading\">The Short Answer<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Moving a production SMS operation off Kannel is a bind-and-cutover exercise, not a rewrite. Kannel&#8217;s <code>bearerbox<\/code>, <code>smsbox<\/code>, and (optionally) <code>sqlbox<\/code> processes each map to a piece of functionality that a licensed platform like <a href=\"https:\/\/smppcenter.com\/compare\/smppcenter-vs-kannel\/\">SMPPCenter<\/a> delivers as one bound application, so the migration work is mostly about auditing what your current <code>smsc.conf<\/code> and routing rules actually do, replicating that behavior on the new side, running both systems in parallel against a slice of live traffic, and cutting over route by route once delivery receipts reconcile. The risk is almost never the SMPP bind itself; it is silently losing a routing rule, a retry policy, or a DLR mapping that lived only in Kannel&#8217;s configuration and nobody wrote down.<\/p>\n\n\n\n<h2 id=\"tldr\" class=\"wp-block-heading\">TL;DR<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Kannel&#8217;s architecture splits into three processes (<code>bearerbox<\/code>, <code>smsbox<\/code>, <code>sqlbox<\/code>); a licensed platform collapses that into one bound application, so the audit step matters more than the bind step.<\/li>\n\n\n\n<li>Before touching any config, export and read your live <code>smsc.conf<\/code>, route rules, and DLR mask settings. That file is the actual specification of your current behavior, whether or not it was ever documented elsewhere.<\/li>\n\n\n\n<li>SMPPCenter&#8217;s own setup guide requires an <a href=\"https:\/\/smppcenter.com\/kb\/how-configure-kannel-smppcenter-smpp-server\/\">8-character password and Kannel 1.4.3 or newer<\/a> on the client side, which is a real constraint worth checking against your current Kannel version before you schedule a cutover window.<\/li>\n\n\n\n<li>Default throughput on a new SMPPCenter client account is 10 TPS, enforced with the standard SMPP <code>ESME_RTHROTTLED<\/code> error rather than a silent drop, per <a href=\"https:\/\/smppcenter.com\/kb\/control-throttling-over-smpp-connectivity\/\">SMPPCenter&#8217;s throttling documentation<\/a>; if your Kannel deployment was pushing higher sustained throughput, that limit needs raising before cutover, not after.<\/li>\n\n\n\n<li>Run both gateways in parallel against a low-risk route first, reconcile delivery receipts route by route, and only retire Kannel once every route you depend on has matched for a full billing cycle.<\/li>\n\n\n\n<li>The biggest failure mode is not the bind, it is a routing or retry rule that existed only in Kannel&#8217;s config and never made it into the runbook.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"why-teams-move\" class=\"wp-block-heading\">Why Teams Move<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Kannel is a real, still-functioning piece of infrastructure. It has been running in production SMS deployments for over two decades, and <a href=\"https:\/\/smppcenter.com\/compare\/smppcenter-vs-kannel\/\">SMPPCenter&#8217;s own comparison page<\/a> acknowledges as much, framing Kannel as software that &#8220;still runs reliably in many existing deployments.&#8221; Nobody migrating off it is doing so because it stopped working. The reasons that actually drive a migration decision cluster into three categories, and it is worth being specific about which one applies to your situation, because it changes what you should verify before cutover.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The first is organizational: a reseller or aggregator business has outgrown what a bare SMPP client\/server was ever meant to do. Kannel has no built-in reseller panel, no credit management, and no multi-tenant user hierarchy; those are things you would build and maintain yourself on top of it. If your actual problem is &#8220;we need ten downstream reseller accounts with their own credit limits and their own view of delivery status,&#8221; that is a platform gap, not an SMPP gap, and it is the gap SMPPCenter&#8217;s pricing tiers are built around, with reseller account counts built into the <a href=\"https:\/\/smppcenter.com\/pricing\/\">Growth and Scale plans<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The second is support and maintenance risk. Kannel&#8217;s most recent stable release, 1.4.5, shipped in June 2018, and the project runs on community mailing lists rather than a vendor SLA. That is not automatically disqualifying; plenty of infrastructure runs for years past its last release tag. But it means every operational question, from a throughput anomaly to a TLS library update, gets answered by searching archived mailing-list threads rather than opening a support ticket, and the person who originally tuned your <code>smsc.conf<\/code> may not still be at the company.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The third is channel breadth. Kannel&#8217;s protocol scope is SMS and WAP push, predating channels like WhatsApp Business API and RCS entirely. If the actual driver is &#8220;we need to add a WhatsApp channel next quarter and don&#8217;t want to run a second, unrelated system to do it,&#8221; that is a genuinely different problem from &#8220;our SMPP binds are unreliable,&#8221; and it should be evaluated on its own terms against whichever platforms currently support those channels, not folded into an SMPP migration decision.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"kannel-architecture\" class=\"wp-block-heading\">Kannel Architecture Recap<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Kannel&#8217;s design splits responsibility across three cooperating processes, and understanding what each one owns is the actual prerequisite for a clean migration, because a licensed platform will not replicate the split, it will replicate the behavior.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>bearerbox<\/code> is the core process. It owns every SMSC connection defined in <code>smsc.conf<\/code>, handles binding, reconnection, and the low-level SMPP or other-protocol transport, and routes messages between SMSCs and the rest of the system. Every one of your current downstream and upstream bind definitions, credentials, throughput settings, and connection-level retry behavior lives inside <code>bearerbox<\/code>&#8216;s configuration.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>smsbox<\/code> is the application-facing layer. It exposes the HTTP <code>sendsms<\/code> interface applications use to submit messages, applies your account-level routing and access rules, and talks to <code>bearerbox<\/code> over its own internal protocol rather than SMPP. If your applications currently POST to a Kannel <code>sendsms<\/code> URL, that integration point is what changes when you cut over, not the SMPP layer underneath it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>sqlbox<\/code>, where deployed, adds persistent, database-backed message queueing between <code>smsbox<\/code> and <code>bearerbox<\/code>, typically for deployments that need to survive a restart without losing in-flight messages or that want a durable audit trail independent of application logs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A licensed platform does not run three separate processes that you configure and wire together. It runs as a single bound application that already includes SMPP client and server functionality, per SMPPCenter&#8217;s own framing of the distinction. That consolidation is the actual value proposition and also the actual migration risk: every behavior currently split across <code>bearerbox<\/code>&#8216;s connection rules, <code>smsbox<\/code>&#8216;s application routing, and (if present) <code>sqlbox<\/code>&#8216;s persistence layer needs a corresponding setting on the new side, and nothing forces you to find all of them before you flip traffic.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"mapping-pieces\" class=\"wp-block-heading\">Mapping The Pieces<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use this as a working checklist against your own deployment, not as a universal one-to-one table; the exact equivalent for any given Kannel setting depends on what platform you migrate to and how it exposes configuration.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kannel concept<\/th><th>What it owns<\/th><th>What to look for on the new platform<\/th><\/tr><\/thead><tbody><tr><td><code>smsc.conf<\/code> SMSC group (per connection)<\/td><td>Bind credentials, host, port, transceiver vs. transmitter\/receiver mode, <code>smsc-id<\/code><\/td><td>Equivalent bind credential and mode setup; SMPPCenter documents both <a href=\"https:\/\/smppcenter.com\/kb\/bind-smpp-session-transceiver-transmitter-receiver\/\">transceiver and separate transmitter\/receiver bind types<\/a><\/td><\/tr><tr><td><code>bearerbox<\/code> throughput and retry settings<\/td><td>Per-connection send rate, reconnection backoff<\/td><td>Platform-level throughput limits and error handling, which may be enforced differently (see the throttling section below)<\/td><\/tr><tr><td><code>smsbox<\/code> routing rules (<code>smsbox-route<\/code>, account-based routing)<\/td><td>Which application account can send through which SMSC, sender ID rules<\/td><td>Equivalent account and sender ID configuration, typically exposed through the platform&#8217;s admin or reseller panel rather than a text config file<\/td><\/tr><tr><td><code>smsbox<\/code> <code>sendsms<\/code> HTTP interface<\/td><td>The URL your applications POST to<\/td><td>Whichever submission interface the new platform documents, whether that is its own SMPP server bind, an HTTP API, or both<\/td><\/tr><tr><td><code>sqlbox<\/code> (if used)<\/td><td>Durable message queueing across restarts<\/td><td>Confirm whether the new platform&#8217;s queueing and hold\/release behavior covers the same durability guarantee you were relying on<\/td><\/tr><tr><td>DLR mask and DLR URL callback<\/td><td>Which delivery statuses trigger a callback and where it is sent<\/td><td>The platform&#8217;s own DLR webhook configuration, including supported delivery-status codes and callback format<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The column that causes the most migration incidents is <code>smsbox<\/code> routing rules, precisely because they are the least likely to be written down anywhere outside the live config file. A <code>bearerbox<\/code> bind failure is loud and immediate. A routing rule that silently changed which account&#8217;s messages get which sender ID is quiet until a customer complains.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"pre-migration-audit\" class=\"wp-block-heading\">Pre-Migration Audit<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Do this before scheduling any cutover window, and treat the output as the actual specification for the migration, not a formality.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Export the full live <code>smsc.conf<\/code> and diff it against whatever version-controlled copy exists, if one exists at all. Production configs drift from documentation faster than almost anything else in an SMS stack.<\/li>\n\n\n\n<li>List every SMSC group, its bind mode (transceiver vs. transmitter\/receiver), host, port, and current throughput setting.<\/li>\n\n\n\n<li>List every <code>smsbox-route<\/code> and account-based routing rule, including which sender IDs are permitted on which route.<\/li>\n\n\n\n<li>Confirm your current Kannel version. SMPPCenter&#8217;s own configuration guide specifies a minimum of <a href=\"https:\/\/smppcenter.com\/kb\/how-configure-kannel-smppcenter-smpp-server\/\">Kannel 1.4.3<\/a> for compatibility on the client side; if you are running something older, upgrading Kannel itself may be a prerequisite step, independent of the platform migration.<\/li>\n\n\n\n<li>Record every DLR mask value in use and what each downstream application expects to receive.<\/li>\n\n\n\n<li>Identify any <code>sqlbox<\/code>-backed durability requirement: does anything depend on messages surviving a <code>bearerbox<\/code> restart mid-flight?<\/li>\n\n\n\n<li>Note current sustained throughput per route, measured, not assumed, over at least one peak traffic window.<\/li>\n\n\n\n<li>List every downstream reseller or sub-account currently carved out through custom routing logic rather than a first-class platform feature, since that is exactly the gap a licensed platform&#8217;s reseller tooling is meant to close.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"the-runbook\" class=\"wp-block-heading\">The Runbook<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Provision the new account and generate bind credentials.<\/strong> Confirm the account&#8217;s default throughput tier against what your audit measured; if your live traffic already exceeds a starter tier&#8217;s limit, raise that before testing, not after.<\/li>\n\n\n\n<li><strong>Set the client-side password to match platform requirements.<\/strong> SMPPCenter&#8217;s guide specifically calls out changing the account password to <a href=\"https:\/\/smppcenter.com\/kb\/how-configure-kannel-smppcenter-smpp-server\/\">8 characters to work with Kannel<\/a>, which is a Kannel-side compatibility constraint, not a platform choice, so verify it during setup rather than discovering it during a failed bind attempt.<\/li>\n\n\n\n<li><strong>Stand up a parallel <code>smsc.conf<\/code> entry, don&#8217;t replace the existing one yet.<\/strong> Add the new platform as an additional SMSC group in the same Kannel instance, bound and tested, while the original upstream connection keeps carrying live traffic untouched.<\/li>\n\n\n\n<li><strong>Send a controlled test batch through the new bind.<\/strong> Confirm submit acknowledgments, delivery receipts, and DLR callback format match what your applications expect before routing any real customer traffic through it.<\/li>\n\n\n\n<li><strong>Move one low-risk route first.<\/strong> Pick a route with low volume and a forgiving customer, not your highest-value account, and repoint just that <code>smsbox-route<\/code> to the new SMSC group.<\/li>\n\n\n\n<li><strong>Reconcile delivery receipts for that route against the old system&#8217;s historical numbers.<\/strong> Compare delivery rates, not just bind stability; a bind that stays up can still deliver worse if a DLR mask or a sender ID mapping is off.<\/li>\n\n\n\n<li><strong>Hold that state for a full billing cycle before moving the next route.<\/strong> Aggregator-side billing disputes tend to surface only when a full invoice period&#8217;s numbers get compared, so a shorter soak period can miss exactly the class of problem that matters most.<\/li>\n\n\n\n<li><strong>Repeat route by route<\/strong>, prioritizing lower-risk accounts and saving your highest-volume or highest-SLA customers for last, once the process itself is proven.<\/li>\n\n\n\n<li><strong>Decommission the Kannel SMSC group only after every migrated route has reconciled<\/strong>, and keep the old bind credentials valid for a defined rollback window rather than revoking them immediately.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"throughput-throttling\" class=\"wp-block-heading\">Throughput And Throttling<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This is where Kannel deployments most often get surprised, because Kannel itself does not impose a throughput ceiling; whatever rate limit exists in a Kannel-based setup is either the upstream SMSC&#8217;s limit or something the operator configured manually. A licensed platform account, by contrast, typically ships with an explicit tier-based limit as part of the commercial product. SMPPCenter&#8217;s documentation states that a standard client account carries a <a href=\"https:\/\/smppcenter.com\/kb\/control-throttling-over-smpp-connectivity\/\">default throughput of 10 TPS<\/a>, and submissions beyond that limit are rejected with the standard SMPP error code <code>ESME_RTHROTTLED<\/code> (0x00000058) rather than silently queued or dropped, with the documented guidance being to coordinate submission rate and resubmit throttled messages.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If your pre-migration audit measured sustained throughput above a new account&#8217;s default tier, that is not a migration bug to troubleshoot, it is a capacity conversation to have with the vendor before cutover. Higher tiers exist specifically to raise that ceiling, up to the <a href=\"https:\/\/smppcenter.com\/pricing\/\">200 TPS, 500 TPS, and 1,000+ TPS bands<\/a> published on SMPPCenter&#8217;s pricing page, and getting the tier right ahead of time avoids discovering a throttling wall mid-migration on a route that cannot afford one.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"dlr-testing\" class=\"wp-block-heading\">DLR Reconciliation And Testing<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Delivery receipt handling is the part of a Kannel deployment most likely to have accumulated undocumented, application-specific behavior over time, because DLR masks are often set per-route to match whatever a specific downstream application expects, and that mapping rarely lives anywhere except the live config.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Before considering any route migrated, confirm three things independently: that the new platform&#8217;s DLR callback fires for the same set of delivery-status transitions your applications currently rely on, that the callback payload format (the platform documents <a href=\"https:\/\/smppcenter.com\/features\/\">POST, GET, JSON, and XML options<\/a>) matches what your receiving endpoint expects without a translation layer, and that the actual delivered-vs-failed rate on the new route matches historical numbers for the same customer base and time window, not just an industry-average expectation. A route that binds cleanly and acknowledges every submit can still under-deliver relative to your prior baseline if something in the DLR chain or the underlying routing changed, and submit acknowledgment alone will not surface that.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"common-pitfalls\" class=\"wp-block-heading\">Common Pitfalls<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The recurring failure pattern across Kannel migrations is not the SMPP bind, which is a well-understood, narrowly scoped piece of protocol behavior on both sides. It is everything that accumulated around the bind over years of production operation: a <code>smsbox-route<\/code> rule nobody remembers writing, a DLR mask tuned for one specific downstream application&#8217;s quirks, a sender ID override that only applies to one reseller, or a throughput ceiling that was raised manually at some point and never documented anywhere except the live config file. Treat the pre-migration audit as the actual migration plan, and treat the parallel-run period as the mechanism that catches whatever the audit missed, because it will miss something.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The second most common pattern is compatibility mismatches on the Kannel side itself, specifically version and credential-format requirements like the ones SMPPCenter documents for its own client integration. These are cheap to check in advance and expensive to discover during a cutover window.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"not-claimed\" class=\"wp-block-heading\">What This Article Deliberately Does Not Claim<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The bind and credential requirements above, Kannel 1.4.3 or newer and an 8-character account password, come directly from SMPPCenter&#8217;s published setup guide. The audit checklist, the parallel-run sequence, and the throughput planning are standard <a href=\"https:\/\/smppcenter.com\/sms-gateway-software\/\">SMS-gateway<\/a> migration practice that apply to moving off Kannel onto any SMPP platform, not a documented SMPPCenter-specific procedure.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Get three things in writing from SMPPCenter support before scheduling a cutover window, since none of them are answered on the public site: whether existing <code>smsbox<\/code>-style routing and sender ID rules can be bulk-imported into the admin panel or need manual re-entry per account, what the DLR callback retry behavior looks like under sustained load, and whether a throughput tier increase can be applied mid-contract without renegotiating the agreement. These are ordinary vendor onboarding questions, worth confirming before the parallel-run phase rather than during it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kannel&#8217;s own throughput and reliability characteristics vary by deployment, hardware, and configuration, so any capacity planning should start from your own measured numbers, not a generic baseline.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"next-steps\" class=\"wp-block-heading\">Next Steps<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If your Kannel deployment has outgrown what a bare SMPP client\/server was built to do, whether that is reseller billing, vendor support, or additional channels, the tier that matches your measured throughput and reseller account needs is the starting point, not the SMPP bind itself. Compare current plan tiers and their included throughput and reseller limits on the <a href=\"https:\/\/smppcenter.com\/pricing\/\">SMPPCenter pricing page<\/a>, and review the vendor support and reliability commitments described on the <a href=\"https:\/\/smppcenter.com\/why-us\/\">Why SMPPCenter page<\/a> before scoping a migration timeline.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"faqs\" class=\"wp-block-heading\">FAQs<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Does moving off Kannel require rewriting our application code?<\/strong><br>Not necessarily. If your applications currently submit through Kannel&#8217;s <code>sendsms<\/code> HTTP interface or bind directly over SMPP, the integration point that changes is which endpoint or bind target they point to, along with any DLR callback format differences, rather than the application logic itself.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Can we run Kannel and a licensed platform side by side during migration?<\/strong><br>Yes, and doing so is the safer approach. Adding the new platform as an additional SMSC group inside the existing Kannel <code>bearerbox<\/code> configuration lets you test and migrate route by route without an all-at-once cutover.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>What Kannel version do we need before migrating to SMPPCenter specifically?<\/strong><br>SMPPCenter&#8217;s documentation specifies Kannel 1.4.3 or newer for client-side compatibility, along with an 8-character account password.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Will our current throughput just carry over?<\/strong><br>Not automatically. A new account defaults to a specific throughput tier; if your measured Kannel-side throughput exceeds that tier&#8217;s limit, raise the tier before cutover or expect <code>ESME_RTHROTTLED<\/code> rejections on your busiest route.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>What is the single biggest risk in a Kannel migration?<\/strong><br>Losing an undocumented routing, sender ID, or DLR mapping rule that existed only in the live <code>smsc.conf<\/code> and associated <code>smsbox<\/code> routing configuration, not the SMPP bind itself.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Recent Articles<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/smppcenter.com\/journal\/ncpr-dnd-scrubbing-bulk-sms-india-filtering-layer\/\">NCPR and DND Scrubbing for Bulk SMS in India: What the Filtering Layer Actually Does<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/smppcenter.com\/journal\/perpetual-license-vs-subscription-smpp-breakeven-math\/\">Perpetual License vs Subscription: The Real Breakeven Math for an SMPP Platform<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/smppcenter.com\/journal\/smpp-bind-types-transmitter-receiver-transceiver\/\">SMPP Bind Types Explained: Transmitter, Receiver, Transceiver, and Where Throughput Breaks<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","protected":false},"excerpt":{"rendered":"<p>A step-by-step runbook for moving a production SMS gateway off Kannel and onto a licensed SMPP platform, covering the pre-migration audit, credential and bind mapping, parallel-run cutover, throughput differences, and DLR reconciliation.<\/p>\n","protected":false},"author":1,"featured_media":619,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[683],"tags":[685,686,224,12,15,684],"class_list":["post-618","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-migration-guides","tag-aggregator-infrastructure","tag-dlr-reconciliation","tag-kannel","tag-smpp","tag-smpp-server","tag-sms-gateway-migration"],"_links":{"self":[{"href":"https:\/\/smppcenter.com\/journal\/wp-json\/wp\/v2\/posts\/618","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/smppcenter.com\/journal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/smppcenter.com\/journal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/smppcenter.com\/journal\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/smppcenter.com\/journal\/wp-json\/wp\/v2\/comments?post=618"}],"version-history":[{"count":0,"href":"https:\/\/smppcenter.com\/journal\/wp-json\/wp\/v2\/posts\/618\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/smppcenter.com\/journal\/wp-json\/wp\/v2\/media\/619"}],"wp:attachment":[{"href":"https:\/\/smppcenter.com\/journal\/wp-json\/wp\/v2\/media?parent=618"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/smppcenter.com\/journal\/wp-json\/wp\/v2\/categories?post=618"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/smppcenter.com\/journal\/wp-json\/wp\/v2\/tags?post=618"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}