{"id":23878,"date":"2021-07-12T16:34:50","date_gmt":"2021-07-12T14:34:50","guid":{"rendered":"https:\/\/www.smsapi.pl\/blog\/?p=23878"},"modified":"2024-01-29T14:38:58","modified_gmt":"2024-01-29T13:38:58","slug":"biblioteka-php-sms-api","status":"publish","type":"post","link":"https:\/\/www.smsapi.pl\/blog\/podstawy\/biblioteka-php-sms-api\/","title":{"rendered":"Biblioteka PHP: SMS API"},"content":{"rendered":"\n<p><strong>Jak wys\u0142a\u0107 SMS z PHP? Poznaj nasze API SMS do wysy\u0142ki wiadomo\u015bci.<\/strong><\/p>\n\n\n\n<!--more-->\n\n\n\n<p>W poni\u017cszym artykule przybli\u017cam, jak za pomoc\u0105 funkcji zaimplementowanych w j\u0119zyku PHP, obs\u0142ugiwa\u0107 masow\u0105 wysy\u0142k\u0119 SMS w PHP dla stron, aplikacji. Je\u015bli Tw\u00f3j system, jak wielka cz\u0119\u015b\u0107 internetu, polega na tym j\u0119zyku, zapraszam!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">SMS API PHP Biblioteka<\/h2>\n\n\n\n<p>Nasz\u0105 bibliotek\u0119 PHP rozwijamy od 2013. Dzi\u0119ki po\u0142\u0105czeniu ze stabilnym i wydajnym API zapewnia ona szerokie mo\u017cliwo\u015bci bez konieczno\u015bci pisania wszystkich szczeg\u00f3\u0142\u00f3w od zera. Pozwala w bezpieczny i efektywny spos\u00f3b skorzysta\u0107 z us\u0142ug, udost\u0119pnionych przez platform\u0119 <a href=\"https:\/\/www.smsapi.pl\/masowa-wysylka-sms\">masowych wysy\u0142ek SMS<\/a>. Sam interfejs programistyczny daje jeszcze wi\u0119cej funkcji, kt\u00f3re szczeg\u00f3\u0142owo opisuje <a href=\"https:\/\/www.smsapi.pl\/docs\/\" class=\"ek-link\">Dokumentacja<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-blog-smsapi wp-block-embed-blog-smsapi\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"KsiaJ8cU1x\"><a href=\"https:\/\/www.smsapi.pl\/blog\/podstawy\/api-smsapi-od-podstaw-poradnik\/\">API SMSAPI od podstaw \u2013 poradnik programisty #01<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"&#8222;API SMSAPI od podstaw \u2013 poradnik programisty #01&#8221; &#8212; Blog SMSAPI\" src=\"https:\/\/www.smsapi.pl\/blog\/podstawy\/api-smsapi-od-podstaw-poradnik\/embed\/#?secret=FSU3SRdBvT#?secret=KsiaJ8cU1x\" data-secret=\"KsiaJ8cU1x\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Pami\u0119taj, \u017ce zawsze mo\u017cesz te\u017c skorzysta\u0107 z naszego API. W Dokumentacji znajdziesz liczne przyk\u0142ady wykorzystania poszczeg\u00f3lnych mo\u017cliwo\u015bci <a aria-label=\"bramki SMS (opens in a new tab)\" href=\"https:\/\/www.smsapi.pl\/blog\/wiedza\/platna-bramka-sms-co-musisz-wiedziec\/\" target=\"_blank\" rel=\"noreferrer noopener\" class=\"ek-link\">bramki SMS<\/a>. Przyk\u0142ady (w Shellu, PHP oraz Pythonie) pokazuj\u0105, jak praktycznie mo\u017cesz je zaimplementowa\u0107. Biblioteka PHP jest zreszt\u0105 r\u00f3wnie\u017c tak\u0105 implementacj\u0105.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-16018d1d wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button is-style-secondary\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/www.smsapi.pl\/sms-api\" target=\"_blank\" rel=\"noreferrer noopener\">Biblioteki SMS API<\/a><\/div>\n<\/div>\n\n\n\n<p>Je\u017celi chcesz pozna\u0107 dzia\u0142anie omawianej biblioteki od podszewki, od razu skieruj\u0119 Ci\u0119 do <a rel=\"noopener noreferrer nofollow\" href=\"https:\/\/github.com\/smsapi\/smsapi-php-client\" target=\"_blank\">repozytorium PHP SMSAPI na GitHubie<\/a>. Tam odnajdziesz najlepsze \u017ar\u00f3d\u0142o informacji o dzia\u0142aniu wszystkich funkcji, czyli sam kod \u017ar\u00f3d\u0142owy. Je\u015bli zamiast tego wolisz bardziej pragmatyczne podej\u015bcie lub nie masz czasu i ochoty na dok\u0142adne analizowanie poszczeg\u00f3lnych plik\u00f3w, czytaj dalej!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Podstawa dzia\u0142ania \u2013 konto SMSAPI<\/h2>\n\n\n\n<p>Przed pierwsz\u0105 wysy\u0142k\u0105 SMS z komputera musisz wykona\u0107 kilka prostych czynno\u015bci. Konfiguracja konta SMSAPI nie jest trudna, zamyka si\u0119 w czterech prostych krokach.<\/p>\n\n\n\n<div class=\"wp-block-smsapi-blog-2021-infobox infobox infobox--info post-content--full-width\"><div class=\"infobox__icon\"><img decoding=\"async\" src=\"data:image\/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgd2lkdGg9IjEwMCUiCiAgIGhlaWdodD0iMTAwJSIKICAgdmlld0JveD0iMCAwIDEyIDE2IgogICBjbGlwLXJ1bGU9ImV2ZW5vZGQiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIHZlcnNpb249IjEuMSIKICAgaWQ9InN2ZzYzIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxwYXRoCiAgICBzdHlsZT0iZmlsbDogcmdiKDE3LCAxOTIsIDEyOCk7IGZpbGwtcnVsZTogbm9uemVybzsiCiAgIGQ9Im03LjUxNDA1LDExbC0zLDBjMCwtMyAxLjYsLTQgMi43LC00LjZjMC40LC0wLjIgMC43LC0wLjQgMC45LC0wLjZjMC41LC0wLjUgMC4zLC0xLjIgMC4yLC0xLjRjLTAuMywtMC43IC0xLC0xLjQgLTIuMywtMS40Yy0yLjEsMCAtMi41LDEuOSAtMi41LDIuM2wtMywtMC40YzAuMiwtMS43IDEuNywtNC45IDUuNSwtNC45YzIuMywwIDQuMywxLjMgNS4xLDMuMmMwLjcsMS43IDAuNCwzLjUgLTAuOCw0LjdjLTAuNSwwLjUgLTEuMSwwLjggLTEuNiwxLjFjLTAuOSwwLjUgLTEuMiwxIC0xLjIsMnoiCiAgIGlkPSJwYXRoNTkiIC8+CiAgPHBhdGgKICAgIHN0eWxlPSJmaWxsOiByZ2IoMTcsIDE5MiwgMTI4KTsgZmlsbC1ydWxlOiBub256ZXJvOyIKICAgZD0ibTgsMTRjMCwxLjEwNSAtMC44OTUsMiAtMiwyYy0xLjEwNSwwIC0yLC0wLjg5NSAtMiwtMmMwLC0xLjEwNSAwLjg5NSwtMiAyLC0yYzEuMTA1LDAgMiwwLjg5NSAyLDJ6IgogICBpZD0icGF0aDYxIiAvPgo8L3N2Zz4K\"\/><\/div><div class=\"infobox__title\"><h4>Jak przygotowa\u0107 konto SMSAPI?<\/h4><\/div><div class=\"infobox__content\">\n<ol class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.smsapi.pl\/rejestracja\">Za\u0142\u00f3\u017c konto SMSAPI<\/a> \u2013 testy s\u0105 darmowe i zupe\u0142nie niezobowi\u0105zuj\u0105ce.<\/li>\n\n\n\n<li><a rel=\"noreferrer noopener\" href=\"https:\/\/ssl.smsapi.pl\/react\/payments\/payments-data\" target=\"_blank\">Uzupe\u0142nij dane firmy<\/a> w Panelu Klienta \u2013 dzi\u0119ki nim szybciej zweryfikujemy Twoje konto i uruchomimy wszystkie funkcje bramki SMS.<\/li>\n\n\n\n<li>Dodaj <a href=\"https:\/\/www.smsapi.pl\/blog\/podstawy\/branding-sms-skojarz-swoja-marke-z-wysylka-sms\/\">pole nadawcy SMS<\/a>. B\u0119dzie to reprezentowana przez Ciebie marka, znak rozpoznawczy dla Twoich odbiorc\u00f3w. Nazwa, kt\u00f3ra zast\u0105pi numer telefonu mo\u017ce mie\u0107 maksymalnie 11 liter, poza tym w Panelu wyszczeg\u00f3lnione s\u0105 inne wymogi co do dozwolonych znak\u00f3w.<\/li>\n\n\n\n<li>Wygeneruj token OAuth 2. To unikalny, losowy ci\u0105g 40 znak\u00f3w, kt\u00f3rego u\u017cyjesz w swoim kodzie. Klient HTTP wysy\u0142a go w nag\u0142\u00f3wku autoryzacyjnym w \u017c\u0105daniu dost\u0119pu do chronionego API.<\/li>\n<\/ol>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-16018d1d wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button is-style-primary\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/www.smsapi.pl\/rejestracja\">Przetestuj SMSAPI<\/a><\/div>\n<\/div>\n<\/div><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">SMSAPI Zr\u00f3b to sam \u2013 seria poradnik\u00f3w wideo<\/h3>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-blog-smsapi wp-block-embed-blog-smsapi\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"sdWXRqCc9r\"><a href=\"https:\/\/www.smsapi.pl\/blog\/podstawy\/zrob-to-sam-jak-utworzyc-konto-testowe\/\">Zr\u00f3b to sam #01 \u2013 Jak utworzy\u0107 konto testowe? (poradnik wideo)<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"&#8222;Zr\u00f3b to sam #01 \u2013 Jak utworzy\u0107 konto testowe? (poradnik wideo)&#8221; &#8212; Blog SMSAPI\" src=\"https:\/\/www.smsapi.pl\/blog\/podstawy\/zrob-to-sam-jak-utworzyc-konto-testowe\/embed\/#?secret=Qgs4e1SvMi#?secret=sdWXRqCc9r\" data-secret=\"sdWXRqCc9r\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Do dzie\u0142a: wysy\u0142ka PHP SMS<\/h2>\n\n\n\n<p>Nie b\u0119d\u0119 tu szczeg\u00f3\u0142owo omawia\u0107 wszystkich klas i metod. Zajm\u0119 si\u0119 tylko tymi najwa\u017cniejszymi, tak aby przedstawi\u0107 kilka podstawowych metod <a href=\"https:\/\/www.smsapi.pl\/powiadomienia-sms\">wysy\u0142ki powiadomie\u0144 SMS<\/a>. Do dzie\u0142a!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"bramka-sms-php\">Bramka SMS PHP<\/h3>\n\n\n\n<p>Wysy\u0142anie SMS to najwa\u017cniejsza, podstawowa funkcja SMSAPI. Sk\u0142adanie tre\u015bci wiadomo\u015bci czy zarz\u0105dzanie list\u0105 kontakt\u00f3w mo\u017cesz zaimplementowa\u0107 wed\u0142ug w\u0142asnego pomys\u0142u, ale przy samym wys\u0142aniu <a href=\"https:\/\/www.smsapi.pl\/sms-api\" target=\"_blank\" aria-label=\"SMS API (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">SMS API<\/a> jest niezb\u0119dne. Zacznij wi\u0119c od podstaw: jak to dzia\u0142a w kodzie?<\/p>\n\n\n\n<p>G\u0142\u00f3wna idea to wykorzystanie metod HTTP, kt\u00f3re obs\u0142uguje klient. Kod PHP umo\u017cliwia Ci skorzystanie z gotowego adaptera popularnej biblioteki libcurl. Dzi\u0119ki temu <strong>nie musisz dostarcza\u0107 w\u0142asnego klienta HTTP<\/strong> \u2013 taka mo\u017cliwo\u015b\u0107 jednak r\u00f3wnie\u017c istnieje. Pro\u015bciej jest oczywi\u015bcie u\u017cy\u0107 gotowego rozwi\u0105zania. Wtedy pocz\u0105tek pracy wygl\u0105da po prostu tak:<\/p>\n\n\n\n<pre class=\"wp-block-code language-php\"><code>&lt;?php\n\/\/client.php\ndeclare(strict_types=1);\nuse Smsapi\\Client\\Curl\\SmsapiHttpClient;\nrequire_once 'vendor\/autoload.php';\n\n$client = new SmsapiHttpClient();<\/code><\/pre>\n\n\n\n<p>Gdy masz ju\u017c klienta, potrzebujesz po\u0142\u0105czenia z serwisem https:\/\/api.smsapi.pl. Przedstawia to listing drugiego pliku:<\/p>\n\n\n\n<pre class=\"wp-block-code language-php\"><code>&lt;?php\n\/\/service.php\ndeclare(strict_types=1);\nuse Smsapi\\Client\\SmsapiClient;\nrequire_once 'vendor\/autoload.php';\nrequire_once 'client.php';\n\n$apiToken = '%SMSAPI_ACCESS_TOKEN%';\n$service = $client-&gt;smsapiPlService($apiToken);<\/code><\/pre>\n\n\n\n<p class=\"language-php\">Podstawow\u0105 konfiguracj\u0119 da si\u0119 wi\u0119c skr\u00f3ci\u0107 do zaledwie dw\u00f3ch linijek (nie licz\u0105c odwo\u0142a\u0144 do odpowiednich namespace\u2019\u00f3w): utworzenie obiekt\u00f3w <code>SmsapiHttpClient<\/code> i <code>smsapiPlService<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"wysylanie-sms-w-php\">Wysy\u0142anie SMS w PHP<\/h3>\n\n\n\n<p class=\"language-php\">Do nadania <a href=\"https:\/\/www.smsapi.pl\/powiadomienia-sms\">powiadomie\u0144 SMS<\/a> s\u0142u\u017cy interfejs <code>SmsFeature<\/code>, za\u015b jego kluczowe metody to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>sendSms(SendSmsBag $sendSmsBag)<\/code> \u2013 wysy\u0142ka wiadomo\u015b\u0107 do pojedynczego adresata;<\/li>\n\n\n\n<li><code>sendSmss(SendSmssBag $sendSmssBag)<\/code> \u2013 wysy\u0142ka SMS do wielu odbiorc\u00f3w.<\/li>\n<\/ul>\n\n\n\n<p>Obiekty typu \u201eBag\u201d determinuj\u0105 sk\u0142adniki SMS. Ich w\u0142a\u015bciwo\u015bci to: odbiorca lub odbiorcy, tre\u015b\u0107 i opcjonalne parametry. Praktyczne u\u017cycie wygl\u0105da nast\u0119puj\u0105co:<\/p>\n\n\n\n<pre class=\"wp-block-code language-php\"><code>&lt;?php\n\/\/sendSms.php\ndeclare(strict_types=1);\nuse Smsapi\\Client\\Service\\SmsapiComService;\nuse Smsapi\\Client\\Feature\\Sms\\Bag\\SendSmsBag;\nrequire_once 'service.php';\n\n$smsBag = SendSmsBag::withMessage('48111222333', 'Hello world!');\n$service-&gt;smsFeature()-&gt;sendSms($smsBag);<\/code><\/pre>\n\n\n\n<p class=\"language-php\">Statyczna metoda <code>withMessage<\/code> przyjmuje <strong>dwa argumenty stringowe<\/strong>: numer telefonu odbiorcy (wraz z kodem kraju) i tre\u015b\u0107 SMS. Widzisz wi\u0119c, \u017ce podstawowa wysy\u0142ka SMS za pomoc\u0105 biblioteki PHP to tylko cztery elementy.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Wysy\u0142ka SMS z PHP:<\/h4>\n\n\n\n<ol class=\"wp-block-list\" style=\"list-style-type:1\">\n<li>utworzenie klienta HTTP;<\/li>\n\n\n\n<li>po\u0142\u0105czenie z us\u0142ug\u0105 SMSAPI;<\/li>\n\n\n\n<li>ustalenie tre\u015bci SMS i odbiorcy;<\/li>\n\n\n\n<li>wysy\u0142ka SMS.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"powiadomienia-sms-w-php-dodatkowe-opcje\">Powiadomienia SMS w PHP \u2013 dodatkowe opcje<\/h2>\n\n\n\n<p class=\"language-php\">Metoda <code>sendSms<\/code> zwraca obiekt <code>Sms<\/code>, kt\u00f3ry zawiera kilka przydatnych informacji, mi\u0119dzy innymi:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>$id<\/code> \u2013 identyfikator w systemie SMSAPI;<\/li>\n\n\n\n<li><code>$points<\/code> \u2013 koszt wysy\u0142ki, wyra\u017cony w punktach pobranych z konta SMSAPI;<\/li>\n\n\n\n<li><code>$dateSent<\/code> \u2013 uniksowy czas wys\u0142ania;<\/li>\n\n\n\n<li><code>$status<\/code> \u2013 status dor\u0119czenia, jeden z <a href=\"https:\/\/www.smsapi.pl\/docs\/#18-lista-statusow-doreczenia\" class=\"ek-link\">listy w dokumentacji API<\/a>.<\/li>\n<\/ul>\n\n\n\n<p class=\"language-php\">Komunikacja z Twoimi odbiorcami najprawdopodobniej b\u0119dzie uwzgl\u0119dnia\u0107 dostarczanie wielu SMS o podobnej tre\u015bci. <strong>Wys\u0142anie identycznej wiadomo\u015bci do wielu odbiorc\u00f3w<\/strong> odbywa si\u0119 za pomoc\u0105 funkcji <code>sendSmss<\/code> oraz klasy <code>SendSmssBag<\/code>. <\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-blog-smsapi wp-block-embed-blog-smsapi\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"yUglIGXEZx\"><a href=\"https:\/\/www.smsapi.pl\/blog\/wiedza\/system-sms-dla-firm-i-urzedow-powiadomienia-i-marketing\/\">System SMS dla firm i urz\u0119d\u00f3w: powiadomienia i marketing<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"&#8222;System SMS dla firm i urz\u0119d\u00f3w: powiadomienia i marketing&#8221; &#8212; Blog SMSAPI\" src=\"https:\/\/www.smsapi.pl\/blog\/wiedza\/system-sms-dla-firm-i-urzedow-powiadomienia-i-marketing\/embed\/#?secret=ftWsBT4MgI#?secret=yUglIGXEZx\" data-secret=\"yUglIGXEZx\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Alternatywnie, w <a href=\"https:\/\/ssl.smsapi.pl\/webapp#\/contacts\/groups\/\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">zak\u0142adce Kontakty<\/a> mo\u017cesz utworzy\u0107 grupy, aby m\u00f3c wysy\u0142a\u0107 masowe kampanie SMS. Przedstawia to poni\u017cszy fragment:<\/p>\n\n\n\n<pre class=\"wp-block-code language-php\"><code>$receivers = &#91;'48111222333','48444555666'];\n$smssBag = SendSmssBag::withMessage($receivers, 'Hello receivers!');\n$service-&gt;smsFeature()-&gt;sendSmss($smssBag);\n\n$smsToGroupBag = SendSmsToGroupBag::withMessage('group_name', 'Hello group!');\n$service-&gt;smsFeature()-&gt;sendSmsToGroup($smsToGroupBag);<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czas-sie-liczy-planowanie-sms\">Czas si\u0119 liczy \u2013 planowanie SMS<\/h3>\n\n\n\n<p>Kolejna funkcja przyda si\u0119 przy ustalaniu harmonogramu komunikacji. Podstawowym sposobem zwr\u00f3cenia uwagi jest po prostu odnalezienie najlepszego momentu na dostarczenie wiadomo\u015bci.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-blog-smsapi wp-block-embed-blog-smsapi\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"MHucuF1ZQZ\"><a href=\"https:\/\/www.smsapi.pl\/blog\/wiedza\/czas-sie-liczy-jak-wybrac-odpowiedni-moment-na-wysylke-sms\/\">Czas si\u0119 liczy! Jak wybra\u0107 odpowiedni moment na wysy\u0142k\u0119 SMS?<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"&#8222;Czas si\u0119 liczy! Jak wybra\u0107 odpowiedni moment na wysy\u0142k\u0119 SMS?&#8221; &#8212; Blog SMSAPI\" src=\"https:\/\/www.smsapi.pl\/blog\/wiedza\/czas-sie-liczy-jak-wybrac-odpowiedni-moment-na-wysylke-sms\/embed\/#?secret=IdaXcXI2rt#?secret=MHucuF1ZQZ\" data-secret=\"MHucuF1ZQZ\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"language-php\">Biblioteka PHP SMS API do wysy\u0142ania powiadomie\u0144 SMS dostarcza kilka funkcji <code>schedule<\/code>. Dzi\u0119ki nim <strong>nie musisz samodzielnie implementowa\u0107 programu<\/strong>, kt\u00f3ry o konkretnym czasie zleci nadanie wiadomo\u015bci przez API \u2013 mo\u017cesz to zaplanowa\u0107 w\u0142a\u015bnie dzi\u0119ki API. <\/p>\n\n\n\n<p>Poni\u017cszy kod przedstawia t\u0119 ide\u0119 na trzy ju\u017c om\u00f3wione sposoby: pojedyncza wiadomo\u015b\u0107, wiele SMS naraz oraz wysy\u0142ka do grupy:<\/p>\n\n\n\n<pre class=\"wp-block-code language-php\"><code>$sendingDate = new DateTime('2021-06-30');\n$scheduleSmsBag = ScheduleSmsBag::withMessage(\n\t$sendingDate, \n\t'48111222333', \n\t'Hello scheduled receiver!');\n$smsFeature-&gt;scheduleSms($scheduleSmsBag);\n\n$scheduleSmssBag = ScheduleSmssBag::withMessage(\n\t$sendingDate, \n\t&#91;'48111222333', '48444555666'], \n\t'Hello scheduled receivers!');\n$smsFeature-&gt;scheduleSmss($scheduleSmssBag);\n\n$scheduleSmsToGroupBag = ScheduleSmsToGroupBag::withMessage(\n\t$sendingDate, \n\t'group_name', \n\t'Hello scheduled group!');\n$smsFeature-&gt;scheduleSmsToGroup($scheduleSmsToGroupBag);<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"personalizacja-sms-w-bibliotece-php-parametry-i-szablony\">Personalizacja SMS w bibliotece PHP \u2013 parametry i szablony<\/h3>\n\n\n\n<p>Przy masowej wysy\u0142ce SMS PHP przydatna b\u0119dzie <a href=\"https:\/\/www.smsapi.pl\/personalizacja\">personalizacja tre\u015bci<\/a>, tak aby ka\u017cda wiadomo\u015b\u0107 by\u0142a skierowana do konkretnego odbiorcy. Umo\u017cliwiaj\u0105 to dwie statyczne metody, kt\u00f3re posiada ka\u017cdy obiekt typu Bag.<\/p>\n\n\n\n<p>Pierwsza to <code>setParams(array $params)<\/code>. Pozwala na <strong>u\u017cycie do czterech dowolnych parametr\u00f3w<\/strong>. S\u0105 to dodatkowe w\u0142a\u015bciwo\u015bci klas typu Bag: <code>$param1<\/code>, <code>$param2<\/code>, <code>$param3<\/code>, <code>$param4<\/code>. Argument funkcji to tablica z kluczami '1&#8242;, '2&#8242;, '3&#8242;, '4&#8242;, kt\u00f3rej warto\u015bci b\u0119d\u0105 zast\u0119powa\u0142y sekwencje <code>[%1%]<\/code>, <code>[%2%]<\/code>, <code>[%3%]<\/code>, <code>[%4%]<\/code> z tre\u015bci wiadomo\u015bci. Przedstawia to poni\u017cszy kod:<\/p>\n\n\n\n<pre class=\"wp-block-code language-php\"><code>$receivers = &#91;'48111222333','48444555666'];\n$params = &#91;\n\t1 =&gt; &#91;'Anna', 'Barbara'],\n\t2 =&gt; &#91;'Annopol', 'Bibce'],\n];\n$smssBag = SendSmssBag::withMessage(\n\t$receivers, \n\t'Hello &#91;%1%] from &#91;%2%]!'\n);\n$smssBag-&gt;setParams($params);\n$service-&gt;smsFeature()-&gt;sendSmss($smssBag);<\/code><\/pre>\n\n\n\n<p class=\"language-php\">Druga ze wspomnianych metod to <code>withTemplateName(string $receiver, string $template)<\/code>, dzi\u0119ki niej mo\u017cesz wykorzysta\u0107 <a href=\"https:\/\/ssl.smsapi.pl\/react\/sms-templates\" target=\"_blank\" rel=\"noopener\">szablony stworzone w Panelu<\/a>. W ten spos\u00f3b mo\u017cesz \u0142atwo zmieni\u0107 tre\u015b\u0107 wiadomo\u015bci, bez ingerencji w kod PHP. SMS szablon mo\u017ce wygl\u0105da\u0107 w ten spos\u00f3b:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PackageSentTemplate: <em>Cze\u015b\u0107 [%1%], Twoje zam\u00f3wienie zosta\u0142o wys\u0142ane!<\/em><\/li>\n\n\n\n<li>PackageArrivesTodayTemplate: <em>Cze\u015b\u0107 [%1%], Twoje zam\u00f3wienie nadejdzie dzisiaj!<\/em><\/li>\n<\/ul>\n\n\n\n<p>Wys\u0142anie SMS wygl\u0105da wtedy nast\u0119puj\u0105co:<\/p>\n\n\n\n<pre class=\"wp-block-code language-php\"><code>$params = &#91;1 =&gt; 'Adam'];\n$smsBag = SendSmsBag::withTemplateName(\n\t'48111222333', \n\t'PackageSentTemplate'\n);\n$smsBag-&gt;setParams($params);\n$service-&gt;smsFeature()-&gt;sendSms($smsBag);\n\n$smsBag = SendSmsBag::withTemplateName(\n\t'48111222333', \n\t'PackageArrivesTodayTemplate'\n);\n$smsBag-&gt;setParams($params);\n$service-&gt;smsFeature()-&gt;sendSms($smsBag);<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"dalsza-personalizacja-tresci-sms-dzieki-bazie-kontaktow\">Dalsza personalizacja tre\u015bci SMS dzi\u0119ki bazie kontakt\u00f3w<\/h3>\n\n\n\n<p>Biblioteka PHP pozwala zrobi\u0107 praktyczny u\u017cytek z informacji zgromadzonych w bazie danych, aby lepiej trafia\u0107 w gusta klient\u00f3w. Ponownie chodzi tu o <strong>wykorzystanie automatycznej personalizacji<\/strong>, tak aby nie musie\u0107 wprowadza\u0107 danych odbiorc\u00f3w do skrypt\u00f3w PHP. SMSAPI udost\u0119pnia funkcj\u0119 s\u0142u\u017c\u0105ca do przeszukiwania bazy. Na przyk\u0142ad, chcesz znale\u017a\u0107 adresata wed\u0142ug adresu e-mail, aby wys\u0142a\u0107 mu przypomnienie o rezerwacji stolika w restauracji. W tym celu u\u017cywasz szablonu:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>TableReservationTemplate: <em>Masz dzi\u015b na [%1%] rezerwacj\u0119 w Najlepszej Restauracji na nazwisko [%nazwisko%]. Zapraszamy!<\/em><\/li>\n<\/ul>\n\n\n\n<p>Mo\u017ce to wygl\u0105da\u0107 w przybli\u017ceniu tak:<\/p>\n\n\n\n<pre class=\"wp-block-code language-php\"><code>use Smsapi\\Client\\Service\\SmsapiComService;\nuse Smsapi\\Client\\Feature\\Sms\\Bag\\SendSmsBag;\nuse Smsapi\\Client\\Feature\\Contacts\\Bag\\FindContactsBag;\nuse Smsapi\\Client\\Feature\\Contacts\\ContactsFeature;\nrequire_once 'service.php';\n\n$receiverEmail = '1234@example.com';\n$reservationTime = '19:00';\n\n$contactFindBag = new FindContactsBag();\n$contactFindBag-&gt;email = $receiverEmail;\n$foundContacts =\n\t$service-&gt;contactsFeature()-&gt;findContacts($contactFindBag);\n\n$smsBag = SendSmsBag::withTemplateName(\n\t$foundContacts&#91;0]-&gt;phoneNumber,\n\t'TableReservationTemplate'\n);\n$smsBag-&gt;setParams(&#91;1=&gt;$reservationTime]);\n$service-&gt;smsFeature()-&gt;sendSms($smsBag);<\/code><\/pre>\n\n\n\n<p class=\"language-php\">Dzi\u0119ki zadanemu e-mailowi \u0142atwo mo\u017cesz odnale\u017a\u0107 odpowiadaj\u0105cy mu numer telefonu, a nast\u0119pnie sparametryzowa\u0107 tre\u015b\u0107 wiadomo\u015bci i wys\u0142a\u0107 j\u0105. Pole <code>[%nazwisko%]<\/code> zostanie zamienione na wprowadzone uprzednio do Twojej bazy nazwisko odbiorcy. Po pe\u0142ne informacje w temacie personalizacji SMS si\u0119gnij do <a href=\"https:\/\/www.smsapi.pl\/docs\/#sms-do-grupy-z-bazy-kontaktow\">Dokumentacji<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">No dobra, a co dalej?<\/h2>\n\n\n\n<p>Ca\u0142y kod naszej biblioteki PHP jest na <a rel=\"noopener noreferrer nofollow\" href=\"https:\/\/github.com\/smsapi\" target=\"_blank\" class=\"ek-link\">GitHubie<\/a>. Je\u017celi rozwa\u017casz wykorzystanie innych j\u0119zyk\u00f3w, to znajdziesz tam r\u00f3wnie\u017c \u017ar\u00f3d\u0142a w Javie, C#, Pythonie, bashu i JavaScripcie.<\/p>\n\n\n\n<p>Ten artyku\u0142 naturalnie nie opisuje wszystkich mo\u017cliwo\u015bci skrypt\u00f3w PHP, kt\u00f3re korzystaj\u0105 z SMSAPI. Mo\u017cesz \u0142atwo odnale\u017a\u0107 je samodzielnie w kodzie \u2013 zajrzyj do katalogu <a rel=\"noopener noreferrer nofollow\" href=\"https:\/\/github.com\/smsapi\/smsapi-php-client\/tree\/master\/src\/Feature\" target=\"_blank\">Feature<\/a>. S\u0105 tam funkcje pozwalaj\u0105ce m.in. na:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>wysy\u0142k\u0119 MMS<\/strong>, aby komunikacja z Twoimi klientami by\u0142a bardziej atrakcyjna;<\/li>\n\n\n\n<li><strong>uwierzytelnianie wielosk\u0142adniowe (MFA)<\/strong>, aby zwi\u0119kszy\u0107 bezpiecze\u0144stwo logowania;<\/li>\n\n\n\n<li><strong>zarz\u0105dzanie baz\u0105 kontakt\u00f3w<\/strong> \u2013 dodawanie, edycj\u0119 i usuwanie odbiorc\u00f3w i ich grup;<\/li>\n\n\n\n<li><strong>skracanie link\u00f3w<\/strong> za pomoc\u0105 adresu <a href=\"https:\/\/www.smsapi.pl\/skrocony-link\">idz.do<\/a>;<\/li>\n\n\n\n<li><strong>sprawdzenie stanu konta<\/strong>, czyli pozosta\u0142ych do wykorzystania punkt\u00f3w.<\/li>\n<\/ul>\n\n\n\n<p>Je\u015bli potrzebujesz przyk\u0142ad\u00f3w u\u017cycia poszczeg\u00f3lnych interfejs\u00f3w i metod, znajdziesz je w <a href=\"https:\/\/github.com\/smsapi\/smsapi-php-client\/tree\/master\/tests\/\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">katalogu test\u00f3w<\/a>. Powodzenia!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jak wys\u0142a\u0107 SMS z PHP? Poznaj nasze API SMS do wysy\u0142ki wiadomo\u015bci.<\/p>\n","protected":false},"author":3,"featured_media":24175,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[321],"tags":[315,230,223],"class_list":["post-23878","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-podstawy","tag-biblioteka","tag-it","tag-api"],"_links":{"self":[{"href":"https:\/\/www.smsapi.pl\/blog\/wp-json\/wp\/v2\/posts\/23878","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.smsapi.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.smsapi.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.smsapi.pl\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.smsapi.pl\/blog\/wp-json\/wp\/v2\/comments?post=23878"}],"version-history":[{"count":43,"href":"https:\/\/www.smsapi.pl\/blog\/wp-json\/wp\/v2\/posts\/23878\/revisions"}],"predecessor-version":[{"id":30061,"href":"https:\/\/www.smsapi.pl\/blog\/wp-json\/wp\/v2\/posts\/23878\/revisions\/30061"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.smsapi.pl\/blog\/wp-json\/wp\/v2\/media\/24175"}],"wp:attachment":[{"href":"https:\/\/www.smsapi.pl\/blog\/wp-json\/wp\/v2\/media?parent=23878"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.smsapi.pl\/blog\/wp-json\/wp\/v2\/categories?post=23878"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.smsapi.pl\/blog\/wp-json\/wp\/v2\/tags?post=23878"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}