{"id":214411,"date":"2026-10-29T16:18:24","date_gmt":"2026-10-29T16:18:24","guid":{"rendered":"https:\/\/sinch.com\/blog\/migrar-api-sms-xms-a-api-conversacion\/"},"modified":"2026-10-29T16:18:24","modified_gmt":"2026-10-29T16:18:24","slug":"migrar-api-sms-xms-a-api-conversacion","status":"publish","type":"blog","link":"https:\/\/sinch.com\/es\/blog\/migrar-api-sms-xms-a-api-conversacion\/","title":{"rendered":"Migra de la API de SMS de Sinch a la API de conversaci\u00f3n"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Si tu c\u00f3digo env\u00eda solicitudes a <code>https:\/\/us.sms.api.sinch.com\/xms\/v1\/{service_plan_id}\/batches<\/code> o llama a <code>sms.batches.send<\/code> en un SDK de Sinch, est\u00e1 usando la API de SMS independiente de Sinch, que a veces se denomina XMS. La API de SMS dej\u00f3 de comercializarse el 15 de abril de 2026. Las integraciones ya creadas en ella siguen funcionando, pero <a href=\"https:\/\/github.com\/sinch\/sinch-sdk-node#readme\">las nuevas integraciones deben utilizar la API de conversaci\u00f3n de Sinch<\/a>, incluso en una cuenta que ya haya utilizado la API de SMS. La <a href=\"https:\/\/developers.sinch.com\/docs\/conversation\/\">API de conversaci\u00f3n<\/a> env\u00eda el mismo SMS a trav\u00e9s del mismo plan de servicio y n\u00famero, y el mismo formato de solicitud sirve para RCS, WhatsApp y los dem\u00e1s canales. Este art\u00edculo detalla la migraci\u00f3n de una integraci\u00f3n de la API de SMS a la API de conversaci\u00f3n paso a paso, con solicitudes ejecutadas en ambas API bajo el mismo plan de servicio. Si empiezas desde cero, <a href=\"https:\/\/sinch.com\/es\/blog\/enviar-sms-api-conversacion-curl-nodejs-python\/\">Enviar SMS con la API de conversaci\u00f3n de Sinch en curl, Node.js y Python<\/a> es el camino m\u00e1s r\u00e1pido.<\/p>\n\n\n\r\n    <nav data-content-type=\"longform\" class=\"toc-block longform-spacings px-5 py-6 px-md-6 px-lg-7 py-md-7 bg-light fs-sm rounded-lg\" aria-labelledby=\"toc-title-9308\"><p class=\"h5 m-0\" id=\"toc-title-9308\">\u00cdndice<\/p><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">01<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#que-necesitas\">Qu\u00e9 necesitas<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">02<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#vincula-tu-plan-de-servicio-a-una-aplicacion-de-la-api-de-conversacion\">Vincula tu plan de servicio a una aplicaci\u00f3n de la API de conversaci\u00f3n<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">03<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#enviar-un-mensaje\">Enviar un mensaje<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">04<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#campo-por-campo\">Campo por campo<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">05<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#enviar-a-muchos-destinatarios\">Enviar a muchos destinatarios<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">06<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#informes-de-entrega\">Informes de entrega<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">07<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#mensajes-entrantes\">Mensajes entrantes<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">08<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#traslada-un-flujo-cada-vez\">Traslada un flujo cada vez<\/a><a class=\"scrollme link-body-color\" href=\"#empieza-con-las-notificaciones-salientes\">Empieza con las notificaciones salientes<\/a><a class=\"scrollme link-body-color\" href=\"#asigna-su-propia-callback_url-a-los-envios-de-la-api-de-sms-durante-el-traslado\">Asigna su propia callback_url a los env\u00edos de la API de SMS durante el traslado<\/a><a class=\"scrollme link-body-color\" href=\"#manten-los-valores-de-client_reference-en-message_metadata\">Mant\u00e9n los valores de client_reference en message_metadata<\/a><a class=\"scrollme link-body-color\" href=\"#envia-a-numeros-de-telefono-con-identified_by\">Env\u00eda a n\u00fameros de tel\u00e9fono con identified_by<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">09<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#solucion-de-problemas\">Soluci\u00f3n de problemas<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">10<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#proximos-pasos\">Pr\u00f3ximos pasos<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">11<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#recursos-adicionales\">Recursos adicionales<\/a><\/div><\/div><\/nav>\n\n\n<h2 class=\"wp-block-heading\">Qu\u00e9 necesitas<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Tu plan de servicio de la API de SMS actual y sus n\u00fameros<\/li>\n\n\n\n<li>Acceso a la API de conversaci\u00f3n en el <a href=\"https:\/\/dashboard.sinch.com\">panel de control de Sinch<\/a> (abre \u00ab<strong>Conversation API<\/strong>\u00bb [API de conversaci\u00f3n] en el men\u00fa de la izquierda y haz clic en \u00ab<strong>GET ACCESS<\/strong>\u00bb [Obtener acceso] si a\u00fan no lo has hecho)<\/li>\n\n\n\n<li><code>curl<\/code> y <code>jq<\/code> para los ejemplos de shell, o Node.js 20 o superior con <code>@sinch\/sdk-core<\/code> para los ejemplos de Node.js<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Vincula tu plan de servicio a una aplicaci\u00f3n de la API de conversaci\u00f3n<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">No necesitas un n\u00famero nuevo. La API de conversaci\u00f3n env\u00eda SMS mediante una <strong>aplicaci\u00f3n<\/strong>, y el canal de SMS de la aplicaci\u00f3n apunta a un plan de servicio de SMS. Ap\u00fantalo al que ya tienes.<\/p>\n\n\n    <div data-content-type=\"longform\"  class=\"callout text-body-color px-5 py-6 px-md-6 px-lg-7 py-md-7 longform-spacings rounded-lg bg-sand\" data-theme=\"light\">\r\n\r\n        <div class=\"content-body\"> <p class=\"mb-0\">La vinculaci\u00f3n cambia ad\u00f3nde van los callbacks del plan de servicio. Las URL de los callbacks del plan deben eliminarse antes de poder vincularlo. Despu\u00e9s, los mensajes entrantes van al webhook de la API de conversaci\u00f3n de la aplicaci\u00f3n, y los informes de entrega de los lotes que sigues enviando mediante la API de SMS solo te llegar\u00e1n si el lote configura su propia <code>callback_url<\/code>. Configura primero el webhook de la aplicaci\u00f3n y pru\u00e9balo en un plan de servicio de prueba antes de pasarlo a producci\u00f3n si tienes uno.<\/p><\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Los pasos:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Ve a \u00ab<strong>Conversation API<\/strong>\u00bb [API de conversaci\u00f3n], luego a \u00ab<strong>Apps<\/strong>\u00bb [Aplicaciones] y crea una aplicaci\u00f3n en la misma regi\u00f3n que tu plan de servicio. La API de conversaci\u00f3n funciona en EE. UU., la UE y Brasil. Si tu plan de servicio est\u00e1 en otra regi\u00f3n de la API de SMS, como Australia o Canad\u00e1, pregunta a tu gestor\/a de cuentas de Sinch qu\u00e9 regi\u00f3n de la API de conversaci\u00f3n debes utilizar antes de empezar.<\/li>\n\n\n\n<li>En la aplicaci\u00f3n, haz clic en \u00ab<strong>SET UP CHANNEL<\/strong>\u00bb [Configurar canal] en la fila de <strong>SMS<\/strong> y elige tu plan de servicio existente. Si el plan tiene configuradas URL de callback, el panel de control no lo vincular\u00e1 hasta que las elimines en \u00ab<strong>SMS<\/strong>\u00bb [SMS], \u00ab<strong>Service APIs<\/strong>\u00bb [API de servicio], \u00ab<strong>Callback URLs<\/strong>\u00bb [URL de callback]. Esto incluye la anulaci\u00f3n de \u00ab<strong>Incoming URL<\/strong>\u00bb [URL entrante], no solo la \u00ab<strong>Default URL<\/strong>\u00bb [URL predeterminada]. Configura el webhook de la aplicaci\u00f3n antes de hacerlo (consulta <a href=\"#delivery-reports\">Informes de entrega<\/a>), porque a partir de ese momento el plan dejar\u00e1 de enviar callbacks a tu antiguo punto de conexi\u00f3n.<\/li>\n\n\n\n<li>Ve a <strong>Ajustes<\/strong>, luego a <strong>Claves de acceso<\/strong> y crea una clave de acceso. Copia el ID de la clave y el secreto. El secreto solo se muestra una vez.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Copia el ID de la aplicaci\u00f3n en la aplicaci\u00f3n y el ID del proyecto en \u00ab<strong>Settings<\/strong>\u00bb [Ajustes], \u00ab<strong>Project Settings<\/strong>\u00bb [Ajustes del proyecto]. Estos sustituyen al ID del plan de servicio y al token de API en tu c\u00f3digo:<\/p>\n\n\n\n<figure tabindex=\"0\" class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>API de SMS<\/th><th>API de conversaci\u00f3n<\/th><\/tr><\/thead><tbody><tr><td><code>https:\/\/{region}.sms.api.sinch.com<\/code><\/td><td><code>https:\/\/{region}.conversation.api.sinch.com<\/code><\/td><\/tr><tr><td>ID del plan de servicio en la ruta<\/td><td>ID de proyecto en la ruta, ID de aplicaci\u00f3n en el cuerpo<\/td><\/tr><tr><td>Token de API como token de portador<\/td><td>Clave de acceso (ID de clave y secreto) intercambiada por un token de OAuth 2.0<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">El token proviene de una solicitud y dura alrededor de una hora:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#block-89082bce8003bd1b745032468268d6ef_code_0\" type=\"button\" role=\"tab\" aria-controls=\"block-89082bce8003bd1b745032468268d6ef_code_0\" aria-selected=\"true\">\r\n                                Shell                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"block-89082bce8003bd1b745032468268d6ef_code_0\" role=\"tabpanel\" aria-labelledby=\"block-89082bce8003bd1b745032468268d6ef_code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#block-89082bce8003bd1b745032468268d6ef_code_0_content\" data-clipboard-label=\"Copiar al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copiar al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copiar al portapapeles\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                                                        <pre class=\"w-100 h-100 m-0 line-numbers language-shell\" tabindex=\"0\">\r\n                                <code id=\"block-89082bce8003bd1b745032468268d6ef_code_0_content\" class=\"language-shell\">\r\n\r\n                                    export SINCH_ACCESS_TOKEN=$(curl --silent --show-error --fail-with-body \\\r\n  https:\/\/auth.sinch.com\/oauth2\/token \\\r\n  --user &quot;$SINCH_KEY_ID:$SINCH_KEY_SECRET&quot; \\\r\n  --data grant_type=client_credentials | jq -r .access_token)\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Los SDK solicitan y actualizan el token por ti.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Enviar un mensaje<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Esta es una llamada t\u00edpica de la API de SMS: un destinatario, un informe de entrega por destinatario y una referencia para vincular el informe a un pedido.<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#block-ca7b58ace2f72efa2c51fa69cc8120dd_code_0\" type=\"button\" role=\"tab\" aria-controls=\"block-ca7b58ace2f72efa2c51fa69cc8120dd_code_0\" aria-selected=\"true\">\r\n                                Shell                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"block-ca7b58ace2f72efa2c51fa69cc8120dd_code_0\" role=\"tabpanel\" aria-labelledby=\"block-ca7b58ace2f72efa2c51fa69cc8120dd_code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#block-ca7b58ace2f72efa2c51fa69cc8120dd_code_0_content\" data-clipboard-label=\"Copiar al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copiar al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copiar al portapapeles\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                                                        <pre class=\"w-100 h-100 m-0 line-numbers language-shell\" tabindex=\"0\">\r\n                                <code id=\"block-ca7b58ace2f72efa2c51fa69cc8120dd_code_0_content\" class=\"language-shell\">\r\n\r\n                                    curl --silent --show-error --fail-with-body \\\r\n  &quot;https:\/\/us.sms.api.sinch.com\/xms\/v1\/$SINCH_SERVICE_PLAN_ID\/batches&quot; \\\r\n  --header &quot;Authorization: Bearer $SINCH_API_TOKEN&quot; \\\r\n  --header &quot;Content-Type: application\/json&quot; \\\r\n  --data &#039;{\r\n    &quot;from&quot;: &quot;+12025550123&quot;,\r\n    &quot;to&quot;: [&quot;+15551234567&quot;],\r\n    &quot;body&quot;: &quot;Your order has shipped&quot;,\r\n    &quot;delivery_report&quot;: &quot;per_recipient&quot;,\r\n    &quot;client_reference&quot;: &quot;order-1042&quot;\r\n  }&#039;\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#block-a4450a54f1b06556e2f672ebb986b399_code_0\" type=\"button\" role=\"tab\" aria-controls=\"block-a4450a54f1b06556e2f672ebb986b399_code_0\" aria-selected=\"true\">\r\n                                Shell                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"block-a4450a54f1b06556e2f672ebb986b399_code_0\" role=\"tabpanel\" aria-labelledby=\"block-a4450a54f1b06556e2f672ebb986b399_code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#block-a4450a54f1b06556e2f672ebb986b399_code_0_content\" data-clipboard-label=\"Copiar al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copiar al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copiar al portapapeles\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                                                        <pre class=\"w-100 h-100 m-0 line-numbers language-shell\" tabindex=\"0\">\r\n                                <code id=\"block-a4450a54f1b06556e2f672ebb986b399_code_0_content\" class=\"language-shell\">\r\n\r\n                                    {&quot;body&quot;:&quot;Your order has shipped&quot;,&quot;canceled&quot;:false,&quot;client_reference&quot;:&quot;order-1042&quot;,&quot;created_at&quot;:&quot;2026-10-28T11:57:15.529Z&quot;,&quot;delivery_report&quot;:&quot;per_recipient&quot;,&quot;expire_at&quot;:&quot;2026-10-31T11:57:15.529Z&quot;,&quot;flash_message&quot;:false,&quot;from&quot;:&quot;46765106280&quot;,&quot;id&quot;:&quot;01M615Y8W9CRFH0SVQBS9KVK7F&quot;,&quot;modified_at&quot;:&quot;2026-10-28T11:57:15.529Z&quot;,&quot;to&quot;:[&quot;46706855785&quot;],&quot;type&quot;:&quot;mt_text&quot;}\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">El mismo mensaje con la API de conversaci\u00f3n:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#block-76d1a7ddc502472b46276cfc1ffb3f02_code_0\" type=\"button\" role=\"tab\" aria-controls=\"block-76d1a7ddc502472b46276cfc1ffb3f02_code_0\" aria-selected=\"true\">\r\n                                Shell                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"block-76d1a7ddc502472b46276cfc1ffb3f02_code_0\" role=\"tabpanel\" aria-labelledby=\"block-76d1a7ddc502472b46276cfc1ffb3f02_code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#block-76d1a7ddc502472b46276cfc1ffb3f02_code_0_content\" data-clipboard-label=\"Copiar al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copiar al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copiar al portapapeles\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                                                        <pre class=\"w-100 h-100 m-0 line-numbers language-shell\" tabindex=\"0\">\r\n                                <code id=\"block-76d1a7ddc502472b46276cfc1ffb3f02_code_0_content\" class=\"language-shell\">\r\n\r\n                                    curl --silent --show-error --fail-with-body \\\r\n  &quot;https:\/\/us.conversation.api.sinch.com\/v1\/projects\/$SINCH_PROJECT_ID\/messages:send&quot; \\\r\n  --header &quot;Authorization: Bearer $SINCH_ACCESS_TOKEN&quot; \\\r\n  --header &quot;Content-Type: application\/json&quot; \\\r\n  --data &#039;{\r\n    &quot;app_id&quot;: &quot;YOUR_APP_ID&quot;,\r\n    &quot;recipient&quot;: {\r\n      &quot;identified_by&quot;: {\r\n        &quot;channel_identities&quot;: [{ &quot;channel&quot;: &quot;SMS&quot;, &quot;identity&quot;: &quot;+15551234567&quot; }]\r\n      }\r\n    },\r\n    &quot;message&quot;: { &quot;text_message&quot;: { &quot;text&quot;: &quot;Your order has shipped&quot; } },\r\n    &quot;channel_properties&quot;: { &quot;SMS_SENDER&quot;: &quot;+12025550123&quot; },\r\n    &quot;message_metadata&quot;: &quot;order-1042&quot;\r\n  }&#039;\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#block-31f1a9c850cfc1dc5c98934d6f0ee1d1_code_0\" type=\"button\" role=\"tab\" aria-controls=\"block-31f1a9c850cfc1dc5c98934d6f0ee1d1_code_0\" aria-selected=\"true\">\r\n                                Shell                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"block-31f1a9c850cfc1dc5c98934d6f0ee1d1_code_0\" role=\"tabpanel\" aria-labelledby=\"block-31f1a9c850cfc1dc5c98934d6f0ee1d1_code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#block-31f1a9c850cfc1dc5c98934d6f0ee1d1_code_0_content\" data-clipboard-label=\"Copiar al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copiar al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copiar al portapapeles\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                                                        <pre class=\"w-100 h-100 m-0 line-numbers language-shell\" tabindex=\"0\">\r\n                                <code id=\"block-31f1a9c850cfc1dc5c98934d6f0ee1d1_code_0_content\" class=\"language-shell\">\r\n\r\n                                    {&quot;message_id&quot;:&quot;01M613S632MAAMWRVFEHPQ4YMA&quot;,&quot;accepted_time&quot;:&quot;2026-10-28T11:19:31.682Z&quot;}\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Han cambiado cuatro cosas. <code>from<\/code> se ha convertido en la propiedad de canal <code>SMS_SENDER<\/code>. <code>to<\/code> se ha convertido en un \u00fanico <code>recipient<\/code>, con el canal indicado junto al n\u00famero. <code>client_reference<\/code> se ha convertido en <code>message_metadata<\/code>, que se devuelve en el informe de entrega. <code>delivery_report<\/code> ha desaparecido de la solicitud: los informes de entrega provienen de un webhook en la aplicaci\u00f3n, como se explica a continuaci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La respuesta tambi\u00e9n ha cambiado. La API de SMS devuelve un lote con un <code>id<\/code>. La API de conversaci\u00f3n devuelve un <code>message_id<\/code> para el mensaje, y ese es el ID al que hacen referencia los informes de entrega.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En Node.js, el cambio est\u00e1 en las opciones del cliente y en el m\u00e9todo. Antes, con la API de SMS:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#block-9387d1e39fd28a7a0b1d4e0eb8e60a9e_code_0\" type=\"button\" role=\"tab\" aria-controls=\"block-9387d1e39fd28a7a0b1d4e0eb8e60a9e_code_0\" aria-selected=\"true\">\r\n                                Javascript                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"block-9387d1e39fd28a7a0b1d4e0eb8e60a9e_code_0\" role=\"tabpanel\" aria-labelledby=\"block-9387d1e39fd28a7a0b1d4e0eb8e60a9e_code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#block-9387d1e39fd28a7a0b1d4e0eb8e60a9e_code_0_content\" data-clipboard-label=\"Copiar al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copiar al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copiar al portapapeles\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                                                        <pre class=\"w-100 h-100 m-0 line-numbers language-Javascript\" tabindex=\"0\">\r\n                                <code id=\"block-9387d1e39fd28a7a0b1d4e0eb8e60a9e_code_0_content\" class=\"language-Javascript\">\r\n\r\n                                    import { SinchClient } from &quot;@sinch\/sdk-core&quot;;\r\n\r\n\/\/ Before: the standalone SMS API, authenticated with a service plan ID and API token.\r\nconst sinchClient = new SinchClient({\r\n  servicePlanId: process.env.SINCH_SERVICE_PLAN_ID ?? &quot;&quot;,\r\n  apiToken: process.env.SINCH_API_TOKEN ?? &quot;&quot;,\r\n  smsRegion: &quot;us&quot;,\r\n});\r\n\r\nconst batch = await sinchClient.sms.batches.sendTextMessage({\r\n  sendSMSRequestBody: {\r\n    from: &quot;+12025550123&quot;,\r\n    to: [&quot;+15551234567&quot;],\r\n    body: &quot;Your order has shipped&quot;,\r\n    delivery_report: &quot;per_recipient&quot;,\r\n    client_reference: &quot;order-1042&quot;,\r\n  },\r\n});\r\n\r\nconsole.log(`Sent batch ${batch.id}`);\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Despu\u00e9s, con la API de conversaci\u00f3n:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#block-56cae0ac860bae7dc2531d85b51c2997_code_0\" type=\"button\" role=\"tab\" aria-controls=\"block-56cae0ac860bae7dc2531d85b51c2997_code_0\" aria-selected=\"true\">\r\n                                Javascript                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"block-56cae0ac860bae7dc2531d85b51c2997_code_0\" role=\"tabpanel\" aria-labelledby=\"block-56cae0ac860bae7dc2531d85b51c2997_code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#block-56cae0ac860bae7dc2531d85b51c2997_code_0_content\" data-clipboard-label=\"Copiar al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copiar al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copiar al portapapeles\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                                                        <pre class=\"w-100 h-100 m-0 line-numbers language-Javascript\" tabindex=\"0\">\r\n                                <code id=\"block-56cae0ac860bae7dc2531d85b51c2997_code_0_content\" class=\"language-Javascript\">\r\n\r\n                                    import { SinchClient } from &quot;@sinch\/sdk-core&quot;;\r\n\r\n\/\/ After: the Conversation API, authenticated with a project ID and access key.\r\nconst sinchClient = new SinchClient({\r\n  projectId: process.env.SINCH_PROJECT_ID ?? &quot;&quot;,\r\n  keyId: process.env.SINCH_KEY_ID ?? &quot;&quot;,\r\n  keySecret: process.env.SINCH_KEY_SECRET ?? &quot;&quot;,\r\n  conversationRegion: &quot;us&quot;,\r\n});\r\n\r\nconst response = await sinchClient.conversation.messages.sendTextMessage({\r\n  sendMessageRequestBody: {\r\n    app_id: process.env.SINCH_APP_ID ?? &quot;&quot;,\r\n    recipient: {\r\n      identified_by: {\r\n        channel_identities: [{ channel: &quot;SMS&quot;, identity: &quot;+15551234567&quot; }],\r\n      },\r\n    },\r\n    message: { text_message: { text: &quot;Your order has shipped&quot; } },\r\n    channel_properties: { SMS_SENDER: &quot;+12025550123&quot; },\r\n    message_metadata: &quot;order-1042&quot;,\r\n  },\r\n});\r\n\r\nconsole.log(`Sent message ${response.message_id}`);\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Ambos usan <code>@sinch\/sdk-core<\/code>, por lo que puedes ejecutarlos en paralelo en una misma base de c\u00f3digo mientras transfieres los flujos. Los ejemplos omiten la validaci\u00f3n de entrada para que la comparaci\u00f3n sea f\u00e1cil de leer. La <a href=\"https:\/\/sinch.com\/es\/blog\/enviar-sms-api-conversacion-curl-nodejs-python\/\">post sobre el env\u00edo de SMS<\/a> tiene la versi\u00f3n completa con verificaciones de entorno y validaci\u00f3n de n\u00fameros.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Campo por campo<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Los campos que usan la mayor\u00eda de las integraciones de la API de SMS y d\u00f3nde van:<\/p>\n\n\n\n<figure tabindex=\"0\" class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Campo de la API de SMS<\/th><th>API de conversaci\u00f3n<\/th><\/tr><\/thead><tbody><tr><td><code>from<\/code><\/td><td><code>channel_properties.SMS_SENDER<\/code>, o el remitente predeterminado del plan de servicio<\/td><\/tr><tr><td><code>to<\/code> (matriz)<\/td><td><code>recipient<\/code> (uno por solicitud), o la Batch API para muchos destinatarios<\/td><\/tr><tr><td><code>body<\/code><\/td><td><code>message.text_message.text<\/code><\/td><\/tr><tr><td><code>client_reference<\/code><\/td><td><code>message_metadata<\/code>, devuelto en los informes de entrega. <code>correlation_id<\/code> tambi\u00e9n llega a las respuestas entrantes<\/td><\/tr><tr><td><code>delivery_report<\/code><\/td><td>Un webhook <code>MESSAGE_DELIVERY<\/code> en la aplicaci\u00f3n<\/td><\/tr><tr><td><code>callback_url<\/code><\/td><td><code>callback_url<\/code> en la solicitud. El SDK de Python lo llama <code>event_destination_target<\/code><\/td><\/tr><tr><td><code>parameters<\/code><\/td><td>Batch API <code>recipient_and_params[].parameters<\/code><\/td><\/tr><tr><td><code>send_at<\/code><\/td><td>Batch API <code>send_after<\/code>, con hasta siete d\u00edas de antelaci\u00f3n<\/td><\/tr><tr><td><code>flash_message<\/code><\/td><td><code>channel_properties.SMS_FLASH_MESSAGE: \"true\"<\/code><\/td><\/tr><tr><td><code>max_number_of_message_parts<\/code><\/td><td><code>channel_properties.SMS_MAX_NUMBER_OF_MESSAGE_PARTS<\/code><\/td><\/tr><tr><td><code>id<\/code> del lote<\/td><td><code>message_id<\/code> por mensaje, o <code>batch_id<\/code> de la Batch API<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Los valores de propiedad del canal son cadenas, por lo que <code>SMS_FLASH_MESSAGE<\/code> toma <code>\"true\"<\/code>, no <code>true<\/code>. Si env\u00edas un SMS binario con <code>type: mt_binary<\/code> y un UDH, comprueba la <a href=\"https:\/\/developers.sinch.com\/docs\/conversation\/channel-support\/sms\/properties\">Propiedades del canal de SMS<\/a> para tu caso de uso antes de trasladar ese flujo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Enviar a muchos destinatarios<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La API de SMS admite hasta 1000 n\u00fameros en <code>to<\/code> y rellena los <code>parameters<\/code> por destinatario. En la API de conversaci\u00f3n, <code>messages:send<\/code> toma un destinatario. Para unos pocos mensajes, itera sobre tus destinatarios y env\u00eda una solicitud a cada uno. Para una lista real, utiliza la <a href=\"https:\/\/developers.sinch.com\/docs\/conversation\/api-reference\/batch-api\">Batch API de conversaci\u00f3n<\/a>: un mensaje, hasta 1000 destinatarios, cada uno con sus propios par\u00e1metros.<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#block-9dc7734bcc92f75d3b3af5c9b3517bd6_code_0\" type=\"button\" role=\"tab\" aria-controls=\"block-9dc7734bcc92f75d3b3af5c9b3517bd6_code_0\" aria-selected=\"true\">\r\n                                Shell                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"block-9dc7734bcc92f75d3b3af5c9b3517bd6_code_0\" role=\"tabpanel\" aria-labelledby=\"block-9dc7734bcc92f75d3b3af5c9b3517bd6_code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#block-9dc7734bcc92f75d3b3af5c9b3517bd6_code_0_content\" data-clipboard-label=\"Copiar al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copiar al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copiar al portapapeles\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                                                        <pre class=\"w-100 h-100 m-0 line-numbers language-shell\" tabindex=\"0\">\r\n                                <code id=\"block-9dc7734bcc92f75d3b3af5c9b3517bd6_code_0_content\" class=\"language-shell\">\r\n\r\n                                    #!\/usr\/bin\/env bash\r\n# Send one templated SMS to several recipients with the Conversation Batch API.\r\n# Requires SINCH_ACCESS_TOKEN from https:\/\/auth.sinch.com\/oauth2\/token.\r\nset -euo pipefail\r\n\r\n: &quot;${SINCH_ACCESS_TOKEN:?Set SINCH_ACCESS_TOKEN}&quot;\r\n: &quot;${SINCH_PROJECT_ID:?Set SINCH_PROJECT_ID}&quot;\r\n: &quot;${SINCH_APP_ID:?Set SINCH_APP_ID}&quot;\r\n: &quot;${SINCH_SMS_SENDER:?Set SINCH_SMS_SENDER}&quot;\r\nregion=&quot;${SINCH_REGION:-us}&quot;\r\n\r\nbody=$(jq -n \\\r\n  --arg app_id &quot;$SINCH_APP_ID&quot; \\\r\n  --arg sender &quot;$SINCH_SMS_SENDER&quot; \\\r\n  &#039;{\r\n    app_id: $app_id,\r\n    message: { text_message: { text: &quot;Hi ${name}, your order has shipped&quot; } },\r\n    channel_properties: { SMS_SENDER: $sender },\r\n    recipient_and_params: [\r\n      {\r\n        recipient: { identified_by: { channel_identities: [{ channel: &quot;SMS&quot;, identity: &quot;+15551234567&quot; }] } },\r\n        parameters: { name: &quot;Ana&quot; }\r\n      },\r\n      {\r\n        recipient: { identified_by: { channel_identities: [{ channel: &quot;SMS&quot;, identity: &quot;+15557654321&quot; }] } },\r\n        parameters: { name: &quot;Sam&quot; }\r\n      }\r\n    ]\r\n  }&#039;)\r\n\r\ncurl --silent --show-error --fail-with-body \\\r\n  &quot;https:\/\/$region.conversationbatch.api.sinch.com\/v1\/projects\/$SINCH_PROJECT_ID\/messages&quot; \\\r\n  --header &quot;Authorization: Bearer $SINCH_ACCESS_TOKEN&quot; \\\r\n  --header &quot;Content-Type: application\/json&quot; \\\r\n  --data &quot;$body&quot;\r\necho\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#block-c0fd729a6b25d24cc4dab8ea8f328f2e_code_0\" type=\"button\" role=\"tab\" aria-controls=\"block-c0fd729a6b25d24cc4dab8ea8f328f2e_code_0\" aria-selected=\"true\">\r\n                                Shell                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"block-c0fd729a6b25d24cc4dab8ea8f328f2e_code_0\" role=\"tabpanel\" aria-labelledby=\"block-c0fd729a6b25d24cc4dab8ea8f328f2e_code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#block-c0fd729a6b25d24cc4dab8ea8f328f2e_code_0_content\" data-clipboard-label=\"Copiar al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copiar al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copiar al portapapeles\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                                                        <pre class=\"w-100 h-100 m-0 line-numbers language-shell\" tabindex=\"0\">\r\n                                <code id=\"block-c0fd729a6b25d24cc4dab8ea8f328f2e_code_0_content\" class=\"language-shell\">\r\n\r\n                                    {&quot;batch_id&quot;:&quot;01M613S8XFQAP5EAX93J9QHX1W&quot;,&quot;send_after&quot;:&quot;2026-10-28T11:19:34Z&quot;}\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">La sintaxis del marcador de posici\u00f3n es <code>${name}<\/code>, la misma que la de los par\u00e1metros de la API de SMS. La Batch API tiene su propio host, <code>conversationbatch.api.sinch.com<\/code>. Para programar el lote, a\u00f1ade <code>send_after<\/code> con una hora UTC de hasta siete d\u00edas de antelaci\u00f3n. El mensaje de cada destinatario obtiene su propio <code>message_id<\/code> y su propio informe de entrega, con el ID del lote en los <code>metadata<\/code> del informe.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Usa la ruta <code>\/v1\/<\/code>. Los puntos de conexi\u00f3n de la Batch API <code>v1alpha<\/code> y <code>v1beta<\/code> <a href=\"https:\/\/developers.sinch.com\/docs\/conversation\/release-notes\">dejar\u00e1n de funcionar el 16 de diciembre de 2026<\/a>, por lo que el c\u00f3digo escrito para ellos tambi\u00e9n debe trasladarse a <code>\/v1\/<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Informes de entrega<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En la API de SMS, configuras <code>delivery_report<\/code> en cada lote y obtienes los informes en la URL de callback del plan de servicio. En la API de conversaci\u00f3n, los informes van a los webhooks de la aplicaci\u00f3n y t\u00fa los eliges por disparador. A\u00f1ade uno con <code>MESSAGE_DELIVERY<\/code> para los informes y <code>MESSAGE_INBOUND<\/code> para las respuestas:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#block-02f32b2e4df36fb1081fca66bc91bb01_code_0\" type=\"button\" role=\"tab\" aria-controls=\"block-02f32b2e4df36fb1081fca66bc91bb01_code_0\" aria-selected=\"true\">\r\n                                Shell                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"block-02f32b2e4df36fb1081fca66bc91bb01_code_0\" role=\"tabpanel\" aria-labelledby=\"block-02f32b2e4df36fb1081fca66bc91bb01_code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#block-02f32b2e4df36fb1081fca66bc91bb01_code_0_content\" data-clipboard-label=\"Copiar al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copiar al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copiar al portapapeles\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                                                        <pre class=\"w-100 h-100 m-0 line-numbers language-shell\" tabindex=\"0\">\r\n                                <code id=\"block-02f32b2e4df36fb1081fca66bc91bb01_code_0_content\" class=\"language-shell\">\r\n\r\n                                    curl --silent --show-error --fail-with-body \\\r\n  &quot;https:\/\/us.conversation.api.sinch.com\/v1\/projects\/$SINCH_PROJECT_ID\/webhooks&quot; \\\r\n  --header &quot;Authorization: Bearer $SINCH_ACCESS_TOKEN&quot; \\\r\n  --header &quot;Content-Type: application\/json&quot; \\\r\n  --data &#039;{\r\n    &quot;app_id&quot;: &quot;YOUR_APP_ID&quot;,\r\n    &quot;target&quot;: &quot;https:\/\/example.com\/sinch\/callbacks&quot;,\r\n    &quot;target_type&quot;: &quot;HTTP&quot;,\r\n    &quot;triggers&quot;: [&quot;MESSAGE_DELIVERY&quot;, &quot;MESSAGE_INBOUND&quot;]\r\n  }&#039;\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Un informe de entrega tiene este aspecto:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#block-541c87c073973692f1108f2481cf23e9_code_0\" type=\"button\" role=\"tab\" aria-controls=\"block-541c87c073973692f1108f2481cf23e9_code_0\" aria-selected=\"true\">\r\n                                Javascript                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"block-541c87c073973692f1108f2481cf23e9_code_0\" role=\"tabpanel\" aria-labelledby=\"block-541c87c073973692f1108f2481cf23e9_code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#block-541c87c073973692f1108f2481cf23e9_code_0_content\" data-clipboard-label=\"Copiar al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copiar al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copiar al portapapeles\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                                                        <pre class=\"w-100 h-100 m-0 line-numbers language-Javascript\" tabindex=\"0\">\r\n                                <code id=\"block-541c87c073973692f1108f2481cf23e9_code_0_content\" class=\"language-Javascript\">\r\n\r\n                                    {\r\n  &quot;app_id&quot;: &quot;YOUR_APP_ID&quot;,\r\n  &quot;project_id&quot;: &quot;YOUR_PROJECT_ID&quot;,\r\n  &quot;message_delivery_report&quot;: {\r\n    &quot;message_id&quot;: &quot;01M613S632MAAMWRVFEHPQ4YMA&quot;,\r\n    &quot;conversation_id&quot;: &quot;&quot;,\r\n    &quot;status&quot;: &quot;DELIVERED&quot;,\r\n    &quot;channel_identity&quot;: {\r\n      &quot;channel&quot;: &quot;SMS&quot;,\r\n      &quot;identity&quot;: &quot;46706855785&quot;,\r\n      &quot;app_id&quot;: &quot;&quot;,\r\n      &quot;nrs_data&quot;: { &quot;mcc&quot;: &quot;240&quot;, &quot;mnc&quot;: &quot;07&quot;, &quot;country&quot;: &quot;SE&quot; }\r\n    },\r\n    &quot;contact_id&quot;: &quot;&quot;,\r\n    &quot;metadata&quot;: &quot;order-1042&quot;,\r\n    &quot;processing_mode&quot;: &quot;DISPATCH&quot;\r\n  }\r\n}\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">La lista de estados es m\u00e1s corta que la de la API de SMS. Un SMS pasa de <code>QUEUED_ON_CHANNEL<\/code> a <code>DELIVERED<\/code> o <code>FAILED<\/code>. Un informe con el estado <code>FAILED<\/code> tiene un <code>reason<\/code> con un c\u00f3digo y una descripci\u00f3n que indican el motivo. Tu b\u00fasqueda de <code>client_reference<\/code> se convierte en una b\u00fasqueda en <code>metadata<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El n\u00famero de tel\u00e9fono en <code>channel_identity.identity<\/code> se devuelve sin el <code>+<\/code> inicial, incluso si lo enviaste a <code>+46706855785<\/code>. La API de SMS hace lo mismo en sus informes, por lo que el c\u00f3digo que ya coincide con <code>recipient<\/code> seguir\u00e1 funcionando una vez que lea desde el campo nuevo. <code>contact_id<\/code> y <code>conversation_id<\/code> est\u00e1n vac\u00edos porque la aplicaci\u00f3n se ejecuta en modo Dispatch.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sinch reintenta un webhook que no devuelve un c\u00f3digo <code>2xx<\/code>, as\u00ed que mant\u00e9n el controlador de forma idempotente: usa <code>message_id<\/code> y <code>status<\/code> para omitir los informes que ya has procesado.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mensajes entrantes<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Las respuestas a tu n\u00famero llegan al webhook de la aplicaci\u00f3n con el disparador <code>MESSAGE_INBOUND<\/code>. El texto est\u00e1 en <code>message.contact_message.text_message.text<\/code> y el n\u00famero del remitente en <code>message.channel_identity.identity<\/code>. Si tu c\u00f3digo de la API de SMS lee <code>body<\/code> y <code>from<\/code> desde un callback entrante, esas son las dos rutas que debes cambiar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una vez vinculado el plan de servicio, su URL de callback predeterminada apunta a la API de conversaci\u00f3n, y las respuestas a sus n\u00fameros van al webhook de la API de conversaci\u00f3n de la aplicaci\u00f3n. Siguen apareciendo en la lista de entradas de la API de SMS (<code>GET \/xms\/v1\/{service_plan_id}\/inbounds<\/code>), por lo que el c\u00f3digo que lee esa lista sigue funcionando durante el traslado.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Traslada un flujo cada vez<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Algunas decisiones hacen que el traslado sea menos arriesgado.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Empieza con las notificaciones salientes<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Las notificaciones unidireccionales, como las actualizaciones de env\u00edo y los recordatorios, necesitan muy pocos cambios: un env\u00edo y un informe de entrega. Traslada estas primero y mant\u00e9n los flujos bidireccionales en la API de SMS hasta que el webhook est\u00e9 configurado y probado. Ambas API funcionan con el mismo plan de servicio durante el traslado.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Asigna su propia <code>callback_url<\/code> a los env\u00edos de la API de SMS durante el traslado<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Una vez que se ha vinculado el plan de servicio, su URL de callback predeterminada pertenece a la API de conversaci\u00f3n. Los informes de entrega de los mensajes que sigues enviando mediante la API de SMS no llegan al webhook de tu aplicaci\u00f3n, y el plan no tiene otra URL de callback adonde enviarlos. Configura <code>callback_url<\/code> en cada lote de la API de SMS que todav\u00eda necesite informes, y estos seguir\u00e1n llegando a tu punto de conexi\u00f3n en el formato de la API de SMS. Tambi\u00e9n puedes obtenerlos con <code>GET \/xms\/v1\/{service_plan_id}\/batches\/{batch_id}\/delivery_report<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Mant\u00e9n los valores de <code>client_reference<\/code> en <code>message_metadata<\/code><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Si tus informes, tu base de datos o una herramienta de asistencia se basan en <code>client_reference<\/code>, pon el mismo valor en <code>message_metadata<\/code>. De este modo, los informes de ambas API se asignan a los mismos registros durante el traslado, y nada de lo que ocurra despu\u00e9s tiene que saber qu\u00e9 API ha enviado el mensaje.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Env\u00eda a n\u00fameros de tel\u00e9fono con <code>identified_by<\/code><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Las nuevas aplicaciones de la API de conversaci\u00f3n se ejecutan en modo <strong>Dispatch<\/strong>, que no almacena contactos. Esto coincide con la forma en que funciona la API de SMS: env\u00edas a un n\u00famero y recibes un informe para ese n\u00famero. <code>identified_by<\/code> con el n\u00famero de tel\u00e9fono funciona en cualquier modo, de forma que no tienes que cambiar tu modelo de datos para trasladarte.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Soluci\u00f3n de problemas<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>404<\/code> de la API de conversaci\u00f3n.<\/strong> La regi\u00f3n de la URL no coincide con la regi\u00f3n de la aplicaci\u00f3n. Solo se puede acceder a la aplicaci\u00f3n en la regi\u00f3n en la que la creaste.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>El canal de SMS informa de errores.<\/strong> La aplicaci\u00f3n y el plan de servicio deben estar en la misma regi\u00f3n. Si difieren, vuelve a crear la aplicaci\u00f3n en la regi\u00f3n del plan de servicio y configura el canal de SMS all\u00ed.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Los callbacks han dejado de llegar a tu antiguo punto de conexi\u00f3n.<\/strong> Al realizar la vinculaci\u00f3n, se han eliminado las URL de callback del plan. En los mensajes entrantes y los env\u00edos a la API de conversaci\u00f3n, comprueba que la aplicaci\u00f3n tenga un webhook con los disparadores <code>MESSAGE_DELIVERY<\/code> y <code>MESSAGE_INBOUND<\/code> y que devuelva un <code>2xx<\/code>. Para los lotes que sigues enviando mediante la API de SMS, configura <code>callback_url<\/code> en el lote, como se describe en <a href=\"#move-one-flow-at-a-time\">Traslada un flujo cada vez<\/a>. Para ver a qu\u00e9 apunta el plan, abre \u00ab<strong>SMS<\/strong>\u00ab, \u00ab<strong>Service APIs<\/strong>\u00bb (API de servicio), selecciona el plan y busca en \u00ab<strong>Callback URLs<\/strong>\u00bb (URL de callback).<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Los env\u00edos de <code>contact_id<\/code> fallan.<\/strong> La aplicaci\u00f3n est\u00e1 en modo Dispatch, que no almacena contactos. En su lugar, env\u00eda con <code>identified_by<\/code> y el n\u00famero de tel\u00e9fono.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>400<\/code> de la Batch API sobre par\u00e1metros.<\/strong> Un marcador de posici\u00f3n del mensaje no tiene valor para uno de los destinatarios. Cada <code>${name}<\/code> en el texto necesita una clave coincidente en los <code>parameters<\/code> de cada destinatario.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Pr\u00f3ximos pasos<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Una vez implementada la aplicaci\u00f3n, puedes a\u00f1adir RCS o WhatsApp a esta, proporcionar al destinatario una identidad para cada canal en <code>channel_identities<\/code>, enumerar los canales en <code>channel_priority_order<\/code> y recurrir al SMS como alternativa para los destinatarios que no los tengan. La <a href=\"https:\/\/developers.sinch.com\/docs\/conversation\/keyconcepts\">p\u00e1gina de conceptos clave<\/a> explica c\u00f3mo funciona la alternativa.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Recursos adicionales<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/developers.sinch.com\/docs\/conversation\/getting-started\">Introducci\u00f3n a la API de conversaci\u00f3n<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/developers.sinch.com\/docs\/conversation\/channel-support\/sms\/set-up\">Configuraci\u00f3n del canal de SMS<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/developers.sinch.com\/docs\/conversation\/channel-support\/sms\/properties\">Propiedades del canal de SMS<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/developers.sinch.com\/docs\/conversation\/api-reference\/batch-api\">Batch API de conversaci\u00f3n<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/developers.sinch.com\/docs\/conversation\/callbacks\">Callbacks de la API de conversaci\u00f3n<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/developers.sinch.com\/docs\/conversation\/processing-modes\">Modos de procesamiento<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sinch.com\/es\/blog\/enviar-sms-api-conversacion-curl-nodejs-python\/\">Enviar SMS con la API de conversaci\u00f3n de Sinch en curl, Node.js y Python<\/a><\/li>\n<\/ul>\n","protected":false},"author":93,"featured_media":214372,"menu_order":0,"template":"","meta":{"_acf_changed":false,"footnotes":""},"tags":[],"blog_category":[344],"class_list":["post-214411","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog_category-desarrolladores"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Migrar de la API de SMS (XMS) de Sinch a la API de conversaci\u00f3n<\/title>\n<meta name=\"description\" content=\"Asigna lotes, informes de entrega y mensajes entrantes de la API de SMS (XMS) de Sinch a la API de conversaci\u00f3n, con solicitudes de antes y despu\u00e9s en curl y Node.js.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/sinch.com\/es\/blog\/migrar-api-sms-xms-a-api-conversacion\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Migrar de la API de SMS (XMS) de Sinch a la API de conversaci\u00f3n\" \/>\n<meta property=\"og:description\" content=\"Asigna lotes, informes de entrega y mensajes entrantes de la API de SMS (XMS) de Sinch a la API de conversaci\u00f3n, con solicitudes de antes y despu\u00e9s en curl y Node.js.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/sinch.com\/es\/blog\/migrar-api-sms-xms-a-api-conversacion\/\" \/>\n<meta property=\"og:site_name\" content=\"Sinch\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/wearesinch\/\" \/>\n<meta property=\"og:image\" content=\"https:\/\/sinch.com\/wp-content\/uploads\/2026\/10\/SI-Blog-Developers-Migrate-from-sms-xms-api-to-conversation-api-Header.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1296\" \/>\n\t<meta property=\"og:image:height\" content=\"788\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@WeAreSinch\" \/>\n<meta name=\"twitter:label1\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data1\" content=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/sinch.com\\\/es\\\/blog\\\/migrar-api-sms-xms-a-api-conversacion\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sinch.com\\\/es\\\/blog\\\/migrar-api-sms-xms-a-api-conversacion\\\/\"},\"author\":{\"name\":\"Gunnar Grosch\",\"@id\":\"https:\\\/\\\/sinch.com\\\/es\\\/#\\\/schema\\\/person\\\/b2bde1c2728a21bc953ea0e129936c08\"},\"headline\":\"Migra de la API de SMS de Sinch a la API de conversaci\u00f3n\",\"datePublished\":\"2026-10-29T16:18:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/sinch.com\\\/es\\\/blog\\\/migrar-api-sms-xms-a-api-conversacion\\\/\"},\"wordCount\":2204,\"publisher\":{\"@id\":\"https:\\\/\\\/sinch.com\\\/es\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/sinch.com\\\/es\\\/blog\\\/migrar-api-sms-xms-a-api-conversacion\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/sinch.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/SI-Blog-Developers-Migrate-from-sms-xms-api-to-conversation-api-Header.png\",\"inLanguage\":\"es\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/sinch.com\\\/es\\\/blog\\\/migrar-api-sms-xms-a-api-conversacion\\\/\",\"url\":\"https:\\\/\\\/sinch.com\\\/es\\\/blog\\\/migrar-api-sms-xms-a-api-conversacion\\\/\",\"name\":\"Migrar de la API de SMS (XMS) de Sinch a la API de conversaci\u00f3n\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sinch.com\\\/es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/sinch.com\\\/es\\\/blog\\\/migrar-api-sms-xms-a-api-conversacion\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/sinch.com\\\/es\\\/blog\\\/migrar-api-sms-xms-a-api-conversacion\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/sinch.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/SI-Blog-Developers-Migrate-from-sms-xms-api-to-conversation-api-Header.png\",\"datePublished\":\"2026-10-29T16:18:24+00:00\",\"description\":\"Asigna lotes, informes de entrega y mensajes entrantes de la API de SMS (XMS) de Sinch a la API de conversaci\u00f3n, con solicitudes de antes y despu\u00e9s en curl y Node.js.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/sinch.com\\\/es\\\/blog\\\/migrar-api-sms-xms-a-api-conversacion\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/sinch.com\\\/es\\\/blog\\\/migrar-api-sms-xms-a-api-conversacion\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/sinch.com\\\/es\\\/blog\\\/migrar-api-sms-xms-a-api-conversacion\\\/#primaryimage\",\"url\":\"https:\\\/\\\/sinch.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/SI-Blog-Developers-Migrate-from-sms-xms-api-to-conversation-api-Header.png\",\"contentUrl\":\"https:\\\/\\\/sinch.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/SI-Blog-Developers-Migrate-from-sms-xms-api-to-conversation-api-Header.png\",\"width\":1296,\"height\":788,\"caption\":\"A split-flap departure board routing from the SMS API batches endpoint to the Conversation API messages:send endpoint\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/sinch.com\\\/es\\\/blog\\\/migrar-api-sms-xms-a-api-conversacion\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/sinch.com\\\/es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https:\\\/\\\/sinch.com\\\/es\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Migra de la API de SMS de Sinch a la API de conversaci\u00f3n\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/sinch.com\\\/es\\\/#website\",\"url\":\"https:\\\/\\\/sinch.com\\\/es\\\/\",\"name\":\"Sinch\",\"description\":\"Mensajer\u00eda SMS, Voz, Email, Video y API de verificaci\u00f3n | Sinch\",\"publisher\":{\"@id\":\"https:\\\/\\\/sinch.com\\\/es\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/sinch.com\\\/es\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/sinch.com\\\/es\\\/#organization\",\"name\":\"Sinch\",\"url\":\"https:\\\/\\\/sinch.com\\\/es\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/sinch.com\\\/es\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/sinch.com\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/Thumbnail-Logo-Honey.png\",\"contentUrl\":\"https:\\\/\\\/sinch.com\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/Thumbnail-Logo-Honey.png\",\"width\":800,\"height\":496,\"caption\":\"Sinch\"},\"image\":{\"@id\":\"https:\\\/\\\/sinch.com\\\/es\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/wearesinch\\\/\",\"https:\\\/\\\/x.com\\\/WeAreSinch\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/sinch\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCZZ2u_B2afTxA0v-xcgfsaw\",\"https:\\\/\\\/www.instagram.com\\\/wearesinch\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/sinch.com\\\/es\\\/#\\\/schema\\\/person\\\/b2bde1c2728a21bc953ea0e129936c08\",\"name\":\"Gunnar Grosch\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8f177695c01082754db3f0858d534fdaceedba31f74932d7de39991e5e9d7e8d?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8f177695c01082754db3f0858d534fdaceedba31f74932d7de39991e5e9d7e8d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8f177695c01082754db3f0858d534fdaceedba31f74932d7de39991e5e9d7e8d?s=96&d=mm&r=g\",\"caption\":\"Gunnar Grosch\"},\"description\":\"Gunnar Grosch is a Principal Developer Advocate at Sinch and an engineer with over 25 years of experience building software, scaling developer communities, and making complex technology accessible. He shares code, insights, and lessons through conference talks, blog posts, and open source.\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Migrar de la API de SMS (XMS) de Sinch a la API de conversaci\u00f3n","description":"Asigna lotes, informes de entrega y mensajes entrantes de la API de SMS (XMS) de Sinch a la API de conversaci\u00f3n, con solicitudes de antes y despu\u00e9s en curl y Node.js.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/sinch.com\/es\/blog\/migrar-api-sms-xms-a-api-conversacion\/","og_locale":"es_ES","og_type":"article","og_title":"Migrar de la API de SMS (XMS) de Sinch a la API de conversaci\u00f3n","og_description":"Asigna lotes, informes de entrega y mensajes entrantes de la API de SMS (XMS) de Sinch a la API de conversaci\u00f3n, con solicitudes de antes y despu\u00e9s en curl y Node.js.","og_url":"https:\/\/sinch.com\/es\/blog\/migrar-api-sms-xms-a-api-conversacion\/","og_site_name":"Sinch","article_publisher":"https:\/\/www.facebook.com\/wearesinch\/","og_image":[{"width":1296,"height":788,"url":"https:\/\/sinch.com\/wp-content\/uploads\/2026\/10\/SI-Blog-Developers-Migrate-from-sms-xms-api-to-conversation-api-Header.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_site":"@WeAreSinch","twitter_misc":{"Tiempo de lectura":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/sinch.com\/es\/blog\/migrar-api-sms-xms-a-api-conversacion\/#article","isPartOf":{"@id":"https:\/\/sinch.com\/es\/blog\/migrar-api-sms-xms-a-api-conversacion\/"},"author":{"name":"Gunnar Grosch","@id":"https:\/\/sinch.com\/es\/#\/schema\/person\/b2bde1c2728a21bc953ea0e129936c08"},"headline":"Migra de la API de SMS de Sinch a la API de conversaci\u00f3n","datePublished":"2026-10-29T16:18:24+00:00","mainEntityOfPage":{"@id":"https:\/\/sinch.com\/es\/blog\/migrar-api-sms-xms-a-api-conversacion\/"},"wordCount":2204,"publisher":{"@id":"https:\/\/sinch.com\/es\/#organization"},"image":{"@id":"https:\/\/sinch.com\/es\/blog\/migrar-api-sms-xms-a-api-conversacion\/#primaryimage"},"thumbnailUrl":"https:\/\/sinch.com\/wp-content\/uploads\/2026\/10\/SI-Blog-Developers-Migrate-from-sms-xms-api-to-conversation-api-Header.png","inLanguage":"es"},{"@type":"WebPage","@id":"https:\/\/sinch.com\/es\/blog\/migrar-api-sms-xms-a-api-conversacion\/","url":"https:\/\/sinch.com\/es\/blog\/migrar-api-sms-xms-a-api-conversacion\/","name":"Migrar de la API de SMS (XMS) de Sinch a la API de conversaci\u00f3n","isPartOf":{"@id":"https:\/\/sinch.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/sinch.com\/es\/blog\/migrar-api-sms-xms-a-api-conversacion\/#primaryimage"},"image":{"@id":"https:\/\/sinch.com\/es\/blog\/migrar-api-sms-xms-a-api-conversacion\/#primaryimage"},"thumbnailUrl":"https:\/\/sinch.com\/wp-content\/uploads\/2026\/10\/SI-Blog-Developers-Migrate-from-sms-xms-api-to-conversation-api-Header.png","datePublished":"2026-10-29T16:18:24+00:00","description":"Asigna lotes, informes de entrega y mensajes entrantes de la API de SMS (XMS) de Sinch a la API de conversaci\u00f3n, con solicitudes de antes y despu\u00e9s en curl y Node.js.","breadcrumb":{"@id":"https:\/\/sinch.com\/es\/blog\/migrar-api-sms-xms-a-api-conversacion\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/sinch.com\/es\/blog\/migrar-api-sms-xms-a-api-conversacion\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/sinch.com\/es\/blog\/migrar-api-sms-xms-a-api-conversacion\/#primaryimage","url":"https:\/\/sinch.com\/wp-content\/uploads\/2026\/10\/SI-Blog-Developers-Migrate-from-sms-xms-api-to-conversation-api-Header.png","contentUrl":"https:\/\/sinch.com\/wp-content\/uploads\/2026\/10\/SI-Blog-Developers-Migrate-from-sms-xms-api-to-conversation-api-Header.png","width":1296,"height":788,"caption":"A split-flap departure board routing from the SMS API batches endpoint to the Conversation API messages:send endpoint"},{"@type":"BreadcrumbList","@id":"https:\/\/sinch.com\/es\/blog\/migrar-api-sms-xms-a-api-conversacion\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/sinch.com\/es\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/sinch.com\/es\/blog\/"},{"@type":"ListItem","position":3,"name":"Migra de la API de SMS de Sinch a la API de conversaci\u00f3n"}]},{"@type":"WebSite","@id":"https:\/\/sinch.com\/es\/#website","url":"https:\/\/sinch.com\/es\/","name":"Sinch","description":"Mensajer\u00eda SMS, Voz, Email, Video y API de verificaci\u00f3n | Sinch","publisher":{"@id":"https:\/\/sinch.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/sinch.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/sinch.com\/es\/#organization","name":"Sinch","url":"https:\/\/sinch.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/sinch.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/sinch.com\/wp-content\/uploads\/2024\/09\/Thumbnail-Logo-Honey.png","contentUrl":"https:\/\/sinch.com\/wp-content\/uploads\/2024\/09\/Thumbnail-Logo-Honey.png","width":800,"height":496,"caption":"Sinch"},"image":{"@id":"https:\/\/sinch.com\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/wearesinch\/","https:\/\/x.com\/WeAreSinch","https:\/\/www.linkedin.com\/company\/sinch","https:\/\/www.youtube.com\/channel\/UCZZ2u_B2afTxA0v-xcgfsaw","https:\/\/www.instagram.com\/wearesinch\/"]},{"@type":"Person","@id":"https:\/\/sinch.com\/es\/#\/schema\/person\/b2bde1c2728a21bc953ea0e129936c08","name":"Gunnar Grosch","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/8f177695c01082754db3f0858d534fdaceedba31f74932d7de39991e5e9d7e8d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/8f177695c01082754db3f0858d534fdaceedba31f74932d7de39991e5e9d7e8d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8f177695c01082754db3f0858d534fdaceedba31f74932d7de39991e5e9d7e8d?s=96&d=mm&r=g","caption":"Gunnar Grosch"},"description":"Gunnar Grosch is a Principal Developer Advocate at Sinch and an engineer with over 25 years of experience building software, scaling developer communities, and making complex technology accessible. He shares code, insights, and lessons through conference talks, blog posts, and open source."}]}},"_links":{"self":[{"href":"https:\/\/sinch.com\/es\/wp-json\/wp\/v2\/blog\/214411","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sinch.com\/es\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/sinch.com\/es\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/sinch.com\/es\/wp-json\/wp\/v2\/users\/93"}],"version-history":[{"count":0,"href":"https:\/\/sinch.com\/es\/wp-json\/wp\/v2\/blog\/214411\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sinch.com\/es\/wp-json\/wp\/v2\/media\/214372"}],"wp:attachment":[{"href":"https:\/\/sinch.com\/es\/wp-json\/wp\/v2\/media?parent=214411"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sinch.com\/es\/wp-json\/wp\/v2\/tags?post=214411"},{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/sinch.com\/es\/wp-json\/wp\/v2\/blog_category?post=214411"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}