اتصال به وبسرویس پنل پیامکی پیام رسان با Python
یک فایل قابل اجرا بهازای هر متد سرویس، بدون هیچ وابستگی
فارسی · English
دنبال زبان دیگری هستید؟ همین نمونهها برای زبانهای دیگر هم در github.com/Mojeshahr هست.
git clone https://github.com/Mojeshahr/python-sms-webservice.git
cd python-sms-webservice
export PAYAM_RESAN_API_KEY='123456-XXXXXXXXXXXXXXX'
export PAYAM_RESAN_SENDER='30004040'
python3 examples/v3/account-info.pyنه نصبی لازم است و نه محیط مجازی. نمونهها فقط از کتابخانه استاندارد پایتون
استفاده میکنند، یعنی urllib و json.
با account-info.py شروع کنید: چیزی ارسال نمیکند، اعتباری مصرف نمیکند، و
اگر جواب داد یعنی کلید و اتصال هر دو سالماند.
برای ارسال متن آزاد در محیط عملیاتی، send-bulk.py. کلید را از نشانی بیرون
نگه میدارد و برای هر گیرنده شناسه پیگیری میپذیرد.
برای رمز یکبارمصرف، send-token-single.py. ارسال متن آزاد برای این کار
مناسب نیست؛ قالب باید از قبل تأیید شده باشد.
برای گزارش تحویل، status-by-user-trace-id.py، بهشرطی که هنگام ارسال شناسه
خودتان را فرستاده باشید.
| نمونه | متد | کار |
|---|---|---|
| account-info.py | AccountInfo |
اعتبار و خطوط فعال |
| send.py | Send |
ارسال ساده با GET |
| send-bulk.py | SendBulk |
یک متن به چند گیرنده، با شناسه پیگیری |
| send-multiple.py | SendMultiple |
متن جدا برای هر گیرنده |
| token-list.py | TokenList |
فهرست قالبها |
| send-token-single.py | SendTokenSingle |
ارسال قالب به یک شماره |
| send-token-single-get.py | SendTokenSingle |
همان، با GET |
| send-token-multi.py | SendTokenMulti |
یک قالب، چند گیرنده |
| status-by-id.py | StatusById |
وضعیت با شناسه سامانه |
| status-by-user-trace-id.py | StatusByUserTraceId |
وضعیت با شناسه خودتان |
| get-inbox.py | GetInbox |
پیامکهای رسیده |
این مخزن یک بسته pip نیست. سه راه دارید.
نمونهها عمداً به هیچ چیز این مخزن وابسته نیستند، پس کپیکردن فایل داخل پروژه شما کافی است. فقط دو متغیر محیطی را تعریف کنید.
اگر در پروژهتان requests یا httpx دارید، لایه urllib نمونه را نبرید. از
هر فایل فقط بدنه درخواست و بررسی پاسخ را بردارید:
import os
import requests
response = requests.post(
"https://api.sms-webservice.com/api/V3/SendBulk",
json={
"ApiKey": os.environ["PAYAM_RESAN_API_KEY"],
"Sender": 30004040,
"Text": "کد تأیید شما ۱۲۳۴۵۶ است",
"Recipients": [{"Destination": 9121112222, "UserTraceId": 1001}],
},
timeout=30,
).json()
if not response["Success"]:
raise RuntimeError(f"پیامک ارسال نشد: {response['Error']} (کد {response['ErrorCode']})")یک بسته نصبشدنی در برنامه هست و در مخزن جداگانهای منتشر میشود.
کد وضعیت HTTP را نخوانید. سرویس همیشه 200 برمیگرداند، حتی وقتی کلید
اشتباه است. تصمیم را از فیلد Success بگیرید. هر نمونه اینجا همین کار را
میکند.
شماره گیرنده صفر ابتدایی ندارد. یعنی 9121112222 یا با کد کشور
989121112222. شمارهای که با 9 یا 989 شروع نشود کد خطای 13 میگیرد.
متن را دوباره encode نکنید. در send.py تابع urlencode خودش یک بار این
کار را میکند. اگر پیش از آن هم quote کنید، پیامک با نویسههای %D8 به گوشی
میرسد.
برای هر گیرنده یک UserTraceId یکتا بفرستید. بعد از یک timeout، این تنها
راه فهمیدن این است که پیامک ثبت شده یا نه.
کلید یک راز است. در مخزن کد، در جاوااسکریپت مرورگر و در بسته اپلیکیشن موبایل نباید قرار بگیرد. جای آن متغیر محیطی است، همانطور که همه نمونهها میخوانندش.
اگر کلیدی لو رفت، از پنل یکی تازه بسازید. کلید حذفشده برنمیگردد.
| مسیر | چه چیزی دارد |
|---|---|
examples/v3/ |
یک نمونه مستقل بهازای هر عملیات سرویس |
.env.example |
نمونه متغیرهای محیطی |
عدد v3 در مسیر عمدی است. نسخه تازه سرویس یعنی پوشه examples/v<n>/ تازه، و
پوشه موجود دستنخورده میماند.
راهنمای کامل وبسرویس در docs.payam-resan.com است. توصیف ماشینخوان OpenAPI هم در sms-webservice-spec.
سؤال یا خطایی هست؟ issue باز کنید یا با پشتیبانی تماس بگیرید.
منتشرشده با مجوز MIT. متن کامل در LICENSE.